2型文法的處理裝置——下推自動機(PDA)
正則文法處理不了括號對,但是上下文無關文法可以表示出來。上下文無關文法是強於正則文法的。下推自動機的能力是強於有限自動機的
下推自動機相對於有限自動機 它就是多了一個 棧 。其他都一樣(輸入串,狀態)
狀態機(PDA)在對輸入串做讀入操作的同時,棧頂能夠同時地 做push/pop操作。
為了讓每一步格式都一樣,我們可以在剛開始和結束時也加上 \(read ~ \epsilon\) ,這樣格式就對稱了。
對於上面這個串,我們先不讀入任何(或者理解為讀入 \(\epsilon\)) ,棧中壓入$ $ $ ,再讀入0,棧中壓入標記x,再讀入0,棧中壓入標記x……,再讀入1,棧中彈出標記x,再讀入1,棧中彈出標記x……;再不讀入(或者理解為讀入\(\epsilon\)) ,再彈出\(\$\) .結束。
這種裝置優勢是用來處理左右匹配成對的任務,比如括號任務,非常成功!!!
一般的,按照上面這種標記方法進行表示 [讀入,彈出/壓入]
數學定義 七元組\((Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)\)
上面這個其實就是在五元組的基礎上擴展出來的,多出來兩個,分別是:
\(\Gamma\) : 棧字母表 上面中例子: \(x,\$\in\Gamma\)
\(Z_0 ~ \in ~ \Gamma\): 棧字母表的 開始符號 上面例子中: \(\$\)
\(\delta\) 變了,變比原來復雜了:現在不光要改變狀態,還要改變棧。
注意到:這個遷移函數得到的是 集合。 \((q,a)\) 得到\(p\) ,\(X\) 得到 \(\gamma\)
這里畫狀態轉移圖的時候,只要畫出讀入字母表能夠轉移的,不用畫出所有狀態,到不了的集合標記 空集 就行了。(這是DFA才弄的)
根據串 畫出PDA
瞬時描述
瞬時描述實際有點像給下推自動機拍個照
兩次瞬態表示一次移動
輸入串被識別過程
上面這個例子 表示輸入串不能被識別!!(輸入串必須被消耗完,而且達到終止狀態才算成功)
這個失敗例子是 到不了終止狀態
通過棧的終結狀態來定義:也就是當字符串處理完並且處於終結狀態
從空棧角度定義PDA:字符串處理完並且棧為空,狀態無所謂
空棧接受與終態接受的等價