文章目录

  • 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 字符串 , 然后将 www 和 wRw^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ε,A→w " , 对应着的上下文无关语法规则为 A→wA \to wA→w ;

② 当栈顶是终端字符 ( 常元 ) , 让带子上的 读头 读取一个终端字符 , 对应的栈中 , 将栈顶的终端字符删除 , 相当于使用 ε\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​ 可接受状态 ;

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

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

    文章目录 I . 上下文无关语法 ( CFG ) 转为 下推自动机 ( PDA ) II . 下推自动机 ( PDA ) 三个状态 III . 下推自动机 ( PDA ) qstartq_{start ...

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

    文章目录 一.上下文无关语法 设计 示例 二.上下文无关语法 的歧义性 三.Chomsky 范式 四.上下文无关语法 转为 Chomsky 范式 五.上下文无关语法 转为 Chomsky 范式 示例 ...

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

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 2 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

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

    文章目录 一.上下文无关文法 CFG 转为下推自动机 PDA 流程 二.上下文无关文法 CFG 转为下推自动机 PDA 示例 1 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | ...

  5. 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★

    文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...

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

    文章目录 I . 代数表达式 语法 II . 代数表达式 语法 示例 III . 设计 上下文无关语法 IV . 确定性有限自动机 DFA 转为 上下文无关语法 I . 代数表达式 语法 1 . 代数 ...

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

    文章目录 I . 语法组成 II . 规则 III . 语法 IV . 语法示例 V . 语法简写形式 VI . 语法分析树 VII . 代数表达式 语法 I . 语法组成 上下文无关语法 组成 : ...

  8. 【计算理论】计算理论总结 ( 自动机设计 ) ★★

    文章目录 一.自动机设计 二.自动机设计 1 三.自动机设计 2 四.自动机设计 3 五.自动机设计技巧 一.自动机设计 设计自动机 : 之前是根据给定的自动机 , 找到自动机所能识别的语言 ; 现在 ...

  9. 第十三篇:上下文无关语法 Context-Free Grammar

    目录 回顾 上下文无关语法基础 为什么是"上下文无关" Context-Free上下文无关 vs. Regular 常规/正则 CFG 解析 这意味着什么? 但是 大纲 组成部分 ...

最新文章

  1. ISME:基因组和转录组分析深海古菌Thermoprofundales
  2. 5g宣传方案_5G时代来了,VR如何玩转线上营销新模式
  3. html 渐变透明写法,CSS3透明度+渐变
  4. VTK:受约束的 Delaunay 2D用法实战
  5. 使用 XML 实现 REST 式的 SOA
  6. JVM -- Java虚拟机
  7. 认识本质:黑天鹅、关键时刻与张小龙的产品观
  8. 软件概要设计做什么,怎么做
  9. Spring MVC –揭秘了@RequestBody和@ResponseBody
  10. python获取文件名不含后缀名_大部分Python资料都没有说到的重点-用实战教你解决问题的思路...
  11. arcengine遍历属性表_Redis源码解析四--跳跃表
  12. 【发布】Arknights(明日方舟)拆包+桌面精灵
  13. pgAdmin4的应用(一)
  14. 世界上最畅销的JSON和XML编辑器-Altova XMLSpy 2021版发布,升级版JSON Grid View归来!
  15. 抖音店群玩法之后端维护
  16. 程序员每天自动填写周报日报工时脚本完整脚本(附源码)
  17. 实现antd中Form、Form.Item组件
  18. 元数据管理平台技术白皮书
  19. Python批量修改图片名称
  20. mysql导数据到mongo,mysql数据导入到mongodb

热门文章

  1. python的@修饰符
  2. 控件自定义和QQ皮肤
  3. PHP之mb_internal_encoding使用
  4. C# .NET MVC 基础提供程序在 Open 上失败
  5. android 圆角图片的实现
  6. POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)
  7. 求数组中的最小值以及最小值的序列号
  8. ubuntu Ulipad 配置
  9. Hessian(C#)介绍及使用说明
  10. ajax: PopupControlExtender使用