编译流程
最后更新于:2022-04-02 04:07:39
[TOC]
## 编译流程
### 1. 词法分析
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/79/05/79051e1962ae2582c58e0dbe9371b05d_400x198.png)
词法分析是一个分词断句+判断词性的过程
### 2. 语法分析(Parser)
- 根据词法分析结果形成抽象语法树(Abstract syntax Tree,ab.AST)的过程
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a4/18/a4180d9850cb9b5dfbe226c05e8d00c4_250x351.png)
### 3. 语义分析
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9b/61/9b614e5eacc9a7c667bd3e86433ed97e_228x250.png)
- 通过语义分析对抽象语法树进行语法检查非常重要
- 图中通过语法检查模块可以看到 "*" 不能作用到整数和字符串。
### 4.翻译:中间代码
根据抽象语法树生成的中间代码(这里是三地址代码)更加接近计算机的指令。也可以对三地址代码进行存储、传输和一些优化。
### 5. 生成机器码
- 机器不懂高级语言
- 机器像「卡片机」一样,不断读取下一条指令并执行
- 这种简单的设计就是今天复杂的计算机
### 6. 运行时环境
- 有的编译器将代码编译成机器码,按照操作系统的约定编译成一个应用,运行成为操作系统的进程
- 有的编译器将代码编译成中间代码(字节码、三地址代码等),然后在操作系统中启动一个虛拟容器(进程)来执行他们(如:java)
- JIT 编译器一边执行中间代码,一边编译他们
## 编译器处理的两大过程
- 分析——对源程序进行分析形成中间表示(抽象语法树、符号表
1. 词法分析
2. 语法分析
3. 语义分析
4. 翻译
- 综合—根据中间表示生成目标语言,提供运行环境等
1. 中间语言
2. 代码优化
3. 机器码生成
4. 运行环境及其他
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/33/08/3308f69d443543ddb98f62eb86ce1387_800x425.png)
';