我正在使用我的教授提供的样本来测试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
正如rici在评论中已经指出的那样,在令牌输出中获取实际的规则名称而不是其编号是一项功能,不必担心。
为了最终获得(greeting Hello World !)
输出,您需要在-tree
之后添加-tokens
标志。