在这种情况下如何解决相互递归?
value : comparison | 'A' | 'B' | 'C';
comparison : value comparison_operator value;
答案 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;