Этапы работы компилятора
Компиляция кода осуществляется в несколько этапов. За каждый из этапов отвечает один из представленных в рамках проекта модулей, взаимодействующих подобно конвейеру: выходные данные одного этапа являются входными для следующего. Процесс показан на графе:
flowchart TB
Begin[program.py]
Preprocessor[Препроцессор]
Lexer[Лексический анализатор]
Parser[Синтаксический анализатор]
Semantizer[Семантический анализатор]
Optimizer[Оптимизирующий анализатор]
IrGenerator[Генератор кода LLVM IR]
Translator["Транслятор llc (Clang)"]
End[program.exe]
Begin -- Исходный код программы --> Preprocessor
subgraph .
Preprocessor
-- Предобработанный код программы --> Lexer
-- Список лексем-токенов --> Parser
-- Базовое синтаксическое дерево --> Semantizer
-- Завершенное синтаксическое дерево --> Optimizer
-- Оптимизированное синтаксическое дерево --> IrGenerator
end
IrGenerator
-- Промежуточное представление LLVM IR --> Translator
-- Трансляция в исполняемый файл --> End