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

ANTRL4: Can't get Python ANTLR to generate a graphic of the parse tree

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

set CLASSPATH=.;antlr-complete.jar;%CLASSPATH%

java org.antlr.v4.Tool -Dlanguage=Python2 HelloWorld.g4

现在我想使用 TestRig-gui 标志来生成解析树 GUI。我安装了 ANTRL Python 运行time (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 ; 

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

参见 this answer which suggests to run the language=java target first. Then the comment on 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

然后 运行 测试装置:

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