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?

Dec 01, 2024 am 03:56 AM

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)