南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第六章 中间代码生成

第六章中间代码生成 许畅 南京大学计算机系 2022年春季 版权所有南京大学计算机科学与技术系许畅2022春季版
许畅 南京大学计算机系 2022年春季 第六章 中间代码生成 版权所有 南京大学计算机科学与技术系 许畅 2022春季版 南大编译许畅

本章内容 。中间代码表示 表达式的有向无环图DAG 三地址代码:x=y0叩z 。 类型检查 类型、类型检查、表达式的翻译 中间代码生成 控制流、回填 2
本章内容 • 中间代码表示 – 表达式的有向无环图DAG – 三地址代码:x = y op z • 类型检查 – 类型、类型检查、表达式的翻译 • 中间代码生成 – 控制流、回填 2 南大编译许畅

编译器前端的逻辑结构 前端是对源语言进行分析并产生中间表示 处理与源语言相关的细节,与目标机器无关 前端后端分开的好处:不同的源语言、不同的机 器可以得到不同的编译器组合 语法 静态检 中间代码 中间 代码 分析器 查程序 生成器 代码 生成器 前端 后端 图6-1一个编译器前端的逻辑结构
编译器前端的逻辑结构 • 前端是对源语言进行分析并产生中间表示 • 处理与源语言相关的细节,与目标机器无关 • 前端后端分开的好处:不同的源语言、不同的机 器可以得到不同的编译器组合 3 南大编译许畅

中间代码表示及其好处 形式 多种中间表示,不同层次 抽象语法树 三地址代码 重定位 为新的机器建编译器,只需要做从中间代码到新的目 标代码的翻译器(前端独立) 高层次的优化 优化与源语言和目标机器都无关 4
中间代码表示及其好处 • 形式 – 多种中间表示,不同层次 – 抽象语法树 – 三地址代码 • 重定位 – 为新的机器建编译器,只需要做从中间代码到新的目 标代码的翻译器 (前端独立) • 高层次的优化 – 优化与源语言和目标机器都无关 4 南大编译许畅

中间代码的实现 静态类型检查和中间代码生成的过程都可以用语 法制导的翻译来描述和实现 对于抽象语法树这种中间表示的生成,第五章已 经介绍过 语法 静态检 中间代码 中间 代码 分析器 查程序 生成器 代码 生成器 前端 后端 图6-1一个编译器前端的逻辑结构 5
中间代码的实现 • 静态类型检查和中间代码生成的过程都可以用语 法制导的翻译来描述和实现 • 对于抽象语法树这种中间表示的生成,第五章已 经介绍过 5 南大编译许畅

生成抽象语法树的语法制导定义 ·a+a*(b-c)+(b-c)*d的抽象语法树 PRODUCTION SEMANTIC RULES 1) E→E1+T E.node new Node('+',E1.node,T.node) 2) E→E1-T E.node new Node('-,E.node,T.node) 3) E→T E.node=T.node 4) T→(E) T.node=E.node 5) T→id T.node =new Leaf(id,id.entry) 6) T→num T.node new Leaf(num,num.val) 6
生成抽象语法树的语法制导定义 • a + a * (b – c) + (b – c) * d的抽象语法树 6 南大编译许畅

表达式的有向无环图 语法树中,公共子表达式每出现一次,就有一颗 对应的子树 表达式的有向无环图(Directed Acyclic Graph, DAG)能够指出表达式中的公共子表达式,更简 洁地表示表达式 b 图6-3 表达式a+a*(b-c)+ (b-c)*d的DAG 7
表达式的有向无环图 • 语法树中,公共子表达式每出现一次,就有一颗 对应的子树 • 表达式的有向无环图 (Directed Acyclic Graph, DAG) 能够指出表达式中的公共子表达式,更简 洁地表示表达式 7 南大编译许畅

DAG构造 可以用和构造抽象语法树一样的SDD来构造 不同的处理 在函数Lemf和Node每次被调用时,构造新节点前先检查 是否已存在同样的节点,如果已经存在,则返回这个 已有的节点 1) PI Leaf (id,entry-a) 。构造过程示例 2) P2 Leaf(id,entry-a)=p 3) P3 Leaf(id,entry-b) 4)pa Leaf(id,entry-c) 5))5=Node'-',ps,p4) 6)p6=Node('*',p1,pP5) 7)p= Node('+',p1,p6) 8)ps Leaf (id,entry-b)=p3 9) po Leaf(id,entry-c)=pa 10) P1o Node('-',P3,PA)=ps 11) pu=Leaf(id,entry-d) 12) p12=Node('*',p5,p11) 13) p13=Node'+',p7,p12) 图6-3表达式a+a*(b-c)+ (b-c)*d的DAG 图6-5 图6-3所示的DAG的构造过程 8
DAG构造 • 可以用和构造抽象语法树一样的SDD来构造 • 不同的处理 – 在函数Leaf和Node每次被调用时,构造新节点前先检查 是否已存在同样的节点,如果已经存在,则返回这个 已有的节点 • 构造过程示例 8 南大编译许畅

三地址代码(1) 每条指令右侧最多有一个运算符 一般情况可以写成x=y0p2 0 允许的运算分量 名字:源程序中的名字作为三地址代码的地址 常量:源程序中出现或生成的常量 编译器生成的临时变量 9
三地址代码 (1) • 每条指令右侧最多有一个运算符 – 一般情况可以写成x = y op z • 允许的运算分量 – 名字:源程序中的名字作为三地址代码的地址 – 常量:源程序中出现或生成的常量 – 编译器生成的临时变量 9 南大编译许畅

三地址代码(2) 指令集合(1) 运算/赋值指令: x=yopz 人/ x=opy 复制指令: x=y 无条件转移指令: goto L 条件转移指令: if x goto L if False x goto L 条件转移指令: if x relop y goto L 10
三地址代码 (2) • 指令集合 (1) – 运算/赋值指令: x = y op z x = op y – 复制指令: x = y – 无条件转移指令: goto L – 条件转移指令: if x goto L if False x goto L – 条件转移指令: if x relop y goto L 10 南大编译许畅
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第七章 运行时刻环境.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第八章 代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第九章 机器无关的优化.pdf
- 中国科学技术大学:Robust Speech Recognition with Speech Enhanced Deep Neural Networks.pdf
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)01 Lists, Stacks, and Queues.ppt
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)02 Trees(主讲:刘静).ppt
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)05 Disjoint Set ADT.ppt
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)04 Priority Queues(Heaps).ppt
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)03 Hashing.ppt
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)08 Algorithm Design Techniques.ppt
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)07 Graph Algorithms.ppt
- 西安电子科技大学:《数据结构与算法分析 Data Structure and Algorithm Analysis》课程教学资源(PPT课件讲稿)06 Algorithm Analysis and Sorting.ppt
- 西安电子科技大学:《算法设计技术 Algorithms Design Techniques》课程教学资源(PPT课件讲稿)Iterative Improvement for Domain-Specific Problems(Chapter 16 Network Flow Chapter 17 Matching).ppt
- 西安电子科技大学:《算法设计技术 Algorithms Design Techniques》课程教学资源(PPT课件讲稿)Coping with Hardness(Chapter 13 Backtracking Chapter 14 Randomized Algorithms Chapter 15 Approximation Algorithms).ppt
- 西安电子科技大学:《算法设计技术 Algorithms Design Techniques》课程教学资源(PPT课件讲稿)First-Cut Techniques(Chapter 8 The Greedy Approach Chapter 9 Graph Traversal).ppt
- 西安电子科技大学:《算法设计技术 Algorithms Design Techniques》课程教学资源(PPT课件讲稿)Techniques Based on Recursion(Chapter 5 Induction Chapter 6 Divide and Conquer Chapter 7 Dynamic Programming).ppt
- 西安电子科技大学:《算法设计技术 Algorithms Design Techniques》课程教学资源(PPT课件讲稿)Chapter 01 Basic Concepts in Algorithmic Analysis(主讲:刘静).ppt
- 《计算机基础》课程教学资源(参考论文)Motif Difficulty(MD):A Predictive Measure of Problem Difficulty for Evolutionary Algorithms using Network Motifs.pdf
- 《计算机基础》课程教学资源(参考论文)An Organizational Evolutionary Algorithm for Numerical Optimization.pdf
- 《计算机基础》课程教学资源(参考论文)A Multiagent Evolutionary Algorithm for Constraint Satisfaction Problems.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第五章 语法制导的翻译.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第四章 语法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第三章 词法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)第一章 引论(许畅).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(课件讲义)编译课程复习(许畅).pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验一 词法分析与语法分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验二 语义分析.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验三 中间代码生成.pdf
- 南京大学:《编译原理 Principles and Techniques of Compilers》课程教学电子教案(实验讲义)实验四 目标代码生成.pdf
- 《编译原理 Principles and Techniques of Compilers》课程教学资源(学习资料)Assemblers,Linkers,and the SPIM Simulator(MIPS32 and SPIM).pdf
- 南京大学:《软件工程导论 Introduction to Software Engineering Research》课程教学电子教案(课件讲义)04 Conduct Rigorous and Scientific Research(Experiment Design in Software Engineering Research).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)课程简介(李瑞轩).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第1章 引论(李瑞轩).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第2章 C++的变量、类型及函数.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第3章 C++的类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第4章 作用域及成员指针.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第5章 静态成员与友元.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第6章 单继承类.pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第7章 虚函数(李瑞轩).pdf
- 华中科技大学:《面向对象程序设计》课程教学资源(课件讲稿)第8章 多继承类.pdf