Sök…


Inställning TestRig

ANTLR innehåller ett testverktyg i sitt runtime-bibliotek, det här verktyget kan användas för att visa information som beskriver hur parsningen utförs för att matcha input mot definierade regler i din grammatikfil.

För att använda detta verktyg som finns i ANTLR-jarfilen, bör du ställa in din systemklassväg för att ge åtkomst till både ANTLR-verktyget och runtime-biblioteket:

export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH"

Obs: Se till att punkten föregår vilken väg som helst för att se till att den virtuella java-maskinen inte ser klasser i din nuvarande arbetskatalog.

Alises kan användas på Linux / MAC / Unix för att förenkla använda kommandon:

alias antlr4='java -jar /usr/local/lib/antlr-4.5.3-complete.jar' 
//or any directory where your jar is located

Observera att inställningar i windows för alias och klassvägsinställning kan vara mer komplicerade, se här för mer detaljerade detaljer.

Åtkomst till TestRig

När du har konfigurerat ditt alias kan du ställa in TestRig på följande sätt, igen rekommenderas att använda ett alias eftersom det minskar den tid som krävs för att utföra åtgärden:

alias grun='java org.antlr.v4.runtime.misc.TestRig'

Om du inte vill konfigurera ett alias i windows kan du komma åt TestRig genom att köra följande kommando på samma plats som din ANTLR-jar-katalog:

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

För att köra TestRig på din grammatik kan du skicka parametrarna för din grammatik så här:

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'.

Bygg grammatik med Visual Parse Tree

Att ange -gui kommandoradsalternativet när du kör en ANTLR-grammatik i testriggen kommer att leda till att ett fönster dyker upp med en visuell representation av analysträdet. Till exempel:

Följande 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
   ;

Följande JSON-fil:

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
}

Följande syntax-kommandoradssyntax:

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

kommer att resultera i de genererade .java- och .tokensfilerna samt de sammanställda .klassfilerna :

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

och följande parse träd:

ange bildbeskrivning här



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow