Antlr FR
Antlr FR
#antlr
Table des matières
À propos 1
Remarques 2
Versions 2
Examples 3
Bonjour le monde 3
Examples 5
Support linguistique 5
Examples 8
Installation et configuration 8
Remarques 11
Examples 11
Examples 18
Examples 19
Règles simples 19
Fragments 19
Commandes Lexer 21
Examples 23
Configuration de TestRig 23
Accéder à TestRig 23
Chapitre 8: Visiteurs 27
Introduction 27
Examples 27
Exemple 27
Crédits 29
À propos
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: antlr
It is an unofficial and free ANTLR ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official ANTLR.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/fr/home 1
Chapitre 1: Démarrer avec ANTLR
Remarques
ANTLR (ANother Tool for Language Recognition) est un puissant générateur d'analyseurs pour la
lecture, le traitement, l'exécution ou la traduction de textes structurés ou de fichiers binaires. Il est
largement utilisé pour créer des langages, des outils et des frameworks. À partir d'une grammaire,
ANTLR génère un analyseur qui peut créer et parcourir des arbres d'analyse.
Antlr Versions
Antlr est séparé en deux grandes parties, la grammaire (fichiers de grammaire) et les fichiers de
code générés, qui dérivent de la grammaire basée sur le langage cible. Les versions antlr sont au
format de V1.V2.V3:
• V1: Changer dans V1 signifie que la nouvelle syntaxe des fonctionnalités a été introduite
dans les fichiers de grammaire
• V2: Change in V2 signifie que de nouvelles fonctionnalités ou corrections majeures ont été
introduites dans les fichiers générés (par exemple, l'ajout de nouvelles fonctions)
• V3: correspond à des corrections de bogues ou à des améliorations mineures
• Java
• C#
• Python (2 et 3)
• JavaScript
Versions
2.0 1997-05-01
3.0 2011-01-19
4.0 2013-01-21
4.1 2013-07-01
https://riptutorial.com/fr/home 2
Version Date de sortie
4.2 2014-02-05
4.2.1 2014-03-25
4.2.2 2014-04-07
4.3 2014-06-19
4.4 2014-07-16
4.5 2015-01-23
4.5.1 2016-07-16
4.5.2 2016-01-30
4.5.3 2016-03-31
4.6 2016-12-15
4.7 2017-03-30
Examples
Bonjour le monde
Pour générer cet exemple .g4, vous pouvez exécuter la commande suivante à partir du terminal /
de la ligne de commande de votre système d'exploitation:
//OR if you have setup an alias or use the recommended batch file
antlr4 Hello.g4
La construction de cet exemple doit aboutir à la sortie suivante dans le répertoire de fichiers
Hello.g4:
1. Hello.tokens
2. HelloBaseListener.java
https://riptutorial.com/fr/home 3
3. HelloLexer.java
4. HelloLexer.tokens
5. HelloListener.java
6. Bonjour.java
Lorsque vous utilisez ces fichiers dans votre propre projet, veillez à inclure le fichier jar ANTLR.
Pour compiler tous ces fichiers à l'aide de Java, dans le même répertoire d'exploitation ou par
chemin, exécutez la commande suivante:
javac *.java
https://riptutorial.com/fr/home 4
Chapitre 2: ANTLR Cibles / Runtimes
linguistiques
Examples
Support linguistique
ANTLR est capable de générer des analyseurs pour un certain nombre de langages de
programmation:
1. C # Cible
2. Cible Python
3. Cible JavaScript
4. Cible Java
Par défaut, ANTLR générera un analyseur à partir de la ligne de commande dans le langage de
programmation Java:
Pour changer la langue cible, vous pouvez exécuter la commande suivante à partir du terminal OS
/ ligne de commande:
Plutôt que d'utiliser le paramètre '-Dlanguage' sur la ligne de commande / terminal chaque fois
que vous créez l'analyseur souhaité pour une langue spécifique, vous pouvez sélectionner la cible
dans votre fichier de grammaire .g4 en incluant la cible dans la section globale:
options {
language = "CSharp";
}
//or
options {
language="Python";
}
Pour utiliser la sortie d'analyse analysée, assurez-vous que vous disposez du moteur d'exécution
ANTLR pour la langue spécifiée:
1. CSharp runtime
2. Python 2 runtime
3. python 3 runtime
https://riptutorial.com/fr/home 5
Instructions complètes et informations sur les bibliothèques d'exécution ANTLR
Après avoir exécuté votre fichier .g4 avec ANTLR.jar, vous devez avoir généré un certain nombre
de fichiers tels que:
1.yourGrammarNameListener.py
2.yourGrammarNameParser.py
3.yourGrammarName.tokens
...
Pour les utiliser dans un projet python, incluez le runtime Python dans votre espace de travail afin
que toute application que vous développez puisse accéder à la bibliothèque ANTLR. Cela peut
être fait en extrayant le runtime dans votre dossier de projet actuel ou en l'important dans votre
IDE dans les dépendances de votre projet.
#main.py
import yourGrammarNameParser
import sys
def main(argv):
"""Main method calling a single debugger for an input script"""
parser = yourGrammarNameParser
parser.parse(argv)
if __name__ == '__main__':
main(sys.argv)
Cette configuration inclut votre analyseur et accepte l’entrée de la ligne de commande pour
permettre le traitement d’un fichier passé en paramètre.
#yourGrammarNameParser.py
from yourGrammarNameLexer import yourGrammarNameLexer
from yourGrammarNameListener import yourGrammarNameListener
from yourGrammarNameParser import yourGrammarNameParser
from antlr4 import *
import sys
class yourGrammarNameParser(object):
"""
Debugger class - accepts a single input script and processes
all subsequent requirements
"""
def __init__(self): # this method creates the class object.
pass
https://riptutorial.com/fr/home 6
stream = CommonTokenStream(lexer)
parser = yourGrammarNameParser(stream)
tree = parser.program() #start from the parser rule, however should be changed to your
entry rule for your specific grammar.
printer = yourGrammarNameListener(tree,input)
walker = ParseTreeWalker()
walker.walk(printer, tree)
else:
print('Error : Expected a valid file')
Ces fichiers, associés à l'environnement d'exécution ANTLR et à vos fichiers générés à partir de
votre fichier de grammaire, accepteront un seul nom de fichier comme argument et liront et
analyseront vos règles de grammaire.
Pour étendre les fonctionnalités de base, vous devez également développer l'écouteur par défaut
pour gérer les événements pertinents pour les jetons rencontrés lors de l'exécution.
https://riptutorial.com/fr/home 7
Chapitre 3: Introduction à ANTLR v3
Examples
Installation et configuration
1. Installez Eclipse.
2. Téléchargez le fichier binaire complet ANTLR qui inclut ANTLR v2. Extraire dans un
répertoire temporaire. Copiez le dossier antlr-nn vers un emplacement permanent approprié,
par exemple le même dossier dans lequel Eclipse est installé.
3. Ajoutez le site de mise à jour IDE ANTLR à Eclipse.
• Dans Eclipse, cliquez sur Aide et sélectionnez Installer un nouveau logiciel.
• Cliquez sur le bouton Ajouter….
• Dans la fenêtre Ajouter un référentiel, pour Emplacement, tapez
http://antlrv3ide.sourceforge.net/updates et tapez quelque chose comme ANTLR IDE
pour le nom et cliquez sur OK pour revenir à la fenêtre Logiciels disponibles.
• Cochez la case pour ANTLR IDE vn.nn et cliquez dessus jusqu'à ce qu'il soit installé.
Eclipse va probablement redémarrer.
4. Configurez l'IDE ANTLR.
• Dans la fenêtre principale d'Eclipse, cliquez sur Window puis sur Preferences.
• Dans le volet gauche, développez ANTLR et sélectionnez Générateur.
• Dans le volet de droite, cliquez sur le bouton Ajouter….
• Dans la fenêtre Ajouter un package ANTLR, cliquez sur Répertoire… et accédez à
l'emplacement du dossier antlr-nn, puis cliquez sur OK.
• Cliquez sur OK pour fermer la fenêtre Ajouter un package ANTLR.
• Sélectionnez Générateur de code dans le volet gauche et cliquez sur Dossier relatif au
projet dans le volet droit. Tapez un nom de dossier. Exemples: antlr-java ou antlr
généré.
• Sélectionnez d'autres paramètres de configuration, mais NE vérifiez PAS –nfa ou –dfa
dans la sous-fenêtre Général de la fenêtre Building. Si cette option est cochée, cela
entraînera des erreurs ANTLR empêchant la génération de fichiers Java dans le
dossier de sortie.
• Cliquez sur OK pour fermer la fenêtre Préférences.
5. Créez un nouveau projet Java et activez le support ANTLR.
• Dans la fenêtre principale d'Eclipse, accédez à Fichier, Nouveau, Projet Java. Cliquez
sur Suivant, tapez un nom de projet et cliquez sur Terminer.
• Pour activer le support ANTLR pour le projet, dans la fenêtre Explorateur de packages
(volet gauche), cliquez avec le bouton droit sur le projet que vous venez de créer et
sélectionnez Configurer, convertir en projet ANTLR.
• Ajoutez le fichier JAR complet ANTLR au projet: cliquez avec le bouton droit sur le
https://riptutorial.com/fr/home 8
projet et sélectionnez Propriétés, Chemin de génération Java, cliquez sur Ajouter des
fichiers JAR externes, accédez au fichier JAR ANTLR, sélectionnez-le et cliquez sur
OK. Cliquez sur OK pour fermer la fenêtre Propriétés du projet.
6. Créez une grammaire ANTLR.
• Créez une nouvelle grammaire ANTLR: cliquez avec le bouton droit sur le dossier src
du projet, puis cliquez sur Fichier, Nouveau, Autre, développez ANTLR et sélectionnez
Grammaire combinée. Cliquez sur Suivant, tapez nom de la grammaire, sélectionnez
une option de langue et cliquez sur Terminer.
• Un fichier «.g» est créé avec les options sélectionnées et une règle vide. Ajoutez les
options language = Java, @header, @lexer :: header et @members en haut (voir
exemple). L'achèvement automatique est le moyen le plus simple de les ajouter
(appuyez sur CTRL-espace pour afficher la liste de saisie automatique).
7. Enregistrez la grammaire.
• Une fois enregistré, un dossier contenant le code Java généré pour la grammaire doit
apparaître dans l'explorateur de projet. Si ce n'est pas le cas, assurez-vous que les
options –nfa ou –dfa ne sont pas cochées dans les préférences ANTLR sous Général
dans la fenêtre du bâtiment (étape 4g). [Confirmez si nécessaire: vérifiez que la
variable d'environnement CLASSPATH pointe vers Java7 correspondant à votre
installation Eclipse (32 ou 64 bits) et que la variable d'environnement Windows Path
était dotée du SDK Java7.]
• Pour éviter les erreurs Java «ne peuvent pas être résolues en un type», cliquez avec le
bouton droit sur le dossier contenant le code Java généré, puis créez un chemin,
utilisez-le comme dossier source.
options {
language = Java;
}
@header { //parser
package pkgName; //optional
import java.<whatever you need>.*;
}
@members { //parser
// java code here
}
@lexer::header { //lexer
package pkgName; //optional
import java.<whatever you need>.*;
}
@lexer::members {
// java code here
}
/*------------------------------------------------------------------
* PARSER RULES (convention is all lowercase)
*------------------------------------------------------------------*/
parserule: LEXRULE;
https://riptutorial.com/fr/home 9
/*------------------------------------------------------------------
* LEXER RULES (convention is all uppercase)
*------------------------------------------------------------------*/
LEXRULE: 'a'..'z';
https://riptutorial.com/fr/home 10
Chapitre 4: Introduction à ANTLR v4
Remarques
ANTLR v4 est un outil puissant permettant de créer de nouveaux langages de programmation et
de traiter / traduire du texte structuré ou des fichiers binaires. ANTLR utilise une grammaire que
vous créez pour générer un analyseur capable de créer et de parcourir un arbre d'analyse
syntaxique (ou arbre syntaxique abstrait, AST). L'analyseur se compose de fichiers de sortie dans
une langue cible que vous spécifiez. ANTLR v4 prend en charge plusieurs cibles, notamment:
Java, C #, JavaScript, Python2 et Python3. Le support de C ++ est en cours de développement.
Pour travailler dans des IDE GUI, il existe des plug-ins pour Visual Studio, Intellij, NetBeans et
Eclipse.
Pour des informations générales, visitez le site Web d'ANTLR . Pour prendre au sérieux ANTLR,
consultez le livre hautement recommandé écrit par Terrence Parr (le gars qui a créé ANTLR) The
Definitive ANTLR 4 Reference .
• 4.5: 22/01/15 - Ajout d'une cible JavaScript et mise à niveau de la cible C #. 4.5 Notes de
version
• 4.4: 16/07/14 - Ajout de Python2 et Python3 comme cibles. 4.4 Notes de version
• 4.3: 18/06/14 - Correction de bugs majeurs; préparé pour l'ajout de nouvelles cibles. 4.3
Notes de version
• 4.2: 02/04/14 - Amélioration de la syntaxe pour la sélection / correspondance des arbres
d'analyse. 4.2 Notes de version
• 4.1: 30/06/13 - Amélioration des performances d’analyse; exporter des AST vers PNG. 4.1
Notes de publication
• 4.0: 21/01/13 - Version initiale.
Examples
Installation pour utilisation en ligne de commande
ANTLR est distribué sous forme de fichier Java Jar. Il peut être téléchargé ici . Comme ANTLR est
compilé en tant que fichier jar, il faut ensuite que l'environnement d'exécution Java fonctionne, si
vous ne le possédez pas. Il peut être téléchargé ici .
Une fois le fichier ANTLR JAR téléchargé, vous pouvez exécuter ANTLR à partir de la ligne de
commande de la même manière que tout autre fichier JAR:
(En supposant que vous travaillez dans le même répertoire que le fichier antlr-4.5.3-complete.jar).
https://riptutorial.com/fr/home 11
Cela devrait produire quelque chose de similaire à ceci:
Après l'installation, vous pouvez créer une application en utilisant votre fichier de grammaire .g4:
Vous pouvez également créer une application dans d'autres langages avec le paramètre -
Dlanguage. Par exemple, pour générer des fichiers C #, vous feriez quelque chose comme ceci:
Voir ici pour la liste complète des grammaires pré-établies pour les langages de programmation
courants.
Vous pouvez également utiliser Maven, Gradle ou un autre outil de génération pour dépendre de
son org.antlr:antlr4-runtime exécution (les classes utilisées par les grammaires):
org.antlr:antlr4-runtime .
Pour générer automatiquement l'analyseur dans un projet Maven , utilisez le plugin Maven :
https://riptutorial.com/fr/home 12
org.antlr:antlr4 .
(Testé avec ANTLR 4.5.3, Eclipse Neon, ANTLR 4 IDE 0.3.5 et Java 1.8)
https://riptutorial.com/fr/home 13
• Dans la fenêtre principale d'Eclipse, cliquez sur Window puis sur Preferences.
• Dans le volet gauche, développez ANTLR 4 et sélectionnez Outil.
• Sous Options, modifiez le répertoire si vous le souhaitez. Par exemple, java est ma
langue cible, donc j'utilise ./antlr-java.
• Cliquez sur OK pour fermer la fenêtre Préférences.
1. Ouvrez Visual Studio 2015, accédez à Outils → Extensions → En ligne et recherchez Antlr.
Téléchargez l'extension ANTLR Language Support (créée par Sam Harwell) et redémarrez
Visual Studio.
2. Créez un nouveau projet d'application de console. Faites un clic droit sur la solution → Gérer
les paquets Nuget pour la solution → Parcourir (Tab) et recherchez Antlr4 et installez-le.
https://riptutorial.com/fr/home 14
3. Ajoutez un nouvel élément à votre projet en cliquant dessus avec le bouton droit de la
souris. Et recherchez les modèles ANTLR4.
4. À partir de votre fichier ANTLR (se terminant par .g4), accédez à Fichier → Options de
sauvegarde avancées et recherchez Unicode (UTF-8 sans signature ) - Codepage 65001
et cliquez sur OK. C'est tout.
https://riptutorial.com/fr/home 15
Tester si tout fonctionne
• Créez un élément de grammaire combinée ANTLR 4 et nommez-le Calculator.g4
• Copiez et collez le code source de la calculatrice de ce projet Github ici: Calculatrice de Tom
Everett
• Changer la calculatrice grammaticale en calculatrice grammaticale
• Sur l'Explorateur de solutions → Cliquez sur Afficher tous les fichiers.
https://riptutorial.com/fr/home 16
Lire Introduction à ANTLR v4 en ligne: https://riptutorial.com/fr/antlr/topic/2856/introduction-a-antlr-
v4
https://riptutorial.com/fr/home 17
Chapitre 5: Les auditeurs
Examples
Événements d'écoute à l'aide d'étiquettes
L'étiquetage des alternatives dans une règle commençant par l'opérateur # indique à ANTLR de
générer des méthodes d'écoute pour chaque étiquette correspondant à l'alternative.
// Rule
type : int #typeInt
| short #typeShort
| long #typeLong
| string #typeString
;
// Tokens
int : 'int' ;
short : 'short' ;
long : 'long' ;
string : 'string' ;
ParseTreeListener les méthodes suivantes dans l'interface générée qui étend ParseTreeListener :
https://riptutorial.com/fr/home 18
Chapitre 6: Règles Lexer en v4
Examples
Règles simples
Les règles Lexer définissent les types de jeton. Leur nom doit commencer par une lettre
majuscule pour les distinguer des règles d’analyseur.
INTEGER: [0-9]+;
IDENTIFIER: [a-zA-Z_] [a-zA-Z_0-9]*;
OPEN_PAREN: '(';
CLOSE_PAREN: ')';
Syntaxe de base:
Syntaxe Sens
AB Match A suivi de B
Faire correspondre un caractère dans les plages définies (dans cet exemple, entre
[A-Z0-9]
AZ et 0-9)
Négation d'une plage - correspond à n'importe quel caractère unique qui n'est pas
~[AZ]
dans la plage
Fragments
Les fragments sont des parties réutilisables des règles de lexer qui ne peuvent pas correspondre
seules. Elles doivent être référencées à partir d'une règle de lexer.
https://riptutorial.com/fr/home 19
INTEGER: DIGIT+
| '0' [Xx] HEX_DIGIT+
;
Lorsque des jetons comme '{' sont utilisés dans une règle d' analyse , une règle lexer implicite
sera créée à moins qu'une règle explicite n'existe.
OPEN_BRACE: '{';
parserRule: '{';
parserRule: OPEN_BRACE;
Mais si la règle OPEN_BRACE OPEN_BRACE n'est pas définie, une règle anonyme implicite sera
créée. Dans ce cas, la règle implicite sera définie comme si elle était définie avant les autres
règles: elle aura une priorité plus élevée que les autres règles.
Règles de priorité
Plusieurs règles de lexer peuvent correspondre au même texte d'entrée. Dans ce cas, le type de
jeton sera choisi comme suit:
• Tout d'abord, sélectionnez la règle lexer qui correspond à l'entrée la plus longue
• Si le texte correspond à un jeton défini implicitement (comme '{' ), utilisez la règle implicite
• Si plusieurs règles de lexer correspondent à la même longueur d'entrée, choisissez la
première en fonction de l'ordre de définition.
grammar LexerPriorityRulesExample;
// Parser rules
// Lexer rules
BAR: 'bar';
IDENTIFIER: [A-Za-z]+;
BAZ: 'baz';
https://riptutorial.com/fr/home 20
Compte tenu de l'entrée suivante:
La règle d'analyse syntaxique randomParserRule introduit le type de jeton implicite 'foo' , qui
est prioritaire sur la règle IDENTIFIER .
Ce texte correspond à la règle BAR définie avant la règle IDENTIFIER et a donc la priorité.
Compte tenu de la grammaire, BAZ ne sera jamais en mesure de correspondre, car la règle
IDENTIFIER couvre déjà tout ce que BAZ peut égaler.
La règle BAR peut correspondre aux 3 premiers caractères de cette chaîne ( bar ), mais la
règle IDENTIFIER correspond à 4 caractères. Comme IDENTIFIER correspond à une sous-
chaîne plus longue, il est choisi sur BAR .
En règle générale, les règles spécifiques doivent être définies avant des règles plus génériques.
Si une règle ne peut correspondre qu'à une entrée déjà couverte par une règle précédemment
définie, elle ne sera jamais utilisée.
Les règles implicitement définies telles que 'foo' agissent comme si elles étaient définies avant
toutes les autres règles lexer.
Commandes Lexer
https://riptutorial.com/fr/home 21
• skip : ignore le texte correspondant, aucun jeton ne sera émis
• channel(n) : émet le jeton sur un canal différent
• type(n) : change le type de jeton émis
• mode(n) , pushMode(n) , popMode , more : contrôle les modes lexer
Une action lexer est un bloc de code arbitraire dans le langage cible entouré de { ... } , qui est
exécuté lors de la correspondance:
Un prédicat sémantique est un bloc de code arbitraire dans le langage cible entouré de { ... }? ,
qui évalue une valeur booléenne. Si la valeur renvoyée est false, la règle lexer est ignorée.
Les prédicats sémantiques doivent être définis à la fin de la règle chaque fois que cela est
possible pour des raisons de performances.
https://riptutorial.com/fr/home 22
Chapitre 7: TestRig / grun
Examples
Configuration de TestRig
ANTLR contient un outil de test dans sa bibliothèque d'exécution. Cet outil peut être utilisé pour
afficher des informations détaillant la manière dont l'analyse est effectuée pour faire correspondre
les entrées aux règles définies dans votre fichier de grammaire.
Pour utiliser cet outil contenu dans le fichier JAR ANTLR, vous devez configurer votre chemin de
classe système pour autoriser l'accès à l'outil ANTLR et à la bibliothèque d'exécution:
export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH"
Remarque: Assurez-vous que le point précède tout chemin pour garantir que la
machine virtuelle Java ne verra pas les classes dans votre répertoire de travail actuel.
Alises peut être utilisé sous Linux / MAC / Unix pour simplifier les commandes utilisées:
Notez que la configuration des fenêtres pour les alias et la configuration des classpath peuvent
être plus compliquées, voir ici pour plus de détails.
Accéder à TestRig
Une fois que vous avez configuré votre alias, vous pouvez configurer TestRig de la manière
suivante, en utilisant à nouveau un alias, car cela réduit le temps requis pour effectuer l'action:
Si vous ne souhaitez pas configurer un alias sur Windows, vous pouvez accéder à TestRig en
exécutant la commande suivante au même emplacement que votre répertoire jar ANTLR:
Pour exécuter TestRig sur votre grammaire, vous pouvez transmettre les paramètres de votre
grammaire comme suit:
https://riptutorial.com/fr/home 23
java -cp .;antlr.4.5.3-complete.jar org.antlr.v4.gui.TestRig yourGrammar Hello r -tree
//Windows with the grammar Hello.g4 starting from the rule 'r'.
-guispécifiez l'option de ligne de commande -gui lors de l'exécution d'une grammaire ANTLR
dans le banc d'essai, une fenêtre apparaîtra avec une représentation visuelle de l'arbre d'analyse.
Par exemple:
JSON.g4
json
: value
;
object
: '{' pair (',' pair)* '}'
| '{' '}'
;
pair
: STRING ':' value
;
array
: '[' value (',' value)* ']'
| '[' ']'
;
value
: STRING
| NUMBER
| object
| array
| 'true'
| 'false'
| 'null'
;
STRING
: '"' (ESC | ~ ["\\])* '"'
;
fragment ESC
: '\\' (["\\/bfnrt] | UNICODE)
;
fragment UNICODE
: 'u' HEX HEX HEX HEX
;
fragment HEX
: [0-9a-fA-F]
https://riptutorial.com/fr/home 24
;
NUMBER
: '-'? INT '.' [0-9] + EXP? | '-'? INT EXP | '-'? INT
;
fragment INT
: '0' | [1-9] [0-9]*
;
// no leading zeros
fragment EXP
: [Ee] [+\-]? INT
;
// \- since - means "range" inside [...]
WS
: [ \t\n\r] + -> skip
;
example.json
{
"name": "John Doe",
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100"
},
"phoneNumbers": [
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "mobile",
"number": "123 456-7890"
}
],
"children": [],
"spouse": null
}
export CLASSPATH=".:/usr/local/lib/antlr-4.0-complete.jar:$CLASSPATH"
antlr4 -o . -lib . -no-listener -no-visitor JSON.g4; javac *.java; grun JSON json -gui
example.json
entraînera les fichiers .java & .tokens générés , ainsi que les fichiers .class compilés:
https://riptutorial.com/fr/home 25
JSON.g4 JSONLexer.class JSONListener.java
JSONParser$PairContext.class JSON.tokens JSONLexer.java
JSONParser$ArrayContext.class JSONParser$ValueContext.class JSONBaseListener.class
JSONLexer.tokens JSONParser$JsonContext.class JSONParser.class
JSONBaseListener.java JSONListener.class
JSONParser$ObjectContext.class JSONParser.java
https://riptutorial.com/fr/home 26
Chapitre 8: Visiteurs
Introduction
Quelle est la différence entre un auditeur et un visiteur? La différence entre les mécanismes
d'écoute et de visiteur est que les méthodes d'écoute sont appelées par l'objet walker fourni par
ANTLR, tandis que les méthodes visiteur doivent guider leurs enfants avec des appels de visite
explicites. Oublier d'appeler visit () sur les enfants d'un nœud signifie que ces sous-arbres ne sont
pas visités. En visiteur, nous avons la possibilité de marcher dans les arbres, alors qu'en écoute,
vous ne faites que réagir au déambulateur.
Examples
Exemple
grammar Expr;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
Générer le visiteur
Pour générer un visiteur ou désactiver un visiteur pour votre grammaire, utilisez les indicateurs
suivants:
La commande commandline / terminal pour construire votre grammaire avec un visiteur sera
formatée comme indiqué ci-dessous, en ce qui concerne les alias choisis et les alias possibles:
Sortie La sortie sera ExprBaseVisitor.java et ExprVisitor.java pour cet exemple. Ce sont les
fichiers java pertinents pour vous permettre de mettre en œuvre les fonctionnalités des visiteurs. Il
est souvent idéal de créer une nouvelle classe et d'étendre ExprBaseVisitor pour implémenter de
https://riptutorial.com/fr/home 27
nouvelles fonctionnalités pour chaque méthode.
/**
* This class provides an empty implementation of {@link ExprVisitor},
* which can be extended to create a visitor which only needs to handle a subset
* of the available methods.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public class ExprBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements ExprVisitor<T>
{
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitProg(ExprParser.ProgContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitExpr(ExprParser.ExprContext ctx) { return visitChildren(ctx); }
}
https://riptutorial.com/fr/home 28
Crédits
S.
Chapitres Contributeurs
No
Démarrer avec
1 Athafoud, cb4, Community, D3181, Gábor Bakos, KvanTTT
ANTLR
ANTLR Cibles /
2 Runtimes D3181
linguistiques
Introduction à
3 Athafoud, cb4
ANTLR v3
8 Visiteurs D3181
https://riptutorial.com/fr/home 29