| Уровень сложности | 🟢 Начальный |
|---|---|
| Рекомендуемые языки | Python, C++ |
| Основные инструменты | ANTLR4, LLVM-lite |
| Требуемые знания | Базовый синтаксис выбранного языка |
Разработка компилятора для языка арифметических выражений с поддержкой переменных, базовых операций и функций.
NUMBER : [0-9]+ ('.' [0-9]+)?
ID : [a-zA-Z_][a-zA-Z_0-9]*
PLUS : '+'
MINUS : '-'
MUL : '*'
DIV : '/'
ASSIGN : '='
LPAREN : '('
RPAREN : ')'
SEMI : ';'
WS : [ \t\r\n]+ -> skip
program : statement+ EOF
statement : expr SEMI
| ID ASSIGN expr SEMI
expr : term ( (PLUS | MINUS) term )*
term : factor ( (MUL | DIV) factor )*
factor : NUMBER
| ID
| ID LPAREN expr (',' expr)* RPAREN
| LPAREN expr RPAREN
Задачи:
Тестовые примеры:
x = 5; y = 3.14 * (2 + x);
Результат: Токенизатор, возвращающий последовательность токенов.
Задачи:
Тестовые примеры:
a = 10; b = a * (2 + sin(3.14/2));
Результат: Парсер, строящий AST для корректных выражений.
Задачи:
Функции проверки:
Результат: Семантически проверенное AST.
Задачи:
Генерация кода для:
x = 2 * (3 + 4); // -> 14
Результат: Работающий компилятор, генерирующий исполняемый код.
Для повышения оценки можно реализовать:
math_compiler/ ├── grammar/ │ ├── MathLexer.g4 │ └── MathParser.g4 ├── src/ │ ├── ast/ │ ├── semantic/ │ └── codegen/ ├── tests/ └── requirements.txt
| Критерий | Базовый уровень | Продвинутый уровень |
|---|---|---|
| Лексический анализ | Базовые токены | Поддержка всех токенов + ошибки |
| Синтаксический анализ | Простые выражения | Полная грамматика + AST |
| Семантический анализ | Проверка типов | Полная валидация + оптимизации |
| Генерация кода | Базовый LLVM IR | Оптимизации + JIT |