4.1解析器声称“不匹配的输入”与简单的回文语法

时间:2013-07-25 23:54:20

标签: grammar antlr4 palindrome

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

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

1 个答案:

答案 0 :(得分:1)

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

entry : start EOF;

通过省略EOF,您可以点击bug #118,这可以在某些对堆栈敏感的解析情况中显示(决策是LL,而不是SLL)。修复此问题对性能的影响是巨大的(不能被低估),所以在我们找到解决问题的另一种方法之前,您需要了解这一点,并确保开始使用以明确的{{结尾的规则进行解析1}}符号。