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'
我知道使用nongreedy运算符有一些限制,比如之后的'第一场比赛获胜'规则。规则特别含糊不清。但它至少应该至少在一种方式上与输入相匹配吗?
答案 0 :(得分:1)
尝试使用输入规则末尾的显式EOF符号进行解析。例如:
startTestSimple
: testSimple EOF
;
如果没有明确的EOF,算法可能无法在某些情况下找到可行的替代方案。 Issue #118描述了一个问题;遗憾的是,已知解决方案的性能影响非常大,因此在我们提出替代解决方案之前,我们不会将其包含在ANTLR 4运行时中。