简单的NFA转DFA的代码实现

来源:互联网 发布:免费的域名解析软件 编辑:程序博客网 时间:2024/05/29 08:50

(本文章是学习笔记,里面可能有错误,随时更新中。。。)

该方法虽然是一个通用的方法,但是只是针对(a|b)*abb实现而已。也就是说,如果要支持所有的NFA,那么就需要修改一下NFA的读入。

(a|b)*abb的状态转换表是:


将NFA转为DFA的算法如下:

1、对初始状态进行闭包操作,也就是sinma-closure(0),0为初始状态,将所得的状态集合设为T,并将其加入D中,设为未标记。

2、检查D中是否有未标记的集合T,如果有的话,就拷贝一份到T,同时在D中将T设置为已标记

3、对T到A进行转移(move(T,a)),合并起来的状态集为U,判断U是否在D中,没有的话就加入D中,同时设置为未标记。

4、U则是当前T到a的状态集,需要记录下来。

5、循环第二个步骤,直到所有的标记都已经读取完毕。

详细代码见:https://github.com/CODE7070/lexer

0 0
原创粉丝点击