【发布时间】:2009-09-11 13:30:10
【问题描述】:
我在这里查看计算源http://epaperpress.com/lexandyacc/
我在 calc.y 中看到这些行
| expr '+' expr { $$ = opr('+', 2, $1, $3); }
| expr '-' expr { $$ = opr('-', 2, $1, $3); }
| expr '*' expr { $$ = opr('*', 2, $1, $3); }
| expr '/' expr { $$ = opr('/', 2, $1, $3); }
| expr '<' expr { $$ = opr('<', 2, $1, $3); }
| expr '>' expr { $$ = opr('>', 2, $1, $3); }
有没有办法将它们分组?所以我可以写下面的东西吗?
| expr mathOp expr { $$ = opr(mathOp, 2, $1, $3); }
| expr cmpOp expr { $$ = opr(cmpOp, 2, $1, $3); }
注意:我正在使用野牛。
【问题讨论】:
-
为什么不一路走下去,把 mathOp/cmpOp 也结合起来呢?
-
@pax: cmp ops 返回布尔值,数学返回与它相同的类型(想想 C#。0!=false)。我认为它更容易分开。
-
为什么想到 C#?您使用的是 Bison,因此使用的是 C/C++。组合起来要容易得多,尤其是当您无论如何都要调用相同的函数时。