ANTRL4:无法获取Python ANTLR来生成解析树的图形

我有一个简单的HelloWorld.g4语法(见底部)。 我能够使用以下方法成功生成.py文件:

 set CLASSPATH=.;antlr-complete.jar;%CLASSPATH% java org.antlr.v4.Tool -Dlanguage=Python2 HelloWorld.g4 

现在我想使用带有-gui标志的-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 

根据我的调查,我发现了几个列出相同错误消息的post。 但是,在这些情况下,他们忘记在类路径中包含句点(。)。 但正如您所看到的,我已将其包含在我的类路径中。

我没有关于如何让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 ; 

今天也进入这个问题:问题是testrig需要生成的java源代码。 但是,由于你使用Python,除非你明确地运行两次antlr4 ,否则你没有它:一次用于目标语言Python2(或3),一次用于-Dlanguage=java

请参阅此答案 ,建议首先运行language=java target。 然后对问题本身的评论来编译java文件。

并且为了完整性而忘记之前:确保设置了$CLASSPATH env变量,使其包含一个点'.'antlr*.jar文件的路径。 例如在unix上 :

 export CLASSPATH=".://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 override无法按预期工作。 所以我删除了选项块,并在命令行中指定语言目标。

然后将*.java文件编译为*.class文件:

 > javac -g *.java 

然后运行testrig:

 > grun HelloWorld message # or: java org.antlr.v4.gui.TestRig HelloWorld message -gui < input.txt