- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目标代码生成器教程
实验报告
实验课名称:编译原理实验实验名称:目标代码生成器实验班级:学号:姓名:时间: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,返回。
中间代码目标代码RVALUEAVALUET:=A-BLD R0,AR0含有TT在R0中SUB R0,BU:=A-CLD R1,AR0含有TT在R0中SUB R1,CR1含有UU在R1中V:=T+UADD R0,R1R0含有VV在R0中R1含有UU在R0中D:=V+UADD R0,R1R0含有DD在R0中
分配操作寄存器
R:GETREG(i:A:=B OP C)
取B,C现行值存放的位置B′,C′
B′:=AVALUE[B]
C′:=AVALUE[C]
B′=R?
生成目标代码
Op R,C′
生成目标代码
LD R,B′
OP R,C′
yes
no
图1.1 设计流程图
程序代码:
#includeiostream /* 基本输入输出流 */
#includestack /* 运用栈,省去自己再写栈 */
#include ctype.h
#includestdio.h
#include cstdlib
using namespace std;
/***************************************
* 数据结构 *
您可能关注的文档
- 监理规划小区出新教程.doc
- 监理规划11教程.doc
- 白云嘉禾望岗及空港大道沿线片区控制性详细规划环境影响报告书——征求意见稿教程.doc
- 监理规划范本(正式)教程.doc
- 监盘与运行记录教程.pptx
- 监理计划(乌巴定稿)教程.doc
- 托福语法5.ppt
- 监督日志(完整)教程.doc
- 监理公司实务操作手册教程.doc
- 盖梁开工报告教程.doc
- DeepSeek培训课件入门宝典:第2册 开发实战篇 .pptx
- 全面认识全过程人民民主-2024春形势与政策课件.pptx
- 2024春形势与政策-全面认识全过程人民民主.pptx
- 2025年春季学期形势与政策第二讲-中国经济行稳致远讲稿.docx
- 2024春形势与政策-铸牢中华民族共同体意识课件.pdf
- 2024春形势与政策-走好新时代科技自立自强之路课件 (2).pptx
- 2024春形势与政策-走好新时代科技自立自强之路课件.pptx
- 形势与政策学习指导教学-整套课件.pdf
- 2023年春季形势与政策讲稿第三讲-开创高质量发展新局面.pdf
- DeepSeek培训课件-清华大学-DeepSeek模型本地部署与应用构建.pptx
最近下载
- 溢洪道水面线计算(分段求和法).xls VIP
- 在线网课学习课堂《科技英语交流(北京理大)》单元测试考核答案.docx
- 一年级活动五《小小衣物整理师》PPT课件.ppt
- Python编程配套课件-第二章Python基础知识-适合零基础、少儿编程,中小学编程学习者.pptx VIP
- 2023年哈尔滨师范大学计算机科学与技术专业《计算机组成原理》科目期末试卷A(有答案).docx VIP
- 20S515:钢筋混凝土及砖砌排水检查井.pdf VIP
- 2025年部编版一年级下册语文看图写话专项积累练习含答案 .pdf VIP
- 二年级数学下册北师大版全册教材分析解读精品课件ppt.pptx
- 第1章 环境艺术设计制图基础 .ppt
- 特瑞普利单抗注射液-临床用药解读.pptx
文档评论(0)