1

我在 Python 中使用 ANTLR 语法。它曾经工作正常,但现在我在导入词法分析器时收到以下错误:

ValueError:错误的版本字符串'!未知版本!'

我可以将其追溯到 antlr3 可执行文件:

$ antlr3 -version
ANTLR 解析器生成器版本!未知版本!

生成的解析器和词法分析器看起来很好,除了版本字符串。我正在使用 Ubuntu 存储库(12.04)提供的 antlr3。我想我可以手动安装 ANTLR,但我认为这应该是开箱即用的——也许我在某个地方配置错误?我是否缺少已知的技巧,或者这是一个错误?

4

1 回答 1

3

我一直在尝试做同样的事情,并得出结论认为antlr3Ubuntu 存储库中的当前包不能与 Python 运行时支持一起正常工作。另一个 Ubuntu 软件包python-antlr更加过时,因为它应该与 ANTLR 2 一起使用。我建议您antlr3手动卸载和安装 ANTLR,同时提供正确的 Python 运行时支持。

由于我自己刚刚经历过这个,发现说明有点分散,这里总结一下如何做。

  1. 卸载antlr3包:

    sudo apt-get purge antlr3
    
  2. 获取最新 ANTLR 3.x 的完整 Java 二进制文件:

    wget http://www.antlr3.org/download/antlr-3.5.tar.gz
    
  3. 准备安装 Python 运行时:

    tar xzf antlr-3.5.tar.gz
    cd antlr3-antlr-3.5/runtime/Python
    
  4. 在调用安装脚本之前,您必须修补版本号以指向在线可用的内容。您可以通过编辑ez_setup.py并更改DEFAULT_VERSION = "0.6c5"DEFAULT_VERSION = "0.6c11".

  5. 现在您应该可以使用以下命令安装 Python 运行时:

    sudo python setup.py install
    

    要查看它是否有效,请尝试import antlr3使用 Python shell。你不应该得到任何错误。

  6. 现在,您必须正确安装相应版本的 ANTLR,它是 Java 语言。为此,请确保您安装了 JVM(例如sudo apt-get install default-jdk)。

  7. 获取最新的 ANTLR 3 jar:

    wget http://www.antlr3.org/download/antlr-3.5-complete.jar
    
  8. 将 jar 永久添加到您的类路径中(当然,您可以将其移动到您想要的位置并相应地调整路径):

    echo 'export CLASSPATH=~/antlr-3.5-complete.jar:$CLASSPATH' >> ~/.bashrc
    
  9. 可选,但推荐:添加一个 shell 别名来调用 ANTLR 3:

    echo "alias antlr3='java -jar ~/antlr-3.5-complete.jar'" >> ~/.bashrc
    

而已!重新阅读 .bashrc 后,看看是否一切都适用于antlr3 -version. 您应该收到一条消息,例如:

ANTLR Parser Generator  Version 3.5
于 2013-02-14T19:15:05.350 回答