中国科学技术大学 编译原理 中间表示

本文已收录于 中科大编译原理学习笔记 系列,共计 6 篇,本篇是第 6 篇

中间代码的地位和作用

最简单的表示,抽象语法树直接翻译成目标代码(汇编代码)。

现代编译器会生成很多的中间表示,经过不断的翻译,最终才会生成汇编代码。

中间代码表示

经典的中间代码表示:

为什么要用中间代码表示?

  • 从软降工程上考虑,分模块,容易实现,容易维护。
  • 追求通用的编译器语言,可以编码不同的源语言:      。gcc可以选择源语言,都翻译成通用的中间语言。

三地址码

会把所有的操作变成原子操作:

三地址码的表示

三地址码的数据结构

如何生成三地址码?

以C–(一种类似C的精简化的语言)为例,左图的P代表程序;F代表函数;T代表形参数据类型,可以是int、bool等;S代表函数体,内部可以有print语句,可以有return,if,while语句等等。

右侧介绍了表达式语句,可以复制常数、变量、布尔值、+、&&等等。

具体还可以看视频:https://www.bilibili.com/video/BV17W41187gL?p=104

eg给语句(函数体内部)写生成三地址码的代码:

三地址码的优点

从三地址码生成汇编指令

只有跳转,没有复合结构。生成汇编指令其实就是查表直接翻译。

控制流图

三地址码的不足

以控制结构为例,控制流图能够回答“有多个地方可以跳转到L2”这种问题,其实控制流图在数据结构上就是有向图,对应的就是L2结点的入度是多少。而三地址码则无法回答这样的问题。

控制流图的基本概念

如何生成控制流图?

主要来讲经过三地址码生成控制流图。

由三地址码生成控制流图的算法

视频:https://www.bilibili.com/video/BV17W41187gL?p=108

对控制流图的操作

静态单赋值形式

 

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。