3

式の演算子の優先順位を正しく考慮して、AST を生成する基本的なコンパイラを作成しました。ただし、コード生成を実行して C++ コードを生成する場合、括弧の使用方法がわかりません。

この式の場合:

A - (B - c)

以下のAST:

   -
  / \
 A   -
    / \
   B   C

かっこを含む前の式を正しく生成する必要がありますが、2 番目の演算子が (たとえば) 加算演算子の場合、かっこは不要です。読みやすさを向上させるために必要な場合にのみ使用することをお勧めします。

この種の動作を指示するルールと、括弧をいつ使用するかを知る方法はありますか? プラスとマイナスは、ほとんどの言語で同じレベルの優先順位を持っています。これをすべての演算子で機能させたいと考えています。

4

2 に答える 2

4

歴史的に、彼らはこれを「きれいな印刷」と呼んでいます。それに「優先順位」を加えてグーグルで検索すると、役立つ例がいくつか見つかるかもしれません。

非公式に言えば、部分式に再帰するとき、その優先順位を現在の式と比較するというのが基本的な考え方だと思います。それより低い場合は、括弧が必要です。そうでなければ、あなたはしません。結合性は、同様のチェックを行うことで処理できます。部分式が親と同じ優先順位を持つ場合、結合性に従って間違った側にある場合は括弧が必要です。

于 2010-11-30T22:28:31.780 に答える
2

優先順位の高い操作がツリーの下位にある場合は、括弧で囲む必要はありません。

ただし、操作の優先順位を知るだけでは十分ではありません。また、操作の結合性を知る必要があります。これにより、同じ優先順位の操作を適切にグループ化できます。たとえば、減算は結合性のままなので、A-B-Cに等しいが(A-B)-C、には等しくないA-(B-C)

すべての操作の優先順位と関連性の表全体を書き留めて、式を生成するときにそれを参照してください。

于 2010-11-29T20:10:16.283 に答える