0

antlr4 中的以下规则不适用于有效输入:

testSimple
    : 'name' 'eq' WORD+?  .*? NEWLINE

WORD:  ~[ \t\f\r\n]+ ;

输入是:

name eq John Tom Allen notAName

错误是:

line 1:8 no viable alternative at input 'John'

我知道使用非贪婪运算符有一些限制,例如之后的“第一场比赛获胜”规则。而且这个规则特别模棱两可。但它不应该至少以一种方式匹配输入吗?

4

1 回答 1

1

尝试在条目规则的末尾使用显式 EOF 符号进行解析。例如:

startTestSimple
    :   testSimple EOF
    ;

如果没有明确的 EOF,算法在某些情况下可能无法找到可行的替代方案。问题 #118描述了一个存在问题的案例;不幸的是,已知解决方案的性能影响非常大,因此在我们提出替代解决方案之前,我们不会将其包含在 ANTLR 4 运行时中。

于 2013-05-30T03:28:24.817 回答