《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析
《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析
解题步骤:
- NFA 状态转换图
- 子集法
- DFA 的状态转换矩阵
- DFA 的状态转图
解:
已给正规式:(0|1)*01
画出 NFA 状态转换图如下:

子集法的表格:
| I状态\字符 | I0 | I1 |
|---|---|---|
| {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状态\字符 | I0 | I1 |
|---|---|---|
| S' | A' | B' |
| A' | A' | T' |
| B' | A' | B' |
| T' | A' | B' |
画出 NFA 状态转换图如下:

验证
(0|1)*01 正规式对应的正规集元素特点是:
- 以 0 或 1 的任意组合,任意数量为开头
- 以 01 为结尾
当结尾为终结符时,可认为识别成功
《编译原理》构造与正规式 (0|1)*01 等价的 DFA - 例题解析的更多相关文章
- 编译原理 | 构造LR(1)自动机的注意事项
在画图之前,有时候要先对产生式集合进行某些操作. 下图所示的情况,不需要补一条拓广产生式,因为开始符Z没有出现在某条产生式的右侧. 即,如果开始符出现在某条产生式的右部,需要增加拓广产生式.
- 学了编译原理能否用 Java 写一个编译器或解释器?
16 个回答 默认排序 RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...
- 有穷自动机(NFA、DFA)&正规文法&正规式之间的相互转化构造方法
在编译原理(第三版清华大学出版社出版)中第三章的词法分析中,3.4.3.5.3.6小节中分别讲解了 1.什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机) 2.如何将 不确定的有穷自动机 ...
- 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集
<编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...
- 编译原理-词法分析04-NFA & 代码实现
编译原理-词法分析04-NFA & 代码实现 0.术语 NFA 非确定性有穷自动机nondeterministic finite automation. ε-转换ε-transition 是无 ...
- [Vue源码]一起来学Vue模板编译原理(一)-Template生成AST
本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vu ...
- [Vue源码]一起来学Vue模板编译原理(二)-AST生成Render字符串
本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...
- 编译原理根据项目集规范族构造LR(0)分析表
转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...
- 编译原理LR(0)项目集规范族的构造详解
转载于https://blog.csdn.net/johan_joe_king/article/details/79051993#comments 学编译原理的时候,感觉什么LL(1).LR(0).S ...
随机推荐
- MUT值设置、top等命令无法执行、ssh无法登陆、vim命令卡住
[root@host---- ~]# ifconfig eth0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu inet 10.1.1.204 n ...
- DataTable.Select筛选过滤数据返回DataRow[]转为DataTable添加到DataSet
问题还原,如图所示,我们要筛选所有SHDP 为北京翠微KR的数据. 1. 筛选DataTable微软为我们提供了一个方法DataTable.Select(),其用法如下: 1) Select()—— ...
- python高级 之(一) --- 函数类型
函数 模块 模块: 一个py文件就是一个模块, 每个模块之间是可以相互访问的 访问之前需要进行导入 分类: 1.系统提供的模块 math random 2.自己自定义的,自己封装的常用功能的的py文件 ...
- 【Linux开发】linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟
linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- win10安装tensorflow (cpu版)
前提: 下载anaconda,然后创建一个python虚拟环境: 命令: conda create -n tf_cpu python=3.6 # (tf_cpu 是这个虚拟环境的名字) ...
- 开启httpfs
参考: https://docs.cloudera.com/documentation/enterprise/6/6.2/topics/admin_httpfs.html#xd_583c10bfdbd ...
- java 兔子生仔问题
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8 ...
- Heavy Transportation POJ 1797 最短路变形
Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...
- P4942小凯的数字
给定一个序列,如12345 56789 1011121314等,输出对其取余9的结果. 那么我们需要明白一个定理,一个序列对一个数的取余结果等于它各位之和取余那个数的结果.证明似乎是这样∑i=0na ...
- ARM Cortex-M 系列 MCU 错误追踪库 心得
一. 感谢CmBacktrace开源项目,git项目网站:https://github.com/armink/CmBacktrace 二. 移植CmBacktrace 2.1 准备好CmBacktra ...