Основной класс Converter
В программной реализации для работы с конвертером представлен класс
Converter, который содержит единственный статический метод process.
Этот метод получает на вход синтаксическое дерево (объект типа
SyntaxTree), а возвращает построенное дерево операций (объект типа
Program).
class Converter {
public:
Converter() = delete;
Converter(const Converter &) = delete;
Converter(Converter &&) = delete;
~Converter() = delete;
static Program process(const SyntaxTree &tree);
};
Благодаря используемому подходу реализация метода
process довольно проста:
Создается новый (пустой) объект типа
Program, представляющий выходное дерево, и в качестве корневого в него добавляется узелModuleOp.Создается контекст, в него помещается корневой узел, и он же выбирается в качестве узла, в который будут вставляться операции.
Вызывается P-функция
processProgramRootдля запуска разбора от начала программы, в которую передается созданный контекст. В дальнейшем эта функция рекурсивно вызывает внутри себя другие функции, которые, в свою очередь, также выполняют рекурсивные вызовы. Таким образом, осуществляется обход всего синтаксического дерева и построение полного дерева операций.После построения дерево операций возвращается в качестве выходного значения.