在这里看不到我的错误。给出一个简单的回文语法:
// test1.g
grammar test1;
start
: 'a' start 'a'
| 'b' start 'b'
| 'a'
| 'b'
|
;
WS : [ \t\r\n]+ -> skip ;
当给定输入aabbbaa
时,生成的解析器报告:
line 1:5 mismatched input 'a' expecting 'b'
但它对我来说似乎是合法的输入。 Antlr v4.1。
答案 0 :(得分:1)
这里的问题是您没有包含以下规则:
entry : start EOF;
通过省略EOF
,您可以点击bug #118,这可以在某些对堆栈敏感的解析情况中显示(决策是LL,而不是SLL)。修复此问题对性能的影响是巨大的(不能被低估),所以在我们找到解决问题的另一种方法之前,您需要了解这一点,并确保开始使用以明确的{{结尾的规则进行解析1}}符号。