簡體   English   中英

為以下語言創建下推自動機

[英]Create a pushdown automata for the following language

因此,我在書中遇到練習問題,發現了這個問題。 構造一個在sigma(a,b,c)上接受語言L的npda。

L = {w:a的數量= b + 1的數量}

所以我正在解釋它,因為它接受的所有字符串再加上一個a和一個字母b。 我認為所有州都應該有一個具有過渡的循環(c,landa,landa),因為我們並不真正在乎c。 之后,我真的很困惑,因為要覆蓋的情況太多,因為a和b的放置是任意的。 解決這個問題的方法是什么? 謝謝!!

PDA可以使用堆棧來記住任意數量的信息。 這使得PDA比有限自動機具有無限的功能。 確定PDA的關鍵是弄清楚如何使用堆棧,然后圍繞它構建PDA。

我們如何使用堆棧來確保a的數量等於b的數量加1? 好了,堆棧可以輕松地跟蹤已經看到的符號的運行平衡。 例如,如果我們看到四個a s和兩個b s,則我們的堆棧可以通過包含aaZ來表示這一事實,其中Z是“堆棧底部”符號。 當然,我們可能會使用其他方法和其他表示形式,但這對於此類問題特別整潔。 要完全解釋該表示形式:

  1. 堆棧最初是Z ,只是堆棧符號的底部。
  2. 如果看到a ,而堆棧頂部是aZ ,則添加另一個a
  3. 如果看到a且堆棧的頂部是b ,則刪除一個b
  4. 如果我們看到b並且堆棧的頂部是bZ ,則添加另一個b
  5. 如果看到b ,而堆棧的頂部是a ,則刪除a
  6. 如果看到c ,則不理會堆棧。

如果我們對所有輸入一遍又一遍地執行此操作,則堆棧的內容將等於x^m ,其中xab出現的頻率更高,並且m是該n的差的絕對值每個符號的編號。

要接受您的語言,您必須簡單地識別輸入已用盡且堆棧組成等於aZ 這可以通過添加一些狀態和lambda / epsilon轉換來清除堆棧和/或進入接受狀態來完成。

感謝Peter Leupold指出,原始答案的其余部分都使語法錯誤。 我嘗試修復它,不喜歡答案能得到多長時間,因此我省略了它。 我將簡單地補充說,另一種可能性是為一種語言生成CFG,並使用一種算法為其衍生PDA。 在這種情況下,對我來說,直接給PDA少了很多麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM