将正规式R化成小DFA的状态图.docVIP

  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文档。上传文档
查看更多
实验一:词法分析器的设计 一、实验目的: (1)掌握词法分析器的构造过程以及基本方法。 (2)理解正规式、NFA、DFA及最小化DFA的转换过程和方法。 二、实验内容 给定一个正规式R=XY*|YX*Y|XYX,请先在练习本上将此正规式转变为NFA、DFA、最小化DFA;对你所完成的最小化DFA进行编程,完成词法分析器工作。 三.设计分析 1.将给定的正规式R=NFA; 2.将NFA=DFA; 3.将DFA=最小DFA; 4,按照最小DFA的状态图,编写相应的程序。将正规式R=XY*|YX*Y|XYX化成最小DFA的状态图如下: 图 1-1 最小DFA状态图 简要方法: 根据最小DFA的状态图设计程序,从键盘输入含X、Y的字符串,所编写的程序从输入的字符串中的第一个字符开始比较,依次比较下去,若发现该字符串与该状态图不符,则不属于该状态图。 该程序的主要编程思想为大量使用if判断语句,以及一些简单的for循环语句。 四、源程序代码: #includeiostream using namespace std; #define MAX 200 void main() { char a[MAX]; cout根据正规式R分成三个部分,即R1=XY*,R2=YX*Y,R3=XYXendl; cout请输入一段字符(仅含X或者Y):endl; cin.get(a,200); int n;//所输入字符串的长度 for( int i=0;i!=MAX;++i)//计算编码的长度n { if(a[i]==\0) { n=i; break; } } if(a[0]==X) { if(a[1]==\0) { cout属于正规式R1=XY*endl; } else if(a[1]==Y) { if(a[2]==\0) { cout属于正规式R1=XY*endl; } else if(a[2]==X a[3]==\0) { cout属于正规式R3=XYXendl; } else { for(i=2;in;) { if(a[i]==Y) i++; else break; } if(i==n) { cout属于正规式R1=XY*endl; } else { cout不属于正规式Rendl; } } } else { cout不属于正规式Rendl; } } else if(a[0]==Y) { if(a[1]==Ya[2]==\0) { cout属于正规式R2=YX*Yendl; } else if(a[n-1]==Y) { if(a[1]==X) { for(i=1;in-1;) { if(a[i]==X) { i++; } else { break; } } if(i==n-1) { cout属于正规式R2=YX*Yendl; } else { cout不属于正规式Rendl; } } } else { cout不属于正规式Rendl; } } else { cout不属于正规式Rendl; } } 五、测试用例 1.当从键盘输入“XYYYYYYY“时,判断属于正规式R1=XY*. 2.当从键盘输入YXXXXXXY时,判断属于正规式R2=YX*Y. 当从键盘输入XYX时,判断属于正规式R3=XYX. 当输入为XYYX时,不符合正规式R. 5.当输入为YXXYX时,不符合正规式R. 六、实验总结 通过本次实验,使我对正规式转成相应的NFA、DFA以及最小DFA的知识更加了解,强化了我的理论知识,在实验过程中,还是发现了一些问题,例如,对C语言的语法知识掌握的还是不够牢固,有些基础问题都没有搞清楚,所以在以后的学习当中一定加强对薄弱环节的巩固。

文档评论(0)

xyl118 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档