我正在使用Python的ANTLR语法。它曾经工作正常,但现在我导入lexer时出现以下错误:
ValueError:错误版本字符串'!未知版本!'
我可以追溯到antlr3可执行文件:
$ antlr3 -version
ANTLR分析器生成器版本!未知版本!
生成的解析器和词法分析器似乎很好,除了版本字符串。我正在使用Ubuntu的存储库(12.04)提供的antlr3。我想我可以手动安装ANTLR,但我认为这应该是开箱即用的 - 也许我在某处错误配置了什么?是否有一个我失踪的已知技巧,或者这是一个错误?
答案 0 :(得分:3)
我一直在努力做同样的事情,并得出结论,Ubuntu存储库中的当前antlr3
包在Python运行时支持下无法正常工作。另一个Ubuntu包python-antlr
更加过时,因为它应该与ANTLR 2一起使用。我建议您卸载antlr3
并手动安装ANTLR以及正确的Python运行时支持。
由于我自己刚刚完成了这项工作,并发现指令有点散乱,所以这里有一个如何做的总结。
卸载antlr3包:
sudo apt-get purge antlr3
获取最新的ANTLR 3.x的完整Java二进制文件:
wget http://www.antlr3.org/download/antlr-3.5.tar.gz
准备安装Python运行时:
tar xzf antlr-3.5.tar.gz
cd antlr3-antlr-3.5/runtime/Python
在调用安装脚本之前,必须修改版本号以指向可在线获取的版本号。您可以通过修改ez_setup.py
并将DEFAULT_VERSION = "0.6c5"
更改为DEFAULT_VERSION = "0.6c11"
来完成此操作。
现在您应该可以使用以下命令安装Python运行时:
sudo python setup.py install
要查看它是否有效,请将import antlr3
放入Python shell中。你不应该得到任何错误。
现在,您必须安装相应版本的ANTLR,这是Java版本。为此,请确保已安装JVM(例如sudo apt-get install default-jdk
)。
获取最新的ANTLR 3 jar:
wget http://www.antlr3.org/download/antlr-3.5-complete.jar
永久性地将jar添加到您的类路径中(当然,您可以将它移动到您想要的位置并相应地调整路径):
echo 'export CLASSPATH=~/antlr-3.5-complete.jar:$CLASSPATH' >> ~/.bashrc
可选,但建议:添加shell别名以调用ANTLR 3:
echo "alias antlr3='java -jar ~/antlr-3.5-complete.jar'" >> ~/.bashrc
就是这样!重新阅读.bashrc后,看看是否所有内容都适用于antlr3 -version
。您应该收到如下消息:
ANTLR Parser Generator Version 3.5