ANTLR: Ein einfaches Beispiel
ANTLR ist ein leistungsstarkes Tool zum Parsen von Textdaten, aber der Einstieg kann einschüchternd sein. Für diejenigen, die ein einfaches Beispiel suchen, um die Grundlagen von ANTLR zu verstehen, finden Sie hier eine umfassende Demonstration.
Erstellen der Grammatik
Zuerst definieren wir eine einfache Grammatik in einer Datei namens Exp.g:
grammar Exp; eval : additionExp EOF ; additionExp : multiplyExp ( '+' multiplyExp | '-' multiplyExp )* ; multiplyExp : atomExp ( '*' atomExp | '/' atomExp )* ; atomExp : Number | '(' additionExp ')' ; Number : ('0'..'9')+ ('.' ('0'..'9')+)? ;
Generieren des Parsers und Lexer
Sobald die Grammatik erstellt ist, laden Sie das ANTLR-JAR herunter und führen Sie den folgenden Befehl aus, um den Parser und Lexer zu generieren:
java -cp antlr-3.2.jar org.antlr.Tool Exp.g
Dadurch wird ExpLexer.java, ExpParser, erstellt .java- und Exp.tokens-Dateien.
Erstellen des Tests Klasse
Lassen Sie uns eine Testklasse namens ANTLRDemo.java erstellen:
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRStringStream in = new ANTLRStringStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval()); } }
Grundlegendes zur Parser-Ausführung
Kompilieren Sie ANTLRDemo und führen Sie es aus. Java. Wenn der Ausdruck korrekt ausgewertet wird, wird keine Ausgabe gedruckt. Andernfalls wird eine Fehlermeldung angezeigt.
Hinzufügen von Java-Code zur Grammatik
Um den Parser funktionsfähiger zu machen, fügen Sie Java-Code zur Grammatik in {.. hinzu. .} Blöcke:
eval : additionExp { /* plain code block! */ System.out.println("value equals: " + $value); } ;
Dieses Beispiel gibt das Ergebnis des Ausdrucks aus.
Zurückgeben ein Double-Wert aus der Regel
Add gibt [double value] zu jeder Regel in der Grammatik zurück, um anzugeben, dass sie einen Double-Wert zurückgibt:
eval returns [double value] : additionExp { /* plain code block! */ System.out.println("value equals: " + $value); } ;
Ändern der ANTLRDemo Klasse
Aktualisieren Sie die Klasse ANTLRDemo.java, um die zurückgegebenen Daten abzurufen Wert:
import org.antlr.runtime.*; public class ANTLRDemo { public static void main(String[] args) throws Exception { ANTLRStringStream in = new ANTLRStringStream("12*(5-6)"); ExpLexer lexer = new ExpLexer(in); CommonTokenStream tokens = new CommonTokenStream(lexer); ExpParser parser = new ExpParser(tokens); System.out.println(parser.eval()); } }
Führen Sie ANTLRDemo.java erneut aus, um das auf der Konsole gedruckte Ergebnis zu sehen.
Das obige ist der detaillierte Inhalt vonWie kann ich mit ANTLR einen einfachen Parser für arithmetische Ausdrücke erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!