第七章 (4)赋值语句的中间代码.pptVIP

  • 51
  • 0
  • 约3.42千字
  • 约 17页
  • 2018-10-19 发布于山东
  • 举报
7.7 赋值语句的中间代码 赋值语句的形式为:Left := Right, 赋值语句的四元式结构为: Left 的中间代码 Right 的中间代码 (FLOAT , Right , ─, t ) (ASSIG , Right(t), n , Left ) * 赋值语句的中间代码的例子 i,j,x,y:integer; a : array[1..10][1..5] of integer ; 赋值语句a [ i ] [ j ]:=x+y*3的中间代码(其中变量均为整型) : 0.(ASSIGN ,1, 1, size ) 1. ( SUBI ,i , 1 , t1 ) 2. (MULTI , t1 , 5 , t2) 3. (MULTI, t2 , size , t3) 4. (ADDI, addr(a) , t3 , t4 ) 5. ( SUBI , j, 1 , t5 ) 6. (MULTI, t5 ,1 , t6) 7. (MULTI, t6 , size , t7) 8. (ADDI, t4 , t7 , t8 ) a [ i ] [ j ] x+y*3 9.( MULTI,y,3,t9) 10.(ADDI,x, t9,t10) 11.(ASSIGN ,t10, 1 ,t8) * 7.8 过程调用和函数调用的中间代码 过程调用和函数调用的形式 ProcFunCall → id (E1, …… , En) 过程和函数调用的中间代码结构: E1 的中间代码 ….………… En 的中间代码 ( VarACT / ValACT ,t1 ,Offset1 ,Size1) …………. (VarACT / ValACT , tn ,Offsetn ,Sizen) (CALL , f ,true/false ,[Result ]) 实参表达式的计算 实参的计算 结果传递到 相应的形参 变量 调用过程/函数体执行 Name Forward Size Class Parm Level Kind TypePtr off Code offx L+1 dir intPtr varKind x offy L+1 dir intPtr varKind y * 例:假设有实在函数 f (X+1 , Y ) ,并且 x 是一般整型变量,Y 是变参整型变量,f函数名,同时假定 f 的两个形参第一个是值参、整数类型,第二个是变参、整数类型,则对应的中间代码如下: 过程调用和函数调用的中间代码的例子 ( ADDI , X , 1 , t1 ) ( ValACT , t1 , Offset1, 1 ) ( VarACT , Y , Offset1+1 , 1 ) ( CALL , f , true , t2 ) 注:其中Offset1和Offset1+1分别示表函数f的第1、2个参数的偏移量。 * 7.9 控制语句的中间代码生成 7.9.1 GOTO语句和标号定位的中间代码 7.9.2 条件语句的中间代码 7.9.3 While语句的中间代码 * 7.9.2 条件语句的中间代码 一般来说,条件语句有如下两种形式: S → if E then S1 else S2 S → if E then S1 if E then S1 else S2中间代码结构: E 的中间代码 S1 的中间代码 S2 的中间代码 ( THEN , E.FORM , — , — ) (ENDIF , — , — , — ) (ELSE , — , — , — ) * E 的中间代码 E 的中间代码 S1 的中间代码 S1 的中间代码 S2 的中间代码 S2 的中间代码 ( THEN , E.FORM , — , — ) (ENDIF , — , — , — ) (ELSE , — , — , — ) ( JUMP0 , E.FORM , — , Label1) ( JMP , —, — , Label2) (ENDIF , — , — , — ) Label1 Label2 if E then S1 else S2中间代码结构: * if E th

文档评论(0)

1亿VIP精品文档

相关文档