===== Кейс 005: Сокращение полиномов (gram:case-005) =====
=== Общая информация ===
^ Уровень сложности ^ 🟡 Средний ^
^ Рекомендуемые языки ^ Python ^
^ Основные инструменты ^ ANTLR4, SymPy (опционально) ^
^ Предметная область ^ Алгебра 7-9 класс ^
=== Описание кейса ===
Система для работы с полиномами: проверка сокращения, разложение на множители, операции с алгебраическими дробями.
=== Грамматика языка ===
// Лексемы
NUMBER : [0-9]+
VARIABLE : [a-zA-Z]
POW : '^'
PLUS : '+'
MINUS : '-'
MUL : '*'
DIV : '/'
LPAREN : '('
RPAREN : ')'
WS : [ \t\r\n]+ -> skip
// Синтаксис
polynomial : term ( (PLUS | MINUS) term )*
term : (number MUL)? monomial
monomial : variable (POW number)?
variable : VARIABLE
number : NUMBER
fraction : polynomial DIV polynomial
expression : polynomial | fraction
=== План лабораторных работ ===
==== ЛР1: Лексический анализ ====
**Задачи:**
- Распознавание мономов и полиномов
- Поддержка степеней переменных
- Обработка алгебраических дробей
==== ЛР2: Синтаксический анализ ====
**Задачи:**
- Парсер полиномиальных выражений
- Построение AST для дробей
- Валидация структуры выражений
==== ЛР3: Семантический анализ ====
**Задачи:**
- Проверка эквивалентности полиномов
- Сокращение дробей
- Разложение на множители
==== ЛР4: Генерация заданий ====
**Задачи:**
- Создание задач на сокращение
- Генерация ответов и решений
- Экспорт в GIFT-формат
=== Примеры задач ===
// Сокращение дробей
(x^2 - 4)/(x - 2) → x + 2
(2x^2 + 4x)/(2x) → x + 2
(x^2 - 1)/(x^2 - 2x + 1) → (x + 1)/(x - 1)
=== Педагогическое применение ===
**Использование в школе:**
- Автоматическая проверка заданий на сокращение
- Тренажер алгебраических преобразований
- Подготовка к ОГЭ по алгебре
----
[[gram:labs|← К списку]] | [[gram:case-004|← 004]] | [[gram:case-006|006 →]]