编译原理-第1章引论.ppt

上传人:wuy****n92 文档编号:91529180 上传时间:2023-05-27 格式:PPT 页数:48 大小:335.50KB
返回 下载 相关 举报
编译原理-第1章引论.ppt_第1页
第1页 / 共48页
编译原理-第1章引论.ppt_第2页
第2页 / 共48页
点击查看更多>>
资源描述

《编译原理-第1章引论.ppt》由会员分享,可在线阅读,更多相关《编译原理-第1章引论.ppt(48页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、课程简介总学时:56学时其中课堂教学:48学时;实验:8学时课程设计:一周主讲:林泓课程内容v 介绍编译器构造的一般原理和基本实现方法v 介绍的理论知识:形式语言和自动机理论、语法制导的定义和属性文法等v 强调形式化描述技术v 强调对编译原理和技术的宏观理解,注意力无需分散到枝节算法,无需偏向于某种源语言或目标机器学习的意义v 对编程语言的设计和实现有深刻的理解,对和编程语言有关的理论有所了解,对宏观上把握编程语言来说,起一个奠基的作用。v 从软件工程看,编译器是一个很好的实例,所介绍的概念和技术能应用到一般的软件设计之中。v 大多数程序员同时是简单语言的设计者,有助于提高对这些语言的设计水平

2、。v 在软件逆向工程、软件的设计方法、程序理解和软件安全等方面有着广泛的应用。课程要求v讲课进展较快,平时要复习并加深理解。v作业较多,要求独立完成。v上机实验,每次检查。v学期总评=考试成绩占70%,平时成绩占30%编译系统是现代计算机系统的基本组成之一,编译程序构造的基本原理和技术不仅应用于编译程序的设计,也广泛应用于一般软件的设计和实现。本课程是计算机类专业的一门重要的核心专业课。先修课程:高级程序设计语言、汇编语言、离散数学、数据结构学习要求:不旷课,上课认真听讲,课上保持安静;课后即时复习,认真完成作业。学习目标 通过本课程的学习,旨在使同学们掌握程序设计语言的形式化描述和编译的基本

3、理论、原理和技术,并对编译程序有较为具体的认识。使同学们能运用所学过的基本知识、着手开发系统程序,为今后的工作(理论研究和技术开发)打下基础。具体为:(1)掌握编译程序基本结构及构造的基本原理和技术;(2)掌握文法、形式语言及自动机的基本概念和在编译程序构造中的应用;(3)掌握典型的几种语法分析方法的基本原理和实现方法;(4)掌握语法制导方法在语义分析中的应用和中间代码生成方法;(5)掌握存储分配的基本思想和实现方法;(6)掌握代码优化及代码生成的方法。学习向导 编译原理课程是理论性较强的课程。其特点是概念多、内容抽象。尤其是文法、形式语言及自动机的概念是计算机专业的理论学习和研究的基础。掌握

4、这些基本理论、原理和技术,对于培养同学们对事物的抽象能力以及分析问题和解决问题的能力大有帮助。编译原理与方法对于深刻理解程序设计语言、深入了解程序在计算机中的运行机制、掌握程序设计语言的翻译方法起到不可替代的作用。同时编译原理课程也是实践性很强的课程,要求同学们在基本掌握了编译理论和技术的基础上,综合应用先修课程及本课程的知识,完成课程的实验和课程设计。参考资料教材:1编译原理 主编:张素琴、吕映芝、蒋维杜 出版社:清华大学出版社出版时间:2005年2月参考书:1编译原理 主编:何炎祥 出版社:华中理工大学出版社出版时间:2000年10月2程序设计语言编译原理(第3版)主编:陈火旺、刘春林、谭

5、庆平、赵克佳、刘越 出版社:国防工业出版社出版时间:2001年8月3编译原理技术与工具(英文版)Compilers:Principles,Techniques,andTools 主编:AlfredV.Aho,RaviSethi,JeffreyD.Ullman 出版社:人民邮电出版社出版时间:2002年2月参考资料4编译原理与技术(第二版)主编:陈意云出版社:中国科学技术大学出版社出版时间:2002年1月5编译程序构造原理和实现技术 主编:金成植 出版社:高等教育出版社出版时间:2002年7月6编译原理及编译程序构造 主编:高仲仪、金茂忠 出版社:北京航空航天大学出版社出版时间:2001年3月7

6、编译原理(第2版)主编:蒋立源,康慕宁 出版社:西北工业大学出版社出版时间:1999年4月8编译原理 主编:张幸儿 出版社:科学出版社出版时间:1999年4月第1章 引论本章主要内容:v什么是编译程序v编译过程和编译程序的结构v为什么要学习编译程序本章的重点:本章没有难以理解的内容,主要是对编译程序的功能和结构做一综合描述1.1 什么叫编译程序 使用过现代计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。现代计算机系统一般都含有不止一个的高级语言编译程序,对有些高级语言甚至配置了几个不同性能的编译程序,供用户按不同需要进行选择。要在计算机上执行用高级语言(或汇编语言)编写的程序

7、,必须通过特定的途径来进行,也就是要通过翻译程序把用高级语言(或汇编语言)编写的程序翻译成为机器语言构成的程序,计算机才能执行。在计算机上执行一个高级语言程序一般要分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。(1)翻译程序(Translator)通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序(称为源语言程序或源程序)转换成另一种语言程序(称为目标语言程序或目标程序),而后者与前者在逻辑上是等价的。源程序(sourceprogram)翻译程序 目标程序(targetprogram)输入 输出图1.1翻译程序翻译程序根据所

8、处理的对象和实现的途径不同又分为:汇编程序、编译程序和解释程序。(2).汇编程序(Assembler)如果源语言是某种汇编语言,而目标语言是某种计算机的机器语言,这样的一个翻译程序就称为汇编程序。源程序(汇编语言)翻译程序(汇编程序)目标程序(机器语言)输入 输出图1.2汇编程序(3).编译程序(Compiler)如果源语言是某种高级语言,而目标语言是某种低级语言(汇编语言或机器语言),这样的一个翻译程序就称为编译程序。源程序(高级语言)翻译程序(编译程序)目标程序(低级语言)图1.3编译程序输入 输出(4).解释程序(Interpreter)这是另外一种类型的翻译程序,在翻译过程它按照高级语

9、言源程序在计算机上执行的动态顺序对源程序的语句逐条翻译(解释),边解释边执行直至结束,它不产生目标程序,它的工作结果就是源程序的执行结果,这样的一个翻译程序就称为解释程序。源程序(高级语言)翻译程序(解释程序)计算结果输入 输出图1.4解释程序初始数据根据不同的用途,编译程序可进一步分类:(1)诊断编译程序(DiagnosticCompiler):专门用于帮助程序开发和调试的编译程序。(2)优化编译程序(OptimizingCompiler):着重于提高目标代码效率的编译程序。(3)交叉编译程序(CrossCompiler):如果一个编译程序产生不同于其宿主机的机器代码。(4)可变目标编译程序

10、(RetargetableCompiler):不需重写编译程序中与机器无关的部分就能改变目标机。宿主机:运行编译程序的计算机。目标机:运行编译程序所产生目标代码的计算机。1.2 编译过程概述 编译程序的工作,从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的。一段英文翻译为中文时,通常需经下列步骤:(1)识别出句子中的一个个单词;(2)分析句子的语法结构;(3)根据句子的含义进行初步翻译;(4)对译文进行修饰;(5)写出最后的译文。类似地,编译程序的工作过程一般也可以划分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。第一阶段:词法分析(Lexical an

11、alysis)词法分析的任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。保留字(begin、end、if、for、while等)、标识符(x1、s等变量名)、常数(3.14、100等)、算符(+、-、and、or等)、界符(标点符号、左右括号等)。例如,对于Pascal的循环语句:for I:1 to 100 do词法分析的结果是识别出如下的单词符号:保留字 for标识符 I赋值号:=整常数 1保留字to整常数 100保留字do 单词符号是语言的基本组成成分,是人们理解和编写程序的基本要素。识别和理解这些要素无疑也是翻译的基础。如同将英文翻译成中文的情形一样,如果你对

12、英语单词不理解,那就谈不上进行正确的翻译。在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效工具是正规式和有限自动机。第二阶段,语法分析(Syntax Analysis)语法分析的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短语”、“子句”、“句子”(“语句”)、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。例如,在很多语言中,符号串z:=X十0.618*

13、Y代表一个“赋值语句”,而其中的X0.618*Y代表一个“算术表达式”。因而,语法分析的任务就是识别X0.618*Y为算术表达式,同时,识别上述整个符号串属于赋值语句这个范畴。第三阶段,语义分析与中间代码产生(Semantic Analysis and Intermediate Generator)此阶段的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。中间代码是一种独立于具体硬件的记号系统。常用的中间代码:三地址码,四元式,三元式、间接三元式、逆波兰式,树形表示等。所谓“中间代码”是一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。这种记号系统或

14、者与现代计算机的指令形式有某种程度的接近,或者能够比较容易地把它变换成现代计算机的机器指令。四元式的形式是:(算符左操作数右操作数结果)它的意义是:对“左、右操作数”进行某种运算(由“算符”指明),把运算所得的值作为“结果”保留下来。例如赋值语句Z:(X0.418)*YW翻译为四元式序列:序号算符左操作数右操作数结果1十X0.418T12*T1YT23T2WZ第四阶段,优化(Optimization)优化的任务:在于对前段产生的中间代码进行加工变换,以期在最后分段能产生出更为高效(省时间和空间)的目标代码。优化的主要方面有:公共子表达式构提取、循环优化、删除无用代码等等。有时,为了便于“并行运

15、算”,还可以对代码进行并厅化处理。优化所依循的原则:程序的等价变换规则。例如,如果我们有程序片断forK:1to100dobeginM:=I+10*KN:=J+10*Kend其中间代码为:序号OP ARG1 ARG2 RESULT注解(1)(2)(3)(4)(5)(6)(7)(8)(9):=j*+*+j110010I10JKKKT1KT21K(9)T1MT2NK(2)K:1若100K转至第(9)个四元式T1:二10*K;T1为临时变量M:IT1T2:10*k;T2为临时变量N:J十T2K:K十1转至第(2)个四元式转换成如下的等价代码:序号OP ARG1 ARG2 RESUL注解(1)(2)(

16、3)(4)(5)(6)(7)(8)(9):=:=:=j+jIJ1100MNKK10101MNK(9)MNK(4)M:IN:JK:lif(100k)goto(9)M:M10N:N十10K:Klgoto(4)优化后目标程序的执行效率提高很多。因为,对于前者,在循环中需做300次加法和200乘法;对于后者,在循环中只需做300次加法。第五阶段,目标代码生成(Code Generation)这一阶段的任务是:把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。例(*,id3,10.0,t1)(+,id2,t1,id1)目标代码:(1)MOVid3,R2(2)MUL#10.0,R2(3)MOV

17、id2,R1(4)ADDR1,R2(5)MOVR1,id1 上述编译过程的五个阶段是一种典型的分法。事实上,并非所有编译程序都分成这五阶段。有些编译程序对优化没有什么要求,优化阶段就可省去。在某些情况下,为了加快编译速度,中间代码产生阶段也可以去掉。有些最简单的编译程序是在语法分析的同时产生目标代码。但是,多数实用编译程序的工作过程大致都像上面所说的那五个阶段。1.3 编译程序的结构 1.3.1 编译程序总框 上述编译过程的五个阶段是编译程序工作时的动态特征。编译程序的结构可以按照这五阶段的任务分模块进行设计。图1.5给出了编译程序总框。图1.5编译程序总框词法分析器语法分析器语义分析与中间代

18、码生成器中间代码优化器目标代码生成器表格管理出错处理目标代码程序源程序单词符号串语法单位中间代码串中间代码串(1)词法分析器(lexicalanalyzer),也称扫描器:输入源程序,进行词法分析,输出单词符号。(2)语法分析器(syntaxanalyzer),简称分析器:对单词符号串进行语法分析(根据语法规则进行推导或归约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。(3)语义分析与中间代码产生器(semantic analyzer andintermediatecodegenerator):按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成

19、一定形式的中间代码。有的编译程序在识别出各类语法单位后,构造并输出一棵表示语法结构的语法树,然后,根据语法树进行语义分析和中间代码产生。(4)代码优化器(codeoptimizer):对中间代码进行优化处理,以便得到高质量的目标代码。(5)代码生成器(codegenerator):将中间代码翻译成等价的目标程序。除了上述五个功能模块外,一个完整的编译程序还应包括“表格管理”和“出错处理”两部分。1.3.2 表格管理(symbol-table manager)编译程序在工作过程中需要保持一系列的表格,以登记源程序的各类信息和编译各阶段的进展状况。合理地设计和使用表格是编译程序构造的一个重要问题。

20、在编译程序使用的表格中,最重要的是符号表。它用来登记源程序中出现的每个名字以及名字的各种属性。例如,一个名字是常量名、变量名,还是过程名等等;如果是变量名,它的类型是什么、所占内存是多大、地址是什么等等。通常,编译程序在处理到名字的定义性出现时,要把名字的各种属性填入到符号表中;当处理到名字的使用性出现时,要对名字的属性进行查证。当扫描器识别出一个名字(标识符)后,它把该名字填入到符号表中。但这时不能完全确定名字的属性,它的各种属性要在后续的各阶段才能填入。例如,名字的类型等要在语义分析时才能确定,而名字的地址可能要到目标代码生成才能确定。由此可见,编译各阶段都涉及到构造、查找或更新有关的表格

21、。1.3.3 出错处理(error handler)一个编译程序不仅应能对书写正确的程序进行翻译,而且应能对出现在源程序中的错误进行处理。如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告给用户。这部分工作是由专门的一组程序(叫做出错处理程序)完成的。一个好的编译程序应能最大限度地发现源程序中的各种错误,准确地指出错误的性质和发生错误的地点,并且能将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,以便进一步发现其它可能的错误。如果不仅能够发现错误,而且还能自动校正错误,那当然就更好了。但是,自动校正错误的代价是非常高的。编译过程的每一阶段都可能检测出错误

22、,其中,绝大多数错误可以在编译的前三阶段检测出来。源程序中的错误通常分为语法错误和语义错误两大类。语法错误是指源程序中不符合语法(或词法)规则的错误,它们可在词法分析或语法分析时检测出来。例如,词法分析阶段能够检测出“非法字符”之类的错误;语法分析阶段能够检测出诸如“括号不匹配”、“缺少;”之类的错误。语义错误是指源程序中不符合语义规则的错误,这些错误一般在语义分析时检测出来,有的语义错误要在运行时才能检测出来。语义错误通常包括:说明错误、作用域错误、类型不一致等等。关于错误检测和处理方法,我们将穿插在有关章节介绍。1.3.4 遍(Pass)前面介绍的编译过程的五个阶段仅仅是逻辑功能上的一种划

23、分。具体实现时,受不同源语言、设计要求、使用对象和计算机条件(如主存容量)的限制,往往将编译程序组织为若干遍(Pass)。所谓“遍”就是对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。通常,每遍的工作由从外存上获得的前一遍的中间结果开始(对于第一遍而言,从外存上获得源程序),完成它所含的有关工作之后,再把结果记录于外存。当一遍中包含若干阶段时,各阶段的工作是穿插进行的。例如,我们可以把词法分析、语法分析及语义分析与中间代码产生这三阶段安排成一遍。这时,语法分析器处于核心位置,当它在识别语法结构而需要下一单词符号时,它就调用词法分析器,一旦识别出一个语

24、法单位时,它就调用中间代码产生器,完成相应的语义分析并产生相应的中间代码。一个编译程序究竟应分成几遍,如何划分,是与源语言、设计要求。硬件设备等诸因素有关的,因此难于统一划定。遍数多一点有个好处,即整个编译程序的逻辑结构可能清晰一点。但遍数多势必增加输入输出所消耗的时间。因此,在主存可能的前提下,一般还是遍数尽可能少一点为好。应当注意的是,并不是每种语言都可以用单遍编译程序实现。1.3.5 编译前端与后端 前端主要由与源语言有关但与目标机无关的那些部分组成。这些部分通常包括词法分析、语法分析、语义分析与中间代码产生,有的代码优化工作也可包括在前端。后端包括编译程序中与目标机有关的那些部分,如与

25、目标机有关的代码优化和目标代码生成等。通常,后端不依赖于源语言而仅仅依赖于中间语言。可以取编译程序的前端,改写其后端以生成不同目标机上的相同语言的编译程序。如果后端的设计是经过精心考虑的,那么后端的改写将用不了太大工作量,这样就可实现编译程序的目标机改变。也可以设想将几种源语言编译成相同的中间语言,然后为不同的前端配上相同的后端,这样就可为同一台机器生成不同语言的编译程序。然而,由于不同语言存在某些微妙的区别,因此在这方面所取得的成果还非常有限。为了实现编译程序可改变目标机,通常需要有一种定义良好的中间语言支持。例如,在著名的Ada程序设计环境APSE中,使用的是一种称为Diana的树形结构的

26、中间语言。一个Ada源程序通过前端编译转换为Diana中间代码,由编译后端把Diana中间代码转换为目标代码。编译前端与不同的编译后端以Diana为界面,实现编译程序的目标机改变。在Java语言环境中,为了使编译后的程序从一个平台移到另一个平台执行,Java定义一种虚拟机代码Bytecode。只要实际使用的操作平台上实现了执行Bytecode的Java解释器,这个操作平台就可以执行各种Java程序。这就是所谓Java语言的操作平台无关性。1.4 编译程序与程序设计环境 编译程序无疑是实现高级语言的一个最重要的工具。但支持程序设计人员进行程序开发通常还需要一些其它的工具如编辑程序L连接程序;调试

27、工具等等。编译程序与这些程序设计工具一起构成所谓的程序设计环境。在高级语言发展的早期,这些程序设计工具往往是独立的,缺乏整体性,而且也缺乏对软件开发全生命周期的支持。随着软件技术的不断发展,现在人们越来越倾向于构造集成化的程序设计环境。一个集成化的程序设计环境的特点是,它将相互独立的程序设计工具集成起来,以便为程序员提供完整的、一体化的支持,从而进一步提高程序开发效率,改善程序质量。在一个好的集成化程序设计环境中,不仅包含丰富的程序设计工具,而且还支持程序设计方法学,支持程序开发的全生命周期。有代表性的集成化程序设计环境有Ada语言程序设计环境APSE、LISP语言程序设计环境INTERLIS

28、P等。广大读者所熟悉的TurboPascal、TurboC、VisualC+等语言环境也都可认为是集成化的程序设计环境。下面以Ada语言的程序设计环境APSE为例,介绍程序设计环境的基本构成和主要工具。APSE是一个分层的程序设计环境,如图1.6所示。图1.6Ada程序设计环境最内层(第0层)是宿主计算机系统,它包括硬件、宿主操作系统和其它支持软件。第一层是核心APSE(KAPSE)。它包括环境数据库、通信及运行时支撑功能等。第二层,最小APSE(MAPSE)。它包括了Ada程序开发及维护的基本工具,这些工具包括编译程序、编辑程序、连接程序、调试程序、命令解释程序、配置管理程序、美化打印程序、

29、静态分析工具,动态分析工具等等。第三层,APSE。在MAPSE外面再加上更广泛的工具就构成了完整的APSE。对这一层没有精确规定工具的类型,它通常可以包括面向应用的工具和支持特定程序设计方法的工具等。可以是支持需求分析、设计、实现、维护等软件开发全生命周期的工具。在一个程序设计环境中,编译程序起着中心的作用。连接程序、调试程序、程序分析等工具的工作直接依赖于编译程序所产生的结果,而其它工具的构造也常常要用到编译的原理、方法和技术。1.5 编译程序的生成 以前人们构造编译程序大多是用机器语言或汇编语言作工具的。为了充分发挥各种不同硬件系统的效率,为了满足各种不同的具体要求,现在许多人仍然采用这种

30、工具来构造编译程序(或编译程序的“核心”部分)。但是,越来越多的人已经使用高级语言作工具来编译程序。因为,这样可以大大节省程序设计时间,而且所构造出来的编译程序易于阅读、维护和移植。为了便于说明,我们用一种T形图来表示源语言S、目标语言T和编译程序实现语言I之间的关系,如图1.7所示。STI图1.7T型图 如果A机器上已有一个用A机器代码实现的某高级语言L1的编译程序,则我们可以用L1语言编写另一种高级L2的编译程序,把写好的L2编译程序经过L1;编译程序编译后就可得到A机器代码实现的L2编译程序,如图1.8所示。图1.8用L1语言编写编译程序S TIS TIS TI 采用一种所谓的“移植”方

31、法,我们可以利用A机器上已有的高级语言L编写一个能够在B机器上运行的高级语言L的编译程序。做法是,先用L语言编写出在A机器上运行的产生B机器代码的L编译程序源程序,然后把该源程序经过A机器上的L编译程序编译后得到能在A机器上运行的产生B机器代码的编译程序,用这个编译程序再一次编译上述编译程序源程序就得到了能在B机器上运行的产生B机器代码的编译程序。用T形图表示为图1.9所示。图1-9编译程序“移植”L BLL AAL BAL BLL BB我们还可以采用“自编译方式”产生编译程序。方法是,先对语言的核心部分构造一个小小的编译程序(可用低级语言实现),再以它为工具构造一个能够编译更多语言成分的较大

32、编译程序。如此扩展下去,就像滚雪球一样,越滚越大,最后形成人们所期望的整个编译程序。这种通过一系列自展途径而形成编译程序的过程叫做自编译过程。现在人们已建立了多种编制部分编译程序或整个编译程序的有效工具。有些能用于自动产生扫描器(如LEX),有些可用于自动产生语法分析器(如YACC),有些甚至可用来自动产生整个的编译程序。这些构造编译程序的工具称为编译程序一编译程序、编译程序产生器或翻译程序书写系统,它们是按对源程序和目标语言(或机器)的形式描述(作为输入数据)而自动产生编译程序的。要在某一台机器上为某种语言构造一个编译程序,必须掌握下述三方面的内容:(1)源语言,对被编译的源语言(如 FOR

33、TRAN、Pascal或 C),要深刻理解其结构(语法)和含义(语义);(2)目标语言,假定目标语言是机器语言,那么,就必须搞清楚硬件的系统结构和操作系统的功能;(3)编译方法,把一种语言程序翻译为另一种语言程序方法很多,但必须准确地掌握一二。本课程主要是讨论FORTRAN、Pascal、C之类强制式语言的编译技术。在本门课中,我们并不假定以某种特定机器作为目标机器。当需要涉及目标指令时,将采用一些人所共知的假想指令。因此,在学习这门课之前,读者必须具有计算机基础程序设计的知识。由于编译程序是一个极其复杂的系统,故在讨论中,只好把它肢解开来,一部分一部分地进行研究。因此,在学习过程中应注意前后

34、联系,切忌用静止的、孤立的观点看待问题。作为一门技术课程,学习时务必注意理论联系实际,多做练习,多多实践。要加强实践教学环节,学完这门课后,同学们应能实现一个小编译程序(如Pascal语言子集的编译程序)。本教程中所使用的具体算法有些是用文字描述的,有些是用类似Pascal的语言表示的。所有这些算法都是原理性和解释性的,而且大多是不完备的(忽略某些次要因素或尚未学到的成分)。因此,并不意味着这些算法可以直接照抄使用。在着手构造一个编译程序时,需要预先考虑种种具体因素诸如,系统功能要求(这种要求常常是多方面的)、硬件设备、软件工具等等,特别是必须估量所有这些因素对编译程序构造的影响。虽然这些都是工程实现时应予考虑的细节,但因篇幅所限,不可能涉及太多。习题:(1)什么是汇编程序?(2)什么是编译程序?(3)什么是解释程序?(4)什么是翻译程序?(5)编译的逻辑过程是什么?(6)编译程序由那些逻辑部分组成?(7)什么是编译遍?(8)什么是编译前端?(9)什么是编译后端?(10)编译方式与解释方式的根本区别是什么?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com