编译原理
一 编译的四个步骤
预处理,编译,汇编,链接。
1. 预处理:处理头文件,并以此添加需要的内容。#相关如宏,条件编译等
例子:gcc -E test.c -o test.i
2. 编译:进行一系列的词法分析,语法分析,语义分析,源代码优化,代码生成,目标代码优化,生成汇编文件
例子:gcc -S test.i -o test.s
3. 汇编:将汇编代码转换为机器可识别的机器码
例子:gcc -c test.s -o test.o
4. 链接:链接不同的文件生成可执行文件
二,编译详解:
1. 词法分析,解析出有用记号:关键字,标识符,字面量,特殊符号(加减号等)
2. 语义分析:生成语法树。可以看出类似个赋值表达式,并分左值右值,并确定符号优先级及其含义
3. 语义分析,包括声明和类型的匹配,类型的转换等等的分析。
如一个浮点型赋值给整形,隐式包含了向整形的类型转换,语义分析将完成这一步骤
4. 中间语言的生成(源码优化)
一般是将可以计算的值先计算出来
5. 目标代码的生成和优化
生成目标汇编码,并根据所依赖的机器不同做相应的调整优化
三,链接
注意:不同文件中的全局变量和函数等在链接后才产生绝对地址,
工作:地址和空间的分配,符号决议(例如变量名的检测等),重定位