ANTLR4 中的 EOF 行为

EOF behaviour in 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 ;

我收到一个错误 "line 1:11 no viable alternative at input '< EOF>"。这里发生了什么?我正在使用 ANTLR4 的 intellij 插件进行规则测试。

经 ANTLR4 合著者 Sam Harwell 确认,这是 ANTLR4 中的错误。可以在这里追踪:https://github.com/antlr/antlr4/issues/118

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