Chinaunix首页 | 论坛 | 博客

分类: BSD

2012-01-10 17:11:40

IDE集成开发环境中将编译和链接一步完成,称为构建。
编译四大步骤
预编译:主要处理源代码文件中的以“#”开始ide预编译指令,如“#define include”、“#define”等。
主要处理规则如下:
a、将所有关的“#define”删除,并且展开所有的宏定义。
b、处理所有条件预编译指令,比如“#if”、“#ifdef”、“#elif”、“#else”、“#endif”等。
c、处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。
d、删除所有的注释“//”和“/*  */”。
e、添加行号和文件名标识,以便于编译时编译器产生条使用的行号信息和用于编译时产生编译错误或警告时能够显示行号。
f、保留所有的#pragma编译器指令,因为编译器需要使用它们。
 
编译:把经过预处理完成的文件进行一系列的词法分析、语法分析、语义分析以及优化后生产相应的汇编代码文件,这是整个程序构建的核心部分和最复杂部分。
 
汇编:将汇编代码转变成机器代码可以执行的指令。
 
链接:将每个源代码模块之间相互应用的部分处理好,使得各个模块之间能够争取的链接。链接过程主要包括了地址和空间分配、符号决议(符号绑定)和重定位这些步骤。
 
 
词法分析:(英语:lexical analysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行语法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。
  词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。
 
语法分析:是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等,从而产生语法树。语法分析程序判断源程序在结构上是否正确。源程序的结构由上下文无关文法描述.语法分析程序可以用YACC等工具自动生成。
 
语义分析:语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。如有的编译程序要对实数用作数组下标的情况报告错误。又比如某些某些程序规定运算对象可被强制,那么当二目运算施于一整型和一实型对象时,编译程序应将整型转换为实型而不能认为是源程序的错误。
 
中间语言生成:原代码优化器将整个语法树转换成中间代码。中间代码使得编译器可以被分为前端和后端。编译器前端负责产生机器无关的中间代码,编译器后端将中间代码转换成目标机器代码。这样对于一些可以跨平台的编译器而言,他们可以针对不同的平台使用同一个前端和针对不同机器平台的数个后端。
 
 
阅读(2402) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~