【ぶんみゃくじゆうぶんぽう】

文脈自由文法 とは?

💡 前後を気にせず「この形はこう書き換えてOK」のルールブック
📌 このページのポイント
文脈自由文法の生成規則 生成規則 <式> ::= <式> + <項> <項> ::= <項> * <因子> <因子> ::= 数字 | ( <式> ) <数字> ::= 0 | 1 | ... | 9 適用 構文木 + 3 5 チョムスキー階層 正規文法 (型3) 文脈自由文法 (型2) 文脈依存文法 (型1)
文脈自由文法のイメージ
ひよこ ひよこ

文脈自由文法って何なの?プログラミングの文法とは違うの?

ペンギン先生 ペンギン先生

プログラミング言語の構文ルールを数学的に定義するための仕組みだよ。「この記号はこういう形に書き換えられる」というルールの集まりなんだ。

ひよこ ひよこ

「文脈自由」ってどういう意味なの?

ペンギン先生 ペンギン先生

書き換えルールを適用するとき、その記号の前後(文脈)を気にしなくていいという意味だよ。A → B + C というルールがあれば、Aがどこに出てきても同じように書き換えられるんだ。

ひよこ ひよこ

具体的にはどんなルールがあるの?

ペンギン先生 ペンギン先生

たとえば「式 → 式 + 項」「項 → 数字」みたいなルールだよ。これを繰り返し適用すると「3 + 5」のような式が正しい構文かどうか判定できるんだ。

ひよこ ひよこ

じゃあコンパイラプログラムを読むときに使っているんだね!

ペンギン先生 ペンギン先生

そのとおり!コンパイラ構文解析フェーズでは、文脈自由文法に基づいて構文木を作るんだよ。BNF記法はこの文法を書き表す代表的な記法だね。

ひよこ ひよこ

文脈自由文法で表せないものもあるの?

ペンギン先生 ペンギン先生

あるよ。たとえば「変数を使う前に宣言されているか」のチェックは文脈に依存するから、文脈自由文法だけでは扱えないんだ。そういう部分は意味解析で別途チェックするよ。チョムスキー階層では正規文法より強力だけど、文脈依存文法よりは制限があるという位置づけだね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「文脈自由文法」って出てきたら「プログラミング言語の構文ルールを形式的に書き下すための仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Context-Free Grammar」 = 文脈に依存しない文法
💬 文脈(context)に関係なく(free)書き換え規則を適用できる文法、という意味だよ
← 用語集にもどる