Maison >Java >javaDidacticiel >Comment puis-je créer un analyseur d'expression arithmétique simple à l'aide d'ANTLR ?
ANTLR : un exemple simple
ANTLR est un outil puissant pour analyser des données textuelles, mais démarrer peut être intimidant. Pour ceux qui recherchent un exemple simple pour comprendre les principes fondamentaux d'ANTLR, voici une démonstration complète.
Création de la grammaire
Tout d'abord, définissons une grammaire simple dans un fichier appelé Exp.g :
grammar Exp; eval : additionExp EOF ; additionExp : multiplyExp ( '+' multiplyExp | '-' multiplyExp )* ; multiplyExp : atomExp ( '*' atomExp | '/' atomExp )* ; atomExp : Number | '(' additionExp ')' ; Number : ('0'..'9')+ ('.' ('0'..'9')+)? ;
Génération de l'analyseur et Lexer
Une fois la grammaire créée, téléchargez le jar ANTLR et exécutez la commande suivante pour générer l'analyseur et le lexer :
java -cp antlr-3.2.jar org.antlr.Tool Exp.g
Cela créera le ExpLexer.java, ExpParser Fichiers .java et Exp.tokens.
Création du test Classe
Créons une classe de test appelée ANTLRDemo.java :
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()); } }
Comprendre l'exécution de l'analyseur
Compilez et exécutez ANTLRDemo. Java. Si l’expression est évaluée correctement, aucune sortie ne sera imprimée. Sinon, un message d'erreur s'affichera.
Ajout de code Java à la grammaire
Pour rendre l'analyseur plus fonctionnel, ajoutez du code Java à la grammaire à l'intérieur de {.. .} blocs :
eval : additionExp { /* plain code block! */ System.out.println("value equals: " + $value); } ;
Cet exemple imprime le résultat de l'expression.
Retour une valeur double de la règle
Ajouter des retours [valeur double] à chaque règle de la grammaire pour indiquer qu'elles renvoient un double :
eval returns [double value] : additionExp { /* plain code block! */ System.out.println("value equals: " + $value); } ;
Modifier la démo ANTLRDemo class
Mettez à jour la classe ANTLRDemo.java pour récupérer le retour value :
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()); } }
Exécutez à nouveau ANTLRDemo.java pour voir le résultat imprimé sur la console.
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!