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

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

II . 上下文无关语法 ( CFG ) 等价于 下推自动机 ( PDA )


假设某语言由 上下文无关语法 ( CFG ) 生成 , 找到一个 下推自动机 ( PDA ) 识别该语言 ;



构造下推自动机流程 ( PDA ) :



构造下推自动机 , 包含 3 33 个状态 , 开始状态 q s t a r t q_{start}q

start


 , Loop 循环状态 q l o o p q_{loop}q

loop


 , 可接受状态 q a c c e p t q_{accept}q

accept


 ;



1 . q s t a r t q_{start}q

start


 开始状态 :


image.png


读取 ε \varepsilonε 字符 , 使用 T S TSTS 替换栈顶的 ε \varepsilonε , 对应的指令为



ε , ε → T S \varepsilon , \varepsilon \to TS

ε,ε→TS


其中的 S SS 是栈顶的标识 , T TT 是栈内的实际字符 ;

image.png




2 . q l o o p q_{loop}q

loop


 循环阶段 , 根据 上下文无关语法 ( CFG ) 做替换 ;



① 当栈顶是变元时 , 作变换 , 读取 ε \varepsilonε , 即什么都不读取 , 将栈顶的变元 替换成 w ww , 生成的 下推自动机 指令为 " ε , A → w \varepsilon , A \to wε,A→w " , 对应着的上下文无关语法规则为 A → w A \to wA→w ;


② 当栈顶是终端字符 ( 常元 ) , 让带子上的 读头 读取一个终端字符 , 对应的栈中 , 将栈顶的终端字符删除 , 相当于使用 ε \varepsilonε 替换终端字符 , 生成指令 " a , a → ε a , a \to \varepsilona,a→ε " ;



一直读取 终端字符 , 并将栈顶的终端字符删除 , 一直循环该操作 , 直到 栈顶是一个变元 未为止 ;


image.png



3 . 跳转到 q a c c e p t q_{accept}q

accept


 状态 : 当栈内的字符都出栈后 , 只剩下一个 S SS 字符作为栈底标识 , 此时 S SS 出栈 , 生成对应的 下推自动机指令 " ε , S → ε \varepsilon , S \to \varepsilonε,S→ε " , 即使用空字符 ε \varepsilonε 替换栈内的 S SS 字符 ;


之后跳转到最后一个状态 , q a c c e p t q_{accept}q

accept


 可接受状态 ;

image.png


目录
相关文章
|
5月前
|
编译器 API C语言
芯片验证 | 理解SystemVerilog DPI并不难
芯片验证 | 理解SystemVerilog DPI并不难
280 0
|
存储 缓存 算法
m基于FPGA的交织解交织系统verilog实现,包含testbench
m基于FPGA的交织解交织系统verilog实现,包含testbench
304 0
|
算法 异构计算
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
163 0
|
存储 Go C语言
编译原理,C语言实现LR(0)分析(扩展文法的生成、项目集规范簇的生成、ACTION GOTO表的生成、句子的分析)
注:代码生成的项目集规范簇、ACTION GOTO表的顺序可能和课本、教材、参考答案的顺序不同,但这并不影响分析过程的正确性,毕竟机器是按规律办事的😄
499 0
编译原理,C语言实现LR(0)分析(扩展文法的生成、项目集规范簇的生成、ACTION GOTO表的生成、句子的分析)
|
芯片
复习单片机:矩阵按键(内含1 矩阵按键介绍+2 硬件设计+3 软件设计+4原始代码+5 实验现象)
复习单片机:矩阵按键(内含1 矩阵按键介绍+2 硬件设计+3 软件设计+4原始代码+5 实验现象)
509 0
复习单片机:矩阵按键(内含1 矩阵按键介绍+2 硬件设计+3 软件设计+4原始代码+5 实验现象)
|
Scala
spinal HDL - 11 - 使用状态机语法编写“1001“序列检测
spinal HDL - 11 - 使用状态机语法编写“1001“序列检测
387 0
spinal HDL - 11 - 使用状态机语法编写“1001“序列检测
|
机器学习/深度学习 JavaScript
宏程序常用结构
宏程序常用结构
|
vr&ar
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
322 0
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 1 ) ★★
|
vr&ar
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
235 0
【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★