nfa状态转换图正规式_编译原理-具有 e动作的NFA到DFA确定化算法

具有 e动作的NFA的确定化算法

算法:子集法

  • 与不存在e的NFA不一样,开始状态在查找过程中,因为e的存在,递归进行a/b时会产生n个不确定的状态链,需要对这些多个e组成的状态链,在转化为DFA过程中,转换,去除。从而达到可以转化成为DFA。也是必要条件。

算法解析:

ab2c596724bcb0ae34c3e596ee17ffdc.png
  • 初始C={};
  • e-closure(0)的意思是:从位于0的开始状态,经由任意条e弧而能到达的状态的集合。所以 e-closure(0)={0,1,2,4,7},{0,1,2,4,7}是新的唯一的状态,加入到C集合中,用T0表示。T0=e-e-closure(0)={0,1,2,4,7}。
  • 不能标识的意思:因为它是一个新的状态,我们在转化为DFA时,不能识别出它是已具有的与a,b前驱后继的状态,那么DFA在转化过程中,这个状态没办法与a,b建立关系,这样的后果是,a,b和这个状态没什么连接关系。所以,针对新的不能识别的状态,我们让它参与到a,b的路径定位运算。使得它可以成为一个能被DFA在转化过程中所接受的一个状态。
  • Move(T0,a)意思是:在T0状态集中,查找与a路径相关的状态的集合。
  • 即:e-closure(move(T0,a)={0,1,2,3,4,6,7,8},先查找C集合中,有没有对应的状态,明显没有,所以再定义一个T1,T1=e-closure(move(T0,a)={0,1,2,3,4,6,7,8},(以e弧相关状态为基础求与a弧相关状态的集合)。
  • 参与完到a,的路径定位运算后,接着b.
  • e-closure(move(T0,b)={1,2,4,5,6,7}先查找C集合中,有没有对应的状态,明显没有,所以再定义一个T2,
  • 此时C集合为{T0,T1,T2}
  • T0参与完 a,b的路径定位运算后。该T1。
  • 所以接着让T1也执行T0的操作,即T1查找与a弧相关的状态集。
  • e-closure(move(T1,a)={1,2,3,4,6,7,8},先查找C集合中,有没有对应的状态,发现对应于C集合中T1,即在DFA转化过程中,可以找到与a,b弧对应的状态标识。所以不需要再定义新的Ti,(i->1,2,3 ……)
  • T1执行b
  • e-closure(move(T1,b)={1,2,4,5,6,7,9},先查找C集合中,有没有对应的状态,明显没有,所以再定义一个T3,C={T0,T1,T2,T3};
  • 接着让T2执行操作,即T2查找与a,b弧相关的状态集。
  • e-closure(move(T2,a)={1,2,3,4,6,7,8},先查找C集合中,有没有对应的状态,发现对应于C集合的T1.
  • T2执行b
  • e-closure(move(T2,b)={1,2,4,5,6,7},查找C集合中, 发现对应于C集合的T2.
  • 接着让T3执行操作,即T3查找与a,b弧相关的状态集。
  • e-closure(move(T3,a)={1,2,3,4,6,7,8},查找C集合中, 发现对应于C集合的T1.
  • e-closure(move(T3,b)={1,2,3,5,6,7,10},查找C集合中,有没有对应的状态,明显没有,所以再定义一个T4,C={T0,T1,T2,T3,T4};
  • 接着让T4执行操作,即T4查找与a,b弧相关的状态集。
  • e-closure(move(T4,a)={1,2,3,4,6,7,8},查找C集合中, 发现对应于C集合的T1.
  • e-closure(move(T4,b)={1,2,4,5,6,7},查找C集合中, 发现对应于C集合的T2.

C集合查找新状态对应完毕。

综上信息归纳:M={S,E,D,S0,St}
T0={0,1,2,4,7}
T1={1,2,3,4,6,7,8}
T2={1,2,4,5,6,7}
T3={1,2,4,5,6,7,9}
T4={1,2,4,5,6,7,10}

S={[T0],[T1],[T2],[T3],T[4]}
E={a,b}
D([T0],a)= [T1]
D([T0],b)= [T2]
D([T1],a)= [T1]
D([T1],b)= [T3]
D([T2],a)= [T1]
D([T2],b)= [T2]
D([T3],a)= [T1]
D([T3],b)= [T4]
D([T4],a)= [T1]
D([T4],a)= [T2]

S0=[T0]
St=[T4]
  • 由上面推导的内容,就可以将NFA有e符号的弧,转化为无符号的DFA。

未经允许,禁止转载

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值