Рубрики
Без рубрики

Шаблон интерпретатора

Учитывая язык, определите представление для его грамматики вместе с интерпретатором, который использует rep… Помечено шаблонами проектирования, java, pattern, behavioral.

Учитывая язык, определите представление для его грамматики вместе с интерпретатором, который использует это представление для интерпретации предложений на этом языке.

  • 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();
        List list = 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”