编译基础原理
2017-03-02 本文已影响46人
卖梦想的男孩
编程语言有各种各样的,包括指令型的->编译型->解释型等,高级语言一般都是需要编译成低级语言来让计算机执行,解释型的语言其执行环境会处理一系列的过程,不过总体大致是一致的。
先了解下源代码到程序的执行过程
- 编译
这个过程编译系统将我们写的文本字符串编译生成计算机目标代码。 - 链接
这个阶段链接器会把生成的每个目标文件协调起来,生成可执行文件 - 载入
这个阶段把生成的可执行文件加载内存中生成一系列指令,供计算机识别执行
编译的一般步骤
-
扫描程序(scanner)
主要用来处理注释、宏、预编译指令、关键字,标识符,字面量,特殊符号等。简单来说就是把源代码进行“单词化” -
语法分析(parser )
将扫描出来的“词”生成语法树 -
语义分析(semantic analyzer )
遍历整个语法树,把每个节点的表达式都标识类型,并且验证是否合法。 -
优化程序(source code optimizer)
通过编译器对代码改进或优化,如不必要的计算、调用、无用代码之类的。 -
代码生成(code generator)
由代码生成器得到中间代码,中间代码主要是为了处理平台的差异性,与源代码的种类也无关。 -
目标代码(target code optimizer )
编译器尝试着改进由代码生成器生成的目标代码,即加、减、乘、除跳转的优化,生成机器能识别的汇编代码。
当然计算机最终执行的是01代码,但是机器指令其实是识别的汇编代码的。