当前位置: 首页 > news >正文

《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析

《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析

解题步骤:

  • NFA 状态转换图
  • 子集法
  • DFA 的状态转换矩阵
  • DFA 的状态转图

解:

已给正规式:(0|1)*01

画出 NFA 状态转换图如下:

在这里插入图片描述

子集法的表格:

I状态\字符I0I1
{S, A, B} 求法: 表示开始符号,以及开始符号识别 n 个 ε 可以到达的状态集合。如本题中: 开始符号 S,通过识别 ε 可以到达的转态有 A, B,所以集合为 {S, A, B}{A, B, C} 求法: 表示改行最左端的状态集,识别最上端的符号可以到达的状态,以及这些状态识别 n 个 ε 可以到达的状态的集合。如本题中: 有 {S, A, B},逐个判断 S 识别 0 弧没有可以到达的状态;A 识别 0 可以到达 A,B 识别 0 可以到达 C;现在已有 A, C 状态,又因为 A 状态识别 ε 可以到达 B,所以整个集合为 {A, B, C}{A, B} 求法: 同相邻左测表格求法。如本题中: 有 {S, A, B},S 状态识别 1 没有可以到达的状态,A 识别 1 可以到达 A,B 识别 1 没有可以到达的状态。所以此时只有 A。又因为 A 状态识别 ε 可以到达 B,所以整个集合为 {A, B}
{A, B, C} 求法: 这个为什么是 {A, B, C}?因为 相邻右上方表格为 {A, B, C} 为什么用相邻右上方表格的状态集?因为 它是初始态,仅识别 0 和 ε 就能到达的状态集。所以,可以将该状态集视为识别一条弧所到达的状态集。可以看做是下一状态,为起状态别名做准备。{A, B, C} 注: 有 A 就有 B{A, B, T}
{A, B}{A, B, C}{A, B}
{A, B, T}{A, B, C}{A, B}

对状态中间重命名,求新的状态转换矩阵:

(1)因为 S 是初态,重命名为 S’,也是终态

(2)设 {A, B, C} 为 A’

(3)设 {A, B} 为 B’

(4)因为 T 是终态,此时 {A, B, T} 不是相当于 A’ 识别 1 弧所到达的状态,T 是终态,{A, B, T} 也是终态,重命名为 T’

I状态\字符I0I1
S’A’B’
A’A’T’
B’A’B’
T’A’B’

画出 NFA 状态转换图如下:

在这里插入图片描述

验证

(0|1)*01 正规式对应的正规集元素特点是:

  • 以 0 或 1 的任意组合,任意数量为开头
  • 以 01 为结尾

当结尾为终结符时,可认为识别成功

相关文章:

  • 《编译原理》构造 LL(1) 分析表的步骤 - 例题解析
  • 《编译原理》求 FIRSTVT 集和 LASTVT 集的步骤 - 例题解析
  • 《编译原理》求短语,直接短语,句柄,素短语,最左素短语 - 例题解析
  • 《编译原理》LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析
  • 《编译原理》控制流语句 if 和 while 语句的翻译 - 例题解析
  • 《编译原理》画 DAG 图与求优化后的 4 元式代码- 例题解析
  • 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视(mp4 格式)
  • LeetCode01 - 两数之和(Java 实现)
  • LeetCode02 - 两数相加(Java 实现)
  • LeetCode03 - 无重复字符的最长子串(Java 实现)
  • Idea 获取 git 仓库时更新类型update type 的选择
  • Java 工具类 IpUtil - 获取本机所有 IP 地址,LocalHost 对应地址 IP
  • 8080 端口被占用的解决方法 netstat -ano;taskkill (命令行)
  • 手写 Spring MVC
  • Oracle 在 Drop 表时的 Cascade Constraints
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Android单元测试 - 几个重要问题
  • Docker入门(二) - Dockerfile
  • hadoop集群管理系统搭建规划说明
  • MaxCompute访问TableStore(OTS) 数据
  • mysql 数据库四种事务隔离级别
  • Object.assign方法不能实现深复制
  • windows下使用nginx调试简介
  • 从零搭建Koa2 Server
  • 回顾 Swift 多平台移植进度 #2
  • 你不可错过的前端面试题(一)
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 正则表达式
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (libusb) usb口自动刷新
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (五)关系数据库标准语言SQL
  • (一)插入排序
  • .dwp和.webpart的区别
  • .NET 中的轻量级线程安全
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NetCore项目nginx发布
  • @Autowired和@Resource的区别
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • @软考考生,这份软考高分攻略你须知道
  • [ C++ ] STL---仿函数与priority_queue
  • []sim300 GPRS数据收发程序
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [CQOI 2011]动态逆序对
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [docker] Docker的私有仓库部署——Harbor
  • [Head First设计模式]策略模式