Основной класс Semantizer
В программной реализации семантический анализатор представлен в виде
класса Semantizer. Содержательная часть объявления класса выглядит
следующим образом:
class Semantizer {
public:
Semantizer() = delete;
Semantizer(const Semantizer &) = delete;
Semantizer(Semantizer &&) = delete;
~Semantizer() = delete;
static void process(const Program &program);
};
Точкой входа является метод process. Он выполняет следующее:
Вызывает метод
verify<ModuleOp>на корневом узле входного дерева операций. Далее аналогичным образом осуществляется рекурсивная проверка инвариантов на всех дочерних узлах.Создает дерево доминирования от корневого узла дерева операций, инстанцируя
DominanceTree. С помощью него проводится проверка доминирования всех операций в дереве.