编译原理基础(第2版)1588.pptxVIP

  1. 1、本文档共1588页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第1章引言1.1从面向机器的语言到面向人类的语言1.2语言之间的翻译1.3编译器与解释器1.4编译器的工作原理与基本组成1.5编译器的编写1.6本章小结

1.1从面向机器的语言到面向人类的语言计算机的硬件只能识别由0、1字符串组成的机器指令序列,即机器指令程序。在计算机刚刚问世的年代,人们只能向计算机输入机器指令程序来指挥它进行简单的数学计算。机器指令程序是最基本的计算机语言。

随着计算机应用需求的不断增长,人们希望能有功能更强、抽象级别更高的语言来支持程序设计,于是就产生了面向各类应用的程序设计语言。这些语言的共同特征是便于人类的理解与使用,因此被称为面向人类的语言或高级语言。表1.1列出了几种面向机器和面向人类的语言及其表现形式。

表1.1面向机器和面向人类语言举例分类语言表现形式举例面向机器机器指令0000001111110000汇编指令addsi,ax?面向人类通用程序设计语言x:=a+b;sort(list);ifcthenaelseb;数据查询语言selectid_no,namefromstudent_table;形式化描述语言E:E+E|E*E|id;

1.通用程序设计语言通用程序设计语言是继汇编语言之后发展起来的应用最广的一类语言,如人们常用的FORTRAN、Pascal、C/C++、Ada83/Ada95、Java等语言。这类语言的特征是:语言结构符合人类的思维特征,如直接使用表达式进行数学运算;具有很高抽象程度,如引入过程与类等机制;程序设计中强调逻辑过程,即程序员要考虑事情的前因后果,不但要设计做什么,还要考虑怎么做,如条件或循环的判断等。

2.数据查询语言与通用程序设计语言相比,数据查询语言的抽象程度更高,它只要求程序员具有清晰的逻辑思维能力,设计好做什么,而忽略怎么做这样的实现细节,从而使得对大量复杂数据的处理变得轻松简单。

3.形式化描述语言形式化描述语言的代表之一是编译器构造中常用的工具YACC的语言。这类语言的核心部分是基于数学基础的产生式,设计人员只需利用产生式描述语言结构的文法,就可以构造出识别该语言结构的识别器。

4.其他面向特定应用领域的语言随着计算机应用领域的不断拓展,先后出现了多种面向特定应用领域的高级语言,如面向互联网应用的HTML、XML,面向计算机辅助设计的MATLAB,面向集成电路设计的VHDL、Verilog,面向虚拟现实的VRML等等。这些形形色色、多不胜数的计算机语言推动了计算机应用的飞速发展,使得计算机成为人类生活中不可缺少的重要部分。

1.2语言之间的翻译尽管人类可以借助高级语言与计算机进行交往,但是计算机硬件真正能够识别的语言只是0、1组成的机器指令序列,这就需要在高级语言和机器语言之间建立若干桥梁,将高级语言逐步过渡到机器语言。换句话说,我们需要若干“翻译”,把人类懂的高级语言翻译成计算机懂的机器语言。由于应用的不同,语言之间的翻译是多种多样的。图1.1给出了一些常见的语言之间的翻译模式。

高级语言之间的翻译,一般被称为转换,如FORTRAN到Ada的转换等,或者被称为预处理,如SQL到C/C++的预处理等。高级语言可以直接翻译成机器语言,也可以翻译成汇编语言,这两个翻译过程被称为编译。从汇编语言到机器语言的翻译被称为汇编。高级语言是与具体计算机无关的,而汇编语言和机器语言均是与计算机有关的,因此,若将一个汇编语言汇编为可在另一机器上运行的机器指令,则称为交叉汇编,而建立在交叉汇编基础之上的编译模式,如首先将L2编译成A2,再将A2汇编为M1,有时也被称为交叉编译。上述这些翻译模式一般被认为是正向工程。

图1.1语言之间的翻译模式

上述语言之间的翻译虽然各不相同,但基本方法,特别是对源语言的分析方法是相同的。由于高级语言之间的转换和汇编语言到机器语言的翻译过程中,源程序和目标程序之间的结构变化不大,其处理方法相对编译器来讲一般比较简单,因此我们以编译器为例,讨论把高级语言中应用最广的通用程序设计语言翻译成汇编语言程序所涉及的基本原理、技术和方法。这些原理、技术和方法也同样适用于其他各类翻译器的构造,同时有些技术和方法也可以被用于其他软件设计。在后继讨论中,我们约定源程序是指通用程序设计语言程序,而目标程序是指汇编语言程序。

1.3编译器与解释器编译器(Compiler)一词是GraceMurrayHopper在20世纪50年代初

文档评论(0)

139****1983 + 关注
实名认证
文档贡献者

副教授、一级建造师持证人

一线教师。

领域认证该用户于2023年06月21日上传了副教授、一级建造师

1亿VIP精品文档

相关文档