• 正规式——》最小化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. [K/3Cloud] 在设计时复制已有表单菜单或菜单项快速建立菜单

    1.打开已有表单XML,找到FormAppearance的Menu节点,按Ctrl+C复制 <Appearances> <FormAppearance ElementType=&qu ...

  2. [K/3Cloud] 在插件中为辅助资料赋值

    因为辅助资料其实是一种特殊的基础资料,其赋值方法跟基础资料类似 this.Model.SetItemValueByNumber("FAssistant1", "Ameri ...

  3. 修改xampp的mysql默认密码

    MySQL 的“root”用户默认状态是没有密码的,所以在 PHP 中您可以使用 mysql_connect("localhost","root"," ...

  4. JDBC的流数据

    以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/streaming-data.html: PreparedStatement对象必须具备使用输入和输出流 ...

  5. centos7更新、更新、每天更新、每天自动更新

    每一天我们的系统时时刻刻都被凶狠之徒盯着,保持软件在最新的状态是其中一项我们必须做,也很容易做到的工作. 首先我们立即手动更新所有预先安装的软件: yum -y update 跟着设定系统定时自动更新 ...

  6. Office 如何打印彩色照片能取得较好的效果

    1 如下图所示,随便打开一个照片,点击打印,纸张大小,质量,纸张类型如下所示.   2 这样打印的设置还是不够的,因为"高级光面纸"或者类似的纸张类型,会把色彩浓度调大,相对于普通 ...

  7. vuex 存值 及 取值 的操作

    1.传值 // 定义参数 let params = { workItemId: workItemId, flowInstId: flowInstId, itemStatus: itemStatus, ...

  8. hdu oj 1285 确定比赛名次

    hdu oj 1285 确定比赛名次 题目: 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  9. JAVA编程思想(2) - 操作符(二)

    5. 直接常量 -一般来说,假设程序里使用了"直接常量",编译器能够准确的知道要生成什么样的类型.但有时候却是模棱两可的. 这时候须要我们对编译器进行适当的"指导&quo ...

  10. 在阿里云域名https配置(nginx为例)

    如题: 在阿里云上注册了域名之后在阿里云域名控制台配置https: 1.在域名控制台选择要配置的域名,并在操作栏点击“解析” 2.在域名解析点击更多下的SSL进入到证书列表页,这里有收费的也有免费的, ...