正规式和有限自动机三(DFA化简)

算法思路:

  1. 把正规式转换成DFA后的状态集划分成两个集合,终态组集合T(包含DFA的终态Y)和非终态组集合N(不包含DFA的终态Y),并把集合T和N加入集合C中。
  2. 对于集合C中每个状态集set,假设set中有n个状态s1,s2,......,sn,对于文法的所有终结符,识别一个终结符a后,转换到新的状态s1',s2',......,sn'。如果s1',s2',......,sn'属于C中的同一个状态集,则不必将set划分成不同的状态集。如果不属于C中的同一个状态集,就需要将set划分成不同的状态集。(划分方法:假设s1',s2',......,sk'中属于同一个状态集,则把s1,s2,......,sk划分成一个新的状态。不断使用该方法,直至所有的状态都被划分开)
  3. 如果状态集set被划分,则将set从集合C中删除,将所有划分后的状态集加入集合C中。
  4. 重复执行2和3,直至集合C中的所有状态集都不能被划分为止。对于集合C中的状态集,只需要使用其中的一个状态来代替整个状态集即可。

代码:

GrammarToNFA 参考:正规式转NFA

NfaToDfa参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值