正规式->最小化DFA说明

 

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

一步很简单,就是反复运用下图的规则,图1

这样就能转换到NFA了。
给出一个例题,来自Google book。本文主要根据这个例题来讲,图2

二.子集构造法。
同样的例题,把转换好的NFA确定化,图3

这个表是从NFA到DFA的时候必须要用到的。第一列第一行I的意思是从NFA的起始节点经过任意个ε所能到达的结点集合。Ia表示从该集合开始经过一个a所能到达的集合,经过一个a的意思是可以略过前后的ε。同样Ib也就是经过一个b,可以略过前后任意个ε。
至于第二行以及后面的I是怎么确定的。我参考了一些题目才明白,原来就是看上面的Ia和Ib哪个还没出现在I列,就拿下来进行运算,该列对应的Ia和Ib就是前面我说的那样推导。

如果还不太明白,看图就是了。你会发现I中的几个项目都在Ia和Ib中出现了。而且是完全出现

这步做完以后,为了画出最后的DFA,那么肯定得标出一些号来,比如1.2.3.。或者A。 B。c,我一般标的方法是先把I列全部标上1.2.3.递增。然后看1表示的集合和Ia和Ib中的哪个集合一样,就把那个集合也表示为1.继续向下做。最后会得到这样一个表格。图4

至此,就可以表示出DFA了。就对照上面那个表,从0节点开始经过a到1.经过b到2,就这样画就行了。。

最后的DFA如下图,图5

双圈的表示终态,这个是怎么来的呢。去看看图4,会发现有些项之前有双圈标志,这个是因为在NFA图2中,9为终态,所以所有包含9的集合都被认为是终态集,改成1.2.3.。。方便画节点后就需要把这些点作为终态了。。

三.最小化,分割法。

FA的最小化就是寻求最小状态DFA

最小状态DFA的含义:
1.没有多余状态(死状态)

 

除多余状态
什么是多余状态?
从这个状态没有通路到达终态;S1
从开始状态出发,任何输入串也不能到达的那个状态。S2
如何消除多余状态?
删除

2. 没有两个状态是互相等价(不可区别)
两个状态s和t等价的条件:
兼容性(一致性)条件——同是终态或同是非终态
传播性(蔓延性)条件——对于所有输入符号,状态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如图,:

时间: 2024-10-16 21:09:01

正规式->最小化DFA说明的相关文章

自动构造词法分析器的步骤——正规式转换为最小化DFA

3p渤采刂9味7J1PF四刚http://www.zcool.com.cn/collection/ZMTkwNDQ0MzY=.html d4刀9瓷RHX1秩http://www.zcool.com.cn/collection/ZMTkwNDQ0ODg=.html 6u未猎7贺97S9持OEUhttp://www.zcool.com.cn/collection/ZMTkwNDQ1MTI=.html 8Y绽兆懈B婆3S7YO糜http://www.zcool.com.cn/collection/ZM

编译原理——正规式转DFA算法概述

一.概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机(Finite Automata).正规式是描述单词规则的工具,首先要明确的一点是所有单词组成的是一个无穷的集合,而正规式正是描述这种无穷集合的一个工具:有穷自动机则是识别正规式的一个有效的工具,它分为确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷

实现一个 DFA 正则表达式引擎 - 4. DFA 的最小化

(正则引擎已完成,Github) 最小化 DFA 是引擎中另外一个略繁琐的点(第一个是构建语法树). 基本思路是,先对 DFA 进行重命名,然后引入一个拒绝态 0,定义所有状态经过非接受字符转到状态 0,0 接受所有字符转换为自身.也就是说我们先建立一个转换表,然后把第一行填写为: state a b c d e f g h ... 0 0 0 0 0 0 0 0 0 0 再之后,我们讲 DFA 的其余状态从 1 开始重命名,填入状态表.代码实现如下: // rename all states

DFA最小化

1.将DFA最小化:教材P65 第9题 DFA最小化的图如下 用正规式描述其所识别的语言: a(c*|{da}*)bb* 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 S→ 0A|1B→S→ 0(1S|1)|1(0S|0)→01S | 01 | 10S | 10 →(01 | 10)S | (01 | 10)→(01 | 10)*(01 | 10) DFA最小化的图如下 3.自上而下语法分析,回溯产生的原因是什么? 原因:文法的产生式有问题 4.P100 练

DFA最小化,语法分析初步

1.将DFA最小化:教材P65 第9题 L(M) = ac*(da)*bb* 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 正规式 : S→0A | 1B = 0 ( S1 + 1 )  + 1(S0 + 0)= 01S + 01 + 10S + 10 =  (01 + 10)S + (01 + 10) →aS |a   即a =(01 + 10) .而该形式产生 a*a  ,  既有 Z = (01 +10)*(01 + 10). 自动机: 确定性自动机:

9、DFA最小化,语法分析初步

1.将DFA最小化:教材P65 第9题 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.给定如下文法 G[S]: S →AB A → aA | ? B → b | bB 给出句子aaab 的一个自顶向下语法分析过程,并说明回溯产生的原因是什么? 4.P100 练习4,反复提取公共左因子,对文法进行改写. S→C$ C→bA|aB A→a|aC|bAA B→b|bC|aBB ------------------------------------------

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

在编译原理(第三版清华大学出版社出版)中第三章的词法分析中,3.4.3.5.3.6小节中分别讲解了 1.什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机) 2.如何将  不确定的有穷自动机(NFA)  转化为  确定的有穷自动机(DFA); 3.如何化简DFA; 4.正规式和有穷自动机的等价性(根据给出的正规式构造有穷自动机); 5.正规文法和有穷自动机的等价性(根据给出的正规式构建有穷自动机): 个人在开始学习这一章节的时候,课上听得有些迷惑,并且看书也是感觉没有头绪,后来花了一些

实验九——DFA最小化,语法分析初步

1.将DFA最小化:教材P65 第9题 ① {1,2,3,4,5} {6,7} {1,2,}b{2} {3,4}b{6,7} {5}b {6,7}b{6,7} ② {1,2,},{3,4},{5} {6,7} 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.给定如下文法 G[S]: S →AB A → aA | ? B → b | bB 给出句子aaab 的一个自顶向下语法分析过程,并说明回溯产生的原因是什么? 文法的产生式有问题 4.P100 练习4,反

DFA最小化实例

原始DFA如下图所示 最小化的定义:1.没有多余的状态(死状态):2.没有两个状态是相互等价的: 两个状态等价的含义:1.兼容性(一致性)--同是终态或同是非终态:2.传播性(蔓延性)--从s出发读入某个a和从t出发经过某个a并且经过某个b到达的状态等价. 令M为DFA中所有状态的集合.1.开始做粗略划分,将状态集M的状态划分为,k1 = {C, D, E, F} k2 = {S, A, B}2.考察k1是否可分,由下面的转换关系k2可以分为{S, B}和{A}.A -> a -> k1 S