编译原理 第6章 中间代码生成ppt课件.ppt

编译原理 第6章 中间代码生成ppt课件.ppt

ID:58665053

大小:892.00 KB

页数:63页

时间:2020-10-05

编译原理 第6章 中间代码生成ppt课件.ppt_第1页
编译原理 第6章 中间代码生成ppt课件.ppt_第2页
编译原理 第6章 中间代码生成ppt课件.ppt_第3页
编译原理 第6章 中间代码生成ppt课件.ppt_第4页
编译原理 第6章 中间代码生成ppt课件.ppt_第5页
资源描述:

《编译原理 第6章 中间代码生成ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6章 中间代码生成1第6章中间代码生成中间代码表示三地址码四元式类型和声明赋值语句的翻译控制语句的翻译布尔表达式的翻译控制语句的翻译26.1中间代码表示作用过渡:经过语义分析被译成中间代码序列形式中间语言的语句优点便于编译系统的实现、移植、代码优化31)三地址代码(1)特点形式简单、语义明确、便于翻译独立于目标语言每条指令右侧最多有一个运算符一般情况可以写成x=yopz运算分量:名字:用源程序中名字作为三地址代码的地址常量:源程序中出现的、或者生成的常量编译器生成的临时变量4三地址代码(2)指令运算/赋值指令:x=yopzx=opy复制指令:x=y无条件转移指令:go

2、toL条件转移指令:ifxgotoLifFalsexgotoL条件转移指令:ifxrelopygotoL5三地址代码(3)指令过程调用/返回:paramx1//设置参数paramx2…paramxncallp,n//调用子过程p,n为参数个数带下标的复制指令:x=y[i]x[i]=y注意:i表示离开数组位置第i各字节,而不是数组的第i各元素地址/指针赋值指令:x=&yx=*y*x=y6例子语句doi=i+1;while(a[i]

3、op:运算符的内部编码arg1,arg2,result是地址x=y+z+yzx单目运算符不使用arg2param运算不使用arg2和result条件转移/非条件转移将目标标号放入result8四元式的例子赋值语句:a=b*-c+b*-c93)三地址代码与四元式的的关系一般形式x:=yopz其中x,y,z为变量名、常数或编译产生的临时变量四元式(op,y,z,x)10表达式生成三地址码的SDD116.2类型和声明类型检查(TypeChecking)利用一组规则来保证运算分量的类型和运算符的预期类型是否匹配。翻译时应用类型信息确定名字需要的内存空间、计算数组元素的地址、类型

4、转换、选择正确的运算符126.2.1类型表达式类型表达式(typeexpression)表示类型的结构基本类型类名类型构造算子作用于类型array[数字,类型表达式]record[字段/类型对的列表](可以用符号表表示)函数类型构造算子:参数类型结果类型笛卡尔积:sXt可以包含取值为类型表达式的变量136.2.2声明文法D→Tid;D

5、εT→BC

6、record‘{’D‘}’B→int

7、floatC→ε

8、[num]C语义:D生成一系列声明;T生成不同的类型;B生成基本类型int/float;C表示分量,生成[num]序列;注意record中包含了各个字段的声明。字段声

9、明和变量声明的文法一致。141)局部变量的存储布局变量的类型可以确定变量需要的内存称为类型的宽度可变大小的数据结构先只需要考虑指针一个函数的局部变量总是分配在连续的区间;因此我们可以给每个变量分配一个相对于这个区间开始处的相对地址变量的类型信息保存在符号表中;152)计算T的类型和宽度的SDT综合属性:type,widtht和w用于类型和宽度信息从B传递到C→ε相当于C的继承属性,因为传递时总是拷贝,所以在SDT中只赋值一次。163)作用域和符号表在具有语句块的编程语言中,标识符x在最内层的声明x的作用域中。每个作用域对应于一个符号表。符号表形成树状结构。在语法分析时,

10、通过栈来表示当前符号表及其祖先。174)声明序列的SDT(1)在处理一个过程/函数时,它声明的变量应该放到单独的符号表中去;这些变量的内存布局独立相对地址从0开始;假设变量的放置和声明的顺序相同;SDT的处理方法变量offset记录当前可用的相对地址;每“分配”一个变量,offset的值增加相应的位置top.put(id.lexeme,T.type,offset)创建符号表条目184)声明序列的SDT(2)我们可以把offset看作是D的继承属性P{D.offset=0}DDTid;{D1.offset=D.offset+T.width;}D119例inta;声明过

11、程的语法翻译语法制导定义的SDTP→MDM→ε{offset=0;}D→Tid;NDN→ε{top.put(id.lexname,T.t,offset);offset=offset+T.w}D→εT→BKC{T.t=C.t;T.w=C.w}K→ε{t=B.t;w=B.w;}B→int{B.t=integer;B.w=4;}C→ε{C.t=t;C.w=w;}20inta;εMoffset=0MintMBB.t=int,B.w=4MBεMBKt=intw=4MBKεMBKCC.t=intC.w=4MTT.t=intT.w=4

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

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

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