ImageVerifierCode 换一换
格式:DOC , 页数:21 ,大小:338KB ,
资源ID:10814064      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10814064.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理 中间代码优化.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

编译原理 中间代码优化.doc

1、实验三 中间的代码优化某些编译程序在中间代码或目标代码生产之后要对其进行优化,所谓优化就是对代码进行等价的变换。而变换后的代码运行结果与变换前的代码运行结果相同。而运行速度加快或占用内存空间减少。中间的代码优化就是对中间代码进行等价的变换。基本块的有向图 DAG(Directed Acyclic Graph)有向图中任何一条通路都不是环路,则称该有向图为无环路有向图,简称为DAG。一、 实验题目:中间代码的局部优化二、 实验目的:掌握局部优化方法、提高机器的运行速度三、实验内容:1 、构造基本块内的优化 DAG假设:(1) ni 为已知结点号,n 为新结点号;(2)访问各结点信息时,按结点号逆

2、序排序2、完成对下例三类表达式的优化(1)常值表达式的优化(2)公共表达式的优化(3)无用赋值的优化3、输出根据优化的 DAG 重组四元式四、设计概要:首先要实现表达式中间代码生成,采用递归下降子程序法实现。ET0 “push(SYN,w)”T“QUAT” TF1”push(SYN,w)”F “QUAT”Fi“push(SEM,entry(w)”|(E)其中:push(SYN,w)-当前单词 w 入符号栈 SYN;push(SEM,entry(w)- 当前 i 在符号表中的入口值压入语义栈 SEM;QUAT-生成四元式函数 T:=newtemp; QTj=(SYNk,SEMs-1,SEMs,T

3、);j+; pop(SYN,_);pop(SEM,_);pop(SEM,_); push(SEM,T);在对中间代码进行局部优化五、程序代码及运行结果:1.表达式中间代码生成#include#includeusing namespace std;char str50;char sem50;char syn50;char ch;int i=0;int j=0;int n=0;int p=1;void push_sem(char w)semj+=w;void push_syn(char w)synn+=w;void Gen()char s22;char w;w=sem-j;if(w=1w1=str

4、i+;w2=stri+;if(w2!=) i=i-2;q=1;ch=stri+;k=E();if(q=0)w=sem-j;if(w=1int i=1; int j=0,n=0; int p; int m=1;int Ti=0;char prog100; char ch;char syn20,sem503; void SEM(void)int i,j;for(i=0;i=a)|(ch=A)temp0=ch;push1(sem,temp);ch=progp+;if(ch=)push0(syn,ch);ch=progp+;E();if(m=0)cout=a)|(ch=A)|(ch=0)temp0=c

5、h;push1(sem,temp);ch=progp+;else m=0;void push0(char sz,char x)int top;top=strlen(sz);sztop=x;top+;sztop+1=0;void pop0(char sz)int top;top=strlen(sz)-1;sztop=0;void push1(char sz503,char x3)int top=1;while(sztop0)top+;strcpy(sztop,x);top+;sztop+10=0;void pop1(char sz503)int top=1;while(sztop0)top+;t

6、op-;sztop0=0;sztop1=0;sztop2=0;void quat0(char w)int top=1,i;char *p;while(semtop0)top+;strcpy(quadj.ag1,semtop-2);strcpy(quadj.ag2,semtop-1);quadj.op=w;p=newT();for(i=0;i0;n-)for(l=0;l0;n-)for(l=0;l0;n-)for(l=0;l0;n-)for(l=0;l0;n-)if(Nn-1.pre0=tag1)break;if(tag!=0)if(Ntag-1.op=quadm.op)if(!Ntag-1.b

7、z01)top=1;while(Ntag-1.bztop0)top+;strcpy(Ntag-1.bztop,quadm.result);else if(!quadm.result1)temp=Ntag-1.bz01;strcpy(Ntag-1.bz0,quadm.result);top=1;while(Ntag-1.bztop0)top+;Ntag.bztop0=t;Ntag.bztop1=temp;elsetop=1;while(Ntag-1.bztop0)top+;strcpy(Ntag-1.bztop,quadm.result);continue;elsenewN();Ni-1.op=

8、quadm.op;strcpy(Ni-1.bz0,quadm.result);Ni-1.pre0=tag1;Ni-1.pre1=tag2;continue;elsenewN();Ni-1.op=quadm.op;strcpy(Ni-1.bz0,quadm.result);Ni-1.pre0=tag1;Ni-1.pre1=tag2;continue;elsenewN();strcpy(Ni-1.bz0,quadm.ag2);tag2=i-1;tag=0;for(n=i;n0;n-)for(l=0;l25;l+)if(strcmp(quadm.result,Nn-1.bzl)=0)tag=n;to

9、p=l;break;if(tag=0)newN();strcpy(Ni-1.bz0,quadm.result);Ni-1.op=quadm.op;Ni-1.pre0=tag1;Ni-1.pre1=tag2;continue;elsefor(l=top+1;l25;l+)strcpy(Ntag-1.bzl-1,Ntag-1.bzl);newN();strcpy(Ni-1.bz0,quadm.result);Ni-1.op=quadm.op;Ni-1.pre0=tag1;Ni-1.pre1=tag2;void newquat(void)int l,top;for(l=1;li;l+)if(Nl.p

10、re1=0elsefor(top=1;Nl.bztop1;top+)if(!Nl.bztop0)strcpy(newquadn.ag1,Nl.bz0);newquadn.ag20=_;newquadn.op=;strcpy(newquadn.result,Nl.bztop);n+;else continue;else if(Nl.pre1!=0|Nl.pre0!=0)strcpy(newquadn.ag1,NNl.pre0.bz0);strcpy(newquadn.ag2,NNl.pre1.bz0);newquadn.op=Nl.op;strcpy(newquadn.result,Nl.bz0);n+;if(!Nl.bz01)for(top=1;Nl.bztop0;top+)if(!Nl.bztop1)strcpy(newquadn.ag1,Nl.bz0);newquadn.ag20=_;newquadn.op=;strcpy(newquadn.result,Nl.bztop);n+;void print2(void)int i;cout“优化后的代码:“endl;for(i=0;in;i+)cout(i+1)“、(“newquadi.op“,“newquadi.ag1“,“newquadi.ag2“,“newquadi.result“)“endl;运行结果:

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报