ANTLR
TestRig / grun
Поиск…
Настройка TestRig
ANTLR содержит средство тестирования в своей библиотеке времени исполнения, этот инструмент можно использовать для отображения информации, детализирующей, как выполняется синтаксический анализ, для соответствия ввода с определенными правилами в вашем файле грамматики.
Чтобы использовать этот инструмент, содержащийся в файле jar ANTLR, вы должны настроить путь к классам систем, чтобы разрешить доступ как к инструменту ANTLR, так и к библиотеке времени выполнения:
export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH"
Примечание. Убедитесь, что точка предшествует любому пути, чтобы гарантировать, что виртуальная машина Java не увидит классы в вашем текущем рабочем каталоге.
Alises можно использовать в Linux / MAC / Unix для упрощения используемых команд:
alias antlr4='java -jar /usr/local/lib/antlr-4.5.3-complete.jar'
//or any directory where your jar is located
Установка примечаний по окнам для псевдонимов и настройки класса пути может быть более сложной, см. Здесь более подробную информацию.
Доступ к TestRig
Как только вы настроите свой псевдоним, вы можете настроить TestRig следующим образом, снова используя псевдоним, рекомендуется уменьшить время, необходимое для выполнения действия:
alias grun='java org.antlr.v4.runtime.misc.TestRig'
Если вы не хотите настраивать псевдоним в окнах, вы можете получить доступ к TestRig, выполнив следующую команду в том же месте, что и каталог 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
Чтобы запустить TestRig на вашей грамматике, вы можете передать параметры для своей грамматики следующим образом:
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'.
Построение грамматики с визуальным деревом анализа
Указание -gui
командной строки -gui
при запуске грамматики ANTLR в тестовой установке приведет к появлению окна с визуальным представлением дерева синтаксического анализа. Например:
Учитывая следующую грамматику:
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
;
Учитывая следующий файл 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
}
Синтаксис синтаксиса синтаксиса:
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
приведет к сгенерированным файлам .java и .tokens , а также скомпилированным файлам .class :
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
и следующее дерево разбора: