Latest web development tutorials

Tłumaczka wzór

Tłumaczka wzór (interpreter deseń) zapewnia sposób oceniania składnię wyrażenia lub język, który należy do tego typu modelu. Tryb ten implementuje interfejs wyrażenie, które wyjaśnić konkretny kontekst. Model ten jest stosowany w przetwarzaniu danych SQL, silniki przetwarzania symboli.

wprowadzenie

Zamiar: Biorąc pod uwagę język, zdefiniować swoją reprezentację gramatyki i zdefiniować tłumacza, tłumacza używa logo interpretowania zdań w języku.

Główne Rozwiązanie: Z jakiegoś ustalonego gramatyki buduje zdanie wyjaśnić tłumacza.

Przy użyciu: Jeżeli częstotliwość danego rodzaju problemu jest wystarczająco wysokie, może być warte każde wystąpienie problemu jest wyrażona jako proste zdań w języku.Tak, że można zbudować tłumacza, tłumacza, aby rozwiązać ten problem interpretacji tych zdań.

Jak naprawić: drzewo składni członkowskim, definicji terminatora i nieterminalowi.

Klucz Kod: członek klasy środowisko, niektóre globalne informacje zawarte poza tłumacza, zwykle HashMap.

Przykłady zastosowań: kompilator, arytmetyka oceny wypowiedzi.

Zalety: 1, lepszą skalowalność i elastyczność.2 dodaje się nowy sposób interpretowania ekspresji. 3, łatwe do wdrożenia prostą gramatykę.

Wady: 1, mogą skorzystać z tej sceny jest stosunkowo niewielka.2. Do kompleksu gramatyk trudniejsze do utrzymania. 3 wyjaśnić tryb spowoduje klasa się rozwijać. 4 wyjaśnić tryb za pomocą rekurencyjnych wywołań metod.

Scenariusze użycia: 1 może być interpretowany a zdania językowe muszą być reprezentowany przez drzewo składniowe.2, niektóre z powtarzających się problemów może być prostym językiem wyrazić. 3, prosta gramatyka wyjaśnić scenę.

Uwaga: Można użyć stosunkowo małą scenę, Jawa przypadku napotkania może expression4J zamiast.

realizacja

Będziemy tworzyć i implementować interfejs interfejs klasy podmiotExpressionExpression. Jak zdefiniowano w kontekście głównegoTerminalExpressioninterpretera. Pozostałe klasyOrExpression,AndExpression do tworzenia wyrażeń modułowych.

InterpreterPatternDemo,nasza klasa demonstracja wykorzystuje klasęwyrażeńtworzenie reguł analizowania i wyrażeń prezentacji.

Tłumaczka wzór diagram UML

Etap 1

Tworzenie interfejsu ekspresyjny.

Expression.java

public interface Expression {
   public boolean interpret(String context);
}

Etap 2

Tworzenie klasy podmiot realizuje powyższe interfejsy.

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);
   }
}

etap 3,

InterpreterPatternDemoużyć klasyExpressiontworzyć reguły i rozwiązywać je.

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"));
   }
}

Etap 4

Sprawdź, czy wyjście.

John jest mężczyzną? Prawda
Julie jest mężatki? Prawda