• 正规式——》最小化DFA

1.先把正则式——》NFA(非确定有穷自动机)

涉及一系列分解规则

2.再把NFA通过"子集构造法"——》DFA

通过子集构造法将NFA转化为DFA

将表里的变量名用比较简单的符号代替(最好是在进行构造的时候顺手在草稿纸上标记好,方便后面的工作)

对照上面的表,画出DFA的状态转换图

图中0,1,2,3,4,5都是终态,因为他们的集合里都包含了最初的终态“数字9”。

3.再把DFA通过"分割法”进行最小化

  • 消除多余状态

从这个状态没有通路到达终态;S1 
从开始状态出发,任何输入串也不能到达的那个状态。S2 

  • 合并等价状态

采用“分割法”

兼容性(一致性)条件——同是终态或同是非终态 
传播性(蔓延性)条件——对于所有输入符号,状态s和状态t必须转换到等价的状态里。

DFA的最小化—例子,第一步都是固定的。分成终态和非终态

1.将M的状态分为两个子集一个由终态k1={C,D,E,F}组成,一个由非终态k2={S,A,B}组成,

2.考察{S,A,B}是否可分.

因为A经过a到达C属于k1.而S经过a到达A属于k2.B经过a到达A属于k2,所以K2继续划分为{S,B},{A},

3.考察{S,B}是否可再分:

B经过b到达D属于k1.S经过b到达B属于k2,所以S,B可以划分。划分为{S},{B}

4.考察{C,D,E,F}是否可再分: 

因为C,D,E,F经过a和b到达的状态都属于{C,D,E,F}=k1所以相同,所以不可再分:

5.{C,D,E,F}以{D}来代替则,因为CDEF相同,你也可以用C来代替。无所谓的最小化的DFA如图,: 

“后面这些内容鄙人以为书上都有,列出来整理一下思路、多加练习即可,不必浪费时间敲到电脑上”

  • 正则表达式——》正则文法
正则表达式是哟中抽象数学表达式,而正则文法是一种N型文法
由正则表达式转换为正则文法的步骤如下:
  • 令开始符号为S,S属于非终结符集,VT等于字符集
  • 先生成正规产生式S->r
  • 再分解正规产生式S->r,分解规则如下:

(R.1)对形如A->r1r2的正规产生式分解为

·
A->r1B,B->r2,B属于非终结符

(R.2)对形如A->r1*r2的正规产生式分解为

A->rB,A->r1,B->rB,B->r1,B属于非终结符
(R.3)对形如A->r1|r2的正规产生式分解为A->r1,A->r2
不断应用分解规则做变换,知道每个产生式右端只含一个非终结符为止。
  • 正则文法——》正则表达式
从正则文法转换为正规表达式,实际上就是一个推倒过程。从开始符号出发,合并正规产生式S->r。合并规则如下:
(R.1)对形如A->xB,B->y的正规产生式合并为A=xy
 (R.2)对形如A->xA|y的正规表达式合并为为A=x*y
(R.3)对形如A->x|y的正规产生式合并为A=x|y
如果正规产生式中有相同的左边表达式,可以先合并出发点相同的
  • 有限自动机——》正则表达式
转换步骤:
首先加入初态x和终态y,构成一个新的NFA
然后反复使用替换规则,反复使用替换规则逐步消去NFA中的状态节点,直至剩下x,y为止。
  • 正则表达式——》有限自动机

自动构造词法分析器的步骤——正规式转换为最小化DFA的更多相关文章

  1. 正规式->最小化DFA说明

      整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过"子集构造法"转化为DFA, 三,在把DFA通过"分割法"进行最小化 ...

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

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

  3. 报错:无法将类型"System.Data.EntityState"隐式转换为"System.Data.Entity.EntityState"

    报错:无法将类型"System.Data.EntityState"隐式转换为"System.Data.Entity.EntityState".   出错语句停留 ...

  4. 正规式α向有限自动机M的转换

    [注:这一节是在学习东南大学廖力老师的公开课时,所记录的一些知识点截屏,谢谢廖力老师的辛劳付出] 引入3条正规式分裂规则来分裂α,所得到的是NFA  M(因为包含ε弧,之后进行确定化就是所需要求得DF ...

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

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

  6. 正规式与正规集,DFA与NFA

    词法分析器的设计 词法分析器的功能:输入源程序.输出单词符号 词法分析器的设计:给出程序设计语言的单词规范--单词表, 对照单词表设计识别该语言所有单词的状态转换图, 根据状态转换图编写词法分析程序 ...

  7. using 语句中使用的类型必须可隐式转换为“System.IDisposable

    在使用 EF 出现 using 语句中使用的类型必须可隐式转换为“System.IDisposable 今天写在这里分享给大家 出现这样的问题,是因为没有引用  EntityFramework 这个程 ...

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

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

  9. NHibernate无法将类型“System.Collections.Generic.IList<T>”隐式转换为“System.Collections.Generic.IList<IT>

    API有一个需要实现的抽象方法: public IList<IPermission> GetPermissions(); 需要注意的是IList<IPermission>这个泛 ...

随机推荐

  1. Java ThreadLocal 使用详解

    ThreadLocal的官方API解释为: "该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每 ...

  2. MongoDB小结08 - update【$pull】

    它可以删除所匹配的值,如果[1,1,2,1] 执行pull 1 后,只剩下[2]

  3. 百万级 TCP 长连接即时通讯框架 t-io

    原文:http://www.t-io.org:9292/ https://www.oschina.net/p/t-io

  4. Delphi 2007 的重构功能

    Move 移动 1.将选定的静态函数从一个类移动到另一个类 2.将选中的类或接口移动到其他单元 Extract Interface 抽取接口 将选定的函数抽取到一个新的接口中 Extract Supe ...

  5. Word Break II 求把字符串拆分为字典里的单词的全部方案 @LeetCode

    这道题相似  Word Break 推断能否把字符串拆分为字典里的单词 @LeetCode 只不过要求计算的并不不过能否拆分,而是要求出全部的拆分方案. 因此用递归. 可是直接递归做会超时,原因是Le ...

  6. iOS自己定义返回button(不影响返回手势)

    此方法能够自己定义返回button,且不影响返回手势. 新方法: self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] in ...

  7. 怎样在Swift中使用NSError

    步骤一:声明NSError变量. 一定要加"?",不加或者加"!"都不行.由于使用了optional,所以要用var而不用let. var error: NSE ...

  8. 我在CSDN开通博客啦!

    今天,我最终在CSDN开通博客啦! 

  9. Cocos2d-x3.1下 Android,APK自己主动升级

    项目要做Android的自己主动升级,对于我们之前做iOS的转Cocos开发做Android方面的功能..... 不正确说了.这里记录下我的实现过程. 原文地址:http://blog.csdn.ne ...

  10. unity3D游戏开发实战原创视频讲座系列13之帽子戏法游戏开发(预告)

    文件夹 第一讲  游戏演示项目创建 第二讲 游戏场景的编辑 第三讲  帽子的移动 第四讲  炮弹的产生 第六讲  游戏界面的完好 第七讲 各种UI的制作 第八讲  分数和爆炸特效   视持续更新中.. ...