代码生成
地址语句序列。 输出:一个基本块表,其中每一条三地址 语句仅在一个块中。 方法 : 17 1.首先确定各个基本块的入口语句。 采用如下 规则: ( a) 代码序列的第一个语句。 ( b) 任何一个条件或无条件转移语句转移到 的那条语句。 ( c) 任何紧接在一个条件或无条件转移语句 之后的那条语句。 2.对每一个入口语句。 其基本块是由该入口 语句到下一个入口语句(不包括此入口语 句)
c c := b + c d := a d d := b 无用代码删除 定值 x := y + z以后不再引用 , 则称 x为无用变量 16 基本块和流图 语句交换 t1 := b + c t2 := x + y t2 := x + y t1 := b + c 当且仅当 x和 y都不是 t1, b和 c都不是 t2 代数变换 x := x + 0 可以删除 x := x * 1
变量值的目标代码时 , 尽可能让该变量保留在寄存器中。 后续的目标代码尽可能引用变量在寄存器中的值 , 而不访问内存。 在离开基本块时 , 把存在寄存器中的现行的值放到主存中。 国防科技大学计算机系 602教研室 待用信息 如果在一个基本块内 , 四元式 i对 A定值 ,四元式 j要引用 A值 , 而从 i到 j之间没有 A的其他定值 , 那么 , 我们称 j是四元式 i的变量 A的
p C 的四元式序列A . 对每个四元式 i: A := B o p C ,依次执行下述步骤:1 . 以四元式 i: A := B o p C 为参数,调用过程 g et re g ( i : A := B o pC )。 从 g et re g 返回时,得到一寄存器 R ,用它作存放 A 现行值的寄存器;2 . 利用 A V A L U E [ B ] 和 A V A L U E [ C ]
用的话 , 我们说这个名字在该点是 活跃 的 • 基本块的等价 – 两个基本块计算一组同样的表达式 – 这些表达式的值分别代表同样的活跃名字的值 • 有很多等价变换可用于基本块 – 局部变换 – 全局变换 基本块和流图 • 删除局部公共子表达式 a := b + c a := b + c b := a d b := a d c := b + c c := b + c d := a d
个 statement)。 18 switch语句的目标代码结构: 对 expression求值并置于 t的有关代码 goto test L1: 有关 statement1的代码 goto next L2: 有关 statement2的代码 goto next …………………………………… Ln1: 有关 statement n1的代码 goto next Ln: 有关
括生成属性、添加、修改、删除、查询、存在性、 Model类构造等基础代码片断 ,支持不同 3种架构代码生成,使程序员可以节省大量机械录入的时间和重复劳动,而将精力集中于核心业务逻辑的开发。 Codematic 同时提