间接三元式 包含了一个指向三元式的指针的列表 我们可以对这个列表进行操作,完成优化 功能;操作时不需要修改三元式中的参数。 instruction 0pa791a792 5[(0) 0 minusic 36[(1) b(0) minus 8(3) 3 39(4) 4+ )(3) 40(5) 图6-12三地址代码的间接三元式表示
间接三元式 • 包含了一个指向三元式的指针的列表 • 我们可以对这个列表进行操作,完成优化 功能;操作时不需要修改三元式中的参数
静态单赋值(SSA SSA中的所有赋值都是针对不同名的变量 对于同一个变量在不同路径中定值的情況, 可以使用Φ函数来合并不同的定值 -if (flag)x-1; else=1; y=x*a -if(flag )x-1; else x2=1; x3=((, x2) y=X3a
静态单赋值(SSA) • SSA中的所有赋值都是针对不同名的变量 • 对于同一个变量在不同路径中定值的情况, 可以使用φ函数来合并不同的定值 – if (flag) x=-1; else x = 1; y = x*a – if (flag) x1=-1; else x2 = 1; x3=φ(x1 ,x2 ); – y = x3*a
类型和声明 类型检查( Type Checking 利用一组规则来检查运算分量的类型和运算符 的预期类型是否匹配。 类型信息的用途 査错、确定名字需要的内存空间、计算数组完 素的地址、类型转换、选择正确的运算符 ·本节的内容 确定名字的类型, 变量的存储空间布局(相对地址)
类型和声明 • 类型检查(Type Checking) – 利用一组规则来检查运算分量的类型和运算符 的预期类型是否匹配。 • 类型信息的用途 – 查错、确定名字需要的内存空间、计算数组元 素的地址、类型转换、选择正确的运算符 • 本节的内容 – 确定名字的类型, – 变量的存储空间布局(相对地址)
类型表达式 类型表达式( type expression):表示类型的 吉构 基本类型 类名 类型构造算子作用于类型 aray数字,类型表达式] record[字段/类型对的列表](可以用符号表表示) 函数类型构造算子→:参数类型→结果类型 笛卡尔积:SⅩt 可以包含取值为类型表达式的变量
类型表达式 • 类型表达式(type expression):表示类型的 结构 – 基本类型 – 类名 – 类型构造算子作用于类型 • array[数字,类型表达式] • record[字段/类型对的列表](可以用符号表表示) – 函数类型构造算子→:参数类型→结果类型 – 笛卡尔积:s X t – 可以包含取值为类型表达式的变量
类型表达式的例子 ·类型例子 元素个数为3X4的二维数组 数组的元素的记录类型 该记录类型中包含两个字段:Ⅹ和y其类型分别 是 float和 uinteger ·类型表达式 array 3, array[4, record[(x, float ), (y, float)lI
类型表达式的例子 • 类型例子 – 元素个数为3X4的二维数组 – 数组的元素的记录类型 – 该记录类型中包含两个字段: x和y,其类型分别 是float和integer • 类型表达式 – array[3, array[4,record[(x,float),(y,float)]]