Учитывая язык, определите представление для его грамматики вместе с интерпретатором, который использует это представление для интерпретации предложений на этом языке.
- AbstractExpression: объявляет интерфейс для выполнения операции
- TerminalExpression: реализует операцию интерпретации, связанную с терминальными символами в грамматике. Экземпляр требуется для каждого терминального символа в предложении.
- Нетерминальное выражение: один такой класс требуется для каждого правила R… Rn в грамматике. Поддерживает переменные экземпляра типа Abstract Expression для каждого из символов от R1 до Rn. Реализует операцию интерпретации для нетерминальных символов в грамматике. Interpretate обычно вызывает себя рекурсивно для переменных, представляющих R1 через Rn.
- Контекст: содержит информацию, которая является глобальной для интерпретатора
- Клиент: строит (или получает) абстрактное синтаксическое дерево, представляющее конкретное предложение на языке, который определяет грамматика. Абстрактное синтаксическое дерево собирается из экземпляров классов NonterminalExpression и Terminal Expression. Вызывает операцию интерпретации
public class Main { public static void main(String[] args) { Context context = new Context(); Listlist = new ArrayList<>(); list.add(new TerminalExpression()); list.add(new NonterminalExpression()); list.add(new TerminalExpression()); list.add(new TerminalExpression()); for (AbstractExpression exp : list) { exp.interpret(context); } } } public class Context { } public interface AbstractExpression { void interpret(Context context); } public class TerminalExpression implements AbstractExpression { @Override public void interpret(Context context) { System.out.println("Called Terminal.interpret()"); } } public class NonterminalExpression implements AbstractExpression { @Override public void interpret(Context context) { System.out.println("Called Nonterminal.interpret()"); } }
Called Terminal.interpret() Called Nonterminal.interpret() Called Terminal.interpret() Called Terminal.interpret()
eidherjulian61/дизайн-шаблоны
Основные шаблоны Проектирования
ид ・ 27 сентября ・ 1 минута чтения
Оригинал: “https://dev.to/eidher/interpreter-pattern-i9o”