




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中间代码基本块的划分任务要求在理解代码优化原理的基础上,实现将中间代码序列划分基本块的程序1 理解编译过程中代码优化的定义2 掌握各种代码优化的方法3 定义程序流图中的基本块4 明确程序流图的形式及功能5 程序设计及调试一 原理阐述1. 代码优化的定义:代码优化的实质就是提高代码质量从而加快代码执行速度的一种技术。根据代码优化是否涉及具体的计算机,又将代码优化分为与机器有关的优化(即窥孔优化),一般在目标代码上进行;与机器无关的优化,常在中间代码上进行。又根据优化范围分成局部优化、循环优化、全局优化。2. 代码优化的方法:1) 删除公共子表达式2) 代码外提3) 强度削弱4) 删除归纳变量5) 合并已知量6) 复写传播7) 删除无用赋值3. 基本块和划分基本块的定义和方法:定义:基本块就是代码序列中一组顺序执行的语句序列,只有一个入口和一个出口。而划分基本块的实质就是定义入口和出口语句。划分基本块的方法:1) 定义入口语句 四元式的第一个语句; 由条件转移语句或无条件转移语句能转到的语句; 紧跟在条件转移语句后面的语句。2) 定义出口语句 下一个入口语句的前导语句; 转移语句(包括转移语句本身); 停语句(包括停语句本身)。构造基本块,删除不属于任何基本块的语句二 流程示意图按四元式序列,给出如下程序流图 read x; read y; L1:c=c+1; if c=0 goto L2; x=y; y=c; goto L1; L2: write y; halt(以“ ”表示)(3) L1: c=c+1(4) if c=0 goto L2 read x read y(5) x=y(6) y=c(7) goto L1 L2: write x halt(以“ ”表示)Block 3Block 2Block 4Block 1三 部分代码:入口条件1int i=0,j=-1,back_i=0,in_num=0,out_num=0;char g200;cout请输入要进行基本块划分的四元式(按回车表示四元式输入完毕):endl;for(i=0;i200;i+)gi= ;ci= ; /g(局部),c(全局),清零gets(g); /输入四元式for(i=0;i200;i+)ci=gi; /将输入的四元式备份到c inin_num+=1; /首句为入口语句,将语句序号放入in入口条件2for(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出口条件1 outout_num+=(char)(int)*(g+back_i-1)-1);break;/入口语句的上一句是出口语句,将其序号放入outcout_endlendl;cout输入语句):endlendl;for(;j!=0;j+)coutsentence (outout_num-1 (inin_num-1)endl;入口条件3for(i=0;*(g+i)!=;i+) /紧跟在条件语句后面的语句为入口语句if(*(g+i)=i&*(g+i+1)=f) /找到条件语句关键字ifback_i=i;for(;*(g+back_i)!=(;back_i+) /找到条件语句的下一句,即入口语句continue;inin_num+=*(g+back_i+1); /将入口语句序号放入in出口条件2for(i=0;*(g+i)!=;i+) /转移语句为出口语句if(*(g+i)=g&*(g+i+1)=o) /找到转移语句的关键字gotoback_i=i;for(;*(g+back_i)!=);back_i-)continue;outout_num+=*(g+back_i-1); /将语句序号放入outinin_num+=(char)(int)*(g+back_i-1)+1);/其下一句是入口语句,将语句序号放入infor(;j1;j+)coutsentence (outout_num-1 (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)!=);back_ch-)continue; coutsentence (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); /将语句序号放入out cout_endlendl; cout划分好的代码块:endl;for(i=0;i4;i+)coutBlock i+1 : (ini) - (outi)endl;/输出各基本块内的语句四 程序运行结果1. 运行输入的四元式:2. 输出结果:划分好的基本代码块五 总结这次我主要负责中间代码基本块的划分。有了上次词法分析器的程序设计的经验,我以书中的实例为参考模型,进行编程,这样就避免了由空想带来的不必要的麻烦。整个设计还是以c中的模块化设计为主。特别是在语句类型判断上,在编写代码时,虽然只要遵守判断规则,但仍然遇上了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人力资源招聘面试技巧面试官必-备手册与模拟题集
- 2025年驻外机构招聘面试题解析
- 小树有多少了棵教学课件
- 对称图形 圆的教学课件
- 2025年学校安全管理知识测试题及答案
- 课件三维模型展示
- 2025年环境安全考试题及答案
- 2025年安全生产管理人员考试题库大全
- 2025年企业安全考核题库答案解析
- 2025年家庭安全知识手册题目及答案
- GB/T 40073-2021潜水器金属耐压壳外压强度试验方法
- GB/T 3624-2010钛及钛合金无缝管
- GB/T 14153-1993硬质塑料落锤冲击试验方法通则
- (完整版)人教版八年级下册《道德与法治》期末测试卷及答案【新版】
- 维护新疆稳定 实现长治久安课件
- 北京大学人民医院-医疗知情同意书汇编
- 档案管理员述职报告9篇
- 舞台灯光基础知识教学课件
- 牙体牙髓病最全课件
- 脑卒中的功能锻炼课件
- 护理质控简报
评论
0/150
提交评论