Во первом чекпоинте мы научились строить абстрактное дерево. Цель этого чекпоинта - научиться обходить деревья.
В этом чекпоинте предлагается реализовать два визитора:
PrintVisitor
- визитор, который печатает дерево разбора в файлInterpreter
- визитор, который интерпретирует функциюmain
вMainClass
. Считаем, что уровень вложенности равен 1, нет вызовов функций, внутриif
иwhile
конструкций нет вызовов функций, создания переменных
Пример можно найти в примере визиторов.
Второй частью задания является проработка возможных структур в коде.
Продумайте для вашего проекта возможные блоки для участков кода:
- Класс
- название
- список полей
- список методов
- Метод
- список аргументов
- возвращаемое значение
- ссылка на scope
- Переменная
- название
- тип
- если переменная является экземпляром класса, то сделайте ссылку на элемент "Класса"
- Scope-блок
- список переменных, определяемых внутри scope-а
Подумайте, каким образом можно идентифицировать scope: зачастую будет полезно иметь доступ к нему по ключу.
Подумайте над иерархией выше перечисленных структур. Если что, не бойтесь задавать вопросы в чате - обсуждение крайне приветствуется!
Схему можно модифицировать на свое усмотрение. Главное Получение элемента по имени должно происходить за O(1).
Важно На основе этого чекпоинта будет построен следующий, так что уделите проработке архитектуры больше внимания!
Успехов!