导航:首页 > 源码编译 > 编译器编译阶段工作顺序

编译器编译阶段工作顺序

发布时间:2022-01-27 07:48:49

⑴ 一个编译器至少包含三个部分的进程是什么

一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
(1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语

言,则此翻译程序称为编译程序。

(2) 源程序:源语言编写的程序称为源程序。

(3) 目标程序:目标语言书写的程序称为目标程序。

(4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与

目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶

段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符

号表管理等工作。

(5) 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,

即目标代码生成,以及相关出错处理和符号表操作。

(6) 遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理

⑵ 编译器在编译阶段,究竟做哪些事情

1. 预处理首先源代码文件(.c/.cpp)和相关头文件(.h/.hpp)被预处理器cpp预编译成.i文件(C++为.ii)。预处理命令为:gcc –E hello.c –o hello.i预编译过程主要处理那些源代码中以#开始的预编译指令,主要处理规则如下:u 将所有的#define删除,并且展开所有的宏定义;u 处理所有条件编译指令,如#if,#ifdef等;u 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。u 删除所有的注释//和 /**/;u 添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;u 保留所有的#pragma编译器指令,因为编译器须要使用它们。2. 编译编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件(.s)。编译的命令为:gcc –S hello.i –o hello.s或者从源文件直接输出汇编代码文件:gcc –S hello.c –o hello.s现在版本的GCC把预编译和编译两个步骤合并成一个步骤,由程序cc1来完成(C++为cc1plus)。3. 汇编汇编就是将汇编代码转变成机器可以执行的命令,生成目标文件(.o),汇编器as根据汇编指令和机器指令的对照表一一翻译即可完成。汇编的命令为:gcc –c hello.s –o hello.o或者从源文件直接输出目标文件:gcc –c hello.c –o hello.o4. 链接链接就是链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。链接的命令为:ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o一般我们使用一条命令就可以完成上述4个步骤:gcc hello.c实际上gcc只是一些其它程序的包装,它会根据不同参数去调用预编译编译程序cc1、汇编器as、链接器ld。

⑶ 简述编译程序的工作过程

1识别出句子中的一个个单词
2分析句子的语法结构
3根据句子的含义进行初步翻译
4对译文进行修饰
5写出最后的译文

⑷ 什么是编译程序 编译程序的工作过程

编译程序是变成语言在计算机上面运行的一种方式。
比如你现在编写(编译型语言)了你个程序文件并要运行它,但是计算机是不认识这个文件里面的东西的(其实计算机只认识0和1这样的数字),所以这里就需要把你自己写的程序文件翻译一遍,翻译过后并生成一个计算机能够识别的文件,把你原来的源文件翻译成计算机能够识别的文件的过程就叫编译,其实计算机运行的真正文件是编译过后的编译文件。

⑸ 编译程序的工作过程一般可以划分为哪5个基本阶段,还自始至终伴随进行哪两项工作

1、编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生成。

2、编译程序的工作过程一般自始至终伴随进行信息表管理和出错处理两项工作。

主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

(5)编译器编译阶段工作顺序扩展阅读:

解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。解释程序的工作过程如下:

1、由总控程序完成初始化工作。

2、依次从源程序中取出一条语句进行语法检查,如有错,输出错误信息;如果通过了语法检查,则根据语句翻泽成相应的指令并执行它。

3、检查源程序是否已经全部解释执行完毕,如果未完成则继续解释并执行下一条语句,直到全部语句都处理完毕。

⑹ 编译程序的工作过程

编译程序必须分析源程序,然后综合成目标程序。首先,检查源程序的正确性,并把它分解成若干基本成分;其次,再根据这些基本成分建立相应等价的目标程序部分。为了完成这些工作,编译程序要在分析阶段建立一些表格,改造源程序为中间语言形式,以便在分析和综合时易于引用和加工(图1)。
数据结构分析和综合时所用的主要数据结构,包括符号表、常数表和中间语言程序。符号表由源程序中所用的标识符连同它们的属性组成,其中属性包括种类(如变量、数组、结构、函数、过程等)、类型(如整型、实型、字符串、复型、标号等),以及目标程序所需的其他信息。常数表由源程序中用的常数组成,其中包括常数的机内表示,以及分配给它们的目标程序地址。中间语言程序是将源程序翻译为目标程序前引入的一种中间形式的程序,其表示形式的选择取决于编译程序以后如何使用和加工它。常用的中间语言形式有波兰表示、三元组、四元组以及间接三元组等。
分析部分源程序的分析是经过词法分析、语法分析和语义分析三个步骤实现的。词法分析由词法分析程序(又称为扫描程序)完成,其任务是识别单词(即标识符、常数、保留字,以及各种运算符、标点符号等)、造符号表和常数表,以及将源程序换码为编译程序易于分析和加工的内部形式。语法分析程序是编译程序的核心部分,其主要任务是根据语言的语法规则,检查源程序是否合乎语法。如不合乎语法,则输出语法出错信息;如合乎语法,则分解源程序的语法结构,构造中间语言形式的内部程序。语法分析的目的是掌握单词是怎样组成语句的,以及语句又是如何组成程序的。语义分析程序是进一步检查合法程序结构的语义正确性,其目的是保证标识符和常数的正确使用,把必要的信息收集和保存到符号表或中间语言程序中,并进行相应的语义处理。

⑺ c++编译器以何种顺序编译文件的,先cpp文件,还是.h文件

1. 编译阶段 (头文件 .h)
d工程中在头文件中对导出内容(function, class, type, object, variable)进行定义.

2. 链接阶段 (库文件 .lib)
d工程在link阶段会生成.lib
用户link时需要 这个.lib 解决link时的代码定位.
3. 运行阶段
.exe

⑻ 编译器的工作分为哪几个阶段

编译器就是一个普通程序,没什么大不了的
什么是编译器?

编译器是一个将高级语言翻译为低级语言的程序。

首先我们一定要意识到编译器就是一个普通程序,没什么大不了的。

在没有弄明白编译器如何工作之前你可以简单的把编译器当做一个黑盒子,其作用就是输入一个文本文件输出一个二进制文件。

基本上编译器经过了以下几个阶段,等等,这句话教科书上也有,但是我相信很多同学其实并没有真正理解这几个步骤到底在说些什么,为了让你彻底理解这几个步骤,我们用一个简单的例子来讲解。

假定我们有一段程序:

while (y < z) {
int x = a + b;
y += x;
}
那么编译器是怎样把这一段程序人类认识的程序转换为CPU认识的二进制机器指令呢?

提取出每一个单词:词法分析
首先编译器要把源代码中的每个“单词”提取出来,在编译技术中“单词”被称为token。其实不只是每个单词被称为一个token,除去单词之外的比如左括号、右括号、赋值操作符等都被称为token。

从源代码中提取出token的过程就被称为词法分析,Lexical Analysis。

经过一遍词法分析,编译器得到了以下token:

T_While while
T_LeftParen (
T_Identifier y
T_Less <
T_Identifier z
T_RightParen )
T_OpenBrace {
T_Int int
T_Identifier x
T_Assign =
T_Identifier a
T_Plus +
T_Identifier b
T_Semicolon ;
T_Identifier y
T_PlusAssign +=
T_Identifier x
T_Semicolon ;
T_CloseBrace }
就这样一个磁盘中保存的字符串源代码文件就转换为了一个个的token。

这些token想表达什么意思:语法分析
有了这些token之后编译器就可以根据语言定义的语法恢复其原本的结构,怎么恢复呢?

原来,编译器在扫描出各个token后根据规则将其用树的形式表示出来,这颗树就被称为语法树。

语法树是不是合理的:语义分析
有了语法树后我们还要检查这棵树是不是合法的,比如我们不能把一个整数和一个字符串相加、比较符左右两边的数据类型要相同,等等。

这一步通过后就证明了程序合法,不会有编译错误。

⑼ 编译程序的各阶段都涉及到什么

预处理,词法分析,文法分析,生成中间代码,生成目标代码。

1、预处理:导入源程序并保存(C文件)。

2、编译:将源程序转换为目标文件(Obj文件)。

3、链接:将目标文件生成为可执行文件(EXE文件)。



(9)编译器编译阶段工作顺序扩展阅读:

将C语言代码分为程序的几个阶段:

首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。

编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分。

⑽ 编译为什么要分阶段

编译过程分为分析和综合两个部分,并进一步划分为词法分析、语法分析、 语义分析、 代码优化、存储分配和代码生成等六个相继的逻辑步骤。

这六个步骤只表示编译程序各部分之间的逻辑联系,而不是时间关系。编译过程既可以按照这六个逻辑步骤顺序地执行,也可以按照平行互锁方式去执行。在确定编译程序的具体结构时,常常分若干遍实现。对于源程序或中间语言程序,从头到尾扫视一次并实现所规定的工作称作一遍。

编译程序

也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。

阅读全文

与编译器编译阶段工作顺序相关的资料

热点内容
android图片变灰 浏览:268
linuxvi下一个 浏览:975
安卓手机的应用锁怎么解 浏览:735
linux增加路径 浏览:849
sql身份证号最后四位加密 浏览:533
xp系统表格加密 浏览:856
光遇安卓军大衣什么时候上线 浏览:840
android应用商店图标 浏览:341
java计算圆的面积 浏览:643
应用编译优化recovery 浏览:577
域控命令n 浏览:258
php导出文件 浏览:15
谷歌地图网页版无法连接服务器地址 浏览:298
菜鸟工具在线编译python 浏览:858
栅格化命令有何作用 浏览:825
为什么压缩文件不能解压 浏览:311
足球app哪个软件好 浏览:96
产品经理逼疯程序员的一天 浏览:17
修改svn服务器ip地址 浏览:584
下列关于编译说法正确的是 浏览:246