終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 の における導出木(開始記号 を根とし、葉を左から読むと になるもの)の個数を求めよ。
導出木の個数の数え上げ
CYK 法の表の各欄に「非終端記号 が を生成する導出木の個数」を記録し、 と分割位置 について を足し合わせて、 の導出木の個数を求められる
前提
- CYK 法 (大学数学 オートマトン・形式言語)
この技能までの道筋(2 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 文脈自由文法の導出と導出木 (大学数学 オートマトン・形式言語)
- CYK 法 (大学数学 オートマトン・形式言語)
説明
CYK 法では、表の各欄に「 を生成できる非終端記号の集合」を書きました。ここでは各欄に数 を書きます。これは「非終端記号 を根とし、 を生成する導出木の個数」です。こうすると、文字列 の導出木の個数、つまり の構文解析の仕方が何通りあるかが求まります。文法があいまいかどうかを具体的な文字列で確かめたり、構文解析の候補を数えたりするときに使います。
なぜそうしてよいのか
文法はチョムスキー標準形とします。規則は ( は非終端記号)か ( は終端記号)の形です。長さ の文字列を とし、 と書きます。 の長さは です。長さ 1 の部分文字列 を から生成する導出木は、規則 を 1 回使う木しかありません。したがって、その規則があれば 、なければ です。
長さ 2 以上の ()を から生成する導出木を 1 つ取ります。
- 根で使う規則は の形の 1 つに決まります。
- 左の部分木は を根として を、右の部分木は を根として を生成します。よって分割位置 ()も 1 つに決まります。
逆に、規則 と を固定すると、左の部分木は 通り、右の部分木は 通りあります。両者は互いに無関係に選べるので、その組に対応する木は積 個です(積の法則)。規則と の組が異なれば、根の規則か左右の境目が異なるので、木も異なります。そのため組ごとの個数をすべて足せば、重複なく数えられます(和の法則)。
右辺に現れるのは と の値だけです。 なので、どちらの長さも 以上 以下です。つまり (長さ )より短い部分文字列の値しか現れません。そのため CYK 法と同じく、短い部分文字列から順に埋めれば必ず計算できます。また、標準形には のような規則がありません。そのため導出木の大きさは文字列の長さで決まり、個数は有限になります。
手順
長さ 1 の欄を埋める:各 と各非終端記号 について、規則 があれば 、なければ とする。
長さ の順に、各区間 ()を処理する。
各 について、規則 と分割位置 のすべての組を挙げ、各組の積 を求める。
それらの積をすべて足して とする:。
全体の欄の開始記号の値 が の導出木の個数である。 なら は生成されない。
例題
開始記号を とする文法 (チョムスキー標準形)について、文字列 の導出木の個数を求めよ。
例題の解答
非終端記号は だけなので、 を単に と書きます。 です。
【手順 1】規則 があり、どの も です。よって 。
【手順 2〜4】長さ 2 では、規則は だけで、分割位置は の 1 つだけです。
-
- 同様に 、
長さ 3 では の 2 通りがあります。
-
-
長さ 4 では の 3 通りがあります。
。
【手順 5】全体の欄の開始記号の値は なので、導出木は 5 個あります。これは、4 個の に括弧を付けて 2 つずつまとめる次の 5 通りに対応しています:, , , , 。
答え:
よくある誤り
CYK 法と同じく「生成できれば 1」と記録してしまう誤り。これでは例題の答えが になる。正しくは個数を記録して足し合わせる。たとえば とする。
左右の個数を掛けずに足してしまう誤り。例題の の項を とすると、 が にならない。左右の部分木は独立に選べるので、正しくは 。
分割位置 や規則の一部を落とす誤り。たとえば真ん中の だけを使うと になる。正しくは、 のすべての と、 を左辺とするすべての規則 について和をとる。
全体の欄にあるすべての非終端記号の値を合計してしまう誤り。たとえば とする。正しくは、 の導出木の個数は開始記号の値 だけである。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 について、 を根とし を生成する導出木(構文木)の個数を求めよ。終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
長さ の文字列 (左から順に の 文字)について、根が である の導出木の個数を求めよ。
この技能を使う問題
終端記号 、非終端記号 、開始記号 をもつ、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 の における構文木(導出木)の個数を求めよ。終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
長さ の文字列
は で生成される。 の(開始記号 を根とする)導出木の個数を求めよ。終端記号 、非終端記号 、開始記号 をもち、次の 3 つの生成規則からなる文脈自由文法 を考える。
文字列
(長さ )について、 における の導出木(構文木)の個数を求めよ。終端記号 、非終端記号 、開始記号 をもち、次の 4 つの生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 について、 における の構文木(導出木)の個数を求めよ。ここで、構文木の個数は の最左導出の個数に等しい。終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
長さ の文字列 について、 を根とし葉を左から読むと になる の構文木(導出木)は何通りあるか。すなわち、 から への最左導出の個数を求めよ。終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 (長さ )について、 における の相異なる構文木(導出木)の個数を求めよ。なお、これは から への相異なる最左導出の個数に等しい。終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 ( を 個並べた文字列 )の、 における最左導出の個数を求めよ。