中间代码的种类 常用的三地址代码(续) return y过程返回,返回值为y x:=y[i]xi]:=y变址语句 x:=&y*x:=yx:=’y指针操作语句 三地址代码实现形式 四元式:(op,arg1,arg2, result) 三元式: op, arg1, arg2 间接三元式(三元式的指针表) 2021/2/11 《编译原理与技术》讲义 11
2021/2/11 《编译原理与技术》讲义 11 中间代码的种类 常用的三地址代码(续) - return y 过程返回,返回值为y - x := y [ i ] x[ i ] := y 变址语句 - x := &y *x := y x := *y 指针操作语句 三地址代码实现形式 - 四元式: ( op, arg1 , arg2 , result ) - 三元式: ( op, arg1 , arg2 ) - 间接三元式(三元式的指针表)
中间代码的种类 e.g.6a:=b*-C+b*-c的四元式和三元式 四元式 VS 元式 ①(@, 2)(*,b,t1,t2) ②(*,b,①) 3)(@,C,-,t3 ③(@,C,-) 4)(*,b,t3,t4) ④(*,b,③) 5)(+,t2,t,t5) ⑤(+,②,④ 6)(∷=,t5,,a) ⑥(:=,a,⑤) 2021/2/11 《编译原理与技术》讲义 12
2021/2/11 《编译原理与技术》讲义 12 中间代码的种类 e.g.6 a := b* -c + b * -c 的四元式和三元式 四元式 vs. 三元式 1)( @, c, -, t1) ① ( @, c, -) 2)( * , b, t1 , t2) ② ( * , b, ①) 3)( @, c, -, t3) ③ ( @, c, -) 4)( * , b, t3 , t4) ④ ( * , b, ③) 5)( + , t2 , t4 , t5 ) ⑤ ( + , ②, ④) 6)(:=, t5 ,-, a) ⑥ (:=, a, ⑤)
中间代码的种类 e.g7a:=b*c+d/f的间接三元式 间接三元式/调整次序 三元式 13 3)(*,b,C) (2)④4 13 14)(/,d,f) (3)⑤ 15 +,④3,④4) 16 16 16)(:=,a ⑤ 2021/2/11 《编译原理与技术》讲义 13
2021/2/11 《编译原理与技术》讲义 13 中间代码的种类 e.g.7 a := b * c + d / f 的间接三元式 间接三元式 / 调整次序 三元式 ⑴ ⑬ ⑭ ⑬ ( * , b , c ) ⑵ ⑭ ⑬ ⑭ ( / , d , f ) ⑶ ⑮ ⑮ ⑮ ( + , ⑬, ⑭) ⑷ ⑯ ⑯ ⑯ ( := , a , ⑮)
中间代码的种类 四元式按编号次果存于方便移动,出算大量引入临 result 在代码生成 三元式按编号次由编号不方便移动时进行临时 序计算代表 变量的分配 间接按编号次 方便移动,计算在代吗作成 元式序计算 次序容易调整时进行临时 变量的分配 2021/2/11 《编译原理与技术》讲义 14
2021/2/11 《编译原理与技术》讲义 14 中间代码的种类 四元式 按编号次 序计算 计算结 果存于 result 方便移动,计算 次序容易调整 大量引入临 时变量 三元式 按编号次 序计算 由编号 代表 不方便移动 在代码生成 时进行临时 变量的分配 间接 三元式 按编号次 序计算 方便移动,计算 次序容易调整 在代码生成 时进行临时 变量的分配
说明语句的翻译 般不产生代码;仅将有关变量的属性填入 符号表(如类型、存储偏移位置- offset) neg.8一个说明语句的翻译方案 文法G1如下: P>D D>D: D D-id T T→int| real array[ number]ofT1|个T1 2021/2/11 《编译原理与技术》讲义 15
2021/2/11 《编译原理与技术》讲义 15 说明语句的翻译 一般不产生代码;仅将有关变量的属性填入 符号表(如类型、存储偏移位置-offset) e.g. 8 一个说明语句的翻译方案 文法G1如下: P→D D→D ; D D→id : T T→int | real | array [ number ] of T1 | T1