Najlepszy samouczek Tłumaczka wzór W 2024 r. W tym samouczku możesz dowiedzieć się wprowadzenie,realizacja,
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.
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.
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.
Tworzenie interfejsu ekspresyjny.
Expression.java
public interface Expression { public boolean interpret(String context); }
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); } }
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")); } }
Sprawdź, czy wyjście.
John jest mężczyzną? Prawda Julie jest mężatki? Prawda