编译原理:NFA转DFA

本文转自Wendell Yi 的文章 谢谢他的分享 原地址:http://www.cnblogs.com/wendellyi/p/3687765.html

下面图使用NFA表示的状态转换图,

使用子集构造法,有如下过程,

ε-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
--------------------------------------------------------

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值