0

在这里看不到我的错误。给定一个简单的回文语法:

// 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'

但这对我来说似乎是合法的输入。蚂蚁v4.1。

4

1 回答 1

1

这里的问题是您没有包含如下规则:

entry : start EOF;

通过省略EOF,您遇到了一个错误 #118,它可以在某些堆栈敏感的解析情况下表现出来(决​​定是 LL,而不是 SLL)。修复此问题对性能的影响是巨大的(不能低估),因此在我们找到解决问题的另一种方法之前,您需要注意这一点,并确保从以显式EOF符号结尾的规则开始解析。

于 2013-07-26T04:06:46.720 回答