質問

ASTを生成する基本的なコンパイラを作成しました。これは、表現のオペレーターの優先順位を正しく考慮しています。ただし、C ++コードを作成するためにコード生成を実行するとき、ブラケットの使用方法がわかりません。

この表現のために:

A - (B - c)

以下のAST:

   -
  / \
 A   -
    / \
   B   C

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

この種の動作を決定するルールと、括弧を使用するタイミングを知る方法はありますか。プラスとマイナスは、ほとんどの言語で同じレベルの優先順位を持っているので、すべてのオペレーターにこれを機能させたいと思います。

役に立ちましたか?

解決

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

非公式には、基本的なアイデアは、サブエクスペッションに再発すると、その優先順位を現在の式と比較することです。低い場合は、括弧が必要です。そうでなければ、あなたはしません。同様のチェックを実行することで連想性を処理できます。 同じ 親としての優先順位は、関連性に応じて間違った側にある場合、括弧が必要です。

他のヒント

ツリーの優先順位が高い操作が低い場合は、括弧内に入れる必要はありません。

ただし、操作の優先順位を知るだけでは十分ではありません。あなたも知る必要があります 関連性 操作の。平等な優先順位の操作を適切にグループ化できます。たとえば、減算は連想的に残されているので、そう A-B-C に等しい (A-B)-C, 、しかしそうではありません A-(B-C).

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top