Heim > Java > javaLernprogramm > Wie analysiert man arithmetische Ausdrücke mit ANTLR: Eine Schritt-für-Schritt-Anleitung?

Wie analysiert man arithmetische Ausdrücke mit ANTLR: Eine Schritt-für-Schritt-Anleitung?

Mary-Kate Olsen
Freigeben: 2024-11-28 22:41:13
Original
593 Leute haben es durchsucht

How to Parse Arithmetic Expressions with ANTLR: A Step-by-Step Guide?

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')+)?
    ;
Nach dem Login kopieren

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
Nach dem Login kopieren

Dadurch werden ExpLexer.java, ExpParser.java und Exp.tokens.

Den Test schreiben Klasse

Erstellen Sie

ANTLRDemo.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); 
    }
}
Nach dem Login kopieren

Das Beispiel ausführen

Zuerst: Kompilieren Sie die Parser- und Lexer-Klassen neu und führen Sie dann

ANTLRDemo aus:

// Recompile
javac -cp .:antlr-3.2.jar ANTLRDemo.java

// Run
java -cp .:antlr-3.2.jar ANTLRDemo
Nach dem Login kopieren
Die Konsole sollte nun das Ergebnis des Ausdrucks ausgeben, das -12 ist.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage