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