===== Кейс 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 →]]