コンパイラ

制御フローグラフで、節と矢印が表しているものの組み合わせとして正しいものはどれか。

  1. A節は変数、矢印は変数の値を代入した順番
  2. B節は基本ブロック、矢印はブロック間の分岐や移り変わり
  3. C節は関数、矢印はファイルどうしの読み込みの関係
答えと解説を見る

正解:B. 節は基本ブロック、矢印はブロック間の分岐や移り変わり

制御フローグラフは、基本ブロックを節、あるブロックの実行のあとに続く可能性のあるブロックへの移り変わり(条件分岐の両方の行き先や、そのまま次のブロックへ進む流れ)を矢印として表したグラフです。後ろ向きの矢印からループを見つけたり、変数の値がどこからどこへ届くかを解析したりするのに使われます。関数どうしの呼び出し関係は別のコールグラフで表し、ファイルの読み込みの関係とは関係ありません。

  • A. 変数と代入の順番を表すグラフではありません。
  • B. 正しい。基本ブロックとその間の移り変わりを表します。
  • C. 関数の呼び出しは別のコールグラフで表します。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. SSA形式の中間表現の特徴として正しいものはどれか。
  2. 上のコードをSSA形式にすると、if文の後で「x3 = φ(x1, x2)」のような式が入る。このφ関数の働きとして正しいものはどれか。
  3. コンパイラの定数畳み込みの例として正しいものはどれか。
  4. 上のコードに定数伝播と定数畳み込みを繰り返し行うと、最終的にどのようなコードになるか。
  5. 上のコードに共通部分式の削除を行ったときの説明として正しいものはどれか。