Архитектура продукта

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

flowchart TB subgraph Compiler subgraph Backend Preprocessor Lexer Parser Semantizer Optimizer end subgraph AST[AST interface] SyntaxTree[Syntax tree] Types Tables end IRGenerator[IR generator] CLI[Command line interface] end

На схеме в виде блоков представлены следующие компоненты:

  • Compiler – проект «Компилятор»:

    • Backend – внутренняя (основная) логика:

      • Preprocessor – препроцессор;

      • Lexer – лексический анализатор;

      • Parser – синтаксический анализатор;

      • Semantizer – семантический анализатор;

      • Optimizer – оптимизирующий анализатор;

    • AST (abstract syntax tree) interface – инструменты для работы с абстрактным синтаксическим деревом:

      • Syntax tree – структуры данных (собственно АСД);

      • Types – вспомогательные структуры для идентификации типов;

      • Tables – структуры данных для хранения таблиц символов;

    • IR generator – генератор промежуточного представления на языке LLVM IR;

    • Command line interface – консольное приложение.

Для обеспечения корректности работы будет разработан комплект функциональных и интеграционных тестов для компонентов проекта.

Предполагается, что компилятор будет работать с Python-подобным статически типизированным языком, в котором будут присутствовать основные языковые конструкции (объявления функций и переменных, условия, циклы, вызовы функций, вычисление арифметико-логических выражений), возможность вывода текста на экран и считывания данных с клавиатуры.

Назад