次の単純な回文文法を考えると、結果のパーサーは回文だけでなく、a と b の任意の組み合わせを受け入れるように見えます。[まあ、開始記号を間違って指定したときはそうでした。今、私はそれを修正するために改訂しましたが、それでも望ましい動作が得られないため、実行する正確なコマンドも追加しています] [そして、提案された変更と結果として生じる問題を表示して、再度改訂しました。]
// test1.g4
grammar test1;
palindrome
: 'z' entry EOF ;
entry
: 'a' entry 'a'
| 'b' entry 'b'
| 'a'
| 'b'
|
;
WS : [ \t\r\n]+ -> skip ;
この正確な test1.g を指定して、次のシェル スクリプトを実行します。
#!bash
# script for running ANTLR tests
ANTLR4="java -jar /usr/local/lib/antlr-4.1-complete.jar"
$ANTLR4 test1.g4
echo "grammar compiled"
x=/usr/local/lib/antlr-4.1-complete.jar
javac -classpath $x *.java 2>&1
echo "parser compiled"
#java -cp $x:. org.antlr.v4.runtime.misc.TestRig test1 start -tokens -trace -diagnost
java -cp $x:. org.antlr.v4.runtime.misc.TestRig test1 palindrome -tokens
そして、入力「aab」で実行すると、次のようになります。
aab
[@0,0:0='a',<2>,1:0]
[@1,1:1='a',<2>,1:1]
[@2,2:2='b',<1>,1:2]
[@3,4:3='<EOF>',<-1>,2:0]
No method for rule palindrome or it has arguments