




免费预览已结束,剩余7页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三:正规文法到正规式的转换一:要求输入任意的正规文法,输出相应的正规式二:实验目的1. 熟练掌握正规文法到正规式的转换规则2. 理解正规文法和正规式的等价性三:实验原理1.一个正规语言可以由正规文法定义,也可以由正规式定义,对任意一个正规文法,存在一个定义同一个语言的正规式,反之,对每个正规式,存在生成同一个语言的正规文法2正规文法与正规式的转换规则: 1 A-xB,B-y则:A=xy 2A-xA,A-y 则:A-x*y 3A-x,A-y 则:A=x|y四:数据结构与算法struct Chomskystring left; string right; ;void apart(Chomsky *p,int i) /分开产生式左右部void VNVT(Chomsky *p)/求VN和VTint zero(Chomsky *p)/0型文法int one(Chomsky *p)/1型文法int two(Chomsky *p)/2型文法int three(Chomsky *p)/3型文法void change(Chomsky *p)/正规文法到正规式的转换函数五:出错分析1: #include忽视了c+语言中的头文件应当去掉.h,须再另加上using namespace std;2:规则分解不对,导致结果出错。3:太多循环嵌套容易造成程序出错,养成把括号提前打好的习惯。六:实验结果与分析不是正规文法的不能转换:是正规文法的才可以转换:七:源代码#include#includeusing namespace std;#define max 50int NONE=1;string strings,noend,end;/非终结符与终结符存储int n;/产生式总数struct Chomskystring left;string right; ; void apart(Chomsky *p,int i) /分开产生式左右部int j; for(j=0;jstrings.length();j+)if(stringsj=-)pi.left=strings.substr(0,j);pi.right=strings.substr(j+1,strings.length()-j);void VNVT(Chomsky *p)/求VN和VTint i,j;for(i=0;in;i+) for(j=0;j=A&pi.leftj100)noend+=pi.leftj; elseif(end.find(pi.leftj)100)end+=pi.leftj;for(j=0;j=A&pi.rightj100)end+=pi.rightj;else if(noend.find(pi.rightj)100)noend+=pi.rightj;int zero(Chomsky *p)/0型文法int flag(0),count(0); int i,j; for(i=0;in;i+) for(j=0;j=A&pi.leftj0)flag=0;count+;else break; /左部没有非终结符,结束if(count=n) return 1; /属于0型文法elsecoutendl所输产生式不属于任何文法。endl;NONE=0;return 0;int one(Chomsky *p)/1型文法int flag(0); int i; if(zero(p)for(i=0;in;i+) if(pi.right.length()0)coutendl此文法属于0型文法,即短语文法。endl; return 0; /不属于1型文法else if(flag=0)return 1; /属于1型文法elsereturn 0;int two(Chomsky *p)/2型文法int flag(0); int i; if(one(p)for(i=0;i=A&pi.left00)coutendl此文法属于1型文法,即上下文有关文法。endl; return 0; /不属于2型文法else if(flag=0)return 1; /属于2型文法elsereturn 0;int three(Chomsky *p)/3型文法int flag=0;int i;if(two(p) for(i=0;i=A&pi.right0=A&pi.right10) cout此文法属于2型文法,即上下文无关文法。endl; i=n; return 0;else if(flag=0) cout此文法属于3型文法,即正规文法。endl; return 1; else return 0; void change(Chomsky *p)/正规文法到正规式的转换函数int i,j,m,flag; /合并产生式for (i=0;in;i+)for(j=i+1;jaA,A-bA的产生式为A-aA|bA的形式 pi.right=pi.right+|+pj.right; pj.left=; pj.right=;elseif(pi.right1=pj.right1&pi.left0!=pj.right1)/合并形如S-aA,S-bA的产生式为S-aA|bA的形式 pi.right=pi.right+|+pj.right; pj.left=; pj.right=; if(pi.right.length()=1&pj.right.length()=1&pi.left=pj.left)/合并形如S-a,S-b,S-c的产生式为S-a|b|c的形式pi.right=pi.right+|+pj.right; pj.left=; pj.right=;for(i=0;iaA|bA的公因式为S-(a|b)A的形式 flag=pi.right.length(); if(pi.right.length()2&A=pi.right1&pi.right1=Z&pi.right2=|) for(j=1;jflag-1;j=j+3) pi.rightj= ; if(j=flag-1) pi.right=(+pi.right.substr(0,pi.right.length()-1)+)+pi.right.substr(pi.right.length()-1); for(i=0;i1) for(j=0;jn;j+) if(pi.left=pj.left&j!=i) for(m=0;mpj.right.length();m+) if(A=pj.rightm&pj.rightm=0)/当所有产生式的右部均为终结符构成时停止转换 for(i=0,flag=flag-1;in;i+) for(j=0;jpi.right.length();j+) if(A=pi.rightj&pi.rightj=Z) for(m=0;mn;m+) if(pm.left0=pi.rightj&m!=i) pi.right=pi.right.substr(0,j)+pm.right+pi.right.substr(j+1); pm.left=; pm.right=; break; /再次合并左部相等的产生式 for(i=0;in;i+) for(j=0;j1) pi.right=pi.right+|+(+pj.right+); pj.left=; pj.right=; else pi.right=pi.right+|+pj.right; pj.left=; pj.right=; void main()int i,j; cout.编译原理实验三:正规文法到正规式的转换.endl; cout请输入正规文法(三型文法)的产生式总数及各产生式:endl其中左右部之间用-表示,空用#表示n; Chomsky *p=new Chomskymax; for(i=0;istrings; apart(p,i); VNVT(p);if(three(p)/只有当输入为正规文法时才进行转换,否则实验退出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度夫妻共同财产分割及居住权协议
- 2025版网络安全技术服务合同范本(含年度维护服务)
- 二零二五年度建筑安装工程施工许可证办理服务合同
- 二零二五年度历史文化保护区修复装修工程合同
- 2025版海洋工程建设项目施工结算与海洋环境保护协议
- 麻醉个案护理汇报课件
- 2025版大摩退出中金项目合作终止协议
- 二零二五版堆场货物装卸与仓储管理协议
- 窦姣离婚协议书及子女抚养权及探视权安排
- 二零二五年度重型吊车转让及运输保险合同
- 中国心理卫生协会心理咨询职业技能培训项目模拟试题
- 研学旅行指导师笔试试题及答案
- 2025上半年四川五粮液文化旅游开发有限公司招聘8人笔试历年参考题库附带答案详解
- 集团审计中心管理办法
- 2025年人教版八年级物理下学期期末复习:力、运动和力、压强、浮力(考点清单)学生版+解析
- 2025至2030中国矿用排水泵行业深度研究及发展前景投资评估分析
- 2025届北京市十一所学校物理高一下期末监测试题含解析
- 2024年金华市警示教育基地管理中心招聘真题
- 小学英语-三年级升四年级英语阅读理解专项(附答案)
- 民警工作纪律培训课件
- 农田水利工程监理环保监理实施方案和措施
评论
0/150
提交评论