编译流程

最后更新于: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)
';