编译原理:NFA转DFA
2016-11-21 16:58
120 查看
本文转自Wendell Yi 的文章 谢谢他的分享 原地址:http://www.cnblogs.com/wendellyi/p/3687765.html
下面图使用NFA表示的状态转换图,
![](http://images.cnitblog.com/i/307257/201404/250032159353124.jpg)
使用子集构造法,有如下过程,
ε-closure(0) = {0, 1, 2, 3, 4, 6, 7}
初始值,令为A
A = {0, 1, 2, 3, 4, 6, 7}
标记A
move(A, a) = {3, 8}
Dtran[A, a] = {1, 2, 3, 4, 6, 7, 8}
不重复,令为B
B = {1, 2, 3, 4, 6, 7, 8}
转换关系为A->a->B
move(A, b) = {5}
Dtran[A, b] = {1, 2, 4, 5, 6, 7}
不重复,令为C
C = {1, 2, 4, 5, 6, 7}
转换关系为A->b->C
标记B
move(B, a) = {3, 8}
由上可得
Dtran[B, a] = B
转换关系B->a->B
move(B, b) = {5, 9}
Dtran[B, b] = {1, 2, 4, 5, 6, 7, 9}
不重复,令为D
D = {1, 2, 4, 5, 6, 7, 9}
转换关系B->b->D
标记C
move(C, a) = {3, 8}
Dtran[C, a] = B
转换关系为C->a->B
move(C, b) = {5}
Dtran[C, b] = C
转换关系为C->b->C
标记D
move(D, a) = {3, 8}
Dtran[D, a] = B
转换关系为D->a->B
move(D, b) = {5}
Dtran[D, b] = C
转换关系D->b->C
最后得到下列状态转换表,
--------------------------------------------------------
NFA DFA a b
--------------------------------------------------------
{0, 1, 2, 3, 4, 6, 7} A B C
--------------------------------------------------------
{1, 2, 3, 4, 6, 7, 8} B B D
--------------------------------------------------------
{1, 2, 4, 5, 6, 7} C B C
--------------------------------------------------------
{1, 2, 4, 5, 6, 7, 9} D B C
--------------------------------------------------------
下面图使用NFA表示的状态转换图,
![](http://images.cnitblog.com/i/307257/201404/250032159353124.jpg)
使用子集构造法,有如下过程,
ε-closure(0) = {0, 1, 2, 3, 4, 6, 7}
初始值,令为A
A = {0, 1, 2, 3, 4, 6, 7}
标记A
move(A, a) = {3, 8}
Dtran[A, a] = {1, 2, 3, 4, 6, 7, 8}
不重复,令为B
B = {1, 2, 3, 4, 6, 7, 8}
转换关系为A->a->B
move(A, b) = {5}
Dtran[A, b] = {1, 2, 4, 5, 6, 7}
不重复,令为C
C = {1, 2, 4, 5, 6, 7}
转换关系为A->b->C
标记B
move(B, a) = {3, 8}
由上可得
Dtran[B, a] = B
转换关系B->a->B
move(B, b) = {5, 9}
Dtran[B, b] = {1, 2, 4, 5, 6, 7, 9}
不重复,令为D
D = {1, 2, 4, 5, 6, 7, 9}
转换关系B->b->D
标记C
move(C, a) = {3, 8}
Dtran[C, a] = B
转换关系为C->a->B
move(C, b) = {5}
Dtran[C, b] = C
转换关系为C->b->C
标记D
move(D, a) = {3, 8}
Dtran[D, a] = B
转换关系为D->a->B
move(D, b) = {5}
Dtran[D, b] = C
转换关系D->b->C
最后得到下列状态转换表,
--------------------------------------------------------
NFA DFA a b
--------------------------------------------------------
{0, 1, 2, 3, 4, 6, 7} A B C
--------------------------------------------------------
{1, 2, 3, 4, 6, 7, 8} B B D
--------------------------------------------------------
{1, 2, 4, 5, 6, 7} C B C
--------------------------------------------------------
{1, 2, 4, 5, 6, 7, 9} D B C
--------------------------------------------------------
相关文章推荐
- 编译原理中的正则表达式、NFA和DFA
- 编译原理:有穷自动机(DFA与NFA)
- 编译原理 NFA_DFA代码实现 bfs+dfs+状态压缩 伪代码
- 个人学习笔记——编译原理:NFA DFA
- [编译原理代码][NFA转DFA并最小化DFA并使用DFA进行词法分析]
- 编译原理(二) NFA的确定化及DFA的最小化的算法及C++实现
- 编译原理学习周入门教程--(9)编译程序第一个工作阶段-词法分析(NFA和DFA转换) .
- 【编译原理】:NFA转变为DFA的子集构造法
- 编译原理中的正则表达式、NFA和DFA
- <编译原理>NFA转化DFA 及 DFA的化简
- 【编译原理】:NFA转变为DFA的子集构造法
- 编译原理实验——将NFA转化为DFA
- 编译原理 —— 正则->NFA->DFA->MFA (Web)
- 编译原理与编译构造 由NFA变为DFA
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
- 编译原理之DFA的实现,使用双重switch
- 编译原理之DFA自动机的
- 【编译原理】:如何通过正规式写DFA
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——2 构造抽象语法树
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——4 构造DFA