有穷状态自动机.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文档。上传文档
查看更多
西北师范大学计算机科学与工程学院学生实验报告 学号 111111 专业 计算机科学与技术 班级 技师(1)班 姓名 111 课程名称 编译原理 课程类型 实验 实验名称 有穷状态自动机 实验目的: 准确地识别正规集,即识别正规文法所定义的语言和正规式所表示的集合,为词法分析程序的自动构造寻找特殊的方法和工具; 掌握了有穷状态自动转换机的概念; 掌握DFA的存储表示; 掌握DFA与正则文法的联系 实验原理: 一个确定的有穷状态自动机DFA是五元组(K,∑,M,S,F,),其中, K是有穷非空的状态集合; ∑是有穷非空的输入字母表; M是从K×∑到K的映象。如果M(R,T)=Q,则输入字符为T时,当前状态R将转换到状态Q,Q成为下一当前状态; S是开始状态; F是非空的终止状态集合。 输入任意的正则文法,输出相应的有穷状态自动机 要求:识别有穷状态自动转换机是非确定的还是确定的,以相应的五元组形式输出。 实验代码如下: 实验源代码: #include iostream using namespace std; const int maxsize=10; class DFA { private: int M[maxsize][maxsize]; char Vn[maxsize],Vt[maxsize]; int VnNum,VtNum; public: DFA(); ~DFA(){} void print(); int move(char start,char s[]); }; int DFA::move(char start,char s[]) { char t[10];char next=start; int left=0,right=0,i=0,j=0; while(s[i]!=\0){t[i]=s[i++];} t[i]=\0; while(t[0]!=\0) { left=0;right=0; while(next!=Vn[left]){left++;} while(t[0]!=Vt[right]){right++;} if(M[left][right]!=-1leftVnNumrightVtNum) { next=Vn[M[left][right]]; coutM(Vn[left],Vt[right])=nextendl; } else return 0; i=1; while(t[i]!=\0){t[i-1]=t[i++];} t[i-1]=\0; } return 1; } DFA::DFA() { char grammar[maxsize],n[maxsize],t[maxsize]; int rule,left,right,final; int i=0,j=0,k=0; coutrule=;cinrule; coutVn ;cinn; coutVt ;cint; coutgrammar; Vn[0]=S; j=0; while(n[j]!=\0)Vn[j+1]=n[j++];VnNum=j+1; while(t[i]!=\0)Vt[i]=t[i++];VtNum=i; for(i=0;iVnNum;i++) for(j=0;j=VtNum;j++)M[i][j]=-1; i=0; while(i!=rule) { j=0;k=0; cingrammar; while(Vn[k]!=grammar[0])k++; final=k; while(grammar[j]!=\0)j++; if(j==2) { k=0; while(Vt[k]!=grammar[1])k++; left=0; right=k; } else { k=0;while(Vn[k]!=grammar[1])k++;left=k; k=0;while(Vt[k]!=grammar[2])k++;right=k; } M[left][righ

文档评论(0)

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

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

1亿VIP精品文档

相关文档