{a ^ n(a + b)^ n | n> 0}確定的CFL?


8

L={aa+b|>0}

私が読んでいる本はそうですが、第2部がどこから始まるのかわからず、それも同様に始まる可能性があることを考えると、DPDAを使用してこれをどのように受け入れることができますか?最初の部分()を読んだ後のように、それが最初の部分の終わりであること、または2番目の部分が始まることを考慮しないことをどのように確認できaa

これは確定的ですか?

回答:


11

「最初の部分」の終わりを決める必要はありません。

注意は、次の3つの制約を満たす文字列のセットです。L

  1. その長さは均一です。

  2. とのみが含まれます。ab

  3. 最初のその後半に表示されます。b

制約1と2は簡単に確認できます。制約3をチェックするために、DPDAは最初のが表示されるまで(除く)、文字を読み取るたびにシンボルをスタックにプッシュし、文字を読み取るたびにシンボルをポップすることができます。制約3は、初期スタックシンボルがポッププロセス中に読み取られない場合にのみ満たされます。b


答えをありがとう、それでDPDAでは最初のbに到達するまで文字を読むたびにボールを押す必要がありますが、このように文字列aaabは受け入れられませんか?最初のbに到達すると、3つのボールがあり、1つのボールだけをポップし、スタックは空ではありません。空のスタックなしで受け入れると仮定すると、いつ最終状態に移行するのでしょうか。スタックが空でなく、これ以上の入力がない場合
John P

@JohnP申し訳ありませんが、PDAの正式な説明を読んでいないため、編集前の回答は混乱を招く可能性があります。これで、回答を変更して、Wikipediaの正式な定義と互換性を持つようにしました。あなたの質問では、オートマトンが最初のスタックシンボルを読み取ると、「拒否」を表す特別な状態に変換され(その後、残りの入力に対してループします)、他のすべての状態は受け入れ状態です(開始状態を除いて、>0)。
xskxzr 2018

決定論を失うことなく、すべての制約をチェックする方法がわかりません。遷移関数のヒントや教え方はありますか?
シグマさん。

@Rohith。まず、状態Aであり、入力がa、シンボルをプッシュします。入力がb、状態Bに切り替え、シンボルをポップします。状態Bでは、見るたびにa または b、シンボルをポップします。
xskxzr 2018

いつポップを開始するか w=a2
シグマさん。

4

わかりやすいように、xskxzrのDPDAに対応するCFGを次に示します。

SεSBSaaSBabBaBaBaBb

以下の少し単純なCFGは、偶数の数のみで構成される入力に対してはあいまいです a■ただし、「標準」の競合解決アルゴリズムを使用するLALR(1)アルゴリズムでも機能します:「あいまいな場合はシフト」:

SBSaaSBεBaBaBaBb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.