有限自动机;正规式->NFA->DFA->最小化DFA->词法分析器

 2.3 记号的识别---有限自动机

2.3.1 不确定的有限自动机(NFA)

NFA是一个五元组,M=(S,Σ,move,s0,F)

  1. S是有限个状态的集合
  2. Σ是有限个输入字符(包括ε)的集合
  3. move是一个状态转移函数,move(si,ch)=sj表示当前状态si下若遇到输入字符ch,则迁移到状态sj
  4. s0是唯一的初态
  5. F是终态集,它是S的子集,包含了所有的终态

一个例题看懂NFA

识别由正规式(a|b)*abb说明的记号的NFA定义如下

S(0,1,2,3) Σ={a,b},s0=0,F={3}

move={move(0,a)=0,move(0,a)=1,move(0,b)=0,move(1,b)=2,move(2,b)=3}

下图是两种识别(a|b)*abb的NFA的方法

A.

                                  上图是转换图表示的NFA

B.

上图是状态转换矩阵表示的NFA

2.3.2 确定的有限自动机(DFA)

DFA是NFA的一个特例

  1. 没有状态具有ε状态转移,即状态转换图中没有标记ε的边
  2. 对每一个状态s和每一个字符a,最多有一个下一个状态

与NFA相比,DFA的特点就是它的确定性

2.3.3 有限自动机的等价

NFA和DFA统称为有限自动机

有限一词应怎样理解呢?

有限是指自动机的状态数是有限

 

定义:若有限自动机它们识别同一个正规集,则称M和M’是等价的

                                                      2.4 从正规式到词法分析器

 

2.4.1从正规式到NFA

Thompson算法

自己总结的过程

简要来说:其实就是把几种最简单的基本运算用NFA表示出来,以后遇到困难的正规式,不外乎就是从基本运算混合出来的!!

所以我们只需要研究,搞清楚几种简单运算的正规式的来的原理,就行了!!

 

在Thompson算法中,几种基本运算的NFA构造

该NFA接受{ε}

该NFA接受{a}

该NFA接受L(p)∪L(q)

该NFA接受L(p)L(q)

该NFA接受L(p*)

看例题2.11,用Thompson算法构造正规式r=(a|b)*abb的N(r)

即为求r的不确定有限自动机

r中由∪和闭包、接受a和接受b构成

直接将他们和上面基本的运算的NFA 结合对比画出来即可

 

2.4.2 从 NFA到DFA

采用并行的方法,基本思想就是将不确定的下一状态确定化

怎么确定化呢?

下面看一道例题:

将下面这个NFA变成DFA!!

方法:如果从当前状态出发经过c可能到达不止一个状态,则将这些所有状态组成一个集合,而虚拟的认为到达这一状态集!!

按照上述方法,从甲地到乙地的路径如下所示:

甲__c__{1,2}__c__{3,乙}    到达乙地成功

DFA如下:

注意:计算DFA,只能是由同一条边到达不同状态的才能合并状态!!,比如说都是甲到丙经过c边

 

2.4.3最小化DFA的状态数

  1. 初始划分,将所有状态按终态和非终态分成两组
  2. 利用可区分概念,反复分裂,元素个数不为1的组,直到无法区分(分裂)为止
  3. 最后,选代表,修改状态转移,每一个组选一个代表

 

 

2.4.5由DFA构造词法分析器

  1. 表驱动型词法分析器

将DFA用状态转换矩阵表示,它和模拟DFA的算法构成了表驱动型的词法分析器

状态转换矩阵是分析器的分析表

算法是它的驱动器

 

  1. 直接编码型词法分析器

无需分析表分析动作,直接将DFA变成程序,直接用程序模拟DFA行为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤求凰的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值