ANTLR
TestRig / grun
Recherche…
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:
alias antlr4='java -jar /usr/local/lib/antlr-4.5.3-complete.jar'
//or any directory where your jar is located
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:
alias grun='java org.antlr.v4.runtime.misc.TestRig'
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:
java -cp .;antlr.4.5.3-complete.jar org.antlr.v4.runtime.misc.TestRig
//or
java -cp .;antlr.4.5.3-complete.jar org.antlr.v4.gui.TestRig
Pour exécuter TestRig sur votre grammaire, vous pouvez transmettre les paramètres de votre grammaire comme suit:
grun yourGrammar yourRule -tree //using the setup alias
java -cp .;antlr.4.5.3-complete.jar org.antlr.v4.gui.TestRig yourGrammar YourRule -tree //on windows with no alias
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'.
Construire une grammaire avec l'arborescence d'analyse visuelle
-gui
spé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:
Compte tenu de la grammaire suivante:
JSON.g4
/** Taken from "The Definitive ANTLR 4 Reference" by Terence Parr */
// Derived from http://json.org
grammar JSON;
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]
;
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
;
Étant donné le fichier JSON suivant:
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
}
La syntaxe de ligne de commande suivante:
export CLASSPATH=".:/usr/local/lib/antlr-4.0-complete.jar:$CLASSPATH"
alias antlr4='java -jar /usr/local/lib/antlr-4.0-complete.jar'
alias grun='java org.antlr.v4.runtime.misc.TestRig'
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:
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
et l'arbre d'analyse suivant: