1

Python で ANTLR 文法を使用しています。以前は正常に動作していましたが、レクサーをインポートすると次のエラーが発生します。

ValueError: 不正なバージョン文字列 '!不明なバージョン!'

これを antlr3 実行可能ファイルまでさかのぼることができます。

$ antlr3 -version
ANTLR パーサー ジェネレーターのバージョン !不明なバージョン!

生成されたパーサーとレクサーは、バージョン文字列を除いて問題ないようです。Ubuntu のリポジトリ (12.04) が提供する antlr3 を使用しています。ANTLR を手動でインストールできると思いますが、これはすぐに使えるはずだと思います。私が見逃している既知のトリックはありますか、それともバグですか?

4

1 に答える 1

3

私は同じことをしようとしてきましたがantlr3、Ubuntuのリポジトリにある現在のパッケージはPythonランタイムサポートでは正しく機能しないと結論付けました。他のUbuntuパッケージpython-antlrは、ANTLR 2で動作するはずなので、さらに時代遅れになっていますantlr3。適切なPythonランタイムサポートと一緒に手動でANTLRをアンインストールしてインストールすることをお勧めします。

私はこれを自分で経験したばかりで、手順が少し散らばっていることに気付いたので、これがその方法の要約です。

  1. antlr3パッケージをアンインストールします。

    sudo apt-get purge antlr3
    
  2. 最新のANTLR3.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シェルを試してみてください。エラーは発生しないはずです。

  6. ここで、Javaにある対応するバージョンのANTLRをインストールする必要があります。このために、JVMがインストールされていることを確認してください(例:)sudo apt-get install default-jdk

  7. 最新のANTLR3jarを入手してください。

    wget http://www.antlr3.org/download/antlr-3.5-complete.jar
    
  8. jarをクラスパスに永続的に追加します(もちろん、必要な場所にjarを移動し、それに応じてパスを調整できます)。

    echo 'export CLASSPATH=~/antlr-3.5-complete.jar:$CLASSPATH' >> ~/.bashrc
    
  9. オプションですが、推奨:シェルエイリアスを追加してANTLR3を呼び出します。

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

それでおしまい!.bashrcを読み直した後、すべてが.bashで機能するかどうかを確認しますantlr3 -version。次のようなメッセージが表示されます。

ANTLR Parser Generator  Version 3.5
于 2013-02-14T19:15:05.350 に答える