コンパイラ

抽象構文木(AST)の特徴として正しいものはどれか。

  1. Aソースコードの括弧や区切り記号まで、すべてを節として残している
  2. B意味に関係しない記号を省き、演算子の優先順位を木の形で表している
  3. CCPUの命令と1対1に対応しており、そのまま実行できる
答えと解説を見る

正解:B. 意味に関係しない記号を省き、演算子の優先順位を木の形で表している

構文解析では、文法の規則どおりに括弧や区切り記号まで含めた木(具象構文木)ができますが、その後の処理には不要な情報が多く含まれます。抽象構文木は、プログラムの意味に必要な演算や文だけを節にした木で、例えば (a + b) * c では、掛け算の節の下に足し算の節がくることで、括弧がなくても計算の順番が分かります。CPUの命令に対応しているのは、さらに後の段階で生成するコードです。

  • A. 括弧まで残すのは具象構文木の方です。
  • B. 正しい。不要な記号を省き、優先順位を木の形で表します。
  • C. CPUの命令に対応するのは後の段階のコードです。
この分野を解く 分野ページへ

コンパイラのほかの問題

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