Лучшее руководство по Переводчик модели в 2024 году. В этом руководстве вы можете изучить введение,реализация,
Переводчик шаблон (шаблон интерпретатора) обеспечивает способ оценки синтаксиса выражения или язык, который относится к типу модели. Этот режим реализует интерфейс выражений, которые объясняют конкретный контекст. Эта модель используется в SQL синтаксического анализа, обработки символов двигателей.
Намерение: С учетом языка, определить его грамматическую представление, а также определить интерпретатор, интерпретатор использует логотип для интерпретации предложений на языке.
Главное Решение: Для некоторой фиксированной грамматики построения предложения для объяснения переводчика.
Когда использовать: Если частота определенного типа задач достаточно высока, то может быть стоит каждый экземпляр задачи выражается в виде простых предложений в языке.Так что вы можете построить интерпретатор, интерпретатор, чтобы решить эту проблему путем интерпретации этих предложений.
Как исправить: член синтаксического дерева, определение терминатора и нетерминал.
Код ключа: среда класса член, некая глобальная информация , содержащаяся за пределами интерпретатора, обычно HashMap.
Примеры применения: компилятор, оценки арифметическое выражение.
Преимущества: 1, улучшенная масштабируемость и гибкие.2, добавлен новый способ интерпретировать выражение. 3, легко реализовать простую грамматику.
Недостатки: 1, может иметь преимущество сцены относительно невелико.2. Для сложных грамматик сложнее поддерживать. 3 объяснить режим заставит класс расширяться. 4 объяснить режим с помощью рекурсивных вызовов методов.
Сценарии использования: 1 можно интерпретировать язык предложения должны быть представлены абстрактного синтаксического дерева.2, некоторые из повторяющихся проблем может быть простым языком, чтобы выразить. 3, простая грамматика, чтобы объяснить сцену.
Примечание: Вы можете использовать относительно небольшую сцену, JAVA , если вы столкнулись можете expression4J вместо этого.
Мы будем создавать и реализовывать интерфейс классаExpressionсущность интерфейсаExpression.Как определено в контекстеTerminalExpressionглавного переводчика. Другие классыOrExpression,AndExpression для создания модульных выражений.
InterpreterPatternDemo,наш демонстрационный класс использует классExpressionдля создания правил синтаксического анализа и выражения представления.
Создайте интерфейс выражения.
Expression.java
public interface Expression { public boolean interpret(String context); }
Создать класс сущностей реализует вышеуказанные интерфейсы.
TerminalExpression.java
public class TerminalExpression implements Expression { private String data; public TerminalExpression(String data){ this.data = data; } @Override public boolean interpret(String context) { if(context.contains(data)){ return true; } return false; } }
OrExpression.java
public class OrExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public OrExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpret(String context) { return expr1.interpret(context) || expr2.interpret(context); } }
AndExpression.java
public class AndExpression implements Expression { private Expression expr1 = null; private Expression expr2 = null; public AndExpression(Expression expr1, Expression expr2) { this.expr1 = expr1; this.expr2 = expr2; } @Override public boolean interpret(String context) { return expr1.interpret(context) && expr2.interpret(context); } }
InterpreterPatternDemoиспользовать классExpressionдля создания правил и решать их.
InterpreterPatternDemo.java
public class InterpreterPatternDemo { //规则:Robert 和 John 是男性 public static Expression getMaleExpression(){ Expression robert = new TerminalExpression("Robert"); Expression john = new TerminalExpression("John"); return new OrExpression(robert, john); } //规则:Julie 是一个已婚的女性 public static Expression getMarriedWomanExpression(){ Expression julie = new TerminalExpression("Julie"); Expression married = new TerminalExpression("Married"); return new AndExpression(julie, married); } public static void main(String[] args) { Expression isMale = getMaleExpression(); Expression isMarriedWoman = getMarriedWomanExpression(); System.out.println("John is male? " + isMale.interpret("John")); System.out.println("Julie is a married women? " + isMarriedWoman.interpret("Married Julie")); } }
Проверьте выход.
Джон мужчина? Правда Джули замужней женщины? Правда