gram:case-002
Table of Contents
Кейс 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)
Педагогическое применение
Использование в школе:
- Демонстрация приоритета операций
- Визуализация вычислений
- Проверка алгебраических преобразований
← К списку | ← 001 | 003 →
gram/case-002.txt · Last modified: by eugeneai
