我有一个简单的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 : [ \t\r\n]+ -> skip ;
答案 0 :(得分:4)
今天也进入这个问题:问题是testrig需要生成的java源代码。但是,由于你使用Python,除非你明确地运行antlr4
两次,否则你没有它:一次针对目标语言Python2(或3),一次针对-Dlanguage=java
。
请参阅this answer,建议先运行language=java
目标。然后评论the question itself来编译java文件。
为了完整性而忘记之前:确保设置了$CLASSPATH
env变量,使其包含点'.'
和antlr*.jar
文件的路径。 For example on 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
然后运行testrig:
> grun HelloWorld message
# or: java org.antlr.v4.gui.TestRig HelloWorld message -gui < input.txt