目录
1 什么是编译
- 预处理器:把存储在不同文件中的源程序聚合在一起;把被称为宏的缩写语 句转换为原始语句。
- 链接器 :将多个可重定位的机器 代码文件(包括库文件) 连接到一起 ; 解决外部内存地址问题
2 编译系统的结构
3 词法分析概述
词法分析的主要任务:
从左向右逐行扫描源程序的字符,识别出各个单词,确定
单词的类型
。
将识别出的单词转换成统一的
机内表示
——
词法单元
(token)
形式
token
:
<
种别码,属性值
>
![](https://i-blog.csdnimg.cn/blog_migrate/95ea672316e9ef3fa3a6f1ba92640721.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d7e0826c2414c259bcf5510e273fe087.png)
4 语法分析概述
语法分析器
(parser)
从词法分析器输出的
token
序列中
识别出各类短语
,并
构造语法分析树
(parse tree)
语法分析树描述了句子的语法结构
![](https://i-blog.csdnimg.cn/blog_migrate/66c5e18228a13abba749a581b1c239ed.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b224b7426b8b1617a850ff5c493b9736.png)
5 语义分析概述
语义分析的主要任务:
收集标识符的属性信息
- 种属 (Kind)
简单变量、复合变量(数组、记录、
…
)、过程、
…
- 类型 (Type)
整型、实型、字符型、布尔型、指针型、…
- 存储位置、长度
- 值
- 作用域
- 参数和返回值信息
参数个数、参数类型、参数传递方式、返回值类型、
…
6 中间代码生成
常用的中间表示形式
6.1三地址码
(Three-address Code)
三地址码由
类似于汇编语言
的指令序列组成,
每个指令
最多有三个操作数
(operand)
语法结构树
/
语法树
(Syntax Trees)
![](https://i-blog.csdnimg.cn/blog_migrate/f7973ae14f6f63110b86ec29a6ea695a.png)
三地址指令的表示
四元式
(Quadruples)
(op,
y
,
z
,
x
)
三元式
(Triples)
间接三元式
(Indirect triples)
7 编译器的结构
目标代码生成以源程序的
中间表示形式
作为输入,并把它映
射到
目标语言
目标代码生成的一个重要任务是为程序中使用的变量
合理分配寄存器
代码优化:
为改进代码所进行的
等价
程序变换
,使其
运行得更
快
一些、
占用空间更少
一
些,或者二者兼顾
附录:
1.编译程序是一种翻译程序
2.编译过程中,语法分析器的任务就是 分析单词串是如何构成语句和声明的
3.语法分析时所依据的是 语法规则
中间代码生成及
编译器后端概述
中间代码生成及
编译器后端概述
中间代码生成及
编译器后端概述
词法分析概述词法分析概述