中间代码基本块划分.doc

中间代码基本块划分.doc

ID:53584458

大小:64.50 KB

页数:5页

时间:2020-04-04

中间代码基本块划分.doc_第1页
中间代码基本块划分.doc_第2页
中间代码基本块划分.doc_第3页
中间代码基本块划分.doc_第4页
中间代码基本块划分.doc_第5页
资源描述:

《中间代码基本块划分.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、中间代码基本块的划分任务要求在理解代码优化原理的基础上,实现将中间代码序列划分基本块的程序1.理解编译过程中代码优化的定义2.掌握各种代码优化的方法3.定义程序流图中的基本块4.明确程序流图的形式及功能5.程序设计及调试一.原理阐述1.代码优化的定义:代码优化的实质就是提高代码质量从而加快代码执行速度的一种技术。根据代码优化是否涉及具体的计算机,又将代码优化分为⑴与机器有关的优化(即窥孔优化),一般在目标代码上进行;⑵与机器无关的优化,常在中间代码上进行。又根据优化范围分成局部优化、循环优化、全局优化。2.代码优化的方法:1)删除

2、公共子表达式2)代码外提3)强度削弱4)删除归纳变量5)合并已知量6)复写传播7)删除无用赋值3.基本块和划分基本块的定义和方法:定义:基本块就是代码序列中一组顺序执行的语句序列,只有一个入口和一个出口。而划分基本块的实质就是定义入口和出口语句。划分基本块的方法:1)定义入口语句①四元式的第一个语句;②由条件转移语句或无条件转移语句能转到的语句;③紧跟在条件转移语句后面的语句。2)定义出口语句①下一个入口语句的前导语句;②转移语句(包括转移语句本身);③停语句(包括停语句本身)。构造基本块,删除不属于任何基本块的语句二.流程示意图

3、按四元式序列,给出如下程序流图⑴readx;⑵ready;⑶L1:c=c+1;⑷ifc=0gotoL2;⑸x=y;⑹y=c;⑺gotoL1;⑻L2:writey;⑼halt(以“~”表示)(3)L1:c=c+1(4)ifc=0gotoL2⑴readx⑵ready(5)x=y(6)y=c(7)gotoL1⑻L2:writex⑼halt(以“~”表示)Block3Block2Block4Block1一.部分代码:入口条件1inti=0,j=-1,back_i=0,in_num=0,out_num=0;charg[200];cout<<

4、"请输入要进行基本块划分的四元式(按回车表示四元式输入完毕):"<

5、找到转移语句能转到的语句{back_i=i;//i是指针,back_i记录当前位置,用于搜索语句序号for(;*(g+back_i)!=')';back_i--){continue;}in[in_num++]=*(g+back_i-1);//得到入口语句序号,将其放入in[]出口条件1out[out_num++]=(char)((int)*(g+back_i-1)-1);break;//入口语句的上一句是出口语句,将其序号放入out[]}}cout<<"_______________________________"<

6、输入语句):"<("<

7、+)//找到条件语句的下一句,即入口语句{continue;}in[in_num++]=*(g+back_i+1);//将入口语句序号放入in[]}}出口条件2for(i=0;*(g+i)!='~';i++)//转移语句为出口语句{if(*(g+i)=='g'&&*(g+i+1)=='o')//找到转移语句的关键字goto{back_i=i;for(;*(g+back_i)!=')';back_i--){continue;}out[out_num++]=*(g+back_i-1);//将语句序号放入out[]in[in_num++

8、]=(char)((int)*(g+back_i-1)+1);//其下一句是入口语句,将语句序号放入in[]for(;j<1;j++){cout<<"sentence("<("<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。