Архитектура продукта
Общая схема работы готового продукта «Компилятор» выглядит следующим образом: консольное приложение запускает внутри себя компоненты содержательных модулей, представленных на рисунке ниже. В процессе анализируется файл исходного кода, строится синтаксическое дерево и другие промежуточные представления программы, и генерируется код на языке LLVM IR. Полученный файл может быть транслирован в объектный с помощью утилиты LLCompiler (llc) и в дальнейшем может быть использован компоновщиком для получения исполняемого файла.

На рисунке в виде блоков представлены следующие компоненты:
Frontend – обработка текста программы:
Preprocessor – препроцессор;
Lexer – лексер (лексический анализатор);
Parser – парсер (синтаксический анализатор);
Backend – анализ промежуточных представлений:
AST – модули, работающие с абстрактным синтаксическим деревом:
Semantizer – модуль, проверяющий семантическую корректность построенного AST;
Optimizer – оптимизирующий анализатор для синтаксических деревьев;
Optree – модули, работающие с деревом операций:
Semantizer – модуль, проверяющий семантическую корректность построенного дерева операций;
Optimizer – оптимизирующий анализатор для дерева операций;
Representation – структуры для работы с представлениями кода:
AST – инструменты для работы с синтаксическим деревом:
Syntax tree – структуры данных;
Types – вспомогательные структуры для идентификации типов;
Tables – структуры данных для хранения таблиц символов;
Optree – инструменты для работы с деревом операций:
Operations – описание операции;
Types – система типов значений операций;
Adaptors – классы-адаптеры для операций.
Codegen – генераторы LLVM IR для разных представлений:
AST в IR – модуль для перевода синтаксического дерева;
Optree в IR – модуль для перевода дерева операций;
Command line interface – консольное приложение.
Для обеспечения корректности работы был разработан комплект функциональных и интеграционных тестов для компонентов проекта.
Компилятор работает с Python-подобным статически типизированным языком, в котором присутствуют основные языковые конструкции (объявления функций и переменных, условия, циклы, вызовы функций, вычисление арифметико-логических выражений), возможность вывода текста на экран и считывания данных с клавиатуры.