编译原理教程第三版课件作者胡元义全书第1章节.pptVIP

编译原理教程第三版课件作者胡元义全书第1章节.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
    为了处理和解决实际问题,每一种计算机都具有其特定的功能,而这些功能是通过计算机执行一系列相应的操作来实现的。计算机所能执行的每一种操作称为一条指令,计算机能够执行的全部指令集合就是该计算机的指令系统。由于计算机硬件的器件特性,决定了计算机本身只能直接接受由0和1编码的二进制指令和数据,这种二进制形式的指令集合称为该计算机的机器语言,它是计算机惟一能够直接识别并接受的语言。   用机器语言编写程序很不方便且容易出错,编写出来的程序也难以调试、阅读和交流。为此,出现了用助记符代替机器语言(二进制编码)的另一种语言,这就是汇编语言。汇编语言是建立在机器语言之上的,因为它是机器语言的符号化形式,所以较机器语言直观;但是计算机并不能直接识别这种符号化语言,用汇编语言编写的程序必须翻译成机器语言之后才能执行,这种“翻译”是通过专门的软件——汇编程序实现的。   尽管汇编语言与机器语言相比在阅读和理解上有了长足的进步,但其依赖具体机器的特性是无法改变的,这给程序设计增加了难度。随着计算机应用需求的不断增长,出现了更加接近人类自然语言的功能更强、抽象级别更高的面向各种应用的高级语言。高级语言已经从具体机器中抽象出来,摆脱了依赖具体机器的问题。用高级语言编制的程序几乎能够在不改动的情况下在不同种类的计算机上运行且不易出错,这是汇编语言难以做到的,但高级语言程序翻译(编译)成最终能够直接执行的机器语言程序的难度却大大增加了。   由于汇编语言和机器语言一样都是面向机器的,故相对于面向用户的高级语言来说,它们都被称为低级语言,而FORTRAN、PASCAL、C、ADA、Java这类面向应用的语言则称为高级语言。因此,编译程序就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序,见图1-1。    图1-1 编译程序的功能   一个高级语言程序的执行通常分为两个阶段,即编译阶段和运行阶段,如图1-2所示。编译阶段将源程序变换成目标程序;运行阶段则由所生成的目标程序连同运行系统(数据空间分配子程序、标准函数程序等)接受程序的初始数据作为输入,运行后输出计算结果。   如果编译生成的目标程序是汇编语言形式的,那么在编译与运行阶段之间还要添加一个汇编阶段,它将编译生成的汇编语言目标程序再经过汇编程序变换成机器语言目标程序,如图1-3所示。    图1-2 源程序的编译和运行阶段    图1-3 源程序的编译、汇编和运行阶段   用高级语言编写的程序也可通过解释程序来执行。解释程序也是一种翻译程序,它将源程序作为输入,一条语句一条语句地读入并解释执行,如图1-4所示。解释程序与编译程序的主要区别是:编译程序将源程序翻译成目标程序后再执行该目标程序;而解释程序则逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序。典型的解释型高级语言是BASIC语言。    图1-4 解释程序解释执行过程示意      20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的开创性工作,计算机可以执行编写的一串代码或程序,这些程序最初都是用机器语言(Machine Language)编写的。机器语言就是计算机能够执行的全部指令集合的二进制形式,例如:   C7? 06? 0000? 0002 表示在IBM PC上使用的Intel 8x86处理器将数字2移至地址0000(十六进制)的指令。用机器语言编写程序很不方便且容易出错,因此这种代码形式很快就被汇编语言(Assembly Language)取代。在汇编语言中,指令和存储地址都以符号形式给出。例如,汇编语言指令   MOV ?X, 2 就与前面的机器指令等价(假设符号存储地址X是0000)。汇编程序(Assembler)将汇编语言的符号代码和存储地址翻译成与机器语言相对应的二进制代码。汇编语言大大提高了编程的速度和准确性,至今人们仍在使用它,在存储容量小和速度快的要求下尤其如此。 但是,汇编语言依赖于具体机器的特性是无法改变的,这给编程和调试增加了难度。很明显,编程技术发展的下一个重要步骤就是用更简洁的数学定义或自然语言来描述和编写程序,它应与任何机器无关,而且也可通过一个翻译程序将其翻译为可在计算机上直接执行的二进制代码。例如,前面的汇编语言代码MOV? X, 2可以写成一个简洁的与机器无关的形式X=2。   1954~1957年,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行了开发。但是,由于对编译程序的理论及技术研究刚刚开始,这个语言的开发付出了巨大的辛劳。与此同时,波兰语言学家Noam Chomsky开始了他的自然语言结构研究。 Noam Chomsky根据文法(Grammar,产生语言的

您可能关注的文档

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档