【精品】编译原理PPT课件(完整).pptVIP

  • 17
  • 0
  • 约5.23万字
  • 约 212页
  • 2017-12-09 发布于湖北
  • 举报
【精品】编译原理PPT课件(完整)

* 示例: 设四元式程序如下: (1) read (X) (2) read (Y) (3) R:=X MOD Y (4) if R=0 goto (8) (5) X:=Y (6) Y:=R (7) goto (3) (8) write (Y) (9) halt 基本入口四元式包括: (1) 程序第一条四元式 (3) 转移语句转移到的四元式 (5) 条件语句之后的第一条四元式 (8) 转移语句转移到的四元式 由此可以得到四个基本块.(见下页) * (8) write (Y) (9) halt (1) read (X) (2) read (Y) (3) R:=X MOD Y (4) if R=0 goto (8) (5) X:=Y (6) Y:=R (7) goto (3) B1 B2 B3 B4 * 二 基本块内的优化 基本块内可以进行以下几种优化: 合并已知量, 删除多余运算(公共子表达式) 删除无用赋值 优化手段: DAG 1 DAG 的定义 DAG 是有向无环路图的简称, 结点的基本形式如右图: n i 为结点名, val 为结点值标记, op 为结点的运算. n i ni1 ni2 op val * 2 四元式的 DAG 表示 考虑下面三种类型的四元式,DAG表示如右所示 0 型: (:=, B, , A) 1 型: (op, B, , A) 2 型: (op,B,C,A) n i B,A n i n k A B op A n i ni1 ni2 B C op * 3 基本块的 DAG 构造算法及优化 令 NODE(A)= 若 DAG 中存在值标记为 A 的结点 n ,则返回 n ; 否则 返回 null. 基本块的 DAG 构造算法如下: (1) 令 DAG=null (2) for 基本块的 每一四元式 do { 若 NODE(A) 未被引用,或有多个值标记 , 则 删除 值标记 A; //(删除无用赋值) 根据四元式类型,分别转到 T0,T1,T2 处 T0 : //(:=, B, , A) 若NODE(B)= null { 生成值标记为 B 的叶结点 n} 否则 令 n= NODE(B); 把 A 添加在 n 结点的右侧; 返回 (2) * T1 : //(op, B, , A) 若 B 为已知量 // 合并已知量 { 执行 op B , 得到一新常数 p, 若NODE(p)= null { 生成值标记为 p 的叶结点 n} 否则 令 n= NODE(p); 把 A 添加在 n 结点的右侧; 返回 (2) } 否则 若 DAG 中存在型如右式的子图 {则把 A 添加在 n 结点的右侧; 返回 (2) } //合并多余运算 否则 {若NODE(B)= null { 生成值标记为 B 的叶结点 n1} 否则 令 n1= NODE(B); 建立一运算为 op ,值标记为 A 的结点 n, 从 n 连一边到 n1 ,返回(2)} n n 1 B op * T2 : //(op, B, C , A) 若 B ,C为已知量 // 合并已知量 { 执行 op B , 得到一新常数 p, 若NODE(p)= null { 生成值标记为 p 的叶结点 n} 否则 令 n= NODE(p); 把 A 添加在 n 结点的右侧; 返回 (2) } 否则 若 DAG 中存在型如右式的子图 {则把 A 添加在 n 结点的右侧; 返回 (2) } //合并多余运算 否则 {若NODE(B)= null { 生成值标记为 B 的叶结点 n1} 否则 令 n1= NODE(B); 若NODE(C)= null { 生成值标记为 C 的叶结点 n2}

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档