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

オートマトン・形式言語の問題

難易度 1教科書の例題レベル大学数学 オートマトン・形式言語

終端記号 、非終端記号 、開始記号 をもち、次の 3 つの生成規則からなる文脈自由文法 を考える。

文字列 は で生成される。この文字列の からの導出に対応する導出木(構文木)を描いたとき、その頂点の個数を求めよ。ただし、頂点は根と葉を含めたすべての頂点(非終端記号のラベルをもつ頂点と終端記号のラベルをもつ頂点)を数える。

この問題で使うもの

ヒント

行き詰まったら、上から順に 1 つずつ開いてください。

ヒント 1

「文脈自由文法の導出と導出木」を使う。まず開始記号 から を導出し、その導出を木の形に描こう。

ヒント 2

規則を 1 回使うごとに、書き換えた の頂点の下に右辺の記号を子として並べる。 や では子が 3 個、 では子が 1 個できる。

ヒント 3

導出は となる。あとは根と、各段階で増えた子を数え上げればよい。

答えと解説

答えを見る
結果を記録する(このブラウザにだけ保存されます):
解説を読む

手順1:導出を作る。

生成規則は を「両端に同じ文字をつけた形」か に書き換えるので、文字列 を外側から順に見ていく。

  • 両端が と なので、まず を使う。
  • 残りの中央 の両端は と なので を使う。
  • さらに残りの中央 の両端も なので を使う。
  • 最後に残った中央 は で作る。

したがって導出は

となる。各段階で非終端記号は が 1 つだけなので、これはそのまま最左導出でもある。

手順2:導出木を描く。

生成規則を 1 回使うごとに、書き換えた の頂点の下に右辺の記号を子として左から順に並べる。

  • 根 の子:(3 個)
  • その中央の の子:(3 個)
  • その中央の の子:(3 個)
  • その中央の の子:(1 個)

葉を左から読むと となり、確かに になる。

手順3:頂点を数える。

根の 個に、各規則の適用で増えた子の個数を加えると

(確認: のラベルの頂点が 個、終端記号の葉が文字列の長さと同じ 個で、。)

よって頂点の個数は である。

別解

文字列 は長さ 7 で、、、、 の順に導出される。

導出:。

この文法は曖昧でなく、各文字列の導出木は一意に定まる。

頂点の数え方:
- 非終端記号 の頂点は、規則を 4 回適用するので 4 個。
- 葉(終端記号)は、文字列の長さと同じ 7 個。

内訳の確認:
- は子が 3 個(、、)。
- も子が 3 個。
- は子が 1 個。

頂点は 4 個、終端記号の頂点は 7 個なので、合計は 。

検算:根以外の頂点数は子の総数に等しい。子の総数は 。根を加えて 。

ε を表す頂点はなく、この文法には ε 規則もない。

この問題の確認

AI が作成した問題です。公開前に次の確認を行いました。確認の方法について

間違いを報告する

この問題の誤り・分かりにくい点・難易度や学年のずれを知らせる
どこについての報告ですか

報告の内容と問題の番号を保存します。名前やメールアドレスは保存しません。

関連する問題