编译过程通常能够分为6步:扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化。数组
- 词法分析:首先源代码程序被输入到扫描器,扫描器的任务很简单,它只是简单地进行词法分析,运用一种相似于有限状态机的算法能够很轻松地将源代码的字符序列分割成一系列的记号。
- 语法分析:接下来语法分析器将对由扫描器产生的记号进行语法分析,从而产生语法树(以表达式为节点的树)。
- 语义分析:编译器所能分析的语义是静态语义,所谓静态语义是指在编译期能够肯定的语义,静态语义一般包括声明和类型的匹配,类型的转换。
- 中间语言生成:现代的编译器有着不少层次的优化,每每在源代码级别会有一个优化过程。源代码优化器每每将整个语法树转换成中间代码,它是语法树的顺序表示,其实它已经很是接近目标代码了。
- 目标代码生成与优化:代码生成器将中间代码转换成目标机器代码,这个过程十分依赖于目标机器,由于不一样的机器有着不一样的字长、寄存器、整数数据类型和浮点数数据类型等。最后目标代码优化器对上述的目标代码进行优化,好比选择合适的寻址方式、使用位移来代替乘法运算、删除多余的指令等。