ANTLR
TestRig / grun
Ricerca…
Setup TestRig
ANTLR contiene uno strumento di test nella sua libreria di runtime, questo strumento può essere utilizzato per visualizzare informazioni dettagliate su come viene eseguita l'analisi per confrontare l'input con le regole definite nel file di grammar.
Per utilizzare questo strumento contenuto nel file jar ANTLR, è necessario configurare il percorso di classe dei sistemi per consentire l'accesso sia allo strumento ANTLR sia alla libreria di runtime:
export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH"
Nota: assicurarsi che il punto preceda qualsiasi percorso per garantire che la macchina virtuale java non visualizzi le classi nella directory di lavoro corrente.
Gli Alise possono essere utilizzati su Linux / MAC / Unix per semplificare i comandi usati:
alias antlr4='java -jar /usr/local/lib/antlr-4.5.3-complete.jar'
//or any directory where your jar is located
Notare che l'installazione su windows per alias e l'installazione del classpath potrebbe essere più complicata, vedere qui per maggiori dettagli.
Accesso a TestRig
Una volta impostato il proprio alias, è possibile configurare TestRig nel modo seguente, utilizzando nuovamente un alias, in quanto riduce il tempo necessario per eseguire l'azione:
alias grun='java org.antlr.v4.runtime.misc.TestRig'
Se non si desidera impostare un alias su Windows, è possibile accedere a TestRig eseguendo il seguente comando nella stessa posizione della directory 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
Per eseguire TestRig sulla tua grammatica puoi passare i parametri per la tua grammatica in questo modo:
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'.
Costruisci la grammatica con Visual Parse Tree
Se si specifica l'opzione della riga di comando -gui
quando si esegue una grammatica ANTLR nell'impianto di test, verrà visualizzata una finestra con una rappresentazione visiva dell'albero di analisi. Per esempio:
Data la seguente grammatica:
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
;
Dato il seguente file 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 seguente sintassi della riga di comando della sintassi:
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
genererà i file .java e .tokens generati, così come i file .class compilati:
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
e il seguente albero di analisi: