Maison > Java > javaDidacticiel > Où puis-je trouver un exemple ANTLR simple pour créer une calculatrice à quatre opérations ?

Où puis-je trouver un exemple ANTLR simple pour créer une calculatrice à quatre opérations ?

DDD
Libérer: 2024-12-01 03:56:10
original
320 Les gens l'ont consulté

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

Puis-je trouver un exemple de code ANTLR de base ?

ANTLR peut être un outil complexe à comprendre, en particulier pour les débutants. Pour une approche plus simplifiée, voici un exemple qui illustre le processus de création d'une calculatrice à quatre opérations à l'aide d'ANTLR. Cet exemple couvre l'ensemble du processus depuis la définition de la grammaire jusqu'à la génération du code Java.

Définition de la grammaire

Le fichier de grammaire, Exp.g, définit la grammaire de la calculatrice.

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;}
    ;
Copier après la connexion

Intégration du code Java

Pour ajouter Java codez la grammaire, utilisez le bloc { } avec du Java simple à l'intérieur. Cependant, les valeurs de double retour nécessitent un signe dollar ($) devant elles.

// Entry point of the parser
eval returns [double value]
    :    exp=additionExp {$value = $exp.value;}
    ;
Copier après la connexion

Génération de code ANTLR

Utilisez le pot ANTLR pour générer l'analyseur et l'analyseur à partir de la grammaire.

java -cp antlr-3.2.jar org.antlr.Tool Exp.g
Copier après la connexion

Test Classe

Créez une classe de test pour exécuter la calculatrice.

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
    }
}
Copier après la connexion

Exécuter l'exemple

Compilez les classes et exécutez le test classe. Le résultat de l'expression 12*(5-6) sera imprimé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal