结构语句的中间代码 C条件语句的中间代码 While语句的中间代码 C Repea语句的中间代码 CFor语句的中间代码 G Case语句的中间代码
结构语句的中间代码 条件语句的中间代码 While语句的中间代码 Repeat语句的中间代码 For语句的中间代码 Case语句的中间代码
条件语句的中间代码 IF E THEN S, ELSE S2 IF E THEN S E Tuple E Tuple (JUMPO, E. Arg, S El seL : (JUMPO, E. Arg, S OutL) S Tuple S1. Tuple 〔JUMP,S.0utL) (LABEL, S OutL (LABEL. S El seL) … s2 Tuple LABEL, S outL)
条件语句的中间代码 IF E THEN S1 ELSE S2 E.Tuple (JUMP0,E.Arg,S.ElseL) S1.Tuple (JUMP,S.OutL) (LABEL,S.ElseL) S2.Tuple (LABEL,S.OutL) IF E THEN S E.Tuple (JUMP0,E.Arg,S.OutL) S1.Tuple (LABEL,S.OutL)
条件语句代码生成原理 在f处: 产生标号S. Esel和S.0utL 在then处: 产生中间代码(JUMP0,E.Arg,S. EIsel) ÷在else处 产生中间代码(JUMP,S.0utL) LABEL, S ElseL) 在S出口处:( LABEL,S.outL)
条件语句代码生成原理 在if处: 产生标号 S.ElseL和S.OutL; 在then处: 产生中间代码(JUMP0, E.Arg, S.ElseL) ; 在else处: 产生中间代码 (JUMP, S.OutL) ( LABEL, S.ElseL) 在S出口处: (LABEL, S.OutL )
条件语句代码生成的L文法 s if startif e then Testf s, elsePart ElsePart =y else #GenJump #GenEl seL S2 #GenOutL E| sePat→λ# GenEI sel # Start:生成两个标号S. EIsel,S.0utL #TestIF: Generate JUMPO, E. arg, SEl seL #GenJump: Generate(JUMP, ElsePart OutL # I seL: Generate LABEL ElsePart. El seL #GenOutL: Generate(LABEL, ElsePart OutL
条件语句代码生成的LL文法 S → if #StartIF E then #TestIF S1 ElsePart ElsePart → else #GenJump #GenElseL S2 #GenOutL ElsePart → #GenElseL #StartIF :生成两个标号S.ElseL,S.OutL #TestIF : Generate(JUMP0, E.Arg , S.ElseL ) #GenJump : Generate(JUMP, ElsePart.OutL ) #GenElseL : Generate(LABEL, ElsePart.ElseL) #GenOutL : Generate(LABEL, ElsePart.OutL )