编译原理第七章 中间代码生成.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:24 大小:173KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

编译原理第七章 中间代码生成.ppt

编译原理第七章中间代码生成.ppt

预览

免费试读已结束,剩余 14 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第七章中间代码生成中间语言三地址中间代码语法制导方法类型检查和类型转换中间代码生成中的几个问题简单表达式的LL语法制导下标变量中间代码生成表达式中间代码生成的例子赋值语句的形式为:Left:=Right赋值语句的四元式结构:Left的中间代码Right的中间代码(FLOAT,right,—,t)(ASSIG,Right(t),n,Left)语法制导:SL:=R#ASSIGN#ASSIGN:从语义栈中取出赋值号左右分量的语义信息;比较类型是否相同,如果不同,则生成类型转换中间代码;生成赋值四元式(ASSIG,Right(t),n,Left)。过函调用的中间代码f(E1,E2,…,En):E1.tuple…En.tuple(ACT,E1.Arg)…(ACT,En.Arg)(CALL,<f>,—,result)或(CALL,<f>,—)形参实参结合中间代码:(VALACT,Ei.Arg,offseti,sizei)……值参(VARACT,Ei.Arg,offseti,sizei)……变参(FUNCACT,Ei.Arg,offseti,sizei)……函数参数(PROACT,Ei.Arg,offseti,sizei)……过程参数例:x+f(H(10),g(Y))其中x是整型变量,H为形参函数名,H的形参为值参,f、g为实在函数名,f的参数均为值参,g的参数为变参。(VALACT,10,1,1)(CALL,H,false,t1)(VARACT,Y,1,1)(CALL,g,true,t2)(VALACT,t1,1,size1)(VALACT,t2,2,size2)(CALL,f,true,t3)(ADDI,x,t3,t4)过/函调用中间代码的生成过/函调用的语法制导GOTO语句和标号语句的中间代码条件语句的中间代码条件语句的语法制导S→ifEthen#ThenIfSElsePart#EndIfElsePart→else#ElseIfSElsePart→#ThenIf根据Sem[top]的值,检查它的类型是否为boolean类型,如果是则产生中间代码(THEN,Sem[top],_,_)。#ElseIf产生中间代码(ELSE,_,_,_)#EndIf产生中间代码(ENDIF,_,_,_)While语句的中间代码while语句的语法制导S→while#StartWhileEdo#DoWhileS#EndWhile#StartWhile产生中间代码(WHILE,_,_,_)#DoWhile遇do时(表达式E处理完,其值在Sem[top]):⑴类型检查:检查E是否为boolean类型;⑵产生中间代码(DO,E.FORM,_,_);⑶E弹栈:pop(1);#EndWhile产生中间代码(ENDWHILE,_,_,_)过程/函数声明的中间代码过/函声明的中间代码形式过程声明的例子过程/函数声明的语法制导