编译原理

来源:互联网 发布:大都会歌剧院 知乎 编辑:程序博客网 时间:2024/04/29 09:37



一 编译的四个步骤

     预处理,编译,汇编,链接。

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. 目标代码的生成和优化

    生成目标汇编码,并根据所依赖的机器不同做相应的调整优化




三,链接

注意:不同文件中的全局变量和函数等在链接后才产生绝对地址,

工作:地址和空间的分配,符号决议(例如变量名的检测等),重定位





原创粉丝点击