[课本]正规式转NFA,NFA转换为DFA以及DFA化简

教材使用《程序设计语言编译原理》-3版,作者:陈火旺、刘春林等。
用自己的话把教材上的例题复现了一遍,如有不足,请指教。

NFA :非确定有限自动机;
DFA :确定有限自动机;

正规式转NFA

在这里插入图片描述
就这么简单。。。

NFA -> DFA

在这里插入图片描述
图3.6 非确定有限自动机

涉及到课本 P49~P50 讲解的子集法——把 NFA 确定为 DFA 的方法。(下面再解释解释)

定义

  • M : NFA
  • M’ : 最终得到的 NFA
  • M’’ : DFA
    假定 I 是 M’ 的状态集的子集,
  • ε_CLOSURE(I) : 由 ε 弧连接起来的一个连通分量
    I 的 ε 闭包,包括 I 本身,也包括从其中任意一个状态元素 q 通过任意条 ε 弧可以到达的状态 q’
    在这里插入图片描述
    图3.6 举例:像 ε_CLOSURE({X}) = {X, 5, 1}, ε_CLOSURE({2}) = {2, 6, Y}
    就是由 ε 弧连接起来的一个连通分量
  • Ia : 由 a 弧连接起来的一个连通分量
    Ia = ε_CLOSURE(J),J 中的状态 q’ 是从 I 中任意一个状态 q 通过一条 a 弧可以达到的状态,同时不要忘记通过任意条 ε 弧 到达的状态;
    图3.6 举例 : {5, 3, 1}a = {5, 3, 1, 2, 6, 7},
    分析过程
原状态 通过 a 弧到达的状态
5 5
3 2
1 3

得到状态集合:{5, 3, 2};

原状态 通过 ε 弧到达的状态
5 1
3 \
2 6, Y

最后得到状态集合:{5, 3, 1, 2, 6, 7};
注意,每个状态,特别是终态,都可以看作有一条 ε 弧连接自己,所以终态只能读取 ε,其它的读取不了。上面有些状态集合里含有终态 Y ,是由前面的状态通过 ε 弧达到的。

例3.3 NFA 转换为 DFA

正规式 (a|b)*(aa|bb)(a|b)* 对应的 NFA 如图 3.6 所示,其中 X 为初态,Y 为终态。按照上述过程(子集法)构造出来的状态转换矩阵见表 3.3
在这里插入图片描述

表 3.3 对应于例 3.3 中正规式的状态转换矩阵

构造过程

把初始状态 X 的 ε 闭包,即 ε_CLOSURE({X}), 现在记为 I,放在第一行第一列,求出Ia, Ib,将出现在右边列(除最左边一列外的所以列),但是没有出现在最左边列的状态集合,添加到最左边列中,重复操作,直到右边列中出现的所有状态集都在最左边列出现过。
在这里插入图片描述

重新命名

在这里插入图片描述
对表 3.3 中的所有状态子集重新命名,其中含有原终态 Y 的新状态也是终态,标记上双圆圈,得到表 3.4 所列的状态转换矩阵;
在这里插入图片描述
表 3.4 对表 3.3 中状态子集重新命名后的状态转换矩阵

由表 3.4 画出对应的状态图 (图 3.8):
在这里插入图片描述
图 3.8 未化简的 DFA

例 3.6 化简 DFA

化简图 3.8 表示的 DFA;
首先把 M 的状态分成两组 :终态组非终态组
在这里插入图片描述
得到化简后的图像 (图 3.5):
在这里插入图片描述
图 3.5 状态转换图

猜你喜欢

转载自blog.csdn.net/weixin_44092088/article/details/111354069