任意のブール式をサポートする文法を書いています。文法は、後で静的分析ツールを通過するプログラムを表すために使用されます。静的解析ツールには一定の制限があるため、次の書き換えルールを適用したいと考えています。
厳密な不等式はイプシロンで近似されます。
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;
演算子が何であるかに応じて、異なる書き換えルールを適用する方法がわかりません。上記で定義されたルールに従って、演算子が ("=="、"<=" または ">=") の場合はツリーをそのままにし、それ以外の場合は再帰的に変換したいと考えています。