非确定有限自动机的确定化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程:
编译原理
学号:
姓名:
班级:
教师:
时间:
2014.5--2014.6.20
计算机科学与技术系
图4.4-1 NFA-DFA处理流程图
2.NFA转换为DFA的原理及过程通过以下例子说明:
①假如输入的NFA如图4.4-2所示:
图4.4-2 NFA状态转换图
②对于图4.2-2中的状态转换图的状态转换矩阵为:在图4.2-2中的状态转换图加一个起始状态X和结束状态Y,I为起始节点X经过一个或多个ε边到达的状态集,Ia为{X,1}经过a边到达的结点的ε闭包,Ib经过b边到达的结点的ε闭包;知道Ia和Ib列都在I列中出现为止。如下表4.2.1所示:
表4.2.1状态转换矩阵
I Ia Ib
{X,1} {2,3,Y}
{2,3,Y} {2,3,Y}
③对表4.2.1的状态转换矩阵进行重新命名,令A={X,1},B={2,3,Y},转换结果如下表4.2.2所示:
表4.2.2重命名的状态转换矩阵
I Ia Ib
A B
B B
④表4.2.2相对应的 DFA状态转换图为下图图4.2-2所示:
图4.2-2 DFA状态图
结果与分析(可以加页):
1.对于下图1中的NFA:
图1 NFA状态图
2.输入图1中NFA的各边信息:如下截图图2所示:
图2 输入各边信息截图
3.对于图1的NFA状态转换矩阵和重命名后的状态矩阵如下截图图3所示:
图3 DFA状态矩阵截图
4.将图3中的状态矩阵图最小化,如下截图图4所示:
图4 最小化的DFA
5.根据图4最小化的DFA状态转换矩阵,画出DFA状态转换图,如下图图5所示:
图5 DFA状态装换图
设计体会与建议:
编译原理是一门重要但难学的课程,因为编译原理是关于编写编译器的技术,编译器的编写一直被认为是十分困难的事情,所以这次选到课程设计的课题就有些无从下手的感觉,感觉任务挺艰巨的。设计要求从理论上就不太好理解,不像以前的设计编写一个应用程序实现常见的功能,这次的课程设计注重各种算法的实现,比如用子集法实现不确定的有限自动机的确定化、又能够分割法实现确定的有限自动机的最小化。课题虽然感觉难懂了一些,但我想不管结果如何,只要自己努力,尽力了就行。小组各成员始终相信“世上无难事,只怕有心人”。
由于课程设计有几周的时间,时间很充裕,所以这在这几周设计中,我们小组团结合作,互帮互助,大家都感觉这几周过的非常充实,尽管累了点。同时通过这次课程设计我们深深地感觉到团队的力量,深深体会到“团结就是力量”。当我们开始困惑无从下手时,我们你一句我一句的意见很快让我们找到了前进的方向。当自己遇到疑难时,和组员一起讨论解决了问题感觉非常欣慰,无助和孤独感也顿时消失。
通过这次课程设计给我另一个很大的体会是:流程图的重要性。说实话,每次不管是课程设计报告还是实习报告,我们最害怕做的就是画流程图,所以每次报告中能省则省。而这次发现根据系统需实现的功能和算法画出流程图后,就很清楚地知道我们的程序需要哪些模块,每个模块需要实现什么功能。所以在我们以后的学习中我们不能畏惧画流程图,我们要积极锻炼我们画流程图的能力,从而来帮助我们提高编程的能力。每次的课程设计,和以前的相比,我发现了自己的一次又一次的进步,因为越到最后,越会发现自己的不足,就会想着怎样去改进,怎样去完善自己的系统,所以每学期的课程设计是很必要的,因为我在这些过程中都学到了很多知识。
20