オートマトン・形式言語の問題
終端記号 、非終端記号 、開始記号 をもち、次の 4 つの生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 について、 における の構文木(導出木)の個数を求めよ。ここで、構文木の個数は の最左導出の個数に等しい。
この問題で使うもの
- 導出木の個数の数え上げ(説明と入口の問題)
- 文脈自由文法の導出と導出木(説明と入口の問題)
- 和の法則・積の法則と樹形図(説明と入口の問題)
この問題を解けるようになるまで(6 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
と はそれぞれ、 が生成する文字列の左端・右端に を 1 つ付け加える規則です。 から生成される文字列の形を考えましょう。
ヒント 2
構文木は「左に を付ける」「右に を付ける」の選び方の列と 1 対 1 に対応します。
ヒント 3
では の左に が 2 個、右に が 2 個あります。長さ 4 の列で、左と右をそれぞれ 2 回ずつ選ぶ並べ方を数えましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
生成される言語の形. からは しか生成されない。 に規則 を使うと左に が 1 つ、 を使うと右に が 1 つ付き、最後に で終わる。したがって の構文木は、根から伸びる の鎖に沿って「左に を付ける(L)」「右に を付ける(R)」を何回か選び、最後に を置いたものである。L を 回、R を 回使うと、生成される文字列は になる。
対応の確認. 逆に、構文木はこの L, R の並び(長さ の列)で完全に決まり、異なる列からは異なる構文木ができる( の鎖の各段で使った規則が異なるから)。
数え上げ. は , の場合なので、構文木の個数は、長さ 4 の列で L を 2 個・R を 2 個並べる方法の数に等しく
CYK 法による検算. 部分文字列 から を導出する構文木の個数を とする(, )。 の部分木は必ず を含むので、 のときだけ で、、(左端の を に、または右端の を に分ける。ほかの分割では片側が の列になり の 1 文字か にならない)。これより
, , , , , , , となり、一致する。
答え:
別解
この文法で から導出される文字列は の形である。 を使うと が 1 つだけ生じ、 は右に を、 は左に を 1 つ付け加えるからである( のみ)。
は の左に が 2 個、右に が 2 個ある。構文木は、根から順に (右端の を外側から取り除く)か (左端の を取り除く)のどちらを使うかの列で決まる。最終的に で終わるまでに規則を 4 回使い、そのうち が 2 回、 が 2 回である。この列と構文木は 1 対 1 に対応する(異なる列は根に近い側の最初に異なる位置で、異なる木を与える)。
よって個数は 。
検算: 一般に の構文木の個数は で、 のとき ( 先か 先か)となり、手で数えた結果と一致する。