- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验报告
实验课名称:编译原理实验 实验名称:目标代码生成器实验 班级: 学号: 姓名: 时间:2016-4-30
一、问题描述
代码生成器着重考虑两个问题: 一是如何使生成的目标代码较短;另一个是如何充分利用计算机的寄存器,减少目标代码中访问存储单元的次数。这两个问题直接影响代码的执行速度。其中基本问题:所有代码生成器都要面对何种中间代码输入, (是逆波兰式,四元式,还是三元式?等问题)何种代码做为目标程序,选择适当的代码指令,最优的寄存器分配方案,和计算顺序等基本问提
二、数据结构设计
逆波兰式( 目标代码 ,采用堆栈。
char x1,x2; /* 从语义栈中弹出俩个操作数,用于判断与运算 */
x2=SEM.top(); /* SEM.top 记得后面要加(),否则没有值!!! */
coutx2endl; /* 用于调试用的,看栈是怎样变化的 */
SEM.pop();
x1=SEM.top();
coutx1endl;
SEM.pop();
三、算法设计
代码生成算法:
对每个四元式: i: A:=B op C,依次执行:
1. 以四元式: i: A:=B op C 为参数,调用函数过程GETREG(i: A:=B op C),返回一个寄存器R,用作存放A的寄存器。
2. 利用AVALUE[B]和AVALUE[C],确定B和C现行值的存放位置B’和C’。如果其现行值在寄存器中,则把寄存器取作B’和C’
3. 如果B’≠R,则生成目标代码:
LD R, B’
op R, C’
否则生成目标代码 op R, 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:=B op C) 返回一个用来存放A的值的寄存器
(1) 如果B的现行值在某个寄存器Ri中,RVALUE[Ri]中只包含B,此外,或者B与A是同一个标识符,或者B的现行值在执行四元式A:=B op C之后不会再引用,则选取Ri为所需要的寄存器R,并转4;
(2 ) 如果有尚未分配的寄存器,则从中选取一个Ri为所需要的寄存器R,并转4;
(3 )从已分配的寄存器中选取一个Ri为所需要的寄存器R。最好使得Ri满足一下条件:
占用Ri的变量的值也同时存放在该变量的贮存单元中,或者在基本块中要在最远的将来才会引用到或不会引用到。
对RVALUE[Ri]中每一变量M,如果M不是A,或者如果M是A又是C,但不是B并且B也不在RVALUE[Ri]中,则
1) 如果AVALUE[M]不包含M,则生成 目标代码 ST Ri,M
2) 如果M是B,或者M是C但同时B也在RVALUE[Ri]中,则令AVALUE[M]={M, Ri} ,否则令AVALUE[M]={M}
3) 删除RVALUE[Ri]中的M
(4) 给出R,返回。
中间代码
目标代码
RVALUE
AVALUE
T:=A-B
LD R0,A
R0含有T
T在R0中
SUB R0,B
U:=A-C
LD R1,A
R0含有T
T在R0中
SUB R1,C
R1含有U
U在R1中
V:=T+U
ADD R0,R1
R0含有V
V在R0中
R1含有U
U在R0中
D:=V+U
ADD R0,R1
R0含有D
D在R0中
图1.1 设计流程图
程序代码:
#includeiostream /* 基本输入输出流 */
#includestack /* 运用栈,省去自己再写栈 */
#include ctype.h
#includestdio.h
#include cstdlib
using namespace std;
/***************************************
* 数据结构 *
* 逆波兰式( 目标代码 *
***************************************/
/*********************************************
* 目标代码指令:LD,ST,ADD,S
您可能关注的文档
- 木栈道及木平台专项施工方案1教材.doc
- 木栈道及木平台专项施工方案2-1教材.doc
- 木栈道及木平台专项施工方案3教材.doc
- 木栈道施工方案教材.doc
- 木栈道施工方案新5.25教材.docx
- 木栈道施工组织设计教材.docx
- 木栈道专项施工方案教材.docx
- 木制家具(HS940350)2015-2016俄罗斯(1898个)进口商排名教材.docx
- 木制家具企业作业场所职业病危害现状评价技术规范教材.doc
- 木制品(HS44219090)2015-2016印度(1830个)进口商排名教材.docx
- 2025年特种光纤行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年盐酸多巴胺行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年郁金香栽培行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年塑料着色剂行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年移动机器人行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年铜合金接触线行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年无水肌酸行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年新能源汽车IGBT行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年液相色谱试剂行业洞察报告及未来五至十年发展趋势预测报告.docx
- 2025年樱桃香精行业洞察报告及未来五至十年发展趋势预测报告.docx
最近下载
- 管理学案例两面针公司.ppt VIP
- Roland罗兰GW-8说明书 中文.pdf VIP
- 亚吉铁路运营现状及问题分析.pdf VIP
- 2025年下半年新疆塔城地区急需紧缺人才引进243人笔试参考题库附答案解析.docx VIP
- 大理州旅游美宿基本要求与评价.pdf VIP
- 2025年国开电大机考网考题库04008_理工英语4.doc VIP
- 中建EPC项目总承包管理方法与实务2024.docx
- 2025年下半年新疆塔城地区急需紧缺人才引进243人笔试模拟试题及答案解析.docx VIP
- 2025年下半年新疆塔城地区急需紧缺人才引进243人笔试备考题库附答案解析.docx VIP
- 2025年铁路列车员(中级)职业技能鉴定参考试题库-下(判断题汇总).docx VIP
文档评论(0)