Почему ANTLR неправильно печатает набор токенов? - PullRequest
0 голосов
/ 08 мая 2020

Я проверяю, правильно ли работает ANTLR-4.7.1, используя образец, предоставленный моим профессором, чтобы сопоставить эти результаты для того же печатного набора токенов:

% java  -jar ./antlr-4.7.1-complete.jar HelloExample.g4
% javac  -cp antlr-4.7.1-complete.jar HelloExample*.java
% java -cp .:antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig HelloExample greeting helloworld.greeting -tokens
[@0,0:4='Hello',<1>,1:0]
[@1,6:10='World',<3>,1:6]
[@2,12:12='!',<2>,1:12]
[@3,14:13='<EOF>',<-1>,2:0]
(greeting Hello World !)

Однако, после перехода к третьей команде вместо этого мой вывод был:

[@0,0:4='Hello',<'Hello'>,1:0]
[@1,6:10='World',<Name>,1:6]
[@2,12:12='!',<'!'>,1:12]
[@3,13:12='<EOF>',<EOF>,1:13]

В моем выводе нет чисел внутри <>, которые, как я считаю, должны быть определены из файла HelloExample.tokens, содержащего:

Hello=1
Bang=2
Name=3
WS=4
'Hello'=1
'!'=2

Я не получаю информации об ошибке, и кажется, что antlr сгенерировал все нужные мне файлы, поэтому я не знаю, где мне искать, чтобы решить эту проблему, пожалуйста, помогите. И я не уверен, что это будет полезно, но мой рабочий каталог начинался с helloworld.greeting и HelloExample.g4, а последний каталог теперь содержит

helloworld.greeting
HelloExample.g4
HelloExample.interp
HelloExample.tokens
HelloExampleBaseListener.class
HelloExampleBaseListener.java
HelloExampleLexer.class
HelloExampleLexer.inerp
HelloExampleLexer.java
HelloExampleLexer.tokens
HelloExampleListener.class
HelloExampleListener.java
HelloExampleParser$GreetingContext.class
HelloExampleParser.class
HelloExampleParser.java

1 Ответ

0 голосов
/ 08 мая 2020

Как rici уже указывал в комментариях, получение фактических имен правил вместо их номеров в выводе токена является функцией и не должно вас беспокоить.

Чтобы получить вывод (greeting Hello World !) в конце вы захотите добавить флаг -tree после -tokens.

...