ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:79.40KB ,
资源ID:11942317      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11942317.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(由正规则文法构造正规则式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

由正规则文法构造正规则式.docx

1、由正规则文法构造正规则式由正规(则)文法构造正规(则)式姓 名:学 号:指导老师:时 间:一、实验目的: 了解三型文法,正则表达式和正则集的概念;了解正则表达式的性质以及正则表达式和正则文法之间的关系。给出一个文法能判断其文法类型,并且能将一个正规文法转化为正规式。二、 实验内容:判断文法是第几类文法,并将正规文法转化为正规式。三、 程序流程:1.程序流程图2.正规文法转为正规式流程图四、 实验代码:#include#includeusing namespace std;struct CSS string left; /产生式左部 string right; /产生式右部;bool IsZer

2、o(CSS *p,int n) /判断0型文法(左部不含非终结符则不是0型文法) int i,j; for(i=0; in; i+) /遍历所有产生式 for(j=0; j=A&pi.leftj=Z) break; if(j=pi.left.length() cout该文法不是0型文法endl; return false; if(i=n) return true;/如果每个产生式都能找到非终结符bool IsFirst(CSS *p,int n) /判断1型文法(右边长度大于等于左边长度) if(IsZero(p,n) /先判断是否是0型文法 int i; for(i=0; ipi.right

3、.length()&pi.right.length()!=0) /判断产生式左部长度是否大于右部 break; if(i=n) return true; cout该文法是一个0型文法endl; return false;bool IsSecond(CSS *p,int n) /判断2型文法(左部是一个非终结符) int i; if(IsFirst(p,n) /同上,先判断低级文法是否成立 for(i=0; i=A&pi.left0=Z) /判断产生式左部长度是否为一,左部第一个是否是非终结符 break; if(i=n) return true; cout该文法是1型文法endl; retur

4、n false;bool IsThird(CSS *p,int n) /判断3型文法(形如Aa,AaB的形式) int i; if(IsSecond(p,n) /同上,先判断是否是2型文法 for(i=0; i=3)|(pi.right0=A&pi.right0=Z) /判断产生式右部字符个数是否是1或者2,判断右部第一个字符是否是非终结符 break; if(i=n) for(i=0; i=A&pi.right1=Z) break; if(i=n) cout该文法属于3型文法endl; return true; cout该文法属于2型文法endl; return false;/正规文法转换为

5、正规式void transfer(CSS *p,int n) int i,j,m,flag; /合并产生式 for (i=0; in; i+) for(j=i+1; jaA,A-bA的产生式为A-aA|bA的形式 if(pi.left=pj.left)&(pi.right1=pj.right1) pi.right=pi.right+|+pj.right; pj.left=; pj.right=; /正规文法到正规式的转换规则3(合并形如S-a,S-b,S-c的产生式为S-a|b|c的形式) if(pi.right.length()=1&pj.right.length()=1&pi.left=p

6、j.left) pi.right=pi.right+|+pj.right; pj.left=; pj.right=; /提取形如S-aA|bA的公因式为S-(a|b)A的形式 for(i=0; i2&A=pi.right1&pi.right1=Z&pi.right2=|) for(j=1; jxA|y-A-x*(y) 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(xx)A A-aA 转化为S-(xx)a*A) for

7、(i=0; i1 & pi.left0!=pi.rightpi.right.length()-1) for(j=0; j1 & pi.rightpi.right.length()-1=pj.left0 & pj.left0=pj.rightpj.right.length()-1) pi.right=pi.right.substr(0,pi.right.length()-1)+pj.right.substr(0,pj.right.length()-1)+*+pj.rightpj.right.length()-1; pj.right=; pj.left=; /将表达式右部所有非终结符替换 flag

8、=n; while(flag=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

9、=0; j1) pi.right=pi.right+|+(+pj.right+); pj.left=; pj.right=; else pi.right=pi.right+|+pj.right; pj.left=; pj.right=; int main( ) int i,j,n; string input; while(true) cout请输入文法产生式个数Nendln; CSS *p=new CSSn; / 初始化产生式数组 for(i=0; iinput; /输入 for(j=0; jinput.length(); j+) /改变输入数据的形式 if(inputj=-) pi.left

10、=input.substr(0,j); pi.right=input.substr(j+2,input.length(); if(IsThird(p,n) /调用文法类型判断,自顶向下,如果是正规文法,则输出正规式 cout该文法属于正规文法,它的正规式如下:endl; transfer(p,n); for(i=0; in; i+) /输出转换后的文法 if(pi.left0!=NULL) coutpi.left=; for(j=0; jpi.right.length(); j+) if(pi.rightj!= ) coutpi.rightj; coutendl; return 0;六、运行截图五、 设计总结 经过本次实验,加深了我对文法类型的理解,我学会了如何识别一个0型文法,1型文法,2型文法,正规文法。尤其加深了我对正规文法的理解。我学会了如何将一个正规文法转化为一个正规式。而且还锻炼了我编写程序的能力,总之,收获颇多。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1