程序的编译过程:
1、源程序首先经过预处理器,将程序中的宏定义、头文件展开,进行条件编译,删除代码中的注释的作用。
2、将预处理处理后的文件在通过编译器,在编译其中判断程序语法,如果语法正确则将程序生成汇编语言。
3、生成的汇编语言通过汇编器将汇编语言生成目标文件(二进制文件)。在此之前,所有的文件都是可以读懂的,在此之后生成的二进制文件已经不具备可读性了。
4、由于我们编写的源程序中会引用一些库文件,因此汇编器生成的二进制文件需要通过连接器连接引用的外部的函数库。
各个阶段程序的编译指令
只进行预处理 gcc -E
只进行预处理和编译 gcc -S(大写)
只进行预处理、编译和汇编 gcc -c(小写)
指定生成可执行文件 gcc -o
编译器
1、由词法分析器逐个读入构成源程序的字符,把每一个字符组成词法单元流(token),并完成和用户的一些任务。将输入的程序中的空白和注释过滤掉,将编译器生成的错误信息与源程序的位置联系起来。
2、之后语法分析器获取词法分析器产生多的词法单元流,检查它是否有能由源语言的文法产生,最后输出语法分析器。
3、之后将语法分析产生的语法树通过语义分析,分析语义如果没有问题就生成中间文件,如果语义有问题,那么就将问题返回给程序
4、在这个分析过程中会有符号表管理在分析过程中出现的错误和一些信息。
词法分析器
词法分析器首先将输入的源程序从左到右一个字符一个字符的输入,之后通过词法分析器根据词法分析器的构词规则(一般是正则表达式)识别出就有独立意义的单词(符号),并产生与源程序等价的属性字输出为词法单元流。
词法分析器的生成:
词法分析器也叫做词法分析程序,词法分析程序是根据定义的词法规则通过自动或者手动生成的一个分析程序。
词法分析器的构成:
语法分析器:
语法分析器的任务是在词法分析的基础上将单个的词法单元组合成各类语法短语,最后一分析数的形式体现。
语法分析器的组成:
语法分析器也叫做语法分析程序,此程序的结构由上下文无关语法描述,语法分析器可由YALL等工具自动生成。语法分析器可以按照源程序的语法规则,从词法分析的结果中识别出相应的语法范围,同时进行语法检查。
语义分析器:
语义分析器是对结构上已经确定的源程序进行上下文有关性质的审查,进行类型的审查,为代码的生成阶段收集类型信息。
注意:此文章是小编个人理解写的,若是其中有错误或者不足,还希望各位朋友进行指导