[课本]正规式转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},就是由 ε 弧连接起来的⼀个连通分量;
I : 由 a 弧连接起来的⼀个连通分量
I = ε_CLOSURE(J),J 中的状态 q’ 是从 I 中任意⼀个状态 q 通过⼀条 a 弧可以达到的状态,同时不
克鲁格狮要忘记通过任意条 ε 弧 到达的状态;
图3.6 举例 : {5, 3, 1} = {5, 3, 1, 2, 6, 7},
分析过程:
原状态
通过 a 弧到达的状态5
53
213
得到状态集合:{5, 3, 2};
原状态
通过 ε 弧到达的状态5
民间传奇
13
\26, Y
最后得到状态集合:{5, 3, 1, 2, 6, 7};
注意,每个状态,特别是终态,都可以看作有⼀条 ε 弧连接⾃⼰,所以终态只能读取 ε,其它的读取不了。上⾯有些状态集合⾥含有终态Y ,是由前⾯的状态通过 ε 弧达到的。
例3.3 NFA 转换为 DFA
a a a
安全事项
正规式 (a|b)(aa|bb)(a|b) 对应的 NFA 如图 3.6 所⽰,其中 X 为初态,Y 为终态。按照上述过程(⼦集法)构造出来的状态转换矩阵见表
3.3
表 3.3 对应于例 3.3 中正规式的状态转换矩阵
构造过程
**
美国的国花把初始状态 X 的 ε 闭包,即 ε_CLOSURE({X}), 现在记为 I,放在第⼀⾏第⼀列,求出I , I ,将出现在右边列(除最左边⼀列外的所以
列),但是没有出现在最左边列的状态集合,添加到最左边列中,重复操作,直到右边列中出现的所有状态集都在最左边列出现过。重新命名
有关秋天的文章
a b
对表 3.3 中的所有状态⼦集重新命名,其中含有原终态 Y 的新状态也是终态,标记上双圆圈,得到表 3.4 所列的状态转换矩阵;
雕塑公园
表 3.4 对表 3.3 中状态⼦集重新命名后的状态转换矩阵