【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )
文章目錄
- I . 下推自動機 設計
- II . 上下文無關語法 ( CFG ) 等價于 下推自動機 ( PDA )
I . 下推自動機 設計
設計下推自動機 , 可以識別 {wwR:w∈{0,1}?}\{ ww^R : w \in \{ 0, 1\} ^* \}{wwR:w∈{0,1}?} 語言 ;
RRR 表示鏡面反射 , 如果 www 是由 0,10 , 10,1 組成的字符串 011011011 , 那么 wRw^RwR 就是其鏡面反射 100100100 字符串 , 然后將 www 和 wRw^RwR 串聯在一起 , wwR=011100ww^R = 011100wwR=011100 ;
1 . 首先生成開始狀態 ;
開始狀態是接受狀態 , 因為如果字符串是空字符串 , 空字符串的鏡面反射還是空字符串 , 因此讀取空字符串后的狀態 , 是接受狀態 , 開始狀態其本身就是接受狀態 ;
2 . 向棧底放入 字符 SSS , 用于作為棧底的標識 , 生成 ε,ε→S\varepsilon , \varepsilon \to Sε,ε→S 指令 ;
ε,ε→S\varepsilon , \varepsilon \to Sε,ε→S 指令包含 222 部分 : 讀取字符 , 和 棧內操作 ;
-
讀取字符 : 指的是讀取的帶子上的字符串 , ε,ε→S\varepsilon , \varepsilon \to Sε,ε→S 中前面的 ε\varepsilonε 指的是從帶子上讀取 ε\varepsilonε ;
-
棧內操作 : 使用某個字符 替換 棧頂字符 ; ε,ε→S\varepsilon , \varepsilon \to Sε,ε→S 中后面的 ε→S\varepsilon \to Sε→S 指的是使用 SSS 字符替換棧頂的空字符 ε\varepsilonε ;
3 . 鏡面反射的前半個鏡面 :
000 入棧 : 每讀取一個 000 , 就將 000 放入棧中 , 生成指令 0,ε→00, \varepsilon \to 00,ε→0 ;
111 入棧 : 每讀取一個 111 , 就將 111 放入棧中 , 生成指令 1,ε→11, \varepsilon \to 11,ε→1 ;
4 . 跳轉到新的狀態 , 在新的狀態執行 后半個鏡面的操作 :
無條件跳轉就是讀取 ε\varepsilonε , 并且棧中元素保持不變 , 即使用 ε\varepsilonε 替換棧頂的 ε\varepsilonε ;
生成的指令為
ε,ε→ε\varepsilon , \varepsilon \to \varepsilonε,ε→ε
當前的下推自動機 :
5 . 鏡面反射的后半個鏡面 :
000 出棧 : 每讀取一個 000 , 從棧里拿走一個 000 , 生成指令 0,0→ε0, 0 \to \varepsilon0,0→ε ;
111 出棧 : 每讀取一個 111 , 從棧里拿走一個 000 , 生成指令 1,1→ε1, 1 \to \varepsilon1,1→ε ;
6 . 棧清空 , 跳轉到最后的 接受狀態 : 上述出棧操作執行若干次后, 總能將棧內的字符取出完畢 , 只剩下一個 SSS 字符 , 該字符是棧底的標識 ; 此時將 SSS 字符從棧內取出即可 ;
生成如下指令 :
ε,S→ε\varepsilon , S \to \varepsilonε,S→ε
指令含義是 讀取 ε\varepsilonε 字符 , 使用 ε\varepsilonε 字符替換棧中的 SSS 字符 ;
最后跳轉到的狀態是接受狀態 ;
當前下推自動機為 :
II . 上下文無關語法 ( CFG ) 等價于 下推自動機 ( PDA )
假設某語言由 上下文無關語法 ( CFG ) 生成 , 找到一個 下推自動機 ( PDA ) 識別該語言 ;
構造下推自動機流程 ( PDA ) :
構造下推自動機 , 包含 333 個狀態 , 開始狀態 qstartq_{start}qstart? , Loop 循環狀態 qloopq_{loop}qloop? , 可接受狀態 qacceptq_{accept}qaccept? ;
1 . qstartq_{start}qstart? 開始狀態 :
讀取 ε\varepsilonε 字符 , 使用 TSTSTS 替換棧頂的 ε\varepsilonε , 對應的指令為
ε,ε→TS\varepsilon , \varepsilon \to TSε,ε→TS
其中的 SSS 是棧頂的標識 , TTT 是棧內的實際字符 ;
2 . qloopq_{loop}qloop? 循環階段 , 根據 上下文無關語法 ( CFG ) 做替換 ;
① 當棧頂是變元時 , 作變換 , 讀取 ε\varepsilonε , 即什么都不讀取 , 將棧頂的變元 替換成 www , 生成的 下推自動機 指令為 " ε,A→w\varepsilon , A \to wε,A→w " , 對應著的上下文無關語法規則為 A→wA \to wA→w ;
② 當棧頂是終端字符 ( 常元 ) , 讓帶子上的 讀頭 讀取一個終端字符 , 對應的棧中 , 將棧頂的終端字符刪除 , 相當于使用 ε\varepsilonε 替換終端字符 , 生成指令 " a,a→εa , a \to \varepsilona,a→ε " ;
一直讀取 終端字符 , 并將棧頂的終端字符刪除 , 一直循環該操作 , 直到 棧頂是一個變元 未為止 ;
3 . 跳轉到 qacceptq_{accept}qaccept? 狀態 : 當棧內的字符都出棧后 , 只剩下一個 SSS 字符作為棧底標識 , 此時 SSS 出棧 , 生成對應的 下推自動機指令 " ε,S→ε\varepsilon , S \to \varepsilonε,S→ε " , 即使用空字符 ε\varepsilonε 替換棧內的 SSS 字符 ;
之后跳轉到最后一個狀態 , qacceptq_{accept}qaccept? 可接受狀態 ;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算理论】下推自动机 PDA 及 计算
- 下一篇: 【Netty】IO 模型简介 ( Net