【发布时间】:2012-08-28 02:51:38
【问题描述】:
我正在编写一个支持任意布尔表达式的语法。文法用来表示一个程序,稍后通过静态分析工具传递。静态分析工具有一定的局限性,所以我想应用以下重写规则:
严格不等式用 epsilon 逼近:
expression_a > expression_b -> expression_a >= expression_b + EPSILON
不等式使用“或”语句近似:
expression_a != expression_b -> expression_a > expression_b || expression_a < expression_b
有没有使用 ANTLR 的简单方法?目前我的语法是这样的:
comparison : expression ('=='^|'<='^|'>='^|'!='^|'>'^|'<'^) expression;
我不确定如何根据运算符应用不同的重写规则。如果运算符是 ("==", "="),我想保持原样,否则根据上面定义的规则递归转换它。
【问题讨论】: