2017-03-15 43 views
0

我想設計一個下推自動機的語言下推自動機的語言

L = { a^i b^j c^k | i = j or k <= j <= 2k} 

是如右圖所示,如下圖中由教師提出的解決方案。 PDA diagram

但我這裏關心的是,它不處理字符串的形式,當|2c| > |b|。那就是在q8狀態下,如果所有的B都堆疊出來,但輸入C還沒有完成。這裏沒有捕捉到這種轉變。

我的關注是否正確? 或建議的解決方案是一個正確的PDA。

回答

0

記住j> = k,這意味着| b | > = | c |。

如果輸入中的所有「b」都被讀取,則B的堆棧數量大於(或等於)要在輸入中讀取的「c」的數量。

  • 如果j = k,那麼它將使用從q8到q8的轉換,直到輸入完成。
  • 如果j = 2k,它會讀取一個「c」(q8 - > q9)並從堆棧中取出兩個B(q9 - > q8),所以只有字符串| b | = 2 | c |可以接受。
  • 如果j < 2k,它將使用q8-> q9和q9-> q8,直到堆棧的數量等於要在輸入中讀取的「c」的數量。然後它將使用q 8-> q8直到輸入完成。
+0

我明白你的意思了。在提議的PDA中,對於q8→q8,轉換條件是:(C,B-> E)。當| b |時會發生什麼? = 6和| c | = 4.這種形式的字符串應該是可以接受的。但是這款PDA並沒有處理這種情況,對吧? – yogeshagr

+0

它的確如此。讀取輸入中的所有「b」後,將會有6個B堆疊起來。然後使用q8 - > q9和q9 - > q8兩次在輸入中讀取兩個「c」,從堆棧中取4個B。所以我們有兩個「c」在輸入中被讀取,兩個B被堆疊。然後,q8 - > q8被使用兩次,字符串被接受。 –

+0

好的,是的。你的第三點正確解釋了這一點。我實際上是通過閱讀3個「c」並耗費6個B來耗盡所有的Bs。然後,我剩下1個「C」和0 B堆棧,而我沒有從q8出發的地方。在NFA中,轉換順序也很重要?我們可以將這個PDA轉換成一個程序,然後計算機可以採取它應該進行轉換的順序嗎?我的意思是這個PDA有助於編寫正確/更好的程序嗎? – yogeshagr