这里引用b站一个老哥的讲解视频,建议1.5倍速观看,看到15分钟左右的时候你就完全明白了。
编译原理正规表达式转NFA到DFA再化简
视频里用的方法叫做子集法,即将初始状态变为原本初始状态的 epsilon - closure(E(p))。再记录新的初始状态在不同输入下的状态结果,得到一系列子集(因为每个集合都是∑的一个子集)。再重新命名各个子集,画出新的状态机,就是DFA。
注意事项:
- 得到一个新的子集后最好给它新的命名,例如Ia、Iaa、Iaab这种,以免漏下某个集合
- DFA的结束态是所有包含原NFA结束态的集合
- 一旦不会产生新的子集,并且每个子集的新输入情况都判断过了,就可以停止。