2013-05-29 31 views
0

在antlr4下面的规则不会为一个有效的输入工作:ANTLR nongreedy经营者不匹配的有效输入

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' 

我知道使用nongreedy运算符有一些限制,比如之后的“第一场比赛胜利”规则。这个规则特别含糊。但是,它不应该至少以一种方式与输入相匹配吗?

回答

1

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

startTestSimple 
    : testSimple EOF 
    ; 

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

+0

试过了。仍然得到相同的错误。 –