ANTLR
TestRig / grun
Suche…
Setup TestRig
ANTLR enthält ein Testtool in seiner Laufzeitbibliothek. Dieses Tool kann verwendet werden, um Informationen anzuzeigen, wie die Analyse ausgeführt wird, um die Eingabe mit definierten Regeln in Ihrer Grammatikdatei abzugleichen.
Um dieses Tool in der ANTLR-JAR-Datei verwenden zu können, müssen Sie Ihren Systemklassenpfad einrichten, um den Zugriff auf das ANTLR-Tool und die Laufzeitbibliothek zu ermöglichen:
export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH"
Hinweis: Stellen Sie sicher, dass der Punkt vor jedem Pfad steht, um sicherzustellen, dass die virtuelle Java-Maschine keine Klassen in Ihrem aktuellen Arbeitsverzeichnis anzeigt.
Alises kann unter Linux / MAC / Unix verwendet werden, um die verwendeten Befehle zu vereinfachen:
alias antlr4='java -jar /usr/local/lib/antlr-4.5.3-complete.jar'
//or any directory where your jar is located
Hinweis Setup auf Fenster für Aliase und Classpath - Setup kann komplizierter sein, siehe hier für mehr alle Informationen.
Zugriff auf TestRig
Nachdem Sie Ihren Alias eingerichtet haben, können Sie TestRig auf folgende Weise einrichten. Es wird erneut empfohlen, einen Alias zu verwenden, um die zur Durchführung der Aktion erforderliche Zeit zu reduzieren:
alias grun='java org.antlr.v4.runtime.misc.TestRig'
Wenn Sie unter Windows keinen Alias einrichten möchten, können Sie auf TestRig zugreifen, indem Sie den folgenden Befehl an demselben Ort ausführen wie Ihr ANTLR-JAR-Verzeichnis:
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
Um TestRig für Ihre Grammatik auszuführen, können Sie die Parameter wie folgt für Ihre Grammatik übergeben:
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'.
Grammatik mit Visual Parse Tree erstellen
Wenn Sie die -gui
-gui -gui
, wenn Sie eine ANTLR-Grammatik im Testgerät ausführen, wird ein Fenster mit einer visuellen Darstellung des Analysebaums -gui
. Zum Beispiel:
Angesichts der folgenden Grammatik:
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
;
Angesichts der folgenden JSON-Datei:
beispiel.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
}
Die folgende Syntax-Befehlszeilensyntax:
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
führt zu den generierten .java- und .tokens- Dateien sowie den kompilierten .class- Dateien:
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
und der folgende Parsebaum: