【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★

简介: 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★

文章目录

一、上下文无关文法 CFG 转为下推自动机 PDA 流程

二、上下文无关文法 CFG 转为下推自动机 PDA 示例 2



参考博客 :


【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )

【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )

【计算理论】上下文无关语法 CFG ( CFG 设计示例 | CFG 歧义性 | Chomsky 范式 | 上下文无关语法 转为 Chomsky 范式 )

【计算理论】下推自动机 PDA 及 计算示例

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

【计算理论】上下文无关语法 ( CFG ) 转为 下推自动机 ( PDA )

【计算理论】下推自动机 PDA ( 上下文无关语言 CFL 的 泵引理 | 泵引理反证示例 | 自动机扩展 )





一、上下文无关文法 CFG 转为下推自动机 PDA 流程


上下文无关文法 CFG 转为下推自动机 PDA 流程 :


① 开始状态 : 开始状态 q s t a r t \rm q_{start}q

start

image.png

 , 跳转到 q l o o p \rm q_{loop}q

loop


 状态的指令 ε , ε → K \rm \varepsilon , \varepsilon \to Kε,ε→K , 使用 K \rm KK 替换栈内空字符 ε \varepsilonε , 即将 K \rm KK 放入栈中 ;


② 循环状态 : q l o o p \rm q_{loop}q

loop


 状态的指令都是从本状态指向本状态 , 生成两种指令 , 一种是基本指令 , 一种是终端字符指令 ;


基本指令 S → a T b ∣ b \rm S \to aTb|bS→aTb∣b 生成为 ε , S → a T b \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 字符 , 将该字符使用空字符替代 , 即从栈中删除该字符 ;

image.png


③ 接受状态 : q l o o p \rm q_{loop}q

loop

image.png

 状态跳转到 q a c c e p t \rm q_{accept}q

accept


 指令是 ε , K → ε \rm \varepsilon , K \to \varepsilonε,K→ε , 栈顶读取到 K \rm KK 字符删除 ;


④ 拆分指令 : 在循环状态 q l o o p \rm q_{loop}q

loop


 中的基本指令中存在多字符指令 , 如 ε , S → a T b \rm \varepsilon , S \to aTbε,S→aTb , 读取到空字符 ε \varepsilonε , 使用 a T b \rm aTbaTb 字符替换栈顶的 S \rm SS 字符 , 这是 3 33 个字符 , 肯定不行 , 需要逐个放进去 , 先放 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 到栈顶 ;






二、上下文无关文法 CFG 转为下推自动机 PDA 示例 2


将上下文无关语法 ( CFG ) 转为下推自动机 ( PDA ) :


R → X R X ∣ S \rm R \to XRX | SR→XRX∣S

S → a T b ∣ b T a \rm S \to aTb | bTaS→aTb∣bTa

T → X T X ∣ X ∣ ε \rm T \to XTX | X |\varepsilonT→XTX∣X∣ε

X → a ∣ b \rm X \to a | bX→a∣b



上下文无关文法 CFG 转为下推自动机 PDA 流程 :


① 开始状态 : 开始状态 q s t a r t \rm q_{start}q

start


 , 跳转到 q l o o p \rm q_{loop}q

loop


 状态的指令 ε , ε → K \rm \varepsilon , \varepsilon \to Kε,ε→K , 使用 K \rm KK 替换栈内空字符 ε \varepsilonε , 即将 K \rm KK 放入栈中 ;




② 循环状态 : q l o o p \rm q_{loop}q

loop


 状态的指令都是从本状态指向本状态 , 生成两种指令 , 一种是基本指令 , 一种是终端字符指令 ;


基本指令 R → X R X ∣ S \rm R \to XRX | SR→XRX∣S 生成为 : ε , R → X R X \rm \varepsilon , R \to XRXε,R→XRX 和 ε , R → S \rm \varepsilon , R \to Sε,R→S 两条指令 , 前面都是读取空字符作为栈读取的信息 ;


基本指令 S → a T b ∣ b T a \rm S \to aTb | bTaS→aTb∣bTa 生成为 : ε , S → a T b \rm \varepsilon , S \to aTbε,S→aTb 和 ε , S → b T a \rm \varepsilon , S \to bTaε,S→bTa 两条指令 , 前面都是读取空字符作为栈读取的信息 ;


基本指令 T → X T X ∣ X ∣ ε \rm T \to XTX | X |\varepsilonT→XTX∣X∣ε 生成为 : ε , T → X T X \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 字符 , 将该字符使用空字符替代 , 即从栈中删除该字符 ;





③ 接受状态 : q l o o p \rm q_{loop}q

loop


 状态跳转到 q a c c e p t \rm q_{accept}q

accept


 指令是 ε , K → ε \rm \varepsilon , K \to \varepsilonε,K→ε , 栈顶读取到 K \rm KK 字符删除 ;




④ 拆分指令 : 在循环状态 q l o o p \rm q_{loop}q

loop


 中的基本指令中存在多字符指令 , 如 ε , R → X R X \rm \varepsilon , R \to XRXε,R→XRX , 读取到空字符 ε \varepsilonε , 使用 X R X \rm XRXXRX 字符替换栈顶的 R \rm RR 字符 , 这是 3 33 个字符 , 肯定不行 , 需要逐个放进去 , 先放 X \rm XX ( 第三个 ) , 再放 R \rm RR , 最后放 X \rm XX ( 第一个 ) ;


ε , R → X R X \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 → a T b \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 → b T a \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 → X T X \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 字符放到到栈顶 ;




最终的下推自动机样式 :

image.png


目录
相关文章
|
4月前
|
监控
画图解释FHSS、DSSS扩频原理以及计算规则
画图解释FHSS、DSSS扩频原理以及计算规则
73 0
|
9月前
|
自动驾驶 Java 关系型数据库
一文读懂UWB波长的定义和计算公式
4.定位:由于UWB信号具有穿透障碍物能力强等特点,因此可以实现室内定位和人员追踪等功能。例如,在工业工厂领域中,可以利用UWB技术实现人员、货物的追踪和管理。
|
10月前
|
算法 异构计算
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
139 0
|
vr&ar
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
262 0
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
|
存储 vr&ar
【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★
【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★
183 0
|
资源调度 Serverless vr&ar
【计算理论】计算理论总结 ( 上下文无关文法 ) ★★
【计算理论】计算理论总结 ( 上下文无关文法 ) ★★
171 0
【计算理论】计算理论总结 ( 上下文无关文法 ) ★★
|
vr&ar
【计算理论】计算理论总结 ( 上下文无关文法 | 乔姆斯基范式 | 乔姆斯基范式转化步骤 | 示例 ) ★★
【计算理论】计算理论总结 ( 上下文无关文法 | 乔姆斯基范式 | 乔姆斯基范式转化步骤 | 示例 ) ★★
515 0
|
算法
【计算理论】可判定性 ( 计算模型与语言 | 区分 可计算语言 与 可判定语言 | 证明 通用图灵机语言是 可计算语言 | 通用任务图灵机 与 特殊任务图灵机 )
【计算理论】可判定性 ( 计算模型与语言 | 区分 可计算语言 与 可判定语言 | 证明 通用图灵机语言是 可计算语言 | 通用任务图灵机 与 特殊任务图灵机 )
187 0
|
资源调度 Python
【计算理论】图灵机 ( 图灵机图示 | 图灵机形式定义 )
【计算理论】图灵机 ( 图灵机图示 | 图灵机形式定义 )
282 0
【计算理论】图灵机 ( 图灵机图示 | 图灵机形式定义 )
|
算法
【计算理论】可判定性 ( 丘奇-图灵论题 | 可判定性引入 | 图灵机语言 | 图灵机结果 | 判定机 | 部分函数与全部函数 | 可判定性定义 )
【计算理论】可判定性 ( 丘奇-图灵论题 | 可判定性引入 | 图灵机语言 | 图灵机结果 | 判定机 | 部分函数与全部函数 | 可判定性定义 )
182 0