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)