技能一覧 › 大学数学 オートマトン・形式言語

CYK 法

チョムスキー標準形の文法について、部分文字列 を生成する非終端記号の集合の表を短い部分文字列から順に埋め、 が全体の欄に入るかで が生成されるかを判定できる

前提

説明

CYK 法(Cocke–Younger–Kasami 法)は、文脈自由文法と文字列 が与えられたとき、 がその文法で生成されるかを機械的に判定する方法です。導出をあれこれ試す必要はなく、「どの部分文字列をどの非終端記号が生成できるか」を表にまとめ、短い部分文字列から長い部分文字列へ順に埋めていきます。対象は、次に定義するチョムスキー標準形の文法です。プログラミング言語の構文解析や、文法の問題を確実に判定したい場面で使います。

なぜそうしてよいのか

チョムスキー標準形とは、すべての生成規則が ( は非終端記号)か ( は終端記号)の形をしている文法のことです(空文字列を生成したいときだけ、 が右辺に現れないという条件のもとで を許します)。この形では、長さ 以上の文字列の導出木の根は必ず で 2 つに分かれます。 を生成する規則がないので、 と はどちらも長さ 以上の文字列を生成します。つまり が を生成するのは、ある切れ目 ()で文字列を前半 と後半 に分け、 が前半を、 が後半を生成するときであり、そのときに限ります。

そこで に対し、 と定めます。長さ の欄は規則 を見るだけで決まり、長さ 以上の欄は

で決まります。右辺に出てくるのは自分より短い部分文字列の欄だけなので、長さの短い順に埋めればすべての欄が正しく求まります(長さに関する帰納法)。

最後に、 全体を から導出できること、つまり が「 が生成される」ことと同じです。欄は 個、各欄で切れ目を高々 通り調べるので、手間は 程度(に規則の数を掛けたもの)で済みます。

手順

  1. 文法がチョムスキー標準形(規則が か のみ)であることを確かめ、()と番号を振る。空文字列については があるかどうかだけで判定する

  2. 長さ の欄を埋める:

  3. 長さ の順に、各 ()を埋める。切れ目 のすべてについて、、 となる組 を作り、規則 の左辺 をすべて に入れる

  4. 全体の欄 に が入っていれば は生成され、入っていなければ生成されないと判定する

例題

非終端記号 (開始記号 )、終端記号 と、生成規則 、、、 からなるチョムスキー標準形の文法を考える。文字列 について CYK 法の表 ()を埋めたとき、 を含む欄の個数を求めよ。

例題の解答

【手順 1】すべての規則が か の形なので、チョムスキー標準形である。、。

【手順 2】長さ 1:、 より 、、、。

【手順 3】長さ 2:
・: で組は 。右辺が の規則はないので 。
・: で組は 。 より 。
・:組は 。該当する規則はないので 。

長さ 3:
・: で と から組 ができるが、右辺が の規則はない。 は なので組ができない。よって 。
・: は なので組ができない。 で と から組 ができ、 より が入る。よって 。

長さ 4:
・: で と から組 ができ、 より が入る。 は 、 は なので何も加わらない。よって 。

【手順 4】 なので、 はこの文法で生成される。

を含む欄は (部分文字列 )と (全体 )の 2 個である。

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題

この技能の次に学べること