编译原理实验二:压缩文法的等价变换
更新时间:2024-03-29 22:54:01 阅读量: 综合文库 文档下载
实验二:压缩文法的等价变换
一:要求
输入:任意的上下文无关文法 输出:等价的压缩了的文法
要求:除了可查看压缩了的文法,还可查看删除了哪些规则 二:实验目的 了解文法的简化 三:实验原理
删除文法中的有害规则和多余规则 有害规则:
若文法中有如U::=U的规则,则这就是有害规则,它会引 起二义性,而无任何用处。 多余规则:
(1)某条规则U::=u的左部非终结符U(U不是识别符号),不在任何其他规则右部出现,即所有的推导始终不会用到此规则。【不可到达】
(2)在推导句子的过程中,一旦使用了该规则,将推不出任何终结符号串。即该规则中含有推不出任何终结符号串的非终结符。【不可终止】
四:数据结构与算法 struct Chomsky {
string left; string right; };
void apart(Chomsky *p,int i) //分开产生式左右部 void VNVT(Chomsky *p)//求VN和VT int zero(Chomsky *p)//0型文法 int one(Chomsky *p)//1型文法 int two(Chomsky *p)//2型文法
void shanchu(Chomsky *p)//删除多余规则与有害规则
五:出错分析
1:变量重复定义导致了一些小错误 2:程序太长{}缺少也导致了错误
3:后面删除规则的程序出错了,没有调试成功。
2
六:实验结果与分析 不是上下文无关文法的:
2型文法的压缩:
3
七:源代码
#include
#define max 50 int NONE=1; int RELEFT=1;
string strings,noend,end;//非终结符与终结符存储 int n;//产生式总数 int flag;
struct Chomsky {
string left;
string right; };
void apart(Chomsky *p,int i) //分开产生式左右部 {
4
int j;
for(j=0;j void VNVT(Chomsky *p)//求VN和VT { if(strings[j]=='-') { } p[i].left=strings.substr(0,j); p[i].right=strings.substr(j+1,strings.length()-j); int i,j; for(i=0;i for(j=0;j<(int)p[i].left.length();j++) { if((p[i].left[j]>='A'&&p[i].left[j]<='Z'))//非终结符判断 { } else 5 if(noend.find(p[i].left[j])>100) noend+=p[i].left[j]; } } } { } if(end.find(p[i].left[j])>100) end+=p[i].left[j]; for(j=0;j<(int)p[i].right.length();j++) { } } if(!(p[i].right[j]>='A'&&p[i].right[j]<='Z'))//终结符判断 { } else { if(noend.find(p[i].right[j])>100) noend+=p[i].right[j]; if(end.find(p[i].right[j])>100) end+=p[i].right[j]; int zero(Chomsky *p)//0型文法 6 { int flag(0),count(0); int i,j; for(i=0;i { } if(count==n) return 1; //属于0型文法 for(j=0;j<(int)p[i].left.length();j++) { } if(flag>0) { } else break; //左部没有非终结符,结束 flag=0; count++; if(p[i].left[j]>='A'&&p[i].left[j]<='Z') //有否非终结符 flag++; else { 7 } } cout< int one(Chomsky *p)//1型文法 { int flag(0); int i; if(zero(p)) 部 { for(i=0;i if(p[i].right.length() } { } flag++; break; 8 } else flag--; if(flag>0) { cout< return 1; //属于1型文法 else return 0; } int two(Chomsky *p)//2型文法 { int flag(0); int i; if(one(p)) { 9 \ for(i=0;i if((p[i].left.length()!=1)||!(p[i].left[0]>='A'&&p[i].left[0]<='Z')) //左部不属于一个字符或不属于非终结符 } else { } flag++; break; flag--; if(flag>0) { cout< \ return 0; //不属于2型文法 } else if(flag==0) { } 10 cout<<\次文法属于2型文法\return 1;//属于2型文法 else return 0; } void shanchu(Chomsky *p)//删除多余规则与有害规则 { if(two(p)) { cout<<\此文法属于上下文无关文法,可进行文法压缩,实验 继续\ int i,j; for(i=0;i break;//次规则不是有害规则 } 11 } if(j==p[i].left.length()-1)//此条规则为有害规则,删除 { cout<<\ 删 除 此 条 有 害 规 则 \ for(int k=0;k<(int)noend.length();k++)//多余规则中不可到达的 } } } n--; 判断 { for(i=0;i for(j=0;j<(int)p[i].right.length();j++) { if(noend[k]!=p[i].right[j]) continue; else i--;break; 12 } if(i==n-1)//此条规则为多余规则 { for(i=0;i if(p[i].left[j]==noend[k]||p[i].right[j]==noend[k]) cout<<\删除此条多余规则 \ 断 } n--; } } } for(k=0;k<(int)noend.length();k++)//多余规则中不可终止的判 { } 13 } cout<<\压缩后的文法是:\for(i=0;i cout< } else cout<<\此文法不是上下文无关文法,实验结束\ void main() { int i; cout<<\编译原理实验二:压缩文法的等价变换....................\ cout<<\请输入产生式总数及各产生式:\其中左右部之间用'-'表示,空用'#'表示\ cin>>n; Chomsky *p=new Chomsky[max]; for(i=0;i 14 cin>>strings; apart(p,i); } VNVT(p); shanchu(p); } 15
正在阅读:
编译原理实验二:压缩文法的等价变换03-29
对我国农村社会保障现状及对策研究的综述04-29
六年级数学教学反思02-06
梦幻西游手游降妖秘境副本冲榜攻略07-21
2015年公需科目:专业技术人员积极心理健康的培养与训练 答案已经更正10-22
2018六校协作体联考辽宁省六校协作体2017-2018学年高一下学期开03-29
经济法-合伙企业法案例分析一03-09
苏教版六年级语文下册01-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 文法
- 等价
- 变换
- 编译
- 压缩
- 原理
- 实验
- 对加强建筑工程质量监督与管理的思考
- 人民音乐出版社三年级下册音乐全册教学设计
- 征地拆迁工作方案(工作流程)
- 如何提高学生的高中英语写作能力-学生版
- 天津大学-工业设计-本科
- 行政事业单位内部控制工作指引 - 图文
- 机械唯物主义自然观及其科学基础
- 制造商资格声明和授权书模版
- 九年级物理全册18.3测量小灯泡的电功率学案(新版)新人教版
- 工程热力学期末复习题
- 2017年上半年福建省中级绿化工考试试卷
- 建筑面积案例及习题 - 图文
- 《幼儿园管理》练习题(附答案)2015
- 组胚题目(期末) - 图文
- 2014年二级建造师《工程法规》真题及答案解析(文字版)
- 第二章 碱金属(单元能力测试)
- 美国统一合伙法(英汉对照)
- 历届央视春节晚会节目单(1984 - 2010)
- 福建省福州市第八中学2017届高三上学期第三次质量检查数学(理)
- 公卫执业医师流行病学综合测试题二(4)