中间代码生成

中间代码生成

ID:43926511

大小:1.11 MB

页数:155页

时间:2019-10-16

中间代码生成_第1页
中间代码生成_第2页
中间代码生成_第3页
中间代码生成_第4页
中间代码生成_第5页
资源描述:

《中间代码生成》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、中间代码生成第八章中间代码生成中间代码说明语句的翻译赋值语句的翻译控制语句的翻译(if、循环)属性文法的实现过程调用的翻译8.1中间代码作用过渡:经过语义分析被译成中间代码序列形式中间语言的语句优点便于编译系统的实现、移植、代码优化常用的中间代码(语言)三地址代码(四元式)语法(结构)树(三元式)(5.2节)后缀式——逆波兰表示(2.3节)特点形式简单、语义明确、便于翻译独立于目标语言例8-1表达式(A-12)*B+6的中间代码+*6-A12B三地址码T1=A-12T2=T1*BT3=T2+6四元组(-,A,12,T1)(

2、*,T1,B,T2)(+,T2,6,T3)三元组①(-,A,12)②(*,①,B)③(+,②,6)波兰表示+*-A12B6逆波兰表示A12-B*6+如何生成语言结构的三地址码类似于构建语法树生成后缀表示以S:=(A-12)*B+6为例 将赋值语句变换为语法结构树属性设置E.p是语法结构树指针id.entry是名字的符号表入口num.val是数值基本函数——结点构造mknode建中间结点mkleaf建叶结点6A12-+B*S:=生成赋值语句语法树的语法制导定义例8-2:a:=b*(-c)+b*(-34)的语法结构树——直观描

3、述:=*-0+*-0idbnum34idbidcidaroot语法结构树——数组存储形式地址算符操作数操作数012345678910a:=b*(-c)+b*(-34)以语法分析为中心后缀式(逆波兰表示)操作数1,操作数2,运算符操作数,运算符例8-7:a:=b*(-c)+b*(-34)的后缀式abc-*b34-*+:=生成后缀式的属性文法三地址代码一般形式x:=yopz其中x,y,z为变量名、常数或编译产生的临时变量四元式(op,y,z,x)种类:x:=yopz双目运算x:=opy单目运算x:=y赋值语句ifxrelopy

4、gotol条件转移语句(relop,x,y,l)其它语句的三地址代码gotol无条件转移paramx实在参数callp,n过程调用returnx过程返回x:=y[i]数组运算x[i]:=yx:=&y指针运算x:=*y*x=y生成三地址码的属性文法8.2说明语句的翻译作用说明语句(Declarations)用于对程序中规定范围内使用的各类变量、常数、过程进行说明编译要完成的工作在符号表中记录被说明对象的属性,为执行做准备要关心的问题类型基本类型/内部类型(built-in):整型、实型、双精度型、逻辑型、字符型用户定义类型—

5、—结构描述作用域——有效范围一般:说明所在的分程序、过程要关心的问题类型的作用引入数据抽象、隐蔽数据的基本表示用户无需注明字节数规定可用的运算类型检查数据精度控制规定存储单元的字节数,优化空间管理变量说明的翻译在符号表中填写变量的属性种别、类型、相对地址、作用域……等相对地址全局变量表示为静态数据区的偏移值(offset)局部变量表示为局部数据区(活动记录部分)的偏移值两种数据区例8-3:相对地址举例名字相对地址x0i64j68X[1]X[2]……X[8]ij08566468beginrealx[8];integeri,j

6、;……end文法描述P→DD→D;DD→id:TT→integerT→realT→array[num]ofT1T→^T1例如:a:integer;b:real;c:array[10]ofrealTTTDDDDPD属性、过程、与全局量文法变量T(类型)的属性type类型width占用的字节数基本子程序enter:设置变量的类型和地址array:数组类型处理全局量offset:已分配空间字节数说明语句的翻译模式P→{offset:=0}DD→D;DD→id:T{enter(id.name,T.type,offset);offs

7、et:=offset+T.width}T→integer{T.type:=integer;T.width:=4}T→real{T.type:=real;T.width:=8}T→array[num]ofT1{T.type:=array(num.val,T1.type);T.width:=num.val*T1.width}T→↑T1{T.type:=pointer(T1.type);T.width:=4}P→MDM→{offset:=0}例8-4x:real;i:integer的翻译enter(x,real,0)offse

8、t=0offset=8T.type=realT.width=8offset=12T.type=integerT.width=4enter(i,integer,8)D→id:T{enter(id.name,T.type,offset);offset:=offset+T.width}例8-4x:real;i

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

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

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