yo-kunの日記 このページをアンテナに追加 RSSフィード

2009-02-05

[][]文脈自由文法のチョムスキー標準形への変換 文脈自由文法のチョムスキー標準形への変換を含むブックマーク 文脈自由文法のチョムスキー標準形への変換のブックマークコメント

※本エントリは人力検索はてなの質問http://q.hatena.ne.jp/1233731707に対する回答の一部です


まずいくつかの用語を定義することにします。

  • A ¥to ¥epsilon のような置き換え規則をε規則と呼ぶ(Aは非終端記号、¥epsilonは空系列)
  • A ¥to B のような置き換え規則を読み換え規則と呼ぶ(A,Bは非終端記号)
  • A ¥to u (uは長さが3以上の系列)のような規則を長文規則と呼ぶ

上に挙げた3つの置き換え規則は、文脈自由文法の置き換え規則としては許されるものですが、チョムスキー標準形には当てはまらないものです。

(ε規則は左辺の非終端記号が開始記号の場合だけはチョムスキー標準形に当てはまります)

文脈自由文法の置き換え規則の中で上に挙げたものがある場合、その置き換え規則を除去して等価な置き換え規則を追加していけばチョムスキー標準形になるという理屈です。


(1) 新しい開始記号の導入

まず、文脈自由文法の開始記号Sを別の開始記号S’に置き換えます。

つまり、非終端記号に新たなS’を追加し、このS’を開始記号にして、なおかつ置き換え規則に

S’ ¥to S

を追加します。

こうしてできた文法は開始記号が異なるだけなので元の文法と等価です。

これにより、文法の開始記号が置き換え規則の右辺に現れないことが保証されます。


(2) ε規則の除去

文法の置き換え規則の中に、ε規則

A ¥to ¥epsilon

がある場合、Aが開始記号でないならばAが置き換え規則の右辺に現れる置き換え規則を適用可能な限り全て変更します。

例えば、置き換え規則

B ¥to uAvAw

がある場合、この置き換え規則を除去し、代わりに

B ¥to uAvAw

B ¥to uvAw

B ¥to uAvw

B ¥to uvw

を置き換え規則に追加します。

このような処理を全て行った後、元のε規則A ¥to ¥epsilonを置き換え規則から除去します。

これは元の文法と等価です。

開始記号からのε規則S’ ¥to ¥epsilon以外の全てのε規則をこのように除去します。


(3) 読み換え規則の除去

文法の置き換え規則の中に、読み換え規則

A ¥to B

がある場合、Bが置き換え規則の左辺に現れる置き換え規則を全てAからの置き換えに変更します。

例えば、置き換え規則

B ¥to v

がある場合、この置き換え規則を除去して

A ¥to v

を置き換え規則に追加します。

このような処理を全て行った後、元の読み換え規則A ¥to Bを置き換え規則から除去します。

これは元の文法と等価です。

全ての読み換え規則をこのように除去します。


(4) 長文規則の除去

文法の置き換え規則の中に、長文規則

A ¥to u_1u_2u_3 ¥ldots u_n ¥quad (n ¥ge 3)

がある場合、新たな非終端記号B_1,B_2, ¥ldots ,B_{n-1}を導入して

A ¥to u_1B_1

B_1 ¥to u_2B_2

...

B_{n-2} ¥to u_{n-1}B_{n-1}

B_{n-1} ¥to u_n

を置き換え規則に追加し、元の長文規則A ¥to u_1u_2u_3 ¥ldots u_nを置き換え規則から除去します。

これは元の文法と等価です。

全ての長文規則をこのように除去します。


(5) 最終処理

ここまでの操作により、形式文法内の全ての置き換え規則の右辺の系列の長さは2以下になります。

なぜならば、右辺に長さ3以上の系列を持つ置き換え規則は(4)で除去されているからです。

右辺の系列の長さが0のものがあるとすれば、(2)の操作により開始記号からのε規則

S’ ¥to ¥epsilon

だけであることが保証されています。

また、右辺の系列の長さが1のものがあるとすれば、(3)の操作により終端記号への置き換え

A ¥to a

の形のものだけであることが保証されています。


最期に右辺の系列の長さが2のもの

A ¥to u_1u_2

があるとします。(u_1,u_2は終端記号か非終端記号)

このu_1,u_2が共に非終端記号であれば、それは

A ¥to BC

という形なのでチョムスキー標準形の条件を満たします。


u_1が非終端記号でu_2が終端記号の場合には、新たな非終端記号Uを導入してこの規則を

A ¥to u_1U

U ¥to u_2

と変更すればそれぞれチョムスキー標準形の条件を満たします。

また、逆にu_1が終端記号でu_2が非終端記号の場合も同様です。


u_1,u_2が共に終端記号であれば、新たな2つの非終端記号UおよびVを導入してこの規則を

A ¥to UV

U ¥to u_1

V ¥to u_2

としてやればよいのです。


以上の変換によって文脈自由文法の全ての置き換え規則がチョムスキー標準形を満たすものになることがわかります。


参考文献:計算理論とオートマトン言語理論―コンピュータの原理を明かす (Information & Computing)

トラックバック - http://d.hatena.ne.jp/yo-kun/20090205/p1