Паттерн Интерпретатор (Interpreter) используется для определения грамматического представления языка и предоставляет интерпретатор для обработки предложений на этом языке.
Ключевые элементы:
- Абстрактное синтаксическое дерево (Abstract Syntax Tree - AST): Структура данных, представляющая предложение языка.
- Абстрактное выражение (AbstractExpression): Интерфейс или абстрактный класс для всех узлов AST. Он определяет операцию
interpret().
- Терминальное выражение (TerminalExpression): Конкретный класс, реализующий интерфейс
AbstractExpression для терминальных символов грамматики.
- Нетерминальное выражение (NonterminalExpression): Конкретный класс, реализующий интерфейс
AbstractExpression для нетерминальных символов грамматики. Обычно содержит ссылки на другие выражения.
- Контекст (Context): Хранит информацию, используемую в процессе интерпретации.
Применение:
- Когда необходимо проанализировать и интерпретировать выражения на простом языке.
- Когда грамматика языка относительно простая.
Преимущества:
- Упрощает добавление новых способов интерпретации выражений.
- Легко расширять грамматику.
Недостатки:
- Может стать трудноуправляемым для сложных грамматик.
- Создание AST может быть затратным.
Пример: Простая грамматика для арифметических выражений (сложение и вычитание)
python