Heim > Java > javaLernprogramm > Wo finde ich ein einfaches ANTLR-Beispiel zum Erstellen eines Rechners mit vier Operationen?

Wo finde ich ein einfaches ANTLR-Beispiel zum Erstellen eines Rechners mit vier Operationen?

DDD
Freigeben: 2024-12-01 03:56:10
Original
321 Leute haben es durchsucht

Where Can I Find a Simple ANTLR Example for Building a Four-Operation Calculator?

Kann ich einen einfachen ANTLR-Beispielcode finden?

ANTLR kann ein komplex zu verstehendes Werkzeug sein, insbesondere für Anfänger. Für einen einfacheren Ansatz finden Sie hier ein Beispiel, das den Prozess der Erstellung eines Vier-Operationen-Rechners mit ANTLR demonstriert. Dieses Beispiel deckt den gesamten Prozess von der Grammatikdefinition bis zur Generierung von Java-Code ab.

Grammatikdefinition

Die Grammatikdatei Exp.g definiert die Grammatik für den Rechner.

grammar Exp;

// Entry point of the parser
eval returns [double value]
    :    additionExp
    ;

// Addition and subtraction have lower precedence
additionExp returns [double value]
    :    multiplyExp 
         ( '+' multiplyExp 
         | '-' multiplyExp
         )* 
    ;

// Multiplication and division have higher precedence
multiplyExp returns [double value]
    :    atomExp       {$value =  $a1.value;}
         ( '*' atomExp {$value *= $a2.value;} 
         | '/' atomExp {$value /= $a2.value;}
         )* 
    ;

// Expression atom: a number or parenthesis-enclosed expression
atomExp returns [double value]
    :    Number                {$value = Double.parseDouble($n.text);}
    |    '(' exp=additionExp ')' {$value = $exp.value;}
    ;

// Number: an integer or decimal value
Number
    :    ('0'..'9')+ ('.' ('0'..'9')+)?
    ;

// Ignore white space
WS
    :   (' ' | '\t' | '\r'| '\n') {$channel=HIDDEN;}
    ;
Nach dem Login kopieren

Java-Code-Integration

Zum Hinzufügen von Java-Code Verwenden Sie für die Grammatik den Block {} mit einfachem Java darin. Doppelte Rückgabewerte erfordern jedoch ein Dollarzeichen ($) davor.

// Entry point of the parser
eval returns [double value]
    :    exp=additionExp {$value = $exp.value;}
    ;
Nach dem Login kopieren

ANTLR-Codegenerierung

Verwenden Sie das ANTLR-JAR, um daraus den Lexer und Parser zu generieren die Grammatik.

java -cp antlr-3.2.jar org.antlr.Tool Exp.g
Nach dem Login kopieren

Test Klasse

Erstellen Sie eine Testklasse, um den Rechner auszuführen.

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().value); // Print the result
    }
}
Nach dem Login kopieren

Ausführen des Beispiels

Kompilieren Sie die Klassen und führen Sie den Test aus Klasse. Das Ergebnis des Ausdrucks 12*(5-6) wird gedruckt.

Das obige ist der detaillierte Inhalt vonWo finde ich ein einfaches ANTLR-Beispiel zum Erstellen eines Rechners mit vier Operationen?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage