不确定有穷状态自动机的确定化实验报告

不确定有穷状态自动机的确定化实验报告

ID:47505429

大小:312.00 KB

页数:9页

时间:2020-01-12

不确定有穷状态自动机的确定化实验报告_第1页
不确定有穷状态自动机的确定化实验报告_第2页
不确定有穷状态自动机的确定化实验报告_第3页
不确定有穷状态自动机的确定化实验报告_第4页
不确定有穷状态自动机的确定化实验报告_第5页
资源描述:

《不确定有穷状态自动机的确定化实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、.编译原理实验报告(二)E01214055鲁庆河1.实验名称:不确定有穷状态自动机的确定化2.实验目的:a)输入:非确定有穷状态自动机NFAb)输出:确定化的有穷状态自动机DFA3.实验原理:a)NFA确定化为DFA同一个字符串α可以由多条通路产生,而在实际应用中,作为描述控制过程的自动机,通常都是确定有限自动机DFA,因此这就需要将不确定有限自动机转换成等价的确定有限自动机,这个过程称为不确定有限自动机的确定化,即NFA确定化为DFA。b)NFA的确定化算法-----子集法:l若NFA的全部初态为S1,S2,…,Sn,则令DFA的初态为:S=[S1,S2,…,Sn]

2、,其中方括号用来表示若干个状态构成的某一状态。l设DFA的状态集K中有一状态为[Si,Si+1,…,Sj],若对某符号a∈∑,在NFA中有F({Si,Si+1,…,Sj},a)={Si’,Si+1’,…,Sk’},则令F({Si,Si+1,…,Sj},a)={Si’,Si+1’,…,Sk’}为DFA的一个转换函数。若[Si’,Si+1’,…,Sk‘]不在K中,则将其作为新的状态加入到K中。l重复第2步,直到K中不再有新的状态加入为止。l上面得到的所有状态构成DFA的状态集K,转换函数构成DFA的F,DFA的字母表仍然是NFA的字母表∑。lDFA中凡是含有NFA终态的状

3、态都是DFA的终态。c)closure(I)函数,move(I,a)函数的假设I是NFAM状态集K的一个子集(即I∈K),则定义ε-closure(I)为:1.若Q∈I,则Q∈ε-closure(I);2.若Q∈I,则从Q出发经过任意条ε弧而能到达的任何状态Q’,则Q’∈closure(I)。3.状态集ε-closure(I)称为状态I的ε闭包。假设NFAM=(K,∑,F,S,Z),若I∈K,a∈∑,则定义Ia=closure(J),其中J是所有从closure(I)出发,经过一条a弧而到达的状态集。NFA确定化的实质是以原有状态集上的子集作为DFA上的一个状态,将原

4、状态间的转换为该子集间的转换,从而把不确定有限自动机确定化。经过确定化后,状态数可能增加,而且可能出现一些等价状态,这时就需要简化。4.实验思路:(数据结构及变量设计等)word教育资料.1.实验小结:在写此次试验之初,数据结构设计是这样的,K,E,S,Z都用一位字符数组存储,F用下面的链表存储,但是最终在写move函数时查找J集合麻烦,加之数据结构算法的实现基本功不够,在同学的指点下就从新定义了数据结构。在新的数据结构中,使用邻接表来存储转换函数的,虽然数据结构部分对于顺序表链表邻接表的操作很陌生,但通过此次的实验让我对于数据结构中邻接表的使用有了很好的复习和回顾,

5、也学会了邻接表中指针的使用和插入删除操作……word教育资料.此次实验过程中,代码虽然全部都是本人自己编写,但很多不是我自己的思想,是从同学那剽窃来理解消化的,在别人和我讲述了代码之后,我自己独立的去写时,细节的地方仍然是漏洞百出,到处出错。我的代码能力太差,也常常因为这而自卑,但也不知如何去提升,虽然课本上的确定化会写,算法也能够理解和掌握,但是实现起来就是无从下手,所以动手能力差的同时,书本知识也得不到强化。我会借编译原理实验的机会慢慢的熟悉代码,自己去想通算法,自己去实现算法。我很感激姚老师的严厉要求,我相信我们院的老师都要像您和王爱平老师这样的就好了!1.附件

6、:(程序和运行结果截图)a)程序:word教育资料.#include#include#include#include#defineN20//用于控制数组的最大长度//用邻接表存储NFA和DFA的状态字母后继typedefstructadjvex{//定义邻接表的邻接点域的数据表示charnextstate;//头结点状态的后继状态chararc;//弧structadjvex*next;//指向该头结点状态的下一个后继状态的指针}adjvex;typedefstructheadvex{//定义

7、邻接表的头部的数据表示charstate;//状态adjvex*firstarc;//指向第一个后继状态的指针}headvex;//定义两个邻接表的头部,为全局数组headvexNFA[N];//用邻接表存储的NFAheadvexDFA[N];//用邻接表存储的DFAcharAlp[N];//存储需要输入的行为集,即字母表voidmain(){voiddesignby();//函数声明voidclosure(chars,charset[N]);//求e_closure闭包函数voidSpecial(charDFA_start[N],charnew_s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。