【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
文章目錄
- 一、上下文無關(guān)文法 CFG 轉(zhuǎn)為下推自動(dòng)機(jī) PDA 流程
- 二、上下文無關(guān)文法 CFG 轉(zhuǎn)為下推自動(dòng)機(jī) PDA 示例 2
參考博客 :
- 【計(jì)算理論】上下文無關(guān)語法 ( 語法組成 | 規(guī)則 | 語法 | 語法示例 | 約定的簡寫形式 | 語法分析樹 )
- 【計(jì)算理論】上下文無關(guān)語法 ( 代數(shù)表達(dá)式 | 代數(shù)表達(dá)式示例 | 確定性有限自動(dòng)機(jī) DFA 轉(zhuǎn)為 上下文無關(guān)語法 )
- 【計(jì)算理論】上下文無關(guān)語法 CFG ( CFG 設(shè)計(jì)示例 | CFG 歧義性 | Chomsky 范式 | 上下文無關(guān)語法 轉(zhuǎn)為 Chomsky 范式 )
- 【計(jì)算理論】下推自動(dòng)機(jī) PDA 及 計(jì)算示例
- 【計(jì)算理論】下推自動(dòng)機(jī) PDA ( 設(shè)計(jì)下推自動(dòng)機(jī) | 上下文無關(guān)語法 CFG 等價(jià)于 下推自動(dòng)機(jī) PDA )
- 【計(jì)算理論】上下文無關(guān)語法 ( CFG ) 轉(zhuǎn)為 下推自動(dòng)機(jī) ( PDA )
- 【計(jì)算理論】下推自動(dòng)機(jī) PDA ( 上下文無關(guān)語言 CFL 的 泵引理 | 泵引理反證示例 | 自動(dòng)機(jī)擴(kuò)展 )
一、上下文無關(guān)文法 CFG 轉(zhuǎn)為下推自動(dòng)機(jī) PDA 流程
上下文無關(guān)文法 CFG 轉(zhuǎn)為下推自動(dòng)機(jī) PDA 流程 :
① 開始狀態(tài) : 開始狀態(tài) qstart\rm q_{start}qstart? , 跳轉(zhuǎn)到 qloop\rm q_{loop}qloop? 狀態(tài)的指令 ε,ε→K\rm \varepsilon , \varepsilon \to Kε,ε→K , 使用 K\rm KK 替換棧內(nèi)空字符 ε\varepsilonε , 即將 K\rm KK 放入棧中 ;
② 循環(huán)狀態(tài) : qloop\rm q_{loop}qloop? 狀態(tài)的指令都是從本狀態(tài)指向本狀態(tài) , 生成兩種指令 , 一種是基本指令 , 一種是終端字符指令 ;
基本指令 S→aTb∣b\rm S \to aTb|bS→aTb∣b 生成為 ε,S→aTb\rm \varepsilon , S \to aTbε,S→aTb 和 ε,S→b\rm \varepsilon , S \to bε,S→b 兩條指令 , 前面都是讀取空字符作為棧讀取的信息 ;
終端字符指令 , 如果存在終端字符 a\rm aa 和 b\rm bb , 那么生成 a,a→ε\rm a, a \to \varepsilona,a→ε 和 b,b→ε\rm b, b \to \varepsilonb,b→ε 兩條指令 , 含義是讀取棧頂 a\rm aa 字符 , 將該字符使用空字符替代 , 即從棧中刪除該字符 ;
③ 接受狀態(tài) : qloop\rm q_{loop}qloop? 狀態(tài)跳轉(zhuǎn)到 qaccept\rm q_{accept}qaccept? 指令是 ε,K→ε\rm \varepsilon , K \to \varepsilonε,K→ε , 棧頂讀取到 K\rm KK 字符刪除 ;
④ 拆分指令 : 在循環(huán)狀態(tài) qloop\rm q_{loop}qloop? 中的基本指令中存在多字符指令 , 如 ε,S→aTb\rm \varepsilon , S \to aTbε,S→aTb , 讀取到空字符 ε\varepsilonε , 使用 aTb\rm aTbaTb 字符替換棧頂?shù)?S\rm SS 字符 , 這是 333 個(gè)字符 , 肯定不行 , 需要逐個(gè)放進(jìn)去 , 先放 b\rm bb , 再放 T\rm TT , 最后放 a\rm aa ;
最終分解為
ε,S→b\rm \varepsilon , S \to bε,S→b 讀取空字符放入 b\rm bb 到棧頂 ,
ε,ε→T\rm \varepsilon , \varepsilon \to Tε,ε→T 讀取空字符放入 T\rm TT 到棧頂 ,
ε,ε→a\rm \varepsilon , \varepsilon \to aε,ε→a 讀取空字符放入 a\rm aa 到棧頂 ;
二、上下文無關(guān)文法 CFG 轉(zhuǎn)為下推自動(dòng)機(jī) PDA 示例 2
將上下文無關(guān)語法 ( CFG ) 轉(zhuǎn)為下推自動(dòng)機(jī) ( PDA ) :
R→XRX∣S\rm R \to XRX | SR→XRX∣S
S→aTb∣bTa\rm S \to aTb | bTaS→aTb∣bTa
T→XTX∣X∣ε\rm T \to XTX | X |\varepsilonT→XTX∣X∣ε
X→a∣b\rm X \to a | bX→a∣b
上下文無關(guān)文法 CFG 轉(zhuǎn)為下推自動(dòng)機(jī) PDA 流程 :
① 開始狀態(tài) : 開始狀態(tài) qstart\rm q_{start}qstart? , 跳轉(zhuǎn)到 qloop\rm q_{loop}qloop? 狀態(tài)的指令 ε,ε→K\rm \varepsilon , \varepsilon \to Kε,ε→K , 使用 K\rm KK 替換棧內(nèi)空字符 ε\varepsilonε , 即將 K\rm KK 放入棧中 ;
② 循環(huán)狀態(tài) : qloop\rm q_{loop}qloop? 狀態(tài)的指令都是從本狀態(tài)指向本狀態(tài) , 生成兩種指令 , 一種是基本指令 , 一種是終端字符指令 ;
基本指令 R→XRX∣S\rm R \to XRX | SR→XRX∣S 生成為 : ε,R→XRX\rm \varepsilon , R \to XRXε,R→XRX 和 ε,R→S\rm \varepsilon , R \to Sε,R→S 兩條指令 , 前面都是讀取空字符作為棧讀取的信息 ;
基本指令 S→aTb∣bTa\rm S \to aTb | bTaS→aTb∣bTa 生成為 : ε,S→aTb\rm \varepsilon , S \to aTbε,S→aTb 和 ε,S→bTa\rm \varepsilon , S \to bTaε,S→bTa 兩條指令 , 前面都是讀取空字符作為棧讀取的信息 ;
基本指令 T→XTX∣X∣ε\rm T \to XTX | X |\varepsilonT→XTX∣X∣ε 生成為 : ε,T→XTX\rm \varepsilon , T \to XTXε,T→XTX , ε,T→X\rm \varepsilon , T \to Xε,T→X , ε,T→ε\rm \varepsilon , T \to \varepsilonε,T→ε 三條指令 , 前面都是讀取空字符作為棧讀取的信息 ;
基本指令 X→a∣b\rm X \to a | bX→a∣b 生成為 : ε,X→a\rm \varepsilon , X \to aε,X→a 和 ε,X→b\rm \varepsilon , X \to bε,X→b 兩條指令 , 前面都是讀取空字符作為棧讀取的信息 ;
終端字符指令 : 如果存在終端字符 a\rm aa 和 b\rm bb , 那么生成 a,a→ε\rm a, a \to \varepsilona,a→ε 和 b,b→ε\rm b, b \to \varepsilonb,b→ε 兩條指令 , 含義是讀取棧頂 a\rm aa 字符 , 將該字符使用空字符替代 , 即從棧中刪除該字符 ;
③ 接受狀態(tài) : qloop\rm q_{loop}qloop? 狀態(tài)跳轉(zhuǎn)到 qaccept\rm q_{accept}qaccept? 指令是 ε,K→ε\rm \varepsilon , K \to \varepsilonε,K→ε , 棧頂讀取到 K\rm KK 字符刪除 ;
④ 拆分指令 : 在循環(huán)狀態(tài) qloop\rm q_{loop}qloop? 中的基本指令中存在多字符指令 , 如 ε,R→XRX\rm \varepsilon , R \to XRXε,R→XRX , 讀取到空字符 ε\varepsilonε , 使用 XRX\rm XRXXRX 字符替換棧頂?shù)?R\rm RR 字符 , 這是 333 個(gè)字符 , 肯定不行 , 需要逐個(gè)放進(jìn)去 , 先放 X\rm XX ( 第三個(gè) ) , 再放 R\rm RR , 最后放 X\rm XX ( 第一個(gè) ) ;
ε,R→XRX\rm \varepsilon , R \to XRXε,R→XRX 最終分解為 :
ε,R→X\rm \varepsilon , R \to Xε,R→X 讀取空字符后 , 使用 X\rm XX 字符替換棧頂 R\rm RR 字符 ,
ε,ε→R\rm \varepsilon , \varepsilon \to Rε,ε→R 讀取空字符后 , 將 R\rm RR 字符放到到棧頂 ,
ε,ε→X\rm \varepsilon , \varepsilon \to Xε,ε→X 讀取空字符后 , 將 X\rm XX 字符放到到棧頂 ;
ε,S→aTb\rm \varepsilon , S \to aTbε,S→aTb 最終分解為 :
ε,S→b\rm \varepsilon , S \to bε,S→b 讀取空字符后 , 使用 b\rm bb 字符替換棧頂 S\rm SS 字符 ,
ε,ε→T\rm \varepsilon , \varepsilon \to Tε,ε→T 讀取空字符后 , 將 T\rm TT 字符放到到棧頂 ,
ε,ε→a\rm \varepsilon , \varepsilon \to aε,ε→a 讀取空字符后 , 將 a\rm aa 字符放到到棧頂 ;
ε,S→bTa\rm \varepsilon , S \to bTaε,S→bTa 最終分解為 :
ε,S→a\rm \varepsilon , S \to aε,S→a 讀取空字符后 , 使用 a\rm aa 字符替換棧頂 S\rm SS 字符 ,
ε,ε→T\rm \varepsilon , \varepsilon \to Tε,ε→T 讀取空字符后 , 將 T\rm TT 字符放到到棧頂 ,
ε,ε→b\rm \varepsilon , \varepsilon \to bε,ε→b 讀取空字符后 , 將 b\rm bb 字符放到到棧頂 ;
ε,T→XTX\rm \varepsilon , T \to XTXε,T→XTX
ε,T→X\rm \varepsilon , T \to Xε,T→X 讀取空字符后 , 使用 X\rm XX 字符替換棧頂 T\rm TT 字符 ,
ε,ε→T\rm \varepsilon , \varepsilon \to Tε,ε→T 讀取空字符后 , 將 T\rm TT 字符放到到棧頂 ,
ε,ε→X\rm \varepsilon , \varepsilon \to Xε,ε→X 讀取空字符后 , 將 X\rm XX 字符放到到棧頂 ;
最終的下推自動(dòng)機(jī)樣式 :
總結(jié)
以上是生活随笔為你收集整理的【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算理论】计算理论总结 ( 上下文无关
- 下一篇: 【计算理论】计算理论总结 ( 图灵机设计