例子 语句 do i=i+ 1; while(a1<); L: t i+1 100:t1=i+1 1 101:i=t t2=1 102:t t3=a[t2] 103:t3=a[t2] if t3 v goto l 104: if t3 v goto 100 a)符号标号 b)位置号
例子 • 语句 – do i = i + 1; while (a[i]<v);
地址指令的四元式表示方法 ·在实现时,可以使用四元式/三元式/间接三元式来 表示三地址指令 四元式:可以实现为纪录(或结构) 格式(字段) op an arg2 result op运算符的内部编码 argl,arg2, results是地址 Xy+z 单目运算符不使用arg2 param运算不使用ag2和 result 条件转移/非条件转移将目标标号放在 result字段
三地址指令的四元式表示方法 • 在实现时,可以使用四元式/三元式/间接三元式来 表示三地址指令 • 四元式:可以实现为纪录(或结构) – 格式(字段): op arg1 arg2 result – op: 运算符的内部编码 – arg1,arg2,result是地址 – x=y+z + y z x • 单目运算符不使用arg2 • param运算不使用arg2和result • 条件转移/非条件转移将目标标号放在result字段
四元式的例子 p argarg 2 result minus c 0 minus i C I t1 2=b*t t1 2 t3 minus C 2minustc t 3 t4 b* t3 t3 t4 t5 ttt 4 t2t4t5 5 ts a a)三地址代码 b)四元式 图6-10三地址代码及其四元式表示 ·赋值语旬:a-b*-C+b*-c
四元式的例子 • 赋值语句:a=b* -c + b* -c
元式表示 元式( triple) op argl arg2 使用三元式的位置來引用三元式的运算结果 x[y需要拆分为两个三元式 求x[的地址,然后再赋值 Xy op Z需要拆分为(这里?是编号 ( op y 题:在优化时经常需要移动/删除/添加三元 式,导致三元式的移动
三元式表示 • 三元式(triple) op arg1 arg2 • 使用三元式的位置来引用三元式的运算结果 • x[i]=y需要拆分为两个三元式 – 求x[i]的地址,然后再赋值 • x=y op z需要拆分为(这里?是编号) – (?) op y z – = x ? • 问题:在优化时经常需要移动/删除/添加三元 式,导致三元式的移动
元式的例子 0pa91a792 minus b(0 2 c b minus b minus 345 +1(1)(3) (4) a)语法树 b)三元式 图6-11a=b*-c+b*-c的表示 ·a=b*C+b*-C
三元式的例子 • a=b*-c + b * -c