编译原理实践—课程说明和引论技术方案.ppt

编译原理实践—课程说明和引论技术方案.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单遍编译程序 单遍编译程序只对源程序进行一遍扫描,就完成编译的各项任务,产生目标代码。在单遍编译程序中,往往以语法分析程序为中心,词法分析和语义分析作为语法分析的子程序。其工作过程如下: 当语法分析需要读进一个新单词时,就调用词法分析子程序。词法分析子程序则从源程序中依次读入字符,组合成单词符号,并将单词符号返回给语法分析程序。 当语法分析程序识别出一个语法成分时,就调用语义分析子程序进行语义分析,并生成目标程序。 当源程序处理完后,进行善后处理,优化目标程序。 词法分析 语法分析 语义分析生成 目标程序 S.P. 语法成分 返回分析结果 整理目标程序 停机 O.P. 取单词 返回单词 单遍编译程序 多遍编译程序 有的编译程序把编译程序的五项任务分几遍来进行,每遍只完成部分任务, 多遍编译程序的工作过程如下: 调用词法分析程序将高级语言源程序转换成用单词符号表示的程序,即将字符串程序转换成单词符号串源程序。 调用语法分析程序对符号串源程序进行语法归类检查。 调用语义分析程序进行语义检查,并生成中间的代码程序。 调用代码优化程序对中间代码程序进行优化。 调用目标生成程序将优化后的中间代码程序转换成目标代码程序。 源程序 词法分析 语法分析 语义分析 代码优化 目标代码生成 错误处理 符号表 目标程序 多遍编译程序结构 实际上,根据语言的不同,编译器可以是一遍(one pass)——所有的阶段由一遍完成,其结果是编译得很好,但(通常)代码却不太有效。大多数带有优化的编译器都需要超过一遍:典型的安排是将一遍用于扫描和分析,将另一遍用于语义分析和源代码层优化,第3遍用于代码生成和目标层的优化。更深层的优化则可能需要更多的遍: 5遍、6遍、甚至8遍都是可能的。 试问世界上第一个编译程序是用什么语言书写的? 用高级语言书写? *没有编译器,如何编译? 因此世界上第一个编译器只能是用机器语言开发的 编译程序的自展技术 直接用目标机器上的机器语言书写源语言的编译程序工作量太大 用目标机器上的机器语言书写源语言的一个子集的编译程序,然后再用这个子集作为书写语言,实现源语言的编译程序。 如果把这个过程根据情况分为若干步,像滚雪球一样直到生成预计源语言的编译程序为止,我们把这样的实现方式称为自展技术 简要来说就是:用被编译的语言来书写该语言自身的编译程序 编译技术的应用 懂得编译有助于深刻理解和正确使用程序设计语言,有助于加深对整个计算机系统的理解 虽然只有少数人从事构造或维护编译器的工作,但是大部分系统软件和应用程序的开发,通常要用到编译原理和技术 例如,设计词法分析器的串匹配技术已用于正文编辑器、信息检索和模式识别程序。上下文无关文法和语法制导定义已用于创建诸如排版、绘图系统和语言结构化编辑器,等等。 编译原理实践 编译原理实践 编译原理实践 -- 课程说明和引论 序言 《编译原理》的课程实践一般有两种可能的安排。其一,为配合编译课程教学,而安排多次小型实践,分别支持编译程序的各个阶段。其二,针对某一规模适中的语言来设计和实现一个相对完整、独立的编译器。 《编译原理实践》作为《编译原理》课程的延伸,目的是让大家动手设计和实现某一规模适中的语言的编译器,该编译器不仅涉及编译程序的各个阶段,而且也强调了编译的总体设计、各个阶段的接口安排等等 学会运用所学技术解决实际问题 1.课程目标 回顾编译相关的文法和形式语言基本理论 以PL/0语言为例,介绍一个编译程序从语法定义、词法分析、语法分析、出错处理、代码生成到解释执行的全过程。使学生了解什么是编译,并懂得怎样从语言的定义出发,系统地去开发一个语言的编译程序 介绍Lex(词法分析程序的生成系统) Yacc(语法分析程序的生成系统) PL/0编译器 给出一个简单的类Pascal语言,其编译程序用高级语言(C/Pascal)实现。通过剖析该高级语言程序以理解各编译成分的功能及手工实现方法。 PL/0编译程序 源语言(PL/0) 目标语言(类p-code) 实现语言(pascal/C) PL/0 类 p-code pascal/C PL/0 语言程序 类 p-code 代码 PL/0编译程序 类 p-code解释程序 类 p-code代码 PL/0源程序 输入数据 输出数据 PL/0编译系统的结构框架 课程作业 给出smallC语言的词法和语法规则,要求实现smallC语言编译程序,包括词法分析、语法分析、出错处理、代码生成和解释程序 用smallC语言编若干个程序,用自己开发的编译程序对它编译,在编译过程中要求能

文档评论(0)

南非的朋友 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档