实验报告:子集构造法.doc_第1页
实验报告:子集构造法.doc_第2页
实验报告:子集构造法.doc_第3页
实验报告:子集构造法.doc_第4页
实验报告:子集构造法.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告课程名称编译原理题 目子集构造法院 (系)信息与控制工程学院专业班级姓 名学 号指导教师叶娜 2017年 4 月 30 日 第 5 页目 录一、实验目的2二、实验要求、内容2三、实验设备2四、实验原理及步骤2五、程序源代码3六、存在的问题及体会4一、实验目的掌握将非确定有限自动机确定化的方法和过程二、实验要求、内容实验要求:1. 输入一个NFA,输出一个接受同一正规集的DFA2. 采用C+语言,实现该算法3. 编制测试程序4. 调试程序实验步骤:1.NFA关系图2.通过一个转换算法将NFA转换为DFA3.显示DFA关系图三、实验设备开发系统:Windows 10开发工具:Visual Studio 2013四、实验原理及步骤1、NFA与DFA之间的联系 将NFA转换成等价的DFA的基本思想是让DFA的每一个状态对应NFA的一组状态,也就是说让DFA使用它的状态去记录在NFA读入一个输入符号后可能达到的所有状态,在读入输入符号之后,DFA处在a1a2.an那样一个状态,该状态表示这个NFA的状态的一个子集T,T是从NFA的开始状态沿着某个标记为a1a2.an可以达到的那些状态构成的。2、 DFA的化简得到新的DFA之后,并没有完成任务,因为通过NFA转化成DFA不一定是最简单的,即有多余的状态可以删除,即NFA转换成DFA之后,还需要化简,确定化。化简DFA的基本思想是将它的状态分成一些互不相交的子集,每一个子集中的状态都不是等价的,不同子集中的状态可以由某个输入串来区别,最后将不能区别的每个子集用一个状态来做代表,具体方法如下:(1) 将M的所有状态分成两个子集,即终态集和非终态集;(2) 考察每一个子集,若发现某子集中的状态不等价,将其划分为两个集合;(3) 重复第(2)步,继续考察一得到的每一个子集,直到没有任何一个子集需要继续划分为止。此时DFA的状态被分为若干个互不相交的子集;(4) 从每个子集中选出一个状态做代表即可得到最简的DFA。3、 流程图图3-1程序总框图开始输入NFA,初始化NFA初步转化为DFA重命名化简结束图4-2 功能图5、 程序源代码部分代码:void child_method()int m,n;for(m=0;m100;m+) for(n=0;n100;n+) Dtranmn=#; for(m=0;m100;m+)DFAm.flag=-1; State S0,U;S0.flag=0;S0.count=1;S0.H0=first;State T;T=closure(S0);T.mark=0;T.flag=0;DFAnumof_Dtran+=T;memset(useof_DFA,0,sizeof(useof_DFA);int j=check_inDFA(); int k; while(j!=-1) useof_DFAj=1;for(k=0;knumof_char;k+) U=closure(move(DFAj,alphak); /if U不在DFA中 if(!check_whetherin_DFA(U) U.mark=numof_Dtran;DFAnumof_Dtran+=U; DtranDFAj.markU.mark=alphak;j=check_inDFA();6、 存在的问题及体会 虽然在此之前学习了很多的编程语言,但是对于编程还不是那么熟练。对于此次的编译原理实验,要求用子集构造法来求NFA转换为DFA的算法实现,由于在课上对于本节的知识点掌握的也只是表面,因而要用算法来实现对于我来说还是有些困难。对于此次的程序首先需要实现NFA转换为DFA,其次就是NFA的确定化。这两方面的实现都是有些难度,起初对于程序的实现毫无头绪,之后在同学与老师的讲解下有了相应的了解,然后再在网上查阅相关资料以及相关程序算法的博客,向同学请教,解读别人的算法,加深自己的理解。经过长时间的调试之后,该程序终于得以成功实现。 经过此次的实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论