Antlr 4解析器规则,为什么';grun';受无关规则的影响?

Antlr 4解析器规则,为什么';grun';受无关规则的影响?,antlr,antlr4,Antlr,Antlr4,出于测试目的,我定义了以下愚蠢的语法: grammar Test; x: ab 'b' ab EOF; y: ab+ EOF; ab: 'a' 'b'?; 我的执行如下: $ rm -f Test*.[^g]*; antlr Test.g && javac Test*.java \ && echo -n "abab" | grun Test RULE -tree 对于这三条规则,我得到以下输出: RULE = x --> (x (ab

出于测试目的,我定义了以下愚蠢的语法:

grammar Test;
x: ab 'b' ab EOF;
y: ab+ EOF;
ab: 'a' 'b'?;
我的执行如下:

$  rm -f Test*.[^g]*; antlr Test.g && javac Test*.java \
   && echo -n "abab" | grun Test RULE -tree
对于这三条规则,我得到以下输出:

RULE = x   -->    (x (ab a) b (ab a b) <EOF>)
RULE = y   -->    (y (ab a b) (ab a b) <EOF>)
RULE = ab  -->    (ab a b)
x
匹配的输出没有改变。但是
ab
的输出确实如此,尽管这个规则在任何方面都不依赖于
y

有人能解释发生了什么事吗?它是某种“未定义的行为”,一个bug还是我完全错过的东西?根据ANTLR 4.5.1进行试验

编辑:打开,让我们看看官方的回应是什么

RULE = x   -->    (x (ab a) b (ab a b) <EOF>)
RULE = ab  -->    (ab a)