Antlr 4解析器规则,为什么输出'grun'受不相关规则的影响?

时间:2015-08-22 22:02:57

标签: 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 a) b (ab a b) <EOF>)
RULE = y   -->    (y (ab a b) (ab a b) <EOF>)
RULE = ab  -->    (ab a b)

这看起来像我的预期:规则ab不会消耗整个输入,但会尝试尽可能多地匹配。

现在我转到语法文件并注释掉规则y。我为其余两条规则重复grun次执行:

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

x匹配的输出没有变化。但ab的输出确实如此,但此规则不依赖于y

有谁可以解释发生了什么?它是一些“未定义的行为”,一个我完全错过的错误?在ANTLR 4.5.1上测试。

编辑:已打开an issue,让我们看看官方回复是什么。

0 个答案:

没有答案