NFA与DFA的等价性
对于每一个NFA M都有一个DFA M,使得L(M)=L(M,)
等价性证明
思路:NFA与DFA的区别
| NFA | DFA | |
|---|---|---|
| 初始状态 | 不唯一 | 唯一 |
| 弧上标记 | 字(单字符字、ε) | 字符 |
| 转换关系 | 非确定 | 确定 |
假定NFA M=<S, E, δ, So, F> ,我们对M的状态转换图进行以下改造:
1.解决初始状态唯一性
引进新的初态结点X和终态结点Y , X,Y∉S ,从X到S0中任意状态结点连一条:箭弧 ,从F中任意状态结点连一条:箭弧到Y。
例子:
2.将字变为字符
对M的状态转换图进一步施行替换,其中k是新引入的状态。逐步把这个图转变为每条弧只标记为Σ上的一个字符或ε ,最后得到一个NFA M’,显然L(M’)=L(M)
3.NFA确定化–子集法(解决:弧和转换关系)
设I是的状态集的一个子集, 定义的ε-闭包ε-closure(I)为:
- 若s∈I ,则s∈ε-closure(I) ;
- 若s∈I ,则从s出发经过任意条ε弧而能到达的任何状态s’都属于ε-closure(I),即:
- ε-closure(I)=IU{s’ |从某个s∈I出发经过任意条ε弧能到达s’ }
设a是2中的一一个字符,定义:
Ia= ε-closure(J)
其中, J为I中的某个状态出发经过一条a弧而到达的状态集合。即:
I经过a弧所到达的状态一定在状态集Ia里。
(注意:Ø的Ia,Ib也要算,Ø的Ia,Ib也是空集)
按照上面的步骤将转换表画出:
图中:
I为{X}的闭包
J为I经过一条a或b的结点集合
Ia,Ib是J的闭包,J经过ε到达的结点集合,包括了自身。
把表看成状态转换矩阵,子集视为状态,其中:
- 初态是ε-closure({X})
- 终态是含有原终态Y的子集
状态转换矩阵:
根据状态转换矩阵画状态图:
DFA化简
- 对于给定的DFA M ,寻找一个状态数比M少的DFAM’ ,使得L(M)=L(M’)
- 状态的等价性
- 假设s和t为M的两个状态,称s和t等价:如果从状态s出发能读出某个字a而停止于终态,那么同样,从t出发也能读出a而停止于终态;反之亦然。
- 两个状态不等价,则称它们是可区别的,即:
存在一个字a ,要么s读出a停止于终态而t读出a停止于非终态,要么t读出a停止于终态而s读出a停止于非终态。
基本思想
- 把M的状态集划分为一些不相交的子集,使得任何两个不同子集的状态是可区别的,而同一子集的任何两个状态是等价的。
- 最后,让每个子集选出一个代表,同时消去其他状态。
例子:
第一次划分:终态与非终态
I(1)={0,1,2}; I(2)={3,4,5,6}
计算Ia即:集合I经过a所到达的状态
I(1)a={1,3} 0,2到1;1到3;在不同的子集,继续划分:
I(11)={0,2};I(12)=1; I(2)={3,4,5,6}
I(11)a={1};I(11)b={2,4};在不同的子集,继续划分:
I(111)a={0};I(112)b={2};I(12)=1; I(2)={3,4,5,6}
I(2)a={3,6} I(2)b={4,5} 在同一的子集
我们用状态3来代表4, 5, 6,即:把所有由4,5, 6射出的弧都由3射出,所有射入4,5, 6的弧都射入状态3。如图:
正规式与有限自动机的等价性
- 一个正规式r与一一个有限自动机M等价 :L( r )=L(M)
- FA->正规式,
- 对任何FA M ,都存在一一个正规式r ,使得L( r )= L(M)。
- 正规式-> FA
- 对任何正规式r,都存在一个FA M ,使得L(M)=L( r )。
NFA->正规式
- 对转换图概念拓广, 每条弧可用一个正规式作标记。
- 定理:对上任一NFA M,都存在一个Σ上的正规式r ,使得L®=L(M)。
假定NFA M=<S, Σ, δ, So, F> ,我们对M的状态转换图进行以下改造:
在M的转换图上加进两个状态X和Y,从X用ε弧连接到M的所有初态结点,从M的所有终态结点用ε弧连接到Y ,从而形成一个新的NFA ,记为M’,它只有一个初态X和一个终态Y,显然L(M)=L(M’)。如图:
然后,反复使用下面的三条规则,逐步消去结点,直到只剩下X和Y为止。
最后,X到Y的弧上标记的正规式即为所构造的正规式r
显然L®= L(M’)= L(M)
正规式->NFA
1.若r具有零个运算符,则r=ε或r=Ø或r=a ,其中a∈Σ。
2.假设对于运算符数目少于k(k>1)的正规式成立。
当r中含有k个运算符时, r有三种情形:
- r=r1|r2
- r=r1*r2
- r=r1*
我们将r用NFA->正规式的三条规则进行分割。
正规式、正规集、FA的关系
词法分析器的自动产生–LEX
LEX源程序
- 辅助定义
- 识别规则
辅助定义:以文法形式给一些常用的正规式命名,如:
识别规则:包含多条词法规则
LEX的工作过程
- 对每条识别规则Pi构造一个相应的非确定有限自动机Mi;
- 引进一个新初态X ,通过ε弧,将这些自动机连接成一个新的NFA ;
- 把M确定化、最小化,生成该DFA的状态转换表和控制执行程序
词法分析一句话概括: 从正规集转换为正规式,再转换为NFA ,再转换为DFA,再进行确定化、最小化,化简DFA。