编译原理第四章语法制导翻译生成中间代码

编译原理第四章语法制导翻译生成中间代码

ID:43242735

大小:1016.00 KB

页数:66页

时间:2019-10-07

编译原理第四章语法制导翻译生成中间代码_第1页
编译原理第四章语法制导翻译生成中间代码_第2页
编译原理第四章语法制导翻译生成中间代码_第3页
编译原理第四章语法制导翻译生成中间代码_第4页
编译原理第四章语法制导翻译生成中间代码_第5页
资源描述:

《编译原理第四章语法制导翻译生成中间代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、上次课程内容回顾换名调用嵌套定义的过程中信息的存储作用域信息的保存过程的作用域(过程与程序块的区别)过程嵌套的层次符号表的组织与符号表中的作用域信息语法制导翻译生成符号表用栈保留各符号表节点信息进入过程声明D之前构造符号表,分析D时填写符号表,退出D后在外层符号表中加入此过程条目14.5简单算术表达式与赋值句简单算术表达式和赋值句,是指表达式和赋值句中变量是不可再分的简单变量。讨论所基于的文法:A→id:=EE→E+E

2、E*E

3、-E

4、(E)

5、id24.5.1简单算术表达式的语法制导翻译属性.place:存放E的变量地址(符号表中地址或临时变量

6、的编码);过程emit(result':='arg1'op'arg2):生成“result:=arg1oparg2”的三地址码。(1)A→id:=E(2)E→E1+E2(3)E→E1*E2(4)E→-E1(5)E→(E1)(6)E→id{E.place:=entry(id.name)}{E.place:=newtemp;emit(E.place':='E1.place'+'E2.place)}{E.place:=newtemp;emit(E.place':='E1.place'*'E2.place)}{E.place:=newtemp;emi

7、t(E.place':=''-'E1.place)}{E.place:=E1.place}{emit(entry(id.name)':='E.place)}34.5.2变量的(内部)类型转换强制(coercion):按照一定的原则,将不同类型的变量在内部转换为相同的类型,然后进行同类型变量的计算。运算的转换原则:赋值的转换原则:属性.mode:取值int或real表达式的类型判定树:44.5.2变量的(内部)类型转换(续1)三地址码:T:=itrE:将E从整型变为实型,结果存放T中T:=rtiE:将E从实型变为整型,结果存放T中语义规则:A→

8、id:=E{tmode:=entry(id.name).mode;iftmode=E.modethenemit(entry(id.name)':='E.place);elseT:=newtemp;emit(entry(id.name)':='T);endif;}iftmode=intthenemit(T':='rtiE.place);elseemit(T':='itrE.place);endif;结果54.5.2变量的(内部)类型转换(续2)E→E1opE2{T:=newtemp;E.mode:=real;ifE1.mode=intthene

9、lseendif;E.place:=T;}其他语义规则看教材P128-129ifE2.mode=intthenemit(T':='E1.placeOPiE2.place);E.mode:=int;elseU:=newtemp;emit(U':='itrE1.place);emit(T':='UOPrE2.place);endif;ifE2.mode=intthenU:=newtemp;emit(U':='itrE2.place);emit(T':='E1.placeOPrU);elseemit(T':='E1.placeOPrE2.place

10、);endif;前页64.5.2变量的(内部)类型转换(续3)例4.17x:=-a*b+c的语法制导翻译,x、a、b是整型,c是实型。序号产生式中间代码(1)E1→a(2)E2→-E1t1:=-a(3)E3→b(4)E4→E2*E3t2:=t1*ib(5)E5→c(6)E6→E4*E5t4:=itrt2t3:=t4+rc(7)A→x:=E6t5:=rtit3x:=t574.6数组元素的引用确定数组空间的存储分配:以第一个元素地址为首地址,分配一个连续空间。多维到一维存储空间的映射方法:以行为主,以列为主考虑三行、三列的二维数组a[0..2,2

11、..4]:a[0,2]a[0,3]a[0,4]a[1,2]a[1,3]a[1,4]a[2,2]a[2,3]a[2,4]以行为主存放时的元素排列:a[0,2]a[0,3]a[0,4]a[1,2]a[1,3]a[1,4]a[2,2]a[2,3]a[2,4]以列为主存放时的元素排列:a[0,2]a[1,2]a[2,2]a[0,3]a[1,3]a[2,3]a[0,4]a[1,4]a[2,4]确定数组元素地址的两个要素:首地址和相对首地址的偏移量不同的映射方式,使得同一个数组元素相对首地址的偏移量不同例如:a[1,4],偏移量分别是5和78确定映射方式

12、的两种方法1.由声明时的语法确定映射方式:a:array[d1]ofarray[d2]of...array[dn]ofinteger;引用方式:a[i1,i2,..

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

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

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