版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九章 中间代码生成,本章内容 用语法制导定义和翻译方案的方法来说明程序设计语言的结构怎样被翻译成中间形式。,9.1 赋值语句的翻译,翻译的需求 充分了解各种语言现象的语义 包括:控制结构、数据结构、单词 充分了解它们的实现方法 目标语言的语义 了解中间代码的语义 了解运行环境,实现赋值语句的翻译,基本子程序 产生一条中间代码 gen(code) 产生新的临时变量 newtemp 属性设置 中间代码序列 code 存储位置 place,赋值语句的四元式翻译,S id := E S.code := E.code | gen( id.place:=E.place ) E E1 + E2 E.pla
2、ce := newtemp; E.code := E1.code | E2.code | gen(E.place:=E1.place+E2.place) E E1 * E2 E.place := newtemp; E.code := E1.code | E2.code | gen(E.place:=E1.place*E2.place),注释: | 表示代码序列的连接,E - E1 E.place := newtemp; E.code := E1.code | gen(E.place:=0-E1.place) E ( E1 ) E.place:= E1.place; E.code:= E1.co
3、de E id E.place:= id.place; E.code:= E num E.place:= num.val;E.code:= ,例 5-7:翻译 a:= -c+b*34,a:= -c+b*34的中间代码,t2:=0 - c t3:=b*34 t1:=t2+t3 a:=t1,a:= -c+b*34的中间代码的生成过程,S.code (S id := E)= E.code | gen( a:=E.place ) /* a id.place */ (E E1 + E2)= E1.code | E2.code | gen( t1:=E1.place+E2.place ) | gen( a
4、:=t1 ) /* newtemp t1 E.place */ (E1 - E11)= E11.code | gen( t2:= 0 - E11.place ) (E2 E21 * E22)/* newtemp t2 E1.place */,| E21.code | E22.code | gen( t3:= E21.place*E22.place ) /* newtemp t3 E2.place */ | gen( t1:=t2+t3 ) | gen( a:=t1 ) (E21 b)= gen( t2:= 0 - c ) | gen( t3:=b*34 ) (E22 34 ) /* c E11
5、.place */ /* b E21.place */ /* 34 E22.place */ | gen( t1:=t2+t3 ) | gen( a:=t1 ) /* E21.code E22.code */,结果 S的代码,t2:=0 - c t3:=b*34 t1:=t2+t3 a:=t1,结果:开始符号的属性 S.code,1) 找出分析树中使用的产生式规则 2)根据产生式的语义规则,代换公式中的各属性 3)反复使用 1) 和 2) 改写公式,最后得到代码生成语句组成的公式 组成语句的翻译结果(中间代码序列),小结,根据不同的中间代码改写语义规则 树结构(一个结点多个域) 后缀式 赋值语
6、句的四元式翻译 语法制导定义 翻译模式: 重要属性与过程:code、place、newtemp、gen,表达式翻译中的其它问题,运算合法性检查 利用符号表保存的名字类型 类型自动转换 填加专用指令 临时变量空间的统计 了解需求、及时释放,9.2 控制语句的翻译,高级语言的控制结构 顺序 begin 语句; 语句; end 条件 if_then_else if_then switch case 循环 while_do do_while for repeat_util 三地址代码的控制结构 goto l if x relop y goto l,S while C do S1 的翻译,属性设置(继承
7、) 布尔式 C 代码段真出口 true 代码段假出口 false 语句 S 代码段的入口 begin 后续段入口 next,循环语句的属性文法,S while C do S1 C.false := S.next; S.begin := S1.next := newlabel; C.true := S1.begin := newlabel; S.code := gen( S.begin: ) | C.code | gen( C.true: ) | S1.code | gen( gotoS.begin ) 语义过程 新标号的产生 newlabel,S if C then S1else S2 的翻译
8、,代码序列 C S1 S2 属性关系 S1.begin = C.true S2.begin = C.false S1.next = S2.next = S.next,条件语句的属性文法,S if C then S1 C.true := newlabel; else S2 C.false := newlabel; S1.next := S2.next := S.next; S.code := C.code | gen( C.true: ) | S1.code | gen( goto S.next ) | gen( C.false: ) | S2.code,简单布尔表达式的翻译,C E1 relop E2 C.code := E1.code | E2.code | gen( if E1.place relop.op E2.place gotoC.true ) | gen( gotoC.false ),例 :翻译下列语句,while a y do z := x + 1; else S12 x := y,S1,生成的三地址代码序列,L1: if a y goto L5 goto L1 L5: t1 := x + 1 z := t1 got
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国考申论大作文专项题库
- 小学主题班会课件:梦想启航向未来奋斗书写华章
- 通信行业网络工程师技术能力与项目成果绩效考核表
- 教育辅导教师学生学习进步考核KPI考核表
- 某电子制造企业原材料采购价格波动风险催办函4篇范文
- 中华传统美德颂扬,小学主题班会课件
- 退换货流程优化消费者告知函3篇范本
- 关于财务确认的确认函7篇
- 医院放射科DR机房防护门改造项目环境影响评价报告
- 婴儿餐椅餐盘深度技术指标
- 义齿佩戴清洗存放课件
- 2025北京市交通发展年度报告
- 信用卡部培训大纲
- 代建公司代建管理制度
- 煤生字第665号关于颁发《煤矿矿井机电设备完好标准》的通知
- 滚针美容治疗技术解析
- 2025黑龙江七台河辰能生物质发电有限公司招聘笔试参考题库附带答案详解
- 2024-2025学年北师大版物理八年级上册月考模拟试卷(1-2章)(含答案)
- 小区保安服务 投标方案(技术方案)
- 兰州市文职辅警招聘考试真题
- 个人技能与专业能力的提升课件
评论
0/150
提交评论