Основной класс 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 довольно проста:

  1. Создается новый (пустой) объект типа Program, представляющий выходное дерево, и в качестве корневого в него добавляется узел ModuleOp.

  2. Создается контекст, в него помещается корневой узел, и он же выбирается в качестве узла, в который будут вставляться операции.

  3. Вызывается P-функция processProgramRoot для запуска разбора от начала программы, в которую передается созданный контекст. В дальнейшем эта функция рекурсивно вызывает внутри себя другие функции, которые, в свою очередь, также выполняют рекурсивные вызовы. Таким образом, осуществляется обход всего синтаксического дерева и построение полного дерева операций.

  4. После построения дерево операций возвращается в качестве выходного значения.

Назад