日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )

發布時間:2025/6/17 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【计算理论】下推自动机 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 字符串 , 然后將 wwwwRw^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ε,Aw " , 對應著的上下文無關語法規則為 A→wA \to wAw ;

② 當棧頂是終端字符 ( 常元 ) , 讓帶子上的 讀頭 讀取一個終端字符 , 對應的棧中 , 將棧頂的終端字符刪除 , 相當于使用 ε\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 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。