コンパイラ

コンパイラの内部で、ソース言語にもCPUにも依存しない中間表現(IR)を使う主な利点はどれか。

  1. A中間表現を使うと、ソースコードを読まずにコンパイルできるようになるから
  2. B中間表現はCPUがそのまま実行できるので、機械語の生成が不要になるから
  3. C言語ごとの前半とCPUごとの後半を分けられ、最適化も共通に使えるから
答えと解説を見る

正解:C. 言語ごとの前半とCPUごとの後半を分けられ、最適化も共通に使えるから

M種類の言語とN種類のCPUに対応するとき、組み合わせごとにコンパイラを作るとM×N個必要ですが、共通の中間表現を介せば、言語から中間表現への前半(フロントエンド)M個と、中間表現からCPUへの後半(バックエンド)N個で済みます。最適化の多くも中間表現の上で一度作れば、すべての言語とCPUで使えます。中間表現はCPUがそのまま実行できるものではなく、最後に機械語へ変換する必要があります。

  • A. ソースコードは必ず読む必要があります。
  • B. 中間表現はCPUが直接実行できず、機械語への変換が必要です。
  • C. 正しい。前半と後半を分け、最適化を共通化できます。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 基本ブロックの説明として正しいものはどれか。
  2. 制御フローグラフで、節と矢印が表しているものの組み合わせとして正しいものはどれか。
  3. SSA形式の中間表現の特徴として正しいものはどれか。
  4. 上のコードをSSA形式にすると、if文の後で「x3 = φ(x1, x2)」のような式が入る。このφ関数の働きとして正しいものはどれか。
  5. コンパイラの定数畳み込みの例として正しいものはどれか。