ANTLR
TestRig / grun
Buscar..
Configurar TestRig
ANTLR contiene una herramienta de prueba en su biblioteca de tiempo de ejecución, esta herramienta puede usarse para mostrar información que detalla cómo se realiza el análisis para hacer coincidir la entrada con las reglas definidas en su archivo de gramática.
Para utilizar esta herramienta contenida en el archivo jar ANTLR, debe configurar la ruta de clase de su sistema para permitir el acceso tanto a la herramienta ANTLR como a la biblioteca de tiempo de ejecución:
export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH"
Nota: asegúrese de que el Punto preceda a cualquier ruta para garantizar que la máquina virtual java no vea clases en su directorio de trabajo actual.
Alises se puede usar en Linux / MAC / Unix para simplificar los comandos utilizados:
alias antlr4='java -jar /usr/local/lib/antlr-4.5.3-complete.jar'
//or any directory where your jar is located
La configuración de notas en Windows para alias y la configuración de classpath puede ser más complicada, consulte aquí para obtener detalles más completos.
Accediendo a TestRig
Una vez que haya configurado su alias, puede configurar TestRig de la siguiente manera, nuevamente se recomienda usar un alias, ya que reduce la cantidad de tiempo requerido para realizar la acción:
alias grun='java org.antlr.v4.runtime.misc.TestRig'
Si no desea configurar un alias en Windows, puede acceder a TestRig ejecutando el siguiente comando en la misma ubicación que su directorio jar de 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
Para ejecutar TestRig en su gramática, puede pasar los parámetros para su gramática de la siguiente manera:
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'.
Construir gramática con Visual Parse Tree
Especificar la opción de línea de comando -gui
al ejecutar una gramática ANTLR en la plataforma de prueba dará como resultado una ventana emergente con una representación visual del árbol de análisis. Por ejemplo:
Dada la siguiente gramática:
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
;
Dado el siguiente archivo JSON:
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 siguiente sintaxis sintaxis de línea de comandos:
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
dará como resultado los archivos .java y .tokens generados, así como los archivos .class compilados:
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
y el siguiente árbol de análisis: