- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理(完整)
* 示例: 设四元式程序如下: (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}
您可能关注的文档
- 班主任工作培训-思想品德教育案例.docx
- life in the uk中英文双语对照版chapter 4. how the united kingdom is governed.docx
- 2013年专业技术人员公需科目职业道德与创新题库及答案.docx
- win7无线网卡做软ap共享iphone上网.docx
- 2013年高考合理饮食建议:高三考生暖胃暖心暖身体的营养食谱.docx
- 全球财务领袖培养计划.docx
- excel图表不同类型制作模板.docx
- 一级建造师备考科目《工程经济》历年考试真题及详细答案解析.docx
- 欧洲经济学历史知识笔记(英文版)word版.docx
- 电性能测试仪操作规程-绝缘耐压测试仪.docx
文档评论(0)