日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/6/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

        • 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 串聯(lián)在一起 , wwR=011100ww^R = 011100wwR=011100 ;


1 . 首先生成開始狀態(tài) ;

開始狀態(tài)是接受狀態(tài) , 因為如果字符串是空字符串 , 空字符串的鏡面反射還是空字符串 , 因此讀取空字符串后的狀態(tài) , 是接受狀態(tài) , 開始狀態(tài)其本身就是接受狀態(tài) ;


2 . 向棧底放入 字符 SSS , 用于作為棧底的標識 , 生成 ε,ε→S\varepsilon , \varepsilon \to Sε,εS 指令 ;


ε,ε→S\varepsilon , \varepsilon \to Sε,εS 指令包含 222 部分 : 讀取字符 , 和 棧內(nèi)操作 ;

  • 讀取字符 : 指的是讀取的帶子上的字符串 , ε,ε→S\varepsilon , \varepsilon \to Sε,εS 中前面的 ε\varepsilonε 指的是從帶子上讀取 ε\varepsilonε ;

  • 棧內(nèi)操作 : 使用某個字符 替換 棧頂字符 ; ε,ε→S\varepsilon , \varepsilon \to Sε,εS 中后面的 ε→S\varepsilon \to SεS 指的是使用 SSS 字符替換棧頂?shù)目兆址?ε\varepsilonε ;


3 . 鏡面反射的前半個鏡面 :


000 入棧 : 每讀取一個 000 , 就將 000 放入棧中 , 生成指令 0,ε→00, \varepsilon \to 00,ε0 ;

111 入棧 : 每讀取一個 111 , 就將 111 放入棧中 , 生成指令 1,ε→11, \varepsilon \to 11,ε1 ;


4 . 跳轉到新的狀態(tài) , 在新的狀態(tài)執(zhí)行 后半個鏡面的操作 :


無條件跳轉就是讀取 ε\varepsilonε , 并且棧中元素保持不變 , 即使用 ε\varepsilonε 替換棧頂?shù)?ε\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 . 棧清空 , 跳轉到最后的 接受狀態(tài) : 上述出棧操作執(zhí)行若干次后, 總能將棧內(nèi)的字符取出完畢 , 只剩下一個 SSS 字符 , 該字符是棧底的標識 ; 此時將 SSS 字符從棧內(nèi)取出即可 ;


生成如下指令 :

ε,S→ε\varepsilon , S \to \varepsilonε,Sε

指令含義是 讀取 ε\varepsilonε 字符 , 使用 ε\varepsilonε 字符替換棧中的 SSS 字符 ;


最后跳轉到的狀態(tài)是接受狀態(tài) ;


當前下推自動機為 :





II . 上下文無關語法 ( CFG ) 等價于 下推自動機 ( PDA )



假設某語言由 上下文無關語法 ( CFG ) 生成 , 找到一個 下推自動機 ( PDA ) 識別該語言 ;


構造下推自動機流程 ( PDA ) :


構造下推自動機 , 包含 333 個狀態(tài) , 開始狀態(tài) qstartq_{start}qstart? , Loop 循環(huán)狀態(tài) qloopq_{loop}qloop? , 可接受狀態(tài) qacceptq_{accept}qaccept? ;


1 . qstartq_{start}qstart? 開始狀態(tài) :

讀取 ε\varepsilonε 字符 , 使用 TSTSTS 替換棧頂?shù)?ε\varepsilonε , 對應的指令為


ε,ε→TS\varepsilon , \varepsilon \to TSε,εTS

其中的 SSS 是棧頂?shù)臉俗R , TTT 是棧內(nèi)的實際字符 ;


2 . qloopq_{loop}qloop? 循環(huán)階段 , 根據(jù) 上下文無關語法 ( CFG ) 做替換 ;


① 當棧頂是變元時 , 作變換 , 讀取 ε\varepsilonε , 即什么都不讀取 , 將棧頂?shù)淖冊?替換成 www , 生成的 下推自動機 指令為 " ε,A→w\varepsilon , A \to wε,Aw " , 對應著的上下文無關語法規(guī)則為 A→wA \to wAw ;

② 當棧頂是終端字符 ( 常元 ) , 讓帶子上的 讀頭 讀取一個終端字符 , 對應的棧中 , 將棧頂?shù)慕K端字符刪除 , 相當于使用 ε\varepsilonε 替換終端字符 , 生成指令 " a,a→εa , a \to \varepsilona,aε " ;


一直讀取 終端字符 , 并將棧頂?shù)慕K端字符刪除 , 一直循環(huán)該操作 , 直到 棧頂是一個變元 未為止 ;


3 . 跳轉到 qacceptq_{accept}qaccept? 狀態(tài) : 當棧內(nèi)的字符都出棧后 , 只剩下一個 SSS 字符作為棧底標識 , 此時 SSS 出棧 , 生成對應的 下推自動機指令 " ε,S→ε\varepsilon , S \to \varepsilonε,Sε " , 即使用空字符 ε\varepsilonε 替換棧內(nèi)的 SSS 字符 ;

之后跳轉到最后一個狀態(tài) , qacceptq_{accept}qaccept? 可接受狀態(tài) ;

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。