目标代码生成器

目标代码生成器

ID:76752965

大小:3.21 MB

页数:9页

时间:2022-01-19

目标代码生成器_第1页
目标代码生成器_第2页
目标代码生成器_第3页
目标代码生成器_第4页
目标代码生成器_第5页
目标代码生成器_第6页
目标代码生成器_第7页
目标代码生成器_第8页
目标代码生成器_第9页
资源描述:

《目标代码生成器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验报告实验课名称:编译原理实验实验名称:目标代码生成器实验班级:学号:姓名:时间:2016-4-30一、问题描述代码生成器着重考虑两个问题:一是如何使生成的目标代码较短;另一个是如何充分利用计算机的寄存器,减少目标代码中访问存储单元的次数。这两个问题直接影响代码的执行速度。其中基本问题:所有代码生成器都要面对何种中间代码输入,(是逆波兰式,四元式,还是三元式?等问题)何种代码做为目标程序,选择适当的代码指令,最优的寄存器分配方案,和计算顺序等基本问提二、数据结构设计逆波兰式è目标代码,采用堆栈。charx1,x2;/从语义栈中弹出俩个操作数,

2、用于判断与运算/x2=SEM.top();/SEM.top记得后面要加(),否则没有值!!!/cout<

3、寄存器中,则把寄存器取作B’和C’3.如果B’≠R,则生成目标代码:LDR,B’opR,C’否则生成目标代码opR,C’如果B’或C’为R,则删除AVALUE[B]或AVALUE[C]中的R。4.令AVALUE[A]={R},RVALUE[R]={A}。5.若B或C的现行值在基本块中不再被引用,也不是基本块出口之后的活跃变量,且其现行值在某寄存器Rk中,则删除RVALUE[Rk]中的B或C以及AVALUE[B]或AVALUE[C]中的Rk,使得该寄存器不再为B或C占用。寄存器分配:GETREG(i:A:=BopC)返回一个用来存放A的值的寄存器

4、(1)如果B的现行值在某个寄存器Ri中,RVALUE[Ri]中只包含B,此外,或者B与A是同一个标识符,或者B的现行值在执行四元式A:=BopC之后不会再引用,则选取Ri为所需要的寄存器R,并转4;(2)如果有尚未分配的寄存器,则从中选取一个Ri为所需要的寄存器R,并转4;(3)从已分配的寄存器中选取一个Ri为所需要的寄存器R。最好使得Ri满足一下条件:占用Ri的变量的值也同时存放在该变量的贮存单元中,或者在基本块中要在最远的将来才会引用到或不会引用到。对RVALUE[Ri]中每一变量M,如果M不是A,或者如果M是A又是C,但不是B并且B也不在

5、RVALUE[Ri]中,则1)如果AVALUE[M]不包含M,则生成目标代码STRi,M2)如果M是B,或者M是C但同时B也在RVALUE[Ri]中,则令AVALUE[M]={M,Ri},否则令AVALUE[M]={M}3)删除RVALUE[Ri]中的M(4)给出R,返回。中间代码目标代码RVALUEAVALUET:=A-BLDR0,AR0含有TT在R0中SUBR0,BU:=A-CLDR1,AR0含有TT在R0中SUBR1,CR1含有UU在R1中V:=T+UADDR0,R1R0含有VV在R0中R1含有UU在R0中D:=V+UADDR0,R1R0

6、含有DD在R0中分配操作寄存器R:GETREG(i:A:=BOPC)取B,C现行值存放的位置B′,C′B′:=AVALUE[B]C′:=AVALUE[C]B′=R?生成目标代码OpR,C′生成目标代码LDR,B′OPR,C′yesno图1.1设计流程图程序代码:#include/基本输入输出流/#include/运用栈,省去自己再写栈/#include#include#includeusingnamespacestd;/数据结构逆波兰式è目标代码//目标代码

7、指令:LD,ST,ADD,SUB,MUL,DIV相应的数值:1,2,3,4,5,6数据段开始:设置为a-z;单个寄存器acc为寄存器标志:为0表示为空,非0,被占用/chartemp=’a’-1;/临时变量a-z/stackSEM;/语义栈/ints;/栈指针/typedefstruct{intop;/操作符对应的数值/charrt;/单个寄存器/charnum;/操作数/}ObjType;ObjTypeOB[40];/目标代码区/into_pt=0;/区指针/intacc;/寄存器标志/charblexp[40];/逆波兰式区//

8、代码区//函数声明/intisop(char);/判断操作符是否是+-//voidbuild(char);/根据操作符生成目标代码函数/voidB_O

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

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

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