给定以下简单的回文语法,生成的解析器似乎接受 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,然后我执行以下 shell 脚本:
#!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