程序员的自我修养二——编译与链接

预处理(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)是将汇编代码转变成机器可以执行的指令,生成目标文件

四、链接(可执行文件)



未完待续。。。。。


猜你喜欢

转载自blog.csdn.net/qq_40783693/article/details/80548668