Maison > Java > javaDidacticiel > Comment puis-je utiliser ANTLR pour analyser et évaluer des expressions mathématiques simples ?

Comment puis-je utiliser ANTLR pour analyser et évaluer des expressions mathématiques simples ?

DDD
Libérer: 2024-12-23 17:42:11
original
608 Les gens l'ont consulté

How Can I Use ANTLR to Parse and Evaluate Simple Mathematical Expressions?

Certainement, voici la réponse pour le titre et le contenu donnés :

ANTLR : un guide simple étape par étape avec un exemple

ANTLR, ou ANother Tool for Language Recognition, est un puissant outil générateur d'analyseur qui vous permet de définir des grammaires et de générer analyseurs dans divers langages de programmation. Si vous êtes débutant, vous trouverez peut-être les exemples d'ANTlr.org un peu écrasants. Ce guide fournit un exemple simplifié pour vous aider à comprendre le fonctionnement d'ANTLR.

Création du fichier de grammaire

Pour commencer, définissez une grammaire simple dans un fichier texte, par exemple : "Exp.g". La grammaire suivante vous permet d'évaluer des expressions mathématiques de base avec quatre opérateurs ( , -, *, /) et des parenthèses :

grammar Exp;

eval
    : additionExp EOF
    ;

additionExp
    : multiplyExp 
         ( '+' multiplyExp 
         | '-' multiplyExp
         )* 
    ;

multiplyExp
    : atomExp
         ( '*' atomExp 
         | '/' atomExp
         )* 
    ;

atomExp
    : Number
    | '(' additionExp ')'
    ;

Number
    : ('0'..'9')+ ('.' ('0'..'9')+)?
    ;
Copier après la connexion

Générer le Lexer et l'analyseur

En supposant vous avez téléchargé le jar ANTLR, exécutez la commande suivante pour générer le lexer (ExpLexer.java) et l'analyseur (ExpParser.java) classes :

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

Création de la classe de test

Maintenant, créez une classe de test, par exemple ANTLRDemo.java, qui appelle l'analyseur et traite l'expression :

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

Amélioration de la grammaire avec Java Code

Pour effectuer des calculs, ajoutez des blocs de code Java dans vos règles de grammaire, entre { }. Voici la grammaire modifiée :

grammar Exp;

eval
    : exp=additionExp {$value = $exp.value;}
    ;

additionExp
    : m1=multiplyExp       {$value =  $m1.value;} 
         ( '+' m2=multiplyExp {$value += $m2.value;} 
         | '-' m2=multiplyExp {$value -= $m2.value;}
         )* 
    ;

// ...
Copier après la connexion

Exécuter l'exemple

Compilez toutes les classes générées et testées, puis exécutez la classe ANTLRDemo :

// *nix/MacOS
java -cp antlr-3.2.jar org.antlr.Tool Exp.g   // 1
javac -cp .:antlr-3.2.jar ANTLRDemo.java      // 2
java -cp .:antlr-3.2.jar ANTLRDemo            // 3

// Windows
java -cp antlr-3.2.jar org.antlr.Tool Exp.g   // 1
javac -cp .;antlr-3.2.jar ANTLRDemo.java      // 2
java -cp .;antlr-3.2.jar ANTLRDemo            // 3
Copier après la connexion

Cela calculera et affichera le résultat de "12*(5-6)" sur votre console.

Cet exemple simple démontre les bases d'ANTLR. Pour en savoir plus, explorez le wiki, les didacticiels et la documentation ANTLR.

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!

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