编译原理教案61249.docVIP

  1. 1、本文档共92页,可阅读全部内容。
  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文档。上传文档
查看更多
课程编码 编译原理及实现技术 课程教案 2011~2012学年第 1 学期 任课教师:郭德贵、张红、张睿 吉林大学计算机科学与技术学院 课程名称:编译原理 课程英文名称:Compiler Principle 学时:64 学分:4 授课对象:计算机科学与技术 专业 2009 级 教学目的: 编译原理课程是计算机科学与技术专业学生的课。通过学习这门课程,学生掌握编译程序的基本原理、方法和,使学生更好的理解程序语言的内部机制, 授课题目 第一章 编译引论 授课学时 2 授课时间 教学重点、难点: 本章从总体上概要介绍编译相关的原理和技术以及典型编译器的逻辑结构,使学生对编译程序有一个初步的认识。本章重点和难点为各基本概念的理解和对整个编译程序各个阶段所承担任务的理解和掌握。 教学要点: 本章需要学生掌握如下内容: 实现高级语言的编译方式和解释方式及其区别。 编译方式:对整个源程序进行分析,翻译成等价的目标程序,翻译的同时做语法检查和语义检查。然后再运行目标程序。 解释方式:一个语句一个语句的读入源程序,边翻译边执行,在翻译过程中不产生目标程序。 解释方式特别适合于交互式语言;而且解释方式允许程序执行时改变自身,比如调试程序。这种情形编译程序不易胜任,因为它需要动态编译,而解释程序可以毫无困难的胜任;此外,解释程序不依赖于目标机,因为它不生成目标代码,可移植性优于编译程序。但是和编译程序相比,解释程序开销大,运行速度慢得多。解释方式和编译方式的最根本区别在于:在解释方式下,并不生成目标代码程序,而是直接执行源程序本身。 典型编译器的各个组成部分以及各个部分所承担的任务。 词法分析阶段 词法分析的任务是扫描源程序的ASCII码序列,识别出一个个具有独立意义的最小语法单位,即单词. 语法分析阶段 语法分析的任务是根据程序设计语言的语法规则,把词法分析的结果分解成各种语法单位,同时检查程序中的语法错误。 c. 语义分析阶段 这一阶段的任务是对语法分析所识别出的各类语法范畴,分析其含义,并进行静态语义检查。 中间代码生成 在进行了上述的语法分析和语义分析阶段的工作后,编译程序将源程序变成一种内部表示形式. e. 中间代码优化 此阶段的任务是对前阶段产生的中间代码在不改变源程序语义的前提下进行加工变换,使生成的代码更为高效,缩短运行时间或节省存储空间。 f. 目标代码生成 这一阶段的任务是把中间代码变换成特定机器上的机器指令代码或汇编指令代码。 g. 表格管理 编译程序在对源程序的分析过程中,需要创建和管理一系列的表格,以登记源程序的各类信息和编译各阶段的进展情况。 遍 具体实现上,受不同源语言、设计要求和计算机硬件条件的限制,往往将编译程序组织成若干遍(Pass)。所谓“遍”就是对源程序或源程序的中间表示形式从头到尾扫描一次,并作加工处理,生成新的中间结果或目标程序。既可以将编译过程中的几个不同阶段合为一遍,也可以把一个阶段的工作分为若干遍。例如,词法分析这一阶段可以作为单独的一遍,但更多的时候是把词法分析程序作为语法分析程序的子程序来加以调用,将词法分析阶段和语法分析阶段合并为一遍。 前端和后端 概念上,我们有时把编译程序划分为编译前端和编译后端。前端主要由与源语言有关但与目标机无关的那些部分组成。编译前端通常包括词法分析、语法分析、语义分析、中间代码生成,与目标机无关的中间代码优化部分也可包含在前端,当然前端也包括相应部分的错误处理。 编译后端包括与目标机有关的中间代码优化部分和目标代码生成等。一般来说,这些部分与源语言无关而仅仅依赖于中间语言。很明显编译后端是面向目标语言的,而编译前端则不是,它几乎独立于目标语言。 编译程序的实现 一般开发编译程序有如下几种可能途径: a. 转换法(预处理法): 假如我们要实现L语言的编译器,现在有L’语言的编译器,那么可以把L语言程序转换成L’语言的程序,再利用L’语言的编译器实现L语言,这种方法通常用于语言的扩充。如对于C++语言,可以把C++程序转换成C程序,再应用C语言的编译器进行编译,而不用重新设计和实现C++编译器。常见的宏定义和宏扩展都属于这种情形。移植法: 假设在A机器上已有L语言的编译程序,想在B机器上开发一个L语言的编译程序。这里有两种实现方法:实现方法一:最直接的办法就是将A机的代码直接转换成B机代码。 实现方法二:假设A机和B机上都有高级程序设计语言W的编译程序,并且A机上的L语言编译程序是用W语言写的,我们可以修改L编译程序的后端,即把从中间代码生成A机目标代码部分改为生成B机的目标代码。这种在A机上产生B机目标代码的编译程序称为交叉编译程序(Cross Compiler)。自展法:

文档评论(0)

ipad0b + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档