我有一个简单的HelloWorld.g4
语法(见底部)。我能够使用以下命令成功生成.py
文件:
set CLASSPATH=.;antlr-complete.jar;%CLASSPATH%
java org.antlr.v4.Tool -Dlanguage=Python2 HelloWorld.g4
现在我想使用TestRig
和-gui
标志来生成一个解析树GUI。我已经安装了ANTRL Python运行时(antlr4-python2-runtime-4.5.tar.gz
)。我可以打开一个Python解释器并输入:
import antlr4
,解释器识别antlr4
模块。
当我像这样运行TestRig
:
set CLASSPATH=.;antlr-complete.jar;%CLASSPATH%
java org.antlr.v4.gui.TestRig HelloWorld message -gui < input.txt
我得到这个错误信息:
Can't load HelloWorld as lexer or parser
从我的调查中,我发现了几个帖子列出了相同的错误信息。然而,在这些情况下,他们忘记在类路径中包含句点(.)。但是正如您所看到的,我已经将它包含在我的类路径中。
我不知道如何让TestRig
工作。注意:当目标语言是Java时,我没有问题让TestRig
使用相同的HelloWorld
语法。
如果您能提供任何帮助,我将不胜感激。
HelloWorld.g4
grammar HelloWorld;
options { language=Python; }
message : GREETING NAME;
GREETING : 'Hello' ;
NAME : [a-zA-Z]+ ;
WS : [ trn]+ -> skip ;
今天也遇到了这个问题:问题是测试需要生成java源代码。但是因为你使用的是Python,所以除非你显式地运行两次antlr4
,否则你不会有它:一次用于目标语言Python2(或3),一次用于-Dlanguage=java
。
请参阅建议首先运行language=java
目标的答案。然后对问题本身进行注释来编译java文件。
为了完整起见,在它被遗忘之前:确保设置了$CLASSPATH
env变量,使其包含点'.'
和antlr*.jar
文件的路径。例如在unix上:
export CLASSPATH=".:/<Mydirectory>/antlr-4.2.2-complete.jar:$CLASSPATH"
这里是一步一步的我猜你必须做什么一旦$CLASSPATH
设置正确:
编译java:
> antlr4 -Dlanguage=Java HelloWorld.g4
# or: java org.antlr.v4.Tool -Dlanguage=Java HelloWorld.g4
请注意,我的语法文件中有options { language=Python3 }
,而-D
覆盖没有像预期的那样工作。因此,我删除了选项块,现在在命令行上指定语言目标。
然后将*.java
文件编译成*.class
文件:
> javac -g *.java
然后运行测试:
> grun HelloWorld message
# or: java org.antlr.v4.gui.TestRig HelloWorld message -gui < input.txt