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