相比之下,解决相互递归问题

时间:2011-12-13 00:24:14

标签: antlr

在这种情况下如何解决相互递归?

value : comparison | 'A' | 'B' | 'C';

comparison : value comparison_operator value;

2 个答案:

答案 0 :(得分:1)

嗯,问题是它的含糊不清。对于A <op> B <op> C之类的输入,您希望它做什么,其中<op>与您的comparison_operator规则匹配?如果你想要相当于A <op> (B <op> C)那么它很容易:

primary: 'A' | 'B' | 'C';
comparison: primary | primary comparison_operator comparison;
value: comparison;

如果你想要别的东西,那就变得更复杂了。

答案 1 :(得分:0)

修正如下:

atom : variable | literal | call | constructor | (PARAM_START comparison PARAM_END);

comparison : (atom comparison_operator atom);

value : atom | comparison;