===== Кейс 002: Мини-калькулятор (gram:case-002) =====
=== Общая информация ===
^ Уровень сложности ^ 🟢 Начальный ^
^ Рекомендуемые языки ^ Python ^
^ Основные инструменты ^ ANTLR4 ^
^ Предметная область ^ Математика, вычисления ^
=== Описание кейса ===
Разработка калькулятора с поддержкой базовых арифметических операций, переменных и простых функций.
=== Грамматика языка ===
// Лексемы
NUMBER : [0-9]+ ('.' [0-9]+)?
ID : [a-zA-Z_][a-zA-Z_0-9]*
PLUS : '+'
MINUS : '-'
MUL : '*'
DIV : '/'
ASSIGN : '='
LPAREN : '('
RPAREN : ')'
NEWLINE : '\r'? '\n'
WS : [ \t]+ -> skip
// Синтаксис
program : statement+ EOF
statement : expr NEWLINE
| ID ASSIGN expr NEWLINE
expr : term ( (PLUS | MINUS) term )*
term : factor ( (MUL | DIV) factor )*
factor : NUMBER
| ID
| ID LPAREN expr RPAREN // sin(x), cos(x), sqrt(x)
| LPAREN expr RPAREN
=== План лабораторных работ ===
==== ЛР1: Лексический анализ ====
**Задачи:**
- Реализовать распознавание чисел, идентификаторов, операторов
- Добавить поддержку математических функций (sin, cos, sqrt)
- Обработать пробелы и переводы строк
==== ЛР2: Синтаксический анализ ====
**Задачи:**
- Построить парсер для арифметических выражений
- Реализовать приоритет операций
- Сгенерировать AST с узлами для операций и функций
==== ЛР3: Семантический анализ ====
**Задачи:**
- Реализовать таблицу переменных
- Проверить существование переменных при использовании
- Валидировать аргументы функций
==== ЛР4: Генерация кода ====
**Задачи:**
- Создать интерпретатор выражений
- Реализовать вычисление значений
- Добавить интерактивный режим работы
=== Примеры использования ===
// Простые вычисления
2 + 3 * 4
x = 5
y = x * 2 + 1
sin(3.14/2) + cos(0)
=== Педагогическое применение ===
**Использование в школе:**
- Демонстрация приоритета операций
- Визуализация вычислений
- Проверка алгебраических преобразований
----
[[gram:labs|← К списку]] | [[gram:case-001|← 001]] | [[gram:case-003|003 →]]