- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE8
PAGE1
编译语言课程设计报告
专业
计算机科学与技术
学生姓名
班级
B计算机
学号
指导教师
完成日期
2010年X月
PAGE1
目录
TOC\o1-3\h\z\u1设计目的 1
2设计任务 1
3设计内容与要求 1
3.1问题描述 1
3.2程序要求 1
4程序设计说明 1
4.1设计流程图 2
5源程序清单 2
6小结 2
7参考文献 2
设计目的
学生在学习《编译原理》课程过程中,结合各章节的构造编译程序的基本理论,总共用一周时间完成课程设计。要求用C或C++语言描述及上机调试,实现五个题目中的任意一个。使学生将理论与实际应用结合起来,受到软件设计等开发过程的全面训练,从而提高学生软件开发的能力。了解基本块的DAG表示及其应用,掌握局部优化和循环优化的基本方法,对中间代码和目标代码进行等价交换,即实现中间代码优化和目标代码的优化。
设计任务
优化器包括局部优化和循环优化。编译程序在中间代码或目标代码生成之后要对生成的代码就行优化。
设计内容及要求
3.1问题描述
局部优化,是指基本块内的优化。所谓基本块,是指程序中一个顺序执行的语句序列,其实只有一个入口语句和一个出口语句。执行时只能从其入口语句进入,从其出口语句退出。对于一个给定的程序,我们可以把它划分为一系列的基本块。在各基本块的范围内分别进行优化。
循环优化:在找出了程序流图中的循环之后,我们就可以针对每个循环进行优化工作。因为循环内的指令是重复执行的,因而循环中进行的优化在整个优化工作中是非常重要的。循环优化的三种重要技术:代码外提,强度削弱和删除归纳变量。减少循环中的代码数目的一个重要办法就是代码外提。强度削弱和删除归纳变量的算法:(1)利用循环不变运算信息,找出循环中的所有基本归纳变量。(2)找出所有其他归纳变量a,并找出a与已知基本归纳变量x的同族线性函数关系Fa(x)。(3)对(2)中找出的每一归纳变量a进行强度削弱。(4)删除对归纳变量的无用赋值。(5)删除基本归纳变量。
总之,局部优化指的是在一个入口、一个出口的基本程序块上进行的优化,循环优化是对循环中的代码进行优化
3.2程序要求
局部优化:设计出划分基本块的算法,在每一个基本块中实现:合并已知量、删除多余运算和删除无用赋值三种局部优化。设计构造基本块的DGA图的算法,以及将DGA图还原实现基本快的优化算法。
循环优化:只做一重循环优化,完成代码外提,强度削弱和删除归纳变量等三种优化。要求实现while循环和for循环语句的优化。
程序设计说明
4.1设计流程图
局部优化:
DAG的结点类型只考虑0型、1型和2型,如下表所示。
类型
四元式
DAG结点
0型
(=,B,,A)
①A
B
1型
(op,B,,A)
②
op
①
B
2型
(op,B,C,A)
(=[],B,C,A)
(jrop,B,C,s)
③A③A③(s)
op=[]rop
①②①②①②
BCBCBC
5.源程序清单
由基本块构造DAG算法如下:
while(基本块中还有未处理过的四元式){
取下一个四元式Q;
newleft=newright=0;
if(getnode(B)==NULL){
makeleaf(B);
newleft=1;
}
switch(Q的类型){
case0:n=getnode(B);
insertidset(n,A);
break;
case1:if(isconsnode(B)){
p=calcons(Q.op,B);
if(newleft==1)/*getnode(B)是处理Q时新建结点*/
delnode(B);
if((n=getnode(p))==NULL){
makeleaf(p);
n=getnode(p);
}
}else{
if((n=findno
文档评论(0)