Compiler construction ANTLR4中的EOF行为

Compiler construction ANTLR4中的EOF行为,compiler-construction,antlr4,Compiler Construction,Antlr4,对于给定的输入: hello hello 和语法: grammar test; foo: bar ; bar : 'hello' bar | EOF; WS : [ \t\r\n]+ -> skip ; 我得到了规则栏的有效解析树 但当我删除foo规则时: grammar test; bar : 'hello' bar | EOF; WS : [ \t\r\n]+ -> skip ; 我得到一个错误“第1:11行输入“”没有可行的替代方案”。这是怎么回事?我

对于给定的输入:

hello hello
和语法:

grammar test;

foo: bar ;
bar   : 'hello' bar | EOF;

WS  : [ \t\r\n]+ -> skip ;
我得到了规则栏的有效解析树

但当我删除foo规则时:

grammar test;

bar   : 'hello' bar | EOF;

WS  : [ \t\r\n]+ -> skip ;

我得到一个错误“第1:11行输入“”没有可行的替代方案”。这是怎么回事?我正在使用ANTLR4的intellij插件进行规则测试。

正如ANTLR4的合著者Sam Harwell所确认的,这是ANTLR4中的错误。可在此处进行跟踪:


解决方法如问题中所建议的(使用额外的根规则foo)。

闻起来像个bug:-\它看起来真像一只虫子。我发现他们在EOF和第一条规则上有问题,就像三年前一样。我想这是很难修复的。这是另一个@xprog修复的例子,它不太难。在不使ANTLR非常慢的情况下修复它,结果是非常困难的。