ch1 编译原理引论.ppt

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

编译原理;为什么要学习编译原理;课程内容 介绍编译器构造的一般原理和基本实现方法 介绍的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论等 强调形式描述技术和自动生成技术 ; 参考资料;2、鲸书(Whale book) ;3、虎书(Tiger book); 国内编译原理领域内的权威书籍: 1. 陈意云 《编译原理》高等教育出版社; 2. 吕映芝 《编译原理》清华大学教育出版社; ;3. 陈英 《编译原理》清华工大学出版社; 4.蒋宗礼 《编译原理》高等教育出版社 ; 5. 刘磊 《编译原理及实现》机械工业出版社 ;要求及学习方法;第一章 编译概述;1.1.程序的翻译 1.2. 编译的过程 1.3. 编译程序的逻辑结构 1.4. 编译程序的生成 1.5. 编译技术的应用及发展 ;1.1 程序的翻译;*;程序语言的分类;计算机硬件只懂自己的指令系统,那么它是如何识别除机器语言以外的另一种语言呢?? 解决这一问题的方法:翻译程序!!;翻译程序;编译程序;汇编程序;解释程序;编译和解释程序 编译程序的工作相当于载翻译一本原著,计算机运行编译后的目标程序,相当于阅读一本译著;而解释程序的工作相当于在进行同声翻译,计算机运行解释程序,相当于我们直接通过翻译听外宾讲话。; 程序的编译执行:;程序的解释执行: 如:BASIC、Prolog,问题:效率低下 ;编译程序与解释程序的差别;“编译+解释执行”系统;例如Java语言;编译程序在计算机系统中的位置;翻译程序所处的层次;几个概念;对编译程序的一些说明; 编译原理是讨论编译程序设计的基本理论、基本概念、基本方法 ;*;编译原理引论;1.2 编译的过程;1.编译程序的工作过程;1.编译程序的工作过程;翻译外文资料与编译源程序进行类比;将编译过程划分为5个基本阶段;从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。 事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。 ;1.2 编译的过程;2.编译器各阶段的工作;2.编译器各阶段的工作;例: sum=(10+20)*(num+square); ;词法分析的功能如下: 识别出源程序中意义独立的最小词法单位—单词。 删除无用的空格、回车和其他与输入介质有关的符号 删除程序员为了提高程序可读性所加的注释 如果发现错误则报告出错 ;(2)语法分析 根据语法规则(即语言的文法),分析并识别出各种语法成分(如表达式、语句、函数等),并进行语法正确性检查。 通常将语法分析的结果表示为语法树。 ;sum=(10+20)*(num+square);; 语法分析的功能是进行层次分析,把源程序的单词序列组成语法短语(表示成语法树)。依据的是语法规则。C语言的赋值语句的规则为:    单词序列sum=(10+20)*(num+square);之所以能表示成上图的语法树,依据的是赋值语句和表达式的语法规则。 ;(3)语义分析及中间代码生成 语义分析阶段的任务是审查源程序有无语义错误。 工作依据:源语言的语义规则 一个重要任务:类型检查 根据规则检查每个运算符及其运算对象是否符合要求; 数组的下标是否合法; 过程调用时,形参与实参个数、类型是否匹配等 ;(3)语义分析及中间代码生成 源程序中有些语法成分,按照语法规则去判断,它是正确的,但它不符合语义规则。比如使用了没有声明的变量;或者给一个过程名赋值;或者调用函数时参数类型不合适或者参加运算的两个变量类型不匹配等等。 比如下边的程序片段:   int arr[2],c;   c = arr1 * 10 ; 其中的赋值语句是符合语法规则的,但是因为没有声明变量arr1,而存在语义错。 ;中间代码生成(可选) 所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。 中间代码的形式: 四元式、三元式、逆波兰表示 ;中间代码(intermediate Code) 例:sum=(10+20)*(num+square); ;(4) 中间代码优化(可选) 代码优化阶段的任务是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。 ;例: sum=(10+20)*(num+square) 得到的四元式 T1=10+20 T2=num+square T3=T1*T2 sum=T3 优化后 T1=num+square Sum=30*T1;这只是优化工作的两个方面,此外诸如公共子表达式的删除、强度削弱、循环优

文档评论(0)

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

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

1亿VIP精品文档

相关文档