已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号:专业:姓名: 实验日期:2012.4.27教师签字:成绩:实验名称:试验三:由正规文法构造正规式实验目的:掌握上下文无关文法类型的定义,及与其他类型文法的区别;.熟悉上下文无关文法类型的判断,能够快速按照要求写出对应文法类型的文法用例;.给出一个上下文无关文法类型,能够正确判断其是否存在左递归,若存在则消除直接、间接左递归。实验原理:1.对于任意一个正规文法GS,都存在一个正规式与其等价,故可以使用RG构造RE。2.对于RGRE,可遵循以下三种规则。1) r1r2,r1r3 r1r2|r32) r1r2r3,r3r4 r1r2r43) r1r2r1,r1r3 r1r2*r33.对于任意的RE,实验内容:. 实验要求:输入任意的正规文法,输出相应的正规式。. 实验代码:#include #include #include #include #include #include using namespace std;struct relationstring _left,_right;vector rel;string VN;relation get_realation(string str)/将一个字符串生成式分为左右部 输入格式为-,返回生成式结构体int t=str.find(-);relation r;r._left=str.substr(0,t);r._right=str.substr(t+2,str.length()-t);return r;vector find_Vn(char c)/查找左部为c的产生式vector v;for(int i=0;irel.size();i+)if(reli._left0=c)v.push_back(reli);return v;void print()coutRE C+ 2012/4/27 COPYRIGHT FROM NINGYU endl;void init()/*string strPath=d:/a.txt;ifstream fin(strPath);*/print();coutinput the RG ,End with Ctrl+Z (note:begin with S)strPath)rel.push_back(get_realation(strPath);/得到左部与右部;if(relrel.size()-1._left.length()=1)/得到左部的非终结符char c=relrel.size()-1._left0;if(c=A)int t=VN.find(c);if(t=string:npos)VN+=c;string dfs(char c)bool flag;vector v1,v2,v3,v4;/v1是左部为c右部为c的关系,v2是左部为c但是右部Vn不为c的关系,v3是左部为c,右部为re的关系v4=find_Vn(c);/按照右部vn的关系分类;for(int i=0;iv4.size();i+)char t=v4i._rightv4i._right.length()-1;if(t=c)v1.push_back(v4i);else if(t=A)v2.push_back(v4i);else v3.push_back(v4i);/将递归关系合并relation r;r._left.push_back(c);for(int i=0;iv2.size();i+)char t=v2i._rightv2i._right.length()-1;string s=v2i._right.substr(0,v2i._right.length()-1);s+=dfs(t);r._right=s;v3.push_back(r);/将re的关系右部合并;relation r1;r1._left.push_back(c);r1._right.push_back();flag=0;for(int i=0;iv3.size();i+)if(flag)r1._right+=|;else flag=1;r1._right+=v3i._right;r1._right.push_back();/生成r*项目relation r2;r2._left.push_back(c);r2._right.push_back();for(int i=0,flag=0;iv1.size();i+)if(flag) r2._right.push_back(|);else flag=1;r2._right+=v1i._right.substr(0,v1i._right.length()-1);r2._right.push_back();r1._right=(+r2._right+)+*+r1._right;/输出r1观察/coutr1._rightendl;return r1._right;string regular(string s)/去除无用括号,去除无用#string str1;stack sta1;for(int i=0;is.length();i+)if(si=(|si=a|si=|)sta1.push(si);continue;else if(si=)if(sta1.top()=()sta1.pop();else sta1.push(si);else if(si=*)if(sta1.size()=0)continue;else if(sta1.top()=*)continue;else sta1.push(si);while(sta1.size()!=0)str1+=sta1.top();sta1.pop();reverse(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳务分包安全管理实务操作指南
- 2025年伊春丰林县人民检察院公开招聘聘用制书记员2人笔试考试参考试题及答案解析
- 2025年河北承德市工会系统招聘社会工作岗位人员17名考试笔试备考题库及答案解析
- 2025年中国科学技术大学生命科学与医学部劳务派遣岗位招聘1人笔试考试备考试题及答案解析
- 2025年宝鸡石油机械有限责任公司招聘(10人)考试笔试备考试题及答案解析
- 2025中国农业科学院作物科学研究所作物倍性育种技术研究组博士后招聘4人考试笔试备考试题及答案解析
- 新药分析技术学习笔记汇编
- 提升中学教学质量的实操策略
- 幼儿园教职员工安全培训总结
- 四年级语文单元综合教学方案
- 建筑施工废水处理项目实施方案
- 2025江苏南京玄武区招聘社区工作者和“两新”组织专职党务工作人员70人考试参考试题及答案解析
- 统编版(2024)三年级上册道德与法治第三单元 在集体中长大 教案(7-9课)
- 必修四《哲学与文化》-高考政治必背知识归纳梳理总结(统编版)
- 机器人编程培训创新创业项目商业计划书
- 电力企业安全生产责任考核表
- 2025年中移铁通有限公司甘肃分公司社会招聘考试参考题库及答案解析
- 2025四川成都新都投资集团有限公司招聘23人笔试历年参考题库附带答案详解
- 小老鼠的探险日记课件
- 2025年艾滋病检测培训试题附答案
- 2025年内蒙古自治区直属国有企业招聘考试笔试试题(含答案)
评论
0/150
提交评论