0. Interpreter -Modus -Definition:
Definieren Sie bei einer Sprache eine Darstellung seiner Grammatik und definieren Sie einen Interpreter, der die Darstellung verwendet, um Sätze in der Sprache zu interpretieren. Gehört zum Verhaltensmodus.
Der Interpreter -Modus wird in der tatsächlichen Systementwicklung sehr wenig verwendet, da er Probleme wie Effizienz, Leistung und Wartung verursachen kann.
Das allgemeine Klassendiagramm des Interpreter -Modus ist in der Abbildung dargestellt.
1. Vorteile des Interpreter -Modus
Der Dolmetscher ist ein einfaches Tool zur Syntaxanalyse. Sein wichtigster Vorteil ist seine Expansion. Das Ändern der Syntaxregeln besteht darin, den entsprechenden nicht terminalen Expression zu ändern. Wenn Sie die Syntax erweitern, müssen Sie nur eine nicht terminale Klasse hinzufügen.
2. Nachteile des Interpreter -Modus
Das Interpreter-Muster verursacht Klassenerweiterung: Jede Syntax muss einen nicht terminalen Expression erzeugen. Wenn die Syntax -Regeln relativ komplex sind, kann eine große Anzahl von Klassendateien generiert werden, was den Wartungswartung zu großen Problemen bringt.
Das Interpreter-Muster verwendet eine rekursive Aufrufmethode: Jeder nicht terminale Ausdruck kümmert sich nur um die Ausdrücke, die mit sich selbst zusammenhängen. Jeder Ausdruck muss das Endergebnis kennen und müssen für Schicht unbeschichtet sein. Unabhängig davon, ob es sich um eine prozessorientierte Sprache oder eine objektorientierte Sprache handelt, wird eine Rekursion unter den notwendigen Bedingungen verwendet, was zu sehr komplexem Debuggen führt. Denken Sie darüber nach, wenn wir bei einem Syntaxfehler beheben wollen, müssen wir dann einzeln debuggen, bis die kleinste Syntaxeinheit?
Effizienzproblem: Der Interpreter -Modus verwendet viel Schleifen und Rekursion. Effizienz ist ein Problem, das nicht ignoriert werden kann, insbesondere wenn es verwendet wird, um komplexe und langwierige Syntax zu analysieren. Effizienz ist unerträglich.
3.. Verwenden Sie Szenarien des Interpreter -Modus
Wiederholte Probleme können im Interpreter -Modus verwendet werden: Beispielsweise generieren mehrere Anwendungsserver täglich eine große Anzahl von Protokollen, und die Protokolldateien müssen analysiert und verarbeitet werden. Da die Protokollformate jedes Servers unterschiedlich sind, sind die Datenelemente gleich. Nach dem Dolmetscher sind die Terminatorausdrücke gleich, aber Nicht-Terator-Ausdrücke müssen formuliert werden. In diesem Fall kann das Problem durch ein Programm ein für allemal gelöst werden.
Ein Szenario, in dem einfache Syntax erklärt werden muss: Warum ist es einfach? Schauen Sie sich nicht terminale Ausdrücke an. Je mehr grammatikalische Regeln, desto höher sind die Komplexität und rekursive Anrufe zwischen Klassen (siehe Stapel in unserem Beispiel), was im Allgemeinen nicht kompliziert ist. Denken Sie darüber nach, welche Art von Geduld und Selbstvertrauen benötigen Sie, um Probleme zu beheben, wenn Sie mehrere Klassen aufrufen. Daher wird der Interpreter -Modus im Allgemeinen verwendet, um vergleichende Standardcharaktersätze wie die SQL -Syntaxanalyse zu analysieren. Dieser Teil wird jedoch allmählich durch spezielle Tools ersetzt. In einigen speziellen Geschäftsumgebungen wird auch das Interpreter -Modell verwendet. Das Beispiel, das wir gerade gemacht haben, ist ein Geschäftsumfeld, und es gibt jetzt viele Beispiele für Modelloperationen. Viele kommerzielle Institutionen können eine große Menge an Daten zur Analyse bereitstellen.
4. Einfache Beispiele
/ *** deklarieren Sie eine abstrakte Interpretationsoperation*/ öffentliche Schnittstelle Interpreter {public void interpretieren (Kontextkontext); // In der Tat kann es einen zurückgegebenen Typ geben, um das interpretierte Datenobjekt zu definieren} öffentliche Klasse XMLSaxInterPreter implementiert Interpreter {@Override public void interpretieren (Kontextkontext) {System.out.println ("xml SAX Interpreter:" + context.getData (); }} public class xmldominterpreter implementiert interpreter {@Override public void interpretieren (context context) {System.out.println ("xml dom interpreter:" + context.getData ()); }} / *** enthält einige Informationen außerhalb des Interpreter* / public class Context {private String -Daten; public String getData () {returndaten; } public void setData (String -Daten) {this.data = data; }} public class test {public static void main (String [] args) {context context = new context (); context.setData ("Ein Stück XML -Daten"); neuer XMLSaxInterPreter (). Interpretieren (Kontext); neuer xmldominterPreter (). Interpretation (Kontext); }}5. Hinweise zum Interpreter -Modus
Versuchen Sie, den Interpreter -Modus nicht in wichtigen Modulen zu verwenden, andernfalls ist die Wartung ein großes Problem. Im Projekt können Sie Skriptsprachen wie Shell, Jruby und Groovy verwenden, um den Interpreter -Modus zu ersetzen, um die Mängel von Java -kompilierten Sprachen auszugleichen. Wir verwenden JRUBY für die Berechnung der Verarbeitung im analytischen Projekt einer Bank, vermeiden den Betrieb mit vier Zeichen im Interpreter-Modus und eine gute Leistung in allen Aspekten von Effizienz und Leistung.