ANTLR: Ein Walk-through-Beispiel
Während die ANTLR-Website Beispielgrammatiken bereitstellt, kann es hilfreich sein, den Prozess der Konvertierung von Grammatik in Java-Code zu verstehen schwer fassbar. Für ein klareres Verständnis vertiefen wir uns in ein einfaches Beispiel.
Definieren der Grammatik
Wir erstellen eine Grammatik, die Ausdrücke mit den vier grundlegenden arithmetischen Operatoren ( , -, *, /) und Klammern. Wir definieren die Grammatik in einer Datei mit dem Namen Exp.g.
Exp.g
grammar Exp; eval returns [double value] : exp=additionExp {$value = $exp.value;} ; additionExp returns [double value] : m1=multiplyExp {$value = $m1.value;} ( '+' m2=multiplyExp {$value += $m2.value;} | '-' m2=multiplyExp {$value -= $m2.value;} )* ; multiplyExp returns [double value] : a1=atomExp {$value = $a1.value;} ( '*' a2=atomExp {$value *= $a2.value;} | '/' a2=atomExp {$value /= $a2.value;} )* ; atomExp returns [double value] : n=Number {$value = Double.parseDouble($n.text);} | '(' exp=additionExp ')' {$value = $exp.value;} ; Number : ('0'..'9')+ ('.' ('0'..'9')+)? ;
Generieren des Parsers und Lexers
Führen Sie mit der ANTLR-JAR-Datei den folgenden Befehl im Verzeichnis aus, das Folgendes enthält: Exp.g:
java -cp antlr-3.2.jar org.antlr.Tool Exp.g
Dadurch werden ExpLexer.java, ExpParser.java und Exp.tokens.
Den Test schreiben Klasse
Erstellen SieANTLRDemo.java, um die Grammatik zu testen:
ANTLRDemo.java
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRInputStream in = new ANTLRInputStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval().value); } }
Das Beispiel ausführen
Zuerst: Kompilieren Sie die Parser- und Lexer-Klassen neu und führen Sie dannANTLRDemo aus:
// Recompile javac -cp .:antlr-3.2.jar ANTLRDemo.java // Run java -cp .:antlr-3.2.jar ANTLRDemo
Das obige ist der detaillierte Inhalt vonWie analysiert man arithmetische Ausdrücke mit ANTLR: Eine Schritt-für-Schritt-Anleitung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!