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

时间:2021-09-21 02:10:21

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

解题步骤:

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

解:

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

画出 NFA 状态转换图如下:

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

子集法的表格:

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 等价的 DFA - 例题解析

验证

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

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

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

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

  1. 学了编译原理能否用 Java 写一个编译器或解释器?

    16 个回答 默认排序​ RednaxelaFX JavaScript.编译原理.编程 等 7 个话题的优秀回答者 282 人赞同了该回答 能.我一开始学编译原理的时候就是用Java写了好多小编译器和 ...

  2. 有穷自动机(NFA、DFA)&正规文法&正规式之间的相互转化构造方法

    在编译原理(第三版清华大学出版社出版)中第三章的词法分析中,3.4.3.5.3.6小节中分别讲解了 1.什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机) 2.如何将  不确定的有穷自动机 ...

  3. 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集

    <编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...

  4. 编译原理-词法分析04-NFA &amp&semi; 代码实现

    编译原理-词法分析04-NFA & 代码实现 0.术语 NFA 非确定性有穷自动机nondeterministic finite automation. ε-转换ε-transition 是无 ...

  5. &lbrack;Vue源码&rsqb;一起来学Vue模板编译原理&lpar;一&rpar;-Template生成AST

    本文我们一起通过学习Vue模板编译原理(一)-Template生成AST来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学Vu ...

  6. &lbrack;Vue源码&rsqb;一起来学Vue模板编译原理(二)-AST生成Render字符串

    本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...

  7. 编译原理根据项目集规范族构造LR&lpar;0&rpar;分析表

    转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...

  8. 编译原理LR&lpar;0&rpar;项目集规范族的构造详解

    转载于https://blog.csdn.net/johan_joe_king/article/details/79051993#comments 学编译原理的时候,感觉什么LL(1).LR(0).S ...

  9. 编译原理:正规式转变成DFA算法

    //将正规式转变成NFApackage hjzgg.formal_ceremony_to_dfa; import java.util.ArrayList; class Edge{ public int ...

随机推荐

  1. test lab ~ triangle test by using junit and coverage

    first set up a new folder as your test class place, and then let your package in test class folder b ...

  2. ORA-20000 ORU-10027 buffer overflow limit of 2000 bytes

    这是在pl/sql中执行存储过程报的错,原因是serveroutput限制存储, 解决方案:set serveroutput on size 10000000;

  3. python 输出十六进制中文乱码

    代码中红色字体为解决方案: #-*-coding:utf-8-* import csv filename='C:\Users\yaru\Desktop\Senti_Value(1).csv' data ...

  4. c&plus;&plus;中两个类互相引用的问题

    最近在改一个C++程序的时候碰到一条警告信息,警告信息为:“ 删除指向不完整“Q2DTorusNode”类型的指针:没有调用析构函数                1> c:\users\lxw ...

  5. Shader Model 版本与DirectX的关系(OpenGL对应的呢?)

    http://blog.sina.com.cn/s/blog_6e521a600100q4dr.html DX9还是能支持到固定管线的,虽然说是在内部被转换成shader: DX10明确不再支持固定管 ...

  6. Visual Studio 2013新功能

    微软打破了Visual Studio两年升级一次的传统,Visual Studio 2012发布还不足一年,微软就计划发布了Visual Studio 2013了.在今天的TechEd大会上,微软宣布 ...

  7. Java中的IO学习总结

    今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬盘.内存.键盘等处理 ...

  8. java之web开发过滤器

    我们通常上网的时候都会遇到一个问题,看到一个视频之类的,想要点开观看,点击之后,网页 提醒你:您尚未登录,是否要登录?然后巴拉巴拉跑去输账号密码. 那么这就是一个过滤器的功能,当你要访问一个资源的时候 ...

  9. mongDb安装

    1.下载安装包:https://www.mongodb.com/download-center#community 2.tar -xzvf mongodb-linux-x86_64-rhel70-3. ...

  10. SQL Serever学习4

    SQL Server系统中数据库相关概念 在SQLServer数据库系统中分为2大类,系统数据库和用户数据库. SQLServer安装后系统会自动生成4个系统数据库,他们是Master,Model,M ...