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