A. 编译程序分为哪几个主要部分
1、词法分析
词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。
2、语法分析
编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。
3、中间代码生成
中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。中间代码即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。
4、代码优化
代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。所谓等价,是指不改变程序的运行结果。所谓有效,主要指目标代码运行时间较短,以及占用的存储空间较小。这种变换称为优化。
5、目标代码生成
目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。
(1)编译程序三个任务扩展阅读:
特点
数据结构分析和综合时所用的主要数据结构,包括符号表、常数表和中间语言程序。符号表由源程序中所用的标识符连同它们的属性组成。
其中属性包括种类(如变量、数组、结构、函数、过程等)、类型(如整型、实型、字符串、复型、标号等),以及目标程序所需的其他信息。常数表由源程序中用的常数组成,其中包括常数的机内表示,以及分配给它们的目标程序地址。
分析部分源程序的分析是经过词法分析、语法分析和语义分析三个步骤实现的。词法分析由词法分析程序(又称为扫描程序)完成。
其任务是识别单词(即标识符、常数、保留字,以及各种运算符、标点符号等)、造符号表和常数表,以及将源程序换码为编译程序易于分析和加工的内部形式。
B. 编译应用程序主要目的是什么具体要做哪三个只要步骤
编译应用程序主要目的是开发和应用软件及其相关文件
3步骤就是,界面-代码-编译
C. 缂栬疟杩囩▼锛氢粠璇嶆硶鍒嗘瀽鍒扮洰镙囦唬镰佺敓鎴
缂栬疟鍣ㄦ槸涓绉嶅皢楂樼骇璇瑷绋嫔簭杞鎹㈡垚链哄櫒璇瑷绋嫔簭镄勭▼搴忋傜紪璇戣繃绋嬫槸灏嗘簮绋嫔簭杞鎹㈡垚鐩镙囩▼搴忕殑杩囩▼銆傜紪璇戣繃绋嫔寘𨰾璇嶆硶鍒嗘瀽銆佽娉曞垎鏋愩佽涔夊垎鏋愩佷腑闂翠唬镰佺敓鎴愬拰鐩镙囦唬镰佺敓鎴愮瓑阒舵点傛湰鏂囧皢璇︾粏浠嬬粛缂栬疟杩囩▼镄勫悇涓阒舵点
🔍璇嶆硶鍒嗘瀽
缂栬疟杩囩▼镄勭涓阒舵垫槸璇嶆硶鍒嗘瀽锛屽畠镄勪换锷℃槸瀵规簮绋嫔簭杩涜岄愬瓧镓鎻忥纴璇嗗埆鍑哄悇涓鍗曡瘝绗﹀彿銆傚湪璇嶆硶鍒嗘瀽杩囩▼涓锛屾垜浠渚濇嵁镄勬槸璇瑷镄勮瘝娉曡勫垯锛屼篃灏辨槸鎻忚堪钬滃崟璇嵝濈粨鏋勭殑瑙勫垯銆
📝璇娉曞垎鏋
璇娉曞垎鏋愰桩娈电殑浠诲姟鏄鍦ㄨ瘝娉曞垎鏋愮殑锘虹涓婏纴镙规嵁璇瑷镄勮娉曡勫垯灏嗗崟璇岖﹀彿搴忓垪鍒呜В鎴愬悇绫昏娉曞崟浣嶃傞氩父锛岃娉曞垎鏋愮殑鐩镄勬槸纭瀹氭暣涓杈揿叆涓叉槸钖︽瀯鎴愪竴涓璇娉曚笂姝g‘镄勭▼搴忋
🔍📝璇涔夊垎鏋
璇涔夊垎鏋愰桩娈电殑浠诲姟涓昏佹槸妫镆ユ簮绋嫔簭鏄钖﹀寘钖闱欐佽涔夐敊璇锛屽苟鏀堕泦绫诲瀷淇℃伅渚涘悗闱㈢殑浠g爜鐢熸垚阒舵典娇鐢ㄣ傝涔夊垎鏋愮殑涓涓閲嶈佸伐浣沧槸杩涜岀被鍨嫔垎鏋愬拰妫镆ャ
💻涓闂翠唬镰佺敓鎴
涓闂翠唬镰佺敓鎴愰桩娈电殑浠诲姟鏄镙规嵁璇涔夊垎鏋愮殑杈揿嚭鐢熸垚涓闂翠唬镰併备腑闂翠唬镰佹槸涓绉崭粙浜庢簮浠g爜鍜岀洰镙囦唬镰佷箣闂寸殑浠g爜锛屽畠鍙浠ヨ杩涗竴姝ヤ紭鍖栧拰杞鎹㈡垚鐩镙囦唬镰併
👨💻鐩镙囦唬镰佺敓鎴
鐩镙囦唬镰佺敓鎴愰桩娈垫槸缂栬疟鍣ㄥ伐浣灭殑链钖庝竴涓阒舵点傚畠镄勪换锷℃槸鎶娄腑闂翠唬镰佽浆鎹㈡垚鐗瑰畾链哄櫒涓婄殑缁濆规寚浠や唬镰併佸彲閲嶅畾浣嶆寚浠や唬镰佹垨姹囩紪鎸囦护浠g爜銆傝繖涓阒舵典笌鍏蜂綋镄勬満鍣ㄥ瘑鍒囩浉鍏炽
D. C语言源程序的编译过程包括哪三个阶段
编译:将源程序转换为扩展名为.obj的二进制代码
连接:将obj文件进行连接,加入库函数等生成可执行文件
运行:执行可执行文件,有错返回修改,无错结束
E. 编译程序的工作过程一般可以划分为哪5个基本阶段,还自始至终伴随进行哪两项工作
1、编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码生成。
2、编译程序的工作过程一般自始至终伴随进行信息表管理和出错处理两项工作。
主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
(5)编译程序三个任务扩展阅读:
解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。解释程序的工作过程如下:
1、由总控程序完成初始化工作。
2、依次从源程序中取出一条语句进行语法检查,如有错,输出错误信息;如果通过了语法检查,则根据语句翻泽成相应的指令并执行它。
3、检查源程序是否已经全部解释执行完毕,如果未完成则继续解释并执行下一条语句,直到全部语句都处理完毕。
F. 编译器能够完成的工作是
1. 词法分析词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看连续的字符然后把它们识别为“单词”。
2. 语法分析语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。
3. 语义分析语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。
4. 中间代码生成中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。最常用的一种中间代码是三地址码,它的一种实现方式是四元式。三地址码的优点是便于阅读、便于优化。
5. 中间代码优化
优化是编译器的一个重要组成部分,由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间上有很大浪费。当需要生成高效目标代码时,就必须进行优化。
6. 目标代码生成
目标代码生成是编译器的最后一个阶段。在生成目标代码时要考虑以下几个问题:计算机的系统结构、指令系统、寄存器的分配以及内存的组织等。编译器生成的目标程序代码可以有多种形式:汇编语言、可重定位二进制代码、内存形式。
7 符号表管理
符号表的作用是记录源程序中符号的必要信息,并加以合理组织,从而在编译器的各个阶段能对它们进行快速、准确的查找和操作。符号表中的某些内容甚至要保留到程序的运行阶段。
8 出错处理用户编写的源程序中往往会有一些错误,可分为静态错误和动态错误两类。所谓动态错误,是指源程序中的逻辑错误,它们发生在程序运行的时候,也被称作动态语义错误,如变量取值为零时作为除数,数组元素引用时下标出界等。静态错误又可分为语法错误和静态语义错误。语法错误是指有关语言结构上的错误,如单词拼写错、表达式中缺少操作数、begin和end不匹配等。静态语义错误是指分析源程序时可以发现的语言意义上的错误,如加法的两个操作数中一个是整型变量名,而另一个是数组名等。
G. 请简述编译分为哪几个过程,它们的任务分别是什么
编译阶段也常常划分为两大步骤,分析步骤和综合步骤 分析步骤和综合步骤 分析步骤是指对源程序的分析 -线性分析(词法分析或扫描) -层次分析(语法分析) -语义分析 综合步骤是指后端的工作,为目标程序的生成而进行的综合