ANTRL4:无法让Python ANTLR生成解析树的图形



我有一个简单的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

相关内容

  • 没有找到相关文章

最新更新