安徽大学编译原理试验斯要点.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
不确定的有穷自动机的化简 2015年11月25日星期三 班级: 软件工程 学号: 姓名: 李世 1. 目的与要求 通过设计、编写和调试,将不确定的有穷自动机转换为与之等价的确定的有穷自动机的程序,使学生了解子集法。掌握转换过程中的相关概念和方法。DFA的表现形式可以是表格或图形。 2. 理论基础 有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规式所表示的集合. 应用有穷自动机这个理论,为词法分析程序的自动构造寻找有效的方法和工具。有穷自动机分为两类,即,确定的有穷自动机(Deterministic Finite Automata)和不确定的有穷自动机(Nondeterministic Finite Automata) 。 (1) 不确定的有穷自动机的定义: 一个不确定的有穷自动机(NFA)M是一个五元组: NFA M={K,Σ,f,S,Z}, 其中: K为状态的有穷非空集; Σ 为有穷输入字母表; f为K× Σ* 到K的子集(2K)的一种映射, 2K表示K的幂集(f不是一个单值函数); S?K是初始状态集; Z ?K为终止状态集. 例子: NFA M=({S,P,Z},{0,1},f,{S,P},{Z}),其中: f(S,0)={P}//函数的结果为集合 f(S,1)={S,Z} f(P,1)={Z} f(Z,0)={P} f(Z,1)={P} 状态图表示为: 矩阵表示为: (2) 确定的有穷自动机的定义: 一个确定的有穷自动机(DFA)M是一个五元组:M=(K,Σ,f,S,Z) 其中: K是一个有穷集,它的每个元素称为一个状态; Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ为输入符号表; f是转换函数,是在K×Σ→K上的映射,即,如f(ki,a)=kj,(ki∈K,kj∈K)就意味着,当前状态为ki,输入符为a时,将转换为下一个状态kj,我们把kj称作ki的一个后继状态; S∈K是唯一的一个初态; Z? K是一个终态集,终态也称可接受状态或结束状态。 例子: DFA M=({S,U,V,Q},{a,b},f,S,{Q}),其中f定义为: f(S,a)=U f(V,a)=U f(S,b)=V f(V,b)=Q f(U,a)=Q f(Q,a)=Q f(U,b)=V f(Q,b)=Q 状态图表示为: 矩阵表示为: (3) 确定有限自动机和不确定有限自动机 DFA是NFA的特例。对每个NFA N一定存在一个DFA M,使得L(M)=L(N)。对每个NFA N存在着与之等价的DFA M。 有一种算法,将NFA转换成接受同样语言的DFA.这种算法称为子集法. 子集法的基本思想:让DFA的每一个状态对应NFA的一组状态,也就是让DFA使用它的状态去记录在NFA读入一个输入符号后可能达到的所有状态。 注意:与某一NFA等价的DFA不唯一. a) 定义对状态集合I的几个有关运算: 状态集合I的ε-闭包:表示为ε-closure(I),定义为一状态集,是状态集I中的任何状态S经任意条ε弧而能到达的状态的集合。 状态集合I中的任何状态S都属于ε-closure(I)。 状态集合I的a弧转换:表示为move(I, a)定义为状态集合J,其中J是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。 三、调试测试 四、程序源代码 #includeiostream #includestring #define MAXS 100 using namespace std; string NODE; string CHANGE; int N; struct edge { string first; string change; string last; }; struct chan { string ltab; string jihe[MAXS]; }; void kong(int a) { int i; for(i=0;ia;i++) cout ; } //排序 void paixu(string a) { int i,j; char b; for(j=0;ja.length();j++) for(i=0;ia.length();i++) if(NODE.find(a[i])NODE.find(a[i+1])) { b=a[i]; a[i]=a[i+1]; a[i+1]=b; } } void eclouse(char

文档评论(0)

武神赵子龙 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档