四元式表示 ·四个字段 op arg, arg, result 例 ·双目运算符 Z 单目运算符 mInus y 赋值 传参数 param X xxxL 无条件转移 goto
四元式表示 • 四个字段 op arg1 arg2 result • 例 • 双目运算符 + y z x • 单目运算符 minus y x • 赋值 = y x • 传参数 param x • 无条件转移 goto L
四元式表示 a=b*(-c)+b*(-C) arg, arg, result t minus c 0,c t t bi? t minus C 2 minisI t 3 t b* t3 bitty t t2+t 4+ t2 ts t 5 ts a)三地址代码 b)四元式 图6-10三地址代码及其四元式表示 result字段主要用于临时变量名。可否不用 result字段?
四元式表示 • a = b﹡(-c) + b﹡(-c) result字段主要用于临时变量名。可否不用result字段?
元式表示 个字段op,arg1,arg2 ·没有 result,用位置表示结果 y1a79 0 minus C 十 b:(0) 2 c 3 minus. b minus 4 (1)(3) 5 a(4) (a)Syntax tree 例:a=b·(-c)+b*(-c)的三元式表示
三元式表示 • 三个字段 op,arg1,arg2 • 没有result,用位置表示结果 例:a = b﹡(-c) + b﹡(-c)的三元式表示
元式表示 ·问题:优化编译器中,指令的位置常会发生变化 ·如果改变一条指令的位置,则引用该指令结果的 所有指令都要做相应的修改 y1a79 0 minus C 十 b:(0) 2 c 3 minus. b minus 4+(①)(3) 5 a(4) (a)Syntax tree 例:a=b·(-c)+b*(-c)的三元式表示
三元式表示 • 问题:优化编译器中,指令的位置常会发生变化 • 如果改变一条指令的位置,则引用该指令结果的 所有指令都要做相应的修改 例:a = b﹡(-c) + b﹡(-c)的三元式表示
间接三元式 ·间接三元式包含了一个指向三元式指针的列表作 为指令序列,而不是用三元式序列本身作为指令 序列。改变指令位置的编译器优化仅操作该列表 instruction 0pa91a792 35(0) 0 c 36[(1) b1(0) 37(2) 2 ic (3) 3 b1(2) 39(4) 4+(1)(3) 10(5) 5 a(4) 图6-12三地址代码的间接三元式表示
间接三元式 • 间接三元式包含了一个指向三元式指针的列表作 为指令序列,而不是用三元式序列本身作为指令 序列。改变指令位置的编译器优化仅操作该列表