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

时间:2015-08-05 19:25:34

标签: java python antlr antlr4

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

1 个答案:

答案 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