编译原理课件cap1.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理课件cap1

第一章 引 论 第一章 引论(1) 1.1 什么叫编译程序 编译程序:是指这样的程序,它能够把某种语言的程序转换成另一种语言的程序,而后者与前者在逻辑上是等价的。如果源语言是诸如FORTRAN、Pascal、C、Ada、Smalltalk或Java这样的“高级语言”,而目标语言如汇编语言之类的“低级语言”这样的翻译程序则称之为编译程序。 注意编译程序与解释程序的区别,一个语言的解释程序是着样的程序:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。 术语“编译”的内涵是实现从源语言表示的算法向目标语言表示的算法的等价变换。 1.2 编译过程概述 掌握编译过程的五个基本阶段,是我们学习编译原理课程的基本内容,把编译的五个基本阶段与英译中的五个步骤相比较,有利于对编译过程的理解: 英译与编译的比较 1。识别出句子中的一个个单字 2。分析句子的语法结构 3。初步翻译句子的含意 4。译文修饰 5。写出最后译文 1。词法分析 2。语法分析 3。语义分析中间代码生成 4。优化 5。目标代码生成 1。2。2语法分析 语法分析的任务:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位(语法范畴),如“短语”、“句子”、 “子句”、“程序段”等。 语法规则通常用上下文无关文法描述。 1。2。3语义分析与中间代码的产生 这一阶段通常包括两方面的工作首先对各种语法范畴进行静态语义检查,如果正确则进行另一方面的工作,即进行中间代码的翻译。 通常使用属性文法描述语义规则 所谓“中间代码”是一种含义明确,便于处理的记号系统。 中间代码除四元式外,还有三元式、间接三元式、逆波兰记号、树形表示等。 1。2。4 优化 优化的任务在于对前段产生的中间代码进行加工,以期在最后阶段产生更为高效(省时间和空间)的代码 优化所依循的原则是程序的等价变换规则 其方法有:公共子表达式的提取、循环优化、删除无用代码等。 1。2。5 目标代码生成 这一阶段的任务:把中间代码(或经优化处理后)变换成特定机器上的低级语言代码。它有赖于硬件系统结构和机器指令含义。 1。3 编译程序的结构 我们可以按照上页的总框图设计编译程序。从图中我们可以看到除编译的五个基本阶段外,一个完整的编译程序还应包括“表格管理”和“出错处理”两部分 1。3。2 表格与表格管理 在编译程序使用的表格中最重要的是符号表它用来登记源程序中出现的每一个名字以及名子的各种属性。如一个名字是常量名、变量名,还是过程名等;如果是变量名它的类型又是什麽、所站内存是多大、地址是什麽等。 1。3。3 出错处理 一个编译程序不仅能对书写正确的程序进行编译,而且应能对处现在源程序中的错误进行处理。如果源程序有错,编译程序应设法发现错误,把有关错误报告给用户。这部分的工作是由专门的一组程序(叫做处错处理程序)完程的。 1。3。5 编译前端与后端 前端主要由与源语言有关但与目标机无关的那些部分组成。通常包括词法分析、语法分析、语义分析与中间代码产生,有的代码优化工作,也可以包括在前端。 后端包括编译程序中与目标代码有关的部分,如与目标机有关的有关的优化,和目标代码的生成等。 1。4 编译程序与程序设计环境 编译程序无疑是实现高级语言的一个最重要的工具。但支持程序设计人员进行程序设计开发通常还需要其它一些工具:如编辑程序、连接程序、调试程序等。编译程序与这些程序设计工具一起构成所谓的程序设计环境。 在一个程序设计环境中,编译程序起着中心的作用。连接程序、调试程序、程序分析等工具直接依赖于编译程序所产生的结果,而其它工具的构造也常常要用到编译的原理、方法和技术。 1。5 编译程序的生成 以前构造编译程序大多是用机器语言或汇编语言作工具的。为了充分发挥各种不同硬件系统的效率,为了满足各种不同的具体要求,现在许多人仍然使用这种工具来构造编译程序(或编译程序的核心部分) 但是越来越多的人已经使用高级语言作工具来编译程序。因为这样可以大大节省程序设计的时间,热切构造出来的编译程序易于阅读、维护和移植。 为此我们用T形图来表示源语言S、目标语言T和编译语言I之间的关系,如果A机器上已有一个用A机器码实现的某高级语言L1的编译程序,则我们可以用L1语言编写另一种高级语言L2的编译程序,把写好的L2编译程序经过L1编译程序编译后就可得到A机器代码实现的L2编译程序。

文档评论(0)

quechui388620 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档