预处理(Prepressing)——编译(Compilation)——汇编(Assembly)——链接
一、预编译
1、删除#define,展开宏定义
2、处理条件预编译指令,如#if、#ifdef 等;
3、处理#include预编译指令,将被包含的文件插入预编译指令的位置(该过程递归进行)
4、删除注释“//”、“/**/”;
5、添加行号(便于编译产生错误时可以显示行号)和文件名标识
6、保留所有#pragma编译器指令(复杂、暂不理会)
二、编译
把预处理的文件进行 词法分析、语法分析、语义分析及优化后生产相应的汇编代码文件(最复杂的部分)
1、词法分析:扫描器(Scanner)将代码的字符序列分割成一系列记号,如:标识符、左圆括号、有方括号、数字等;并将它们分类存放,以备后续使用;
2、语法分析:语法分析器(Grammar Parser)对扫描器产生的记号分析;
若出现表达式不合法(如括号不匹配、表达式缺少操作符)编译器会报告语法分析阶段的错误;
3、语义分析:语义分析器(Semantic Analyzer)分析静态语义;动态语义只能在运行期确定
静态语义包括声明和类型的匹配,类型的转换
4、中间语言生成:源代码优化器
如(2+6)表达式优化为8等;概念三地址码、P-代码
三、汇编
汇编器(Assembler)是将汇编代码转变成机器可以执行的指令,生成目标文件
四、链接(可执行文件)
未完待续。。。。。