2017-11-07 3 views
0

PHP7の新しいターゲットを作成しようとすると、ANTLR4(ANOTR以外の言語認識ツール)に問題があります。ANTLR:コード生成対象にはANTLR 4.7が必要です。現在のANTLR 1.0で読み込むことができません

まず私が使用していますDebianのLinuxボックスから

apt-get remove --purge antlr antlr-doc libantlr3-runtime-java libantlr-java 

でインストールANTLR3パッケージをパージしました。

次に、プロジェクトANTLR4をgithubからforkしてクローンし、新しいランタイムPHP7をプログラムし、新しいクラスPHP7TargetをTargetクラスのサブクラスとして作成し、フィッティングPHP7.stgを書きました。

は、その後、私は

export CLASSPATH=~/.m2/repository/org/antlr/antlr4/4.7.1-SNAPSHOT/antlr4-4.7.1-SNAPSHOT-complete.jar:$CLASSPATH 
cd ~/.m2/repository/org/antlr/antlr4/4.7.1-SNAPSHOT 
java -jar ./antlr4-4.7.1-SNAPSHOT-complete.jar /tmp/T.g4 -Dlanguage=PHP7 

と私はエラー

error(35): PHP7 code generation target requires ANTLR 4.7; it can't be loaded by the current ANTLR 1.0 
に走ったANTLR4を実行しようと
grammar T; 

a 
    : 'b' #alt1 
    | 'c' #alt2 
    ; 

b : 'x' | 'y' {} ; 

e : e '*' e 
    | 'foo' 
    ; 

T.g4

文法を使用して

cd antlr4 
export MAVEN_OPTS=-Xmx1G 
mvn clean  
mvn -DskipTests=true install 

でANTLR4を再構築しました

エラーは2回表示されます。

-Dlanguage = PHP7オプションを指定しないと、ANTLRはジョブを実行して文法のjavaファイルを作成します。

残念ながら、私はエラーメッセージを理解していません。古いANTLRバージョンがパッケージで使用されているようで、この場合ANTLRをバージョン4にアップグレードする方法はわかりません。

誰でも助けて、私のエラーがどこにあるのか教えてください。

答えて

0

ソリューション:ファイルで

PHP7target.java GETVERSION(と呼ばれる方法)があります。この関数は、ランタイムのバージョン(つまり「1.0」)ではなく、ANTLR(「4.7」)のバージョンを返します。