版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中间代码基本块的划分任务要求在理解代码优化原理的基础上,实现将中间代码序列划分基本块的程序1 理解编译过程中代码优化的定义2 掌握各种代码优化的方法3 定义程序流图中的基本块4 明确程序流图的形式及功能5 程序设计及调试一原理阐述1. 代码优化的定义:代码优化的实质就是提高代码质量从而加快代码执行速度的一种技术。 根据代码优化是否涉及具体的计算机,又将代码优化分为与机器有关的优化(即窥孔优化),一般在目标代码上进行;与机器无关的优化,常在中间代码上进行。又根据优化范围分成局部优化、 循环优化、全局优化。2. 代码优化的方法5) 合并已知量6) 复写传播7) 删除无用赋值1) 删除公共子表达式2
2、) 代码外提3) 强度削弱4) 删除归纳变量3. 基本块和划分基本块的定义和方法:定义: 基本块就是代码序列中一组顺序执行的语句序列,只有一个入口和一个出口。 而划分基本块的实质就是定义入口和出口语句。划分基本块的方法:1) 定义入口语句四元式的第一个语句;由条件转移语句或无条件转移语句能转到的语句;紧跟在条件转移语句后面的语句。2) 定义出口语句 下一个入口语句的前导语句; 转移语句(包括转移语句本身); 停语句(包括停语句本身)。构造基本块,删除不属于任何基本块的语句流程示意图中间唐句,按四元式序列,给出如下程序流图 read x ; read y ;(4) if c=0 goto L2
3、; x=y ; L1:c=c+1 ; y=c ; goto L1 ; L2: write y ;halt (以表本)三.部分代码:入口条件1int i=0,j=-1,back_i=0,in_num=0,out_num=0;char g200;cout<<"请输入要进行基本块划分的四元式(按回车表示四元式输入完毕):"<<endl;for(i=0;i<200;i+)gi='';ci尸';g口(局部),c(全局)清零gets(g);/输入四元式for(i=0;i<200;i+)ci=gi;/ 将输入的四元式备份到c口i
4、nin_num+尸1'/首句为入口语句,将语句序号放入in口-可编辑修改-入口条件 3for(i=0;*(g+i)!=''i+)/ 由条件转移语句或无条件转移语句能转到的语句为入口语句if(*(g+i)=':')/ 找到转移语句能转到的语句back_i=i;/i 是指针, back_i 记录当前位置,用于搜索语句序号for (;*(g+back_i)!=')'back_i-)continue;inin_num+=*(g+back_i-1);/ 得到入口语句序号,将其放入 in出口条件 1outout_num+=(char)(int)*(g
5、+back_i-1)-1);break;/ 入口语句的上一句是出口语句,将其序号放入 outcout<<""<<endl<<endl;cout<<" 判定输出语句 /输入语句过程(输出语句 > 输入语句) :"<<endl<<endl;for(;j!=0;j+)cout<<"sentence ("<<outout_num-1<<") -> ("<<inin_num-1<<&
6、quot;)"<<endl;-可编辑修改-for(i=0;*(g+i)!=''i+)语句if(*(g+i)='i'&&*(g+i+1)='f')back_i=i;for(;*(g+back_i)!='('back_i+)语句continue;inin_num+=*(g+back_i+1);出口条件for(i=0;*(g+i)!=''i+)if(*(g+i)='g'&&*(g+i+1)='o')back_i=i;for(;*(g+b
7、ack_i)!=')'back_i-)continue;/ 紧跟在条件语句后面的语句为入口/ 找到条件语句关键字if/ 找到条件语句的下一句,即入口/ 将入口语句序号放入 in2/ 转移语句为出口语句/ 找到转移语句的关键字goto/将语句序号放入outoutout_num+=*(g+back_i-1);inin_num+=(char)(int)*(g+back_i-1)+1);/其下一句是入口语句,将语句序号放入in口for(;j<1;j+)cout<<"sentence("<<outout_num-1<<&quo
8、t;)->-可编辑修改-("<<inin_num-1<<")"<<endl;for(;*(g+back_i)!='L'back_i+)/找到转移语句能够转到的语句序continue;for(;*(c+ch)!=''ch+)for(;*(c+ch)!='L'ch+) continue; if(*(g+back_i+1)=*(c+ch+1)&&back_i!=ch)根据语句序号找到相应的语句back_ch=ch;for(;*(c+back_ch)!=')&
9、#39;back_ch-)continue;cout<<"sentence("<<outout_num-1<<")->("<<*(c+back_ch-1)<<")"<<endl; break;/输出转移ch=0;)出口条件3for(i=0;*(g+i)!=''i+)continue;back_i=i;for(;*(g+back_i)!=')'back_i-)continue;outout_num+=*(g+back_i-1);
10、cout<<"cout<<"划分好的代码块:"<<endl;停语句为出口语句,找到停语句/将语句序号放入out"<<endl<<endl;for(i=0;i<4;i+)cout<<"Block ”<<i+1<<" : ("<<ini<<") - ("<<outi<<")"<<endl;/输出各基本块内的语句四.程序运行结果1.运行输入的四元式:2.输出结果:划分好的基本代码块五.总结这次我主要负责中间代码基本块的划分。有了上次词法分析器的程序设计的经验,我以书中的实例为参考模型,进行编程,这样就避免了由空想带来的不必要的麻烦。整个设计还是以C+ +中的模块化设计为主。 特别是在语句类型判断上, 在编写代码时, 虽然只要遵守判断规则, 但仍然遇上了不困难,为了能方便的分块,使程序能更加简便、易懂, 我还自行将语句按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报参考:明清徽州道教及与地方社会关系研究
- 二零二五年度成都二手房房源交易税费减免政策解读合同4篇
- 病虫害在农业生产中的经济影响
- 2025年医疗网络推广合同
- 2025年家具制作及安装合同
- 2025年劳务派遣服务合同书格式
- 2025年居住小区规划设计合同
- 2025年三方仓储合同
- 二零二五年度教育产品销售合同英文版制作与海外市场推广3篇
- 2025年分期宴会预订合同
- 完整版秸秆炭化成型综合利用项目可行性研究报告
- 油气行业人才需求预测-洞察分析
- 《数据采集技术》课件-Scrapy 框架的基本操作
- 2025年河北省单招语文模拟测试二(原卷版)
- 工作计划 2025年度医院工作计划
- 高一化学《活泼的金属单质-钠》分层练习含答案解析
- DB34∕T 4010-2021 水利工程外观质量评定规程
- 2024年内蒙古中考英语试卷五套合卷附答案
- 2024年电工(高级)证考试题库及答案
- 2024年全国各地中考试题分类汇编:古诗词阅读
- 农产品质量评估与分级
评论
0/150
提交评论