コンパイラ

多くのプログラミング言語の文法を表すのに使われ、構文解析の基礎になる文法の種類はどれか。

  1. A正規文法だけ
  2. B自然言語の文法
  3. C文脈自由文法
答えと解説を見る

正解:C. 文脈自由文法

括弧の入れ子や、if文の中にさらにif文がある構造は、正規表現では表せません。プログラミング言語の文法の多くは、「式 → 式 + 項」のような書き換えの規則の集まりである文脈自由文法で表され、構文解析はこの文法にもとづいて行われます。上から規則を当てはめていくLL法や、下から組み立てていくLR法などの解析方法があり、文法から解析器を自動で作る道具もあります。正規文法は字句解析向けで、入れ子の構造は扱えません。

  • A. 正規文法では括弧の入れ子のような構造を表せません。
  • B. プログラミング言語は自然言語の文法では定義しません。
  • C. 正しい。構文解析は文脈自由文法にもとづきます。
この分野を解く 分野ページへ

コンパイラのほかの問題

  1. 式 2 + 3 * 4 の抽象構文木の形として正しいものはどれか。
  2. 中間表現の一つである三番地コードの特徴として正しいものはどれか。
  3. レジスタ割り当ての準備として行う生存区間(ライブネス)の解析で求めるものはどれか。
  4. ある関数の中で、同時に生きている値の数が最も多いところで5個だった。干渉グラフがこの5個以外の制約を生まない単純な場合、すべての値をスピルなしでレジスタに置くには、レジスタが少なくとも何個必要か。
  5. 繰り返し回数が100回のループを、本体を4回分並べるループ展開で書き換えると、回数の判定と分岐は何回になるか。(100は4で割り切れるものとする)