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