我正在编写一个支持任意布尔表达式的语法。文法用来表示一个程序,稍后通过静态分析工具传递。静态分析工具有一定的局限性,所以我想应用以下重写规则:
严格不等式用 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;
我不确定如何根据运算符应用不同的重写规则。如果运算符是 ("==", "<=" 或 ">="),我想保持原样,否则根据上面定义的规则递归转换它。