終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 (長さ )について CYK 法の表を作る。 の 文字目から 文字目までの部分文字列を とし、 を導出できる非終端記号全体の集合を とする()。
全体の欄 として正しいものを、次のア〜エから 1 つ選べ。
ア (空集合)
イ
ウ
エ
チョムスキー標準形の文法について、部分文字列 を生成する非終端記号の集合の表を短い部分文字列から順に埋め、 が全体の欄に入るかで が生成されるかを判定できる
CYK 法(Cocke–Younger–Kasami 法)は、文脈自由文法と文字列 が与えられたとき、 がその文法で生成されるかを機械的に判定する方法です。導出をあれこれ試す必要はなく、「どの部分文字列をどの非終端記号が生成できるか」を表にまとめ、短い部分文字列から長い部分文字列へ順に埋めていきます。対象は、次に定義するチョムスキー標準形の文法です。プログラミング言語の構文解析や、文法の問題を確実に判定したい場面で使います。
チョムスキー標準形とは、すべての生成規則が ( は非終端記号)か ( は終端記号)の形をしている文法のことです(空文字列を生成したいときだけ、 が右辺に現れないという条件のもとで を許します)。この形では、長さ 以上の文字列の導出木の根は必ず で 2 つに分かれます。 を生成する規則がないので、 と はどちらも長さ 以上の文字列を生成します。つまり が を生成するのは、ある切れ目 ()で文字列を前半 と後半 に分け、 が前半を、 が後半を生成するときであり、そのときに限ります。
そこで に対し、 と定めます。長さ の欄は規則 を見るだけで決まり、長さ 以上の欄は
で決まります。右辺に出てくるのは自分より短い部分文字列の欄だけなので、長さの短い順に埋めればすべての欄が正しく求まります(長さに関する帰納法)。
最後に、 全体を から導出できること、つまり が「 が生成される」ことと同じです。欄は 個、各欄で切れ目を高々 通り調べるので、手間は 程度(に規則の数を掛けたもの)で済みます。
文法がチョムスキー標準形(規則が か のみ)であることを確かめ、()と番号を振る。空文字列については があるかどうかだけで判定する
長さ の欄を埋める:
長さ の順に、各 ()を埋める。切れ目 のすべてについて、、 となる組 を作り、規則 の左辺 をすべて に入れる
全体の欄 に が入っていれば は生成され、入っていなければ生成されないと判定する
非終端記号 (開始記号 )、終端記号 と、生成規則 、、、 からなるチョムスキー標準形の文法を考える。文字列 について CYK 法の表 ()を埋めたとき、 を含む欄の個数を求めよ。
【手順 1】すべての規則が か の形なので、チョムスキー標準形である。、。
【手順 2】長さ 1:、 より 、、、。
【手順 3】長さ 2:
・: で組は 。右辺が の規則はないので 。
・: で組は 。 より 。
・:組は 。該当する規則はないので 。
長さ 3:
・: で と から組 ができるが、右辺が の規則はない。 は なので組ができない。よって 。
・: は なので組ができない。 で と から組 ができ、 より が入る。よって 。
長さ 4:
・: で と から組 ができ、 より が入る。 は 、 は なので何も加わらない。よって 。
【手順 4】 なので、 はこの文法で生成される。
を含む欄は (部分文字列 )と (全体 )の 2 個である。
答え:
組 の順序を逆にしてしまう誤り。正しくは、 は前半の欄 、 は後半の欄 から取る。例題で を求めるとき、組 は規則 に合うが、逆順の組 に合う規則はない。
切れ目 を 1 通り(たとえば だけ)しか調べない誤り。正しくは のすべてを調べる。例題の では、 では何も入らず、 で初めて が入る。
が 以外の欄に入っていることを根拠に「 は生成される」と判定してしまう誤り。正しくは、全体の欄 に が入るかどうかで判定する。例題の は、部分文字列 が生成されることを示すだけである。
チョムスキー標準形でない文法( や 、 を含むもの)にそのまま適用してしまう誤り。正しくは、先に規則を と の形だけにそろえてから使う。たとえば を残したまま表を作ると、 が入る欄に を入れ忘れる。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 (長さ )について CYK 法の表を作る。 の 文字目から 文字目までの部分文字列を とし、 を導出できる非終端記号全体の集合を とする()。
全体の欄 として正しいものを、次のア〜エから 1 つ選べ。
ア (空集合)
イ
ウ
エ
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 の 文字目から 文字目までの部分文字列を とし、 を導出できる非終端記号全体の集合を と書く()。CYK 法で表を埋めて、 を求めよ。
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 の 文字目を とし、 に対して、部分文字列 を生成する非終端記号全体の集合を とする。CYK 法で の表を短い部分文字列から順に埋めたとき、全体の欄 に入る集合として正しいものを、次のア〜エから 1 つ選べ。
ア イ ウ エ
終端記号 、非終端記号 、開始記号 をもつ、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 の における構文木(導出木)の個数を求めよ。
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
長さ の文字列
は で生成される。 の(開始記号 を根とする)導出木の個数を求めよ。
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
長さ の文字列 について、 を根とし葉を左から読むと になる の構文木(導出木)は何通りあるか。すなわち、 から への最左導出の個数を求めよ。
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 (長さ )について、 における の相異なる構文木(導出木)の個数を求めよ。なお、これは から への相異なる最左導出の個数に等しい。