三元式的例子 op arg arg2 0 minus C a 1 * b (0) 2 米 minus 米 3 * b b minus b minus 4 (1) (3 5 Ia (4) a)语法树 b)三元式 图6-11a=b*-c+b*-c的表示 16
三元式的例子 16 南大编译许畅
间接三元式 包含了一个指向三元式的指针的列表 可以对这个列表进行操作,完成优化功能,操作 时不需要修改三元式中的参数 instruction op argi arg2 35 (0) 0 minus i C (1) 1 * b (0) 3633890 (2) 2 minus (3 3 * b (2) 4 + (1)(3) 5 5 a (4) 图6-12 三地址代码的间接三元式表示 17
间接三元式 • 包含了一个指向三元式的指针的列表 • 可以对这个列表进行操作,完成优化功能,操作 时不需要修改三元式中的参数 17 南大编译许畅
静态单赋值(SSA) Static Single Assignment(SSA)中的所有赋值都 是针对不同名的变量 ·对于同一个变量在不同路径中定值的情况,可以 使用φ函数来合并不同的定值 if (flag)x=-1;else x=1;y=x*a; if (flag)x1=-1;else x2=1;x3=p(x1,x2);y=x3 a; 18
静态单赋值 (SSA) • Static Single Assignment (SSA) 中的所有赋值都 是针对不同名的变量 • 对于同一个变量在不同路径中定值的情况,可以 使用φ函数来合并不同的定值 – if (flag) x = −1; else x = 1; y = x * a; – if (flag) x1 = −1; else x2 = 1; x3 = φ(x1 , x2 ); y = x3 * a; 18 南大编译许畅
类型和声明 类型检查(Type checking) 利用一组规则来检查运算分量的类型和运算符的预期 类型是否匹配 类型信息的用途 查错、确定名字需要的内存空间、计算数组元素的地 址、类型转换、选择正确的运算符 本节的内容 确定名字的类型 变量的存储空间布局(相对地址) 19
类型和声明 • 类型检查 (Type checking) – 利用一组规则来检查运算分量的类型和运算符的预期 类型是否匹配 • 类型信息的用途 – 查错、确定名字需要的内存空间、计算数组元素的地 址、类型转换、选择正确的运算符 • 本节的内容 – 确定名字的类型 – 变量的存储空间布局 (相对地址) 19 南大编译许畅
类型表达式 类型表达式(Type expression):表示类型的结构 可能是基本类型 也可能通过类型构造算子作用于类型表达式而得到 ·如int[2][3],表示由两层数组组成的数组 array(2,array(3,integer)) array是类型构造算子,有两个参数:数字和类型 20
类型表达式 • 类型表达式 (Type expression):表示类型的结构 – 可能是基本类型 – 也可能通过类型构造算子作用于类型表达式而得到 • 如int [2][3],表示由两层数组组成的数组 – array(2, array(3, integer)) – array是类型构造算子,有两个参数:数字和类型 20 南大编译许畅