形式語言與編譯10 下推自動機PDA


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:字符串處理完並且棧為空,狀態無所謂

空棧接受與終態接受的等價


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM