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。

相关文章: