ch编译原理引论课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《ch编译原理引论课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch 编译 原理 引论 课件
- 资源描述:
-
1、为什么要学习编译原理n必修主干课程,操作系统和编译系统构成程序设计者必修主干课程,操作系统和编译系统构成程序设计者与计算机之间的根本界面。与计算机之间的根本界面。n通过学习该课程,掌握编译的根本理论、常用的编译通过学习该课程,掌握编译的根本理论、常用的编译技术,了解编译过程及编译系统构造和机理。能运用技术,了解编译过程及编译系统构造和机理。能运用所学技术解决实际问题,能独立编写一个小型编译系所学技术解决实际问题,能独立编写一个小型编译系统。统。n此外,通过学习编译原理可以更好地理解程序语言的此外,通过学习编译原理可以更好地理解程序语言的内部机制内部机制,从而更好地理解和运用程序设计语言。能从而
2、更好地理解和运用程序设计语言。能运用编译程序构造的原理和技术完成相关软件工具的运用编译程序构造的原理和技术完成相关软件工具的设计和开发工作。设计和开发工作。课程内容课程内容介绍编译器构造的一般原理和根本实现方法介绍编译器构造的一般原理和根本实现方法介绍的理论知识:形式语言和自动机理论、语法制导介绍的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论等的定义和属性文法、类型论等强调形式描述技术和自动生成技术强调形式描述技术和自动生成技术课课 程程 简简 介介先行课程先行课程 高等数学、离散数学、汇编语言、数据构高等数学、离散数学、汇编语言、数据构造造n 参考资料参考资料n国外编译原
3、理领域内的国外编译原理领域内的3本权威书籍:当代编译技术三大圣经!本权威书籍:当代编译技术三大圣经!n1、龙书、龙书Dragon book2、鲸书Whale book3、虎书、虎书Tiger book国内编译原理领域内的权威书籍:国内编译原理领域内的权威书籍:1.陈意云陈意云?编译原理编译原理?高等教育出版社高等教育出版社2.吕映芝吕映芝?编译原理编译原理?清华大学教育出版社;清华大学教育出版社;3.陈英陈英?编译原理编译原理?清华工大学出版社清华工大学出版社4.蒋宗礼蒋宗礼?编译原理编译原理?高等教育出版社高等教育出版社5.刘磊刘磊?编译原理及实现编译原理及实现?机械工业出版社机械工业出版社
4、 课程特点:理论性强,算法复杂课程特点:理论性强,算法复杂平时平时20%无故旷课:无故旷课:5一本教材,认真听课:以讲义为主,做适当的笔一本教材,认真听课:以讲义为主,做适当的笔记记认真完成课堂和课后作业认真完成课堂和课后作业期末期末80%:闭卷笔试闭卷笔试第一章第一章 编译概述编译概述掌握编译程序中所涉及的有关名词术语掌握编译程序中所涉及的有关名词术语2.2.理解编译程序总的框架,明确编译程序理解编译程序总的框架,明确编译程序工作的根本过程及各阶段的根本任务工作的根本过程及各阶段的根本任务教学目标教学目标1.2.编译的过程编译的过程1.3.编译程序的逻辑构造编译程序的逻辑构造1.4.编译程序
5、的生成编译程序的生成 1.5.编译技术的应用及开展编译技术的应用及开展教学内容 程序的翻译程序的翻译n语言和翻译语言和翻译:语言是人类交流思想和信息的工具。如自然语言,世界上存在着许多种语言,各国之间要交流信息,就要有各种语言之间的翻译。计算机语言同样是丰富多彩的。1/30/2023第16页n机器语言机器语言(machine language)C7 06 0000 0002n汇编语言汇编语言(assembler language)MOV X,2n高级语言高级语言(high-level language)X=2为什么要使用编译程序?为什么要使用编译程序?程序语言的分类n低级语言低级语言Low l
6、evel Language)n机器语言、汇编语言机器语言、汇编语言n特点:与特定的机器有关,成效高,但使用复杂、特点:与特定的机器有关,成效高,但使用复杂、繁琐、费时、易出错。繁琐、费时、易出错。n高级语言高级语言 n -Fortran、Pascal、C 语言等语言等n特点:不依赖具体机器,移植性好、对用户要求低、特点:不依赖具体机器,移植性好、对用户要求低、易使用、易维护等。易使用、易维护等。n计算机硬件只懂自己的指令系统,那么它是如何识别除机器语言以外的另一种语言呢?n解决这一问题的方法:翻译程序!翻译程序!翻译程序n翻译程序:能够把某一种语言程序称为源语言程序转换成另一种语言程序称为目标
7、语言程序的一个程序,而后者与前者在逻辑上是等价的。n程序翻译的方式通常有两种,一种是编译方式,另一种是解释方式。源程序翻译程序目标程序编译程序n编译程序:如果一个翻译程序的源语言是某种高级语言,编译程序:如果一个翻译程序的源语言是某种高级语言,其目标语言是相对于某一计算机的汇编语言或机器语言,其目标语言是相对于某一计算机的汇编语言或机器语言,那么称这种翻译程序为编译程序或称为编译器。那么称这种翻译程序为编译程序或称为编译器。n假设编译生成的目标程序不是机器代码,而是汇编语言假设编译生成的目标程序不是机器代码,而是汇编语言程序,那么还要增加一个会变程序将其会变为机器代码。程序,那么还要增加一个会
8、变程序将其会变为机器代码。源程序(高级语言编写)编译程序目标程序(机器语言或汇编语言编写)汇编程序n如果一个翻译程序的源语言是某种汇编语言,其目标语言是某一计算机的机器语言,那么称这种翻译程序为汇编程序。源程序(汇编语言编写)汇编程序目标程序(机器语言编写)解释程序n解释程序解释程序:是一种语言处理程序,它以源程序是一种语言处理程序,它以源程序作为输入,但不产生目标代码,它将源程序中作为输入,但不产生目标代码,它将源程序中的语句按动态顺序,逐句翻译成课执行代码,的语句按动态顺序,逐句翻译成课执行代码,一旦具备执行条件,那么立即执行这一阶段代一旦具备执行条件,那么立即执行这一阶段代码得到局部结果
9、。码得到局部结果。源程序(高级语言编写)解释程序计算结果 特点:与编译系统比较,解释系统较简单、特点:与编译系统比较,解释系统较简单、可移植性好,易于查错,但速度慢可移植性好,易于查错,但速度慢n编译和解释程序编译和解释程序n编译程序的工作相当于载翻译一本原著,编译程序的工作相当于载翻译一本原著,计算机运行编译后的目标程序,相当于阅计算机运行编译后的目标程序,相当于阅读一本译著;而解释程序的工作相当于在读一本译著;而解释程序的工作相当于在进展同声翻译,计算机运行解释程序,相进展同声翻译,计算机运行解释程序,相当于我们直接通过翻译听外宾讲话。当于我们直接通过翻译听外宾讲话。n程序的编译执行:程序
10、的编译执行:输入数据输入数据源程序源程序编译程序编译程序运行系统运行系统目标程序目标程序n程序的解释执行:q如:BASIC、Prolog,问题:效率低下解释程序解释程序源程序源程序输入数据输入数据计算结果计算结果为什么解释运行的工作效率低于编译方式?为什么解释运行的工作效率低于编译方式?编译程序与解释程序的差异n根本区别:是否生成目标代码!功能功能工作结果工作结果实现技术上实现技术上解释解释程序程序源程序的一个执执行行系统源程序的执行结果执行结果执行中间代码编译编译程序程序源程序的一个转转换换系统源程序的目标代码目标代码把中间代码转换成目标程序“编译+解释执行系统源程序源程序编译程序编译程序源
11、程序的中间形式输出数据输出数据解释程序解释程序输入数据输入数据例如例如Java语言语言.java java源程序文件.class 二进制字节码文件Java虚拟机(JVM)本地计算机系统编译编译程序在计算机系统中的位置n编译程序是一种软件,是系统软件。通常认为系统软件是居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。翻译程序所处的层次翻译程序所处的层次高级语言语言处理程序操作系统汇编语言计算机硬件C编译程序C语言Basic解释程序Basic语言Fortran编译程序Fortran语言.几个概念几个概念n宿主机:运行编译程序的计算机n目标机:运行编译程序所产生的目标代码的计算
12、机n穿插编译程序:一个编译程序产生不同于其宿主机的机器代码n可变目标编译程序:不需要重写编译程序中与机器无关的局部就能改变目标机对编译程序的一些说明对编译程序的一些说明n编译程序实质上是一个翻译程序,要注意等价变换n本课程的任务就是讲解在这个转换过程中所涉及到的一些理论和方法,最后,使用这些理论和方法,自己编写一个小的编译器n转换是一个总体的功能,要抓住总体构造,逐层细分,写编译器时要表达软件工程中软件设计的原那么,自顶向下,逐层分解。n编译器要完成的转换任务相当复杂,实现编译器时必须分步骤分阶段实现。分阶段实现的好处是能够简化程序的设计,当然也可以不分阶段实现。编译原理是讨论编译程序设计的根
13、本理论、根本概念、根本方法 什么是编译原理什么是编译原理1/30/202334编译器和集成开发环境n编译器:即编译程序,把高级语言经分析翻译为低级语言。编译器:即编译程序,把高级语言经分析翻译为低级语言。n集成开发环境:简称集成开发环境:简称IDEIntegrated Develop Environment,是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。器、调试器和图形用户界面工具。n背景:早期程序设计的各个阶段都要用不同的软件来进展处理背景:早期程序设计的各个阶段都要用不同的软件来进展处理,如
14、如先用字处理软件编辑源程序,再用编译程序进展编译,然后用链接先用字处理软件编辑源程序,再用编译程序进展编译,然后用链接程序进展函数、模块连接程序进展函数、模块连接,开发者必须在几种软件间来回切换操作。开发者必须在几种软件间来回切换操作。n人们习惯上经常把人们习惯上经常把IDE称为编译器。称为编译器。编译原理引论35常见语言及其IDE语言IDECTC2.0C+C+Builder,VC+6.0,TC3.0C#VS.NETPascalTurbo PascalOOPascalDelphiVBVB6.0 (解释器)JavaEclipse,JBuilder1.2 编译的过程编译的过程n1.编译程序的工作过
15、程编译程序的工作过程n编译过程本身是一种语言的翻译过程,类似于外文的翻译。n将英文句子“I wish you success I wish you success 翻译成中文。n两阶段完成翻译 分析:分析:分析单词:I,wish,you,success 分析语法:主语,谓语,宾语,宾补 分析语义:我希望你成功 综合:综合:综合英语的意思、上下文环境和汉语的表达习惯,完成翻译:祝你成功n翻译外文资料:n1、能识别出句子中的一个单词;n2、分析句子的语法构造;n3、根据句子的含义进展初步翻译;n4、对译文进展修饰;n5、写出最后的译文。翻译外文资料与编译源程序进展类比翻译外文翻译外文编译程序编译程
16、序分析分析识别单词识别单词分析句子分析句子根据语义进行根据语义进行初步翻译初步翻译词法分析词法分析语法分析语法分析语义分析、生成中间代码语义分析、生成中间代码综合综合修辞加工修辞加工写出译文写出译文代码优化代码优化目标代码生成目标代码生成将编译过程划分为将编译过程划分为5个根本阶段个根本阶段词法分析词法分析语法分析语法分析语义分析及中间代码生成语义分析及中间代码生成代码优化代码优化目标代码生成目标代码生成n从概念上来讲,一个编译程序的整个工作过程是划分成阶段进展的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进展的操作在逻辑上是严密连接在一起的。n事实上,某些阶段可能组合在一起
17、,这些阶段间的源程序的中间表示形式就没必要构造出来了。1.2 编译的过程编译的过程n1.编译程序的工作过程编译程序的工作过程(1)(1)词法分析词法分析词法分析阶段是编译过程的第一个阶段。词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的个字符地读入源程序,对构成源程序的字符流进展扫描和分解,根据语言的词字符流进展扫描和分解,根据语言的词法规那么识别出一个个具有独立意义的法规那么识别出一个个具有独立意义的最小语法单位,即单词。最小语法单位,即单词。n根据词法规那么分析和识别单词。根据词法规那么分析和识别单词
18、。n把需要存放的单词放到符号表中,如变量名,把需要存放的单词放到符号表中,如变量名,标号,常量等。标号,常量等。n工作依据工作依据:源语言的构词规那么源语言的构词规那么(即词法即词法),也称,也称为模式为模式(pattern)。n标识符的模式是:以字母开头的字母数字序列。标识符的模式是:以字母开头的字母数字序列。n例:例:sum=(10+20)*(num+square);结果结果q(标识符,标识符,sum)q(赋值号,赋值号,=)q(左括号,左括号,()q(整常数,整常数,10)q(加号,加号,+)q(整常数,整常数,20)q(右括号,右括号,)q(乘号,乘号,*)q(左括号,左括号,()q(
19、标识符,标识符,num)q(加号,加号,+)q(标识符,标识符,square)q(右括号,右括号,)q(分号,分号,;)n词法分析的功能如下:n识别出源程序中意义独立的最小词法单位单词。n删除无用的空格、回车和其他与输入介质有关的符号n删除程序员为了提高程序可读性所加的注释n如果发现错误那么报告出错n(2)(2)语法分析语法分析n根据语法规那么即语言的文法,分析根据语法规那么即语言的文法,分析并识别出各种语法成分如表达式、语句、并识别出各种语法成分如表达式、语句、函数等,并进展语法正确性检查。函数等,并进展语法正确性检查。n通常将语法分析的结果表示为语法树。通常将语法分析的结果表示为语法树。s
20、um=(10+20)*(num+square);n语法分析的功能是进展层次分析,把源程序的单词序列组成语法短语(表示成语法树)。依据的是语法规那么。C语言的赋值语句的规那么为:nn单词序列sum=(10+20)*(num+square);之所以能表示成上图的语法树,依据的是赋值语句和表达式的语法规那么。:=“=:=“+|“*:=“(“)|n(3)语义分析及中间代码生成n语义分析阶段的任务是审查源程序有无语义错误。n工作依据:源语言的语义规那么n一个重要任务:类型检查n根据规那么检查每个运算符及其运算对象是否符合要求;n数组的下标是否合法;n过程调用时,形参与实参个数、类型是否匹配等n(3)语义
21、分析及中间代码生成n源程序中有些语法成分,按照语法规那么去判断,它是正确的,但它不符合语义规那么。比方使用了没有声明的变量;或者给一个过程名赋值;或者调用函数时参数类型不适宜或者参加运算的两个变量类型不匹配等等。n比方下边的程序片段:int arr2,c;c=arr1*10;n其中的赋值语句是符合语法规那么的,但是因为没有声明变量arr1,而存在语义错。n中间代码生成中间代码生成(可选可选n所谓所谓“中间代码是一种构造简单、中间代码是一种构造简单、含义明确的记号系统,这种记号系统含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的可以设计为多种多样的形式,重要的设计原那么为两点:一
22、是容易生成;设计原那么为两点:一是容易生成;二是容易将它翻译成目标代码。二是容易将它翻译成目标代码。n中间代码的形式:中间代码的形式:n四元式、三元式、逆波兰表示四元式、三元式、逆波兰表示n中间代码中间代码(intermediate Code)n例例:sum=(10+20)*(num+square);n(4)中间代码优化(可选n代码优化阶段的任务是对前阶段产生的中间代码进展变换或进展改造,目的是使生成的目标代码更为高效,即省时间和省空间。例:例:sum=(10+20)*(num+square)得到的四元式得到的四元式nT1=10+20nT2=num+squarenT3=T1*T2nsum=T3
展开阅读全文