下推自動機(PDA)
以空堆疊接受(acceptance by empty stack)
下推自動機宣告成功的第二種方式完全忽略控制狀態,改而盯著堆疊。在「以空堆疊接受」之下,機器接受一個字串的條件是:讀完所有輸入後,它成功把堆疊「徹底清空」——連起始符號 Z0 也彈掉。它最後停在哪個狀態完全無所謂;清空堆疊「就是」成功的信號。
形式上,機器以空堆疊接受輸入 w 的條件是:起始 ID (q0, w, Z0) 在零步或多步內產生某個 ID (p, ε, ε):所有輸入已消耗(第二個 ε)、堆疊清空到一無所有(第三個 ε),而最後狀態 p 完全無關緊要。有一個值得知道的微妙之處:一旦堆疊真正為空,機器就卡住了——沒有任何轉移能觸發,因為每個 PDA 動作都需要一個頂端符號來彈出。所以清空堆疊自然是個終結事件,這正是它能作為接受條件的原因。
這種模式在把文法轉成 PDA 時特別方便:自然的構造會打造一台在堆疊上模擬推導的機器,當推導完成且輸入相符時,它的堆疊恰好已清空。在這個模式裡,「計數完美抵銷」就字面上呈現為「堆疊不見了」。和終止狀態模式一樣,它既不更強也不更弱——以空堆疊接受的語言恰好就是上下文無關語言。
一台以空堆疊接受的 a^n b^n 機器:它甚至會在最後一個 b(或一次收尾的 ε-移動)連 Z0 一起彈出。對 aabb,它在堆疊為空且輸入讀完時結束,於是接受;對 aab,多剩的標記使堆疊非空,於是不接受。
若輸入讀完且堆疊被清空就接受——最後狀態無關緊要。
清空堆疊是不可逆的:沒有頂端符號,任何轉移都無法觸發,機器便無法繼續。這使得以空堆疊接受本質上就是一次性的終結條件。
又稱
另見