Création d'un parser avec expressions mathématiques
Dans cette leçon, nous allons créer une grammaire qui utilise la notion de récursivité.
Dernière modification : Dec 08 , 2024
Dernière modification : Dec 08 , 2024
Pré-requis
L'environnement ANTLR doit avoir été installé.
- Créer un projet Eclipse Java
- Créer un fichier de grammaire
- Création d'un fichier Calc.g4
Motif analysé
La grammaire doit pouvoir parser les motifs suivants :
expr = prim
| expr ‘+’ prim
| expr ‘-’ prim
| expr ‘*’ prim
prim = num
| id
| ‘(’ expr ‘)’
Creation des règles de lexing
Identifier les tokens nécessaires et produisez les règles correspondantes.
Analyseur syntaxique
Créer les règles nécessaires pour parser les motifs.
Astuce, il est possible de définir le package du code génré en utilisant :
@header {
package hello;
}
et pour le lexer :
@lexer::header {package org.xmlcml.cml.converters.antlr;}
Tester la grammaire
Ecrire un test unitaire pour vérifier la grammaire, voici un template pour vous aider :
// create a CharStream that reads from standard input
ANTLRInputStream input = new ANTLRInputStream(System.in);
// create a lexer that feeds off of input CharStream
ArrayInitLexer lexer = new ArrayInitLexer(input);
// create a buffer of tokens pulled from the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// create a parser that feeds off the tokens buffer
ArrayInitParser parser = new ArrayInitParser(tokens);
}
}
ParseTree tree = parser.init(); // begin parsing at init rule
System.out.println(tree.toStringTree(parser)); // print LISP-style tree
Ecrire un test unitaire avec une chaine invalide, vérifier ce qu'elle produit, comment détecter l'erreur ?