第二章高级程序设计语言.ppt
《第二章高级程序设计语言.ppt》由会员分享,可在线阅读,更多相关《第二章高级程序设计语言.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章第一章 引论引论n主要内容:主要内容:介绍编译程序的概念,编译过程概述,编译程序的结构,介绍编译程序的概念,编译过程概述,编译程序的结构,编译程序与程序设计环境,编译程序的生成等内容编译程序与程序设计环境,编译程序的生成等内容n基本要求:基本要求:理解编译程序的作用,从宏观上理解组成、功能划分及开理解编译程序的作用,从宏观上理解组成、功能划分及开发步骤。发步骤。n重点与难点:重点与难点:编译程序的组成、功能划分。编译程序的组成、功能划分。1.1 1.1 什么叫编译程序什么叫编译程序回顾:程序设计语言及程序设计语言的处理方式(编译和解释)回顾:程序设计语言及程序设计语言的处理方式(编译和解
2、释)翻译程序:翻译程序:编译程序编译程序:是指这样的程序,它能够把某种是指这样的程序,它能够把某种“高级语言高级语言”的程序转换成另的程序转换成另一种一种“低级语言低级语言”的程序,而后者与前者在逻辑上是的程序,而后者与前者在逻辑上是等价等价的。的。如果源语言是诸如如果源语言是诸如FORTRANFORTRAN、PascalPascal、C C、SmalltalkSmalltalk或或JavaJava这样的这样的“高级高级语言语言”,而目标语言如汇编语言之类的,而目标语言如汇编语言之类的“低级语言低级语言”这样的翻译程序则称这样的翻译程序则称之为之为编译程序编译程序。第一章 引 论编译程序的分类
3、编译程序的分类n根据不同的用途和侧重点:根据不同的用途和侧重点:n诊断编译器:用于程序的开发和调试诊断编译器:用于程序的开发和调试n优化编译器:具有优化能力,提高目标代码的效率优化编译器:具有优化能力,提高目标代码的效率n交叉编译器:该编译器产生不同于其交叉编译器:该编译器产生不同于其宿主机宿主机的机器代码的机器代码n宿主机:运行编译程序的计算机宿主机:运行编译程序的计算机n目标机:运行目标代码的计算机目标机:运行目标代码的计算机编译与解释编译与解释解释程序解释程序:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源:它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边
4、执行源程序本身。程序本身。编译与解释的区别编译与解释的区别:是否产生目标程序:是否产生目标程序 解释程序的特点解释程序的特点:结构简单,占用内存少,规模较小的语言采用,如:结构简单,占用内存少,规模较小的语言采用,如BASICBASIC;但效率;但效率低低第一章 引 论英译与编译的比较英译与编译的比较 英译英译1.1.识别出句子中的一个个单词识别出句子中的一个个单词2.2.分析句子的语法结构分析句子的语法结构3.3.初步翻译句子的含意初步翻译句子的含意4.4.译文修饰译文修饰5.5.写出最后译文写出最后译文 编译编译1.1.词法分析词法分析2.2.语法分析语法分析3.3.语义分析中间代码生成语
5、义分析中间代码生成4.4.优化优化5.5.目标代码生成目标代码生成第一章 引 论分分 析析 过过 程程综综 合合 过过 程程汇编程序汇编程序:是指这样的程序,它能够把汇编语言的源程序转换成机器语言的目标程序。源程序:用汇编语言编写的程序 目标程序:用机器语言编写的程序 1.2 编译过程概述 主要工作:把高级语言写的程序翻译成等价的目标程序。第一章 引 论1.2.1 1.2.1 词法分析词法分析主要工作:主要工作:n读入源程序,对构成源程序的字符串进行扫描和分解,读入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词识别出一个个单词(也称单词符号,或简称符号)(也称单词符号,或简称符号
6、)n源程序的格式化处理:删除无用的符号(空格、回车符等),删除注释语句源程序的格式化处理:删除无用的符号(空格、回车符等),删除注释语句n进行词法检查,报告发现的词法错误(拼写错误)进行词法检查,报告发现的词法错误(拼写错误)在词法分析阶段工作所依循的是语言的在词法分析阶段工作所依循的是语言的词法规则词法规则。描述词法规则的有效工具是正。描述词法规则的有效工具是正规式和有限自动机。规式和有限自动机。例:例:for i:=1 to 30 do /*for i:=1 to 30 do /*循环语句循环语句*/1.2.2 1.2.2 语法分析语法分析语法:语法:定义了语言各语法成分的形式或结构定义了
7、语言各语法成分的形式或结构 语法分析的任务:语法分析的任务:在词法分析的基础上,根据语言的语法规则,在词法分析的基础上,根据语言的语法规则,把单词符号划分把单词符号划分成各类语法单位成各类语法单位(语法范畴),如(语法范畴),如“短语短语”、“句子句子”、“子句子句”、“程序段程序段”等,确定整个输入串是否构成语法上正确的程序。等,确定整个输入串是否构成语法上正确的程序。语法规则通常用语法规则通常用上下文无关文法上下文无关文法描述。描述。1.2.3 1.2.3 语义分析与中间代码的产生语义分析与中间代码的产生语义:语义:定义了各语法成分的功能和含义,即规定了他们的属性或在执行时应进行的运定义了
8、各语法成分的功能和含义,即规定了他们的属性或在执行时应进行的运算。算。这一阶段通常包括两方面的工作这一阶段通常包括两方面的工作:首先对各种语法范畴进行静态语义检查,如果正确则首先对各种语法范畴进行静态语义检查,如果正确则进行另一方面的工作,即进行中间代码的翻译。进行另一方面的工作,即进行中间代码的翻译。通常使用通常使用属性文法属性文法描述语义规则描述语义规则 所谓所谓“中间代码中间代码”是一种含义明确,便于处理的记号系统。是一种含义明确,便于处理的记号系统。中间代码除四元式外,还有三元式、间接三元式、逆波兰记号、树形表示等。中间代码除四元式外,还有三元式、间接三元式、逆波兰记号、树形表示等。1
9、.2.4 1.2.4 优化优化优化的目的:优化的目的:生成高质量的代码生成高质量的代码优化的任务:优化的任务:在于对前段产生的中间代码进行加工,以期在最后阶段产生更为高效在于对前段产生的中间代码进行加工,以期在最后阶段产生更为高效(省时间和空间)的目标代码(省时间和空间)的目标代码优化所依循的原则:优化所依循的原则:是程序的等价变换规则是程序的等价变换规则其方法有:公共子表达式的提取、循环优化、删除无用代码等。其方法有:公共子表达式的提取、循环优化、删除无用代码等。第一章 引 论代码优化示例代码优化示例For k:=1 to 100 do beginm:=i+10*k;n:=j+10*k;en
10、d第一章 引 论M=i;n=j;k=1For k:=1 to 100 do beginm:=m+10;n:=n+10;endFor k:=1 to 100 do beginm:=i+10*k;n:=j+10*k;endFor k:=1 to 100 do begint=10*k;m:=m+t;n:=n+t;end1.2.5 1.2.5 目标代码生成目标代码生成 这一阶段的任务这一阶段的任务:把中间代码(或经优化处理后)变换成特定机器上的低级语言:把中间代码(或经优化处理后)变换成特定机器上的低级语言代码。生成的目标代码的形式依赖于硬件系统结构和机器指令含义。代码。生成的目标代码的形式依赖于硬件
11、系统结构和机器指令含义。主要工作主要工作:存储空间的分配,寄存器的调度,机器指令的选择等等:存储空间的分配,寄存器的调度,机器指令的选择等等目标代码的形式目标代码的形式:绝对指令代码;可重定位的指令代码;汇编指令代码:绝对指令代码;可重定位的指令代码;汇编指令代码第一章 引 论词法分析词法分析语法分析语法分析语义分析与中间代码产生语义分析与中间代码产生优化优化目标代码生成目标代码生成编译过程总结1.3 1.3 编译程序的结构编译程序的结构第一章 引 论表格管理词法分析器语法分析器语义分析与中间代码产生优化器目标代码生成器源程序单词符号语法单位中间代码中间代码目标代码出错处理1.3.2 1.3.
12、2 表格与表格管理表格与表格管理 在编译程序使用的表格中最重要的是在编译程序使用的表格中最重要的是符号表符号表它用来登记源程序中出现它用来登记源程序中出现的每一个名字以及名字的各种属性。如一个名字是常量名、变量名,还是的每一个名字以及名字的各种属性。如一个名字是常量名、变量名,还是过程名等;如果是变量名它的类型又是什么、所占内存是多大、地址是什过程名等;如果是变量名它的类型又是什么、所占内存是多大、地址是什么等。么等。1.3.3 1.3.3 出错处理出错处理 一个编译程序不仅能对书写正确的程序进行编译,而且应能对处现在一个编译程序不仅能对书写正确的程序进行编译,而且应能对处现在源程序中的错误进
13、行处理。如果源程序有错,编译程序应设法发现错误,源程序中的错误进行处理。如果源程序有错,编译程序应设法发现错误,把有关错误报告给用户。这部分的工作是由专门的一组程序(叫做把有关错误报告给用户。这部分的工作是由专门的一组程序(叫做出错处出错处理程序理程序)完程的。)完程的。1.3.4 1.3.4 遍遍n遍遍n:对源程序或源程序的中间结果从头到尾的一次扫描,并作有关的加工和对源程序或源程序的中间结果从头到尾的一次扫描,并作有关的加工和处理,生成新的中间结果或目标程序。处理,生成新的中间结果或目标程序。n遍与各编译过程之间的关系:一遍可以包含几个阶段;一个阶段的工作也遍与各编译过程之间的关系:一遍可
14、以包含几个阶段;一个阶段的工作也可以分为若干遍,比如优化可以在多遍扫描中完成。可以分为若干遍,比如优化可以在多遍扫描中完成。n编译程序的组织:依赖于源程序,计算机的硬件,以及设计要求等编译程序的组织:依赖于源程序,计算机的硬件,以及设计要求等第一章 引 论1.3.5 1.3.5 编译前端与后端编译前端与后端 前端前端主要由与源语言有关但与目标机主要由与源语言有关但与目标机无关的那些部分组成。无关的那些部分组成。后端后端包括编译程序中与目标代码有关包括编译程序中与目标代码有关的部分。的部分。第一章 引 论词法分析器词法分析器语法分析器语法分析器语义分析与中间代码产生语义分析与中间代码产生优化器优
15、化器目标代码生成器目标代码生成器编编译译前前端端编编译译后后端端 1.4 1.4 编译程序与程序设计环境编译程序与程序设计环境编译程序无疑是实现高级语言的一个最重要的工具。但支持程序设计人员进行程序设计开发通常还需要其它一些工具:如编辑程序、连接程序、调试程序等。编译程序与这些程序设计工具一起构成所谓的程序设计环境。在一个程序设计环境中,编译程序起着中心的作用。连接程序、调试程序、程序分析等工具直接依赖于编译程序所产生的结果,而其它工具的构造也常常要用到编译的原理、方法和技术。1.5 1.5 编译程序的生成编译程序的生成 以前构造编译程序大多是用机器语言或汇编语言作工具的。以前构造编译程序大多
16、是用机器语言或汇编语言作工具的。但是越来越多的人已经使用高级语言作工具来写编译程序。但是越来越多的人已经使用高级语言作工具来写编译程序。用用L1L1语言编写语言编写L2L2的编译程序的编译程序前提:前提:如果如果A A机器上已有一个用机器上已有一个用A A机器码实现的某高级语言机器码实现的某高级语言L1L1的编译程序的编译程序我们可以用我们可以用L1L1语言编写另一种高级语言语言编写另一种高级语言L2L2的编译程序,把写好的的编译程序,把写好的L2L2编译编译程序经过程序经过L1L1编译程序编译后就可得到编译程序编译后就可得到A A机器代码实现的机器代码实现的L2L2编译程序。编译程序。采用采
17、用移植移植的方法进行编译程序的开发的方法进行编译程序的开发n本质:本质:将语言将语言L L的编译器从的编译器从A A机器上移植到机器上移植到B B机器机器n前提:前提:A A机器上有机器上有L L语言的编译器语言的编译器n步骤:步骤:n在在A A机器上用机器上用L L语言写一个能将语言写一个能将L L语言翻译成语言翻译成B B语言的编译器语言的编译器C1C1n在在A A机器上对机器上对C1C1进行编译,得到用进行编译,得到用A A代码写的代码写的B B编译器编译器C2C2,该编译器能,该编译器能将将L L语言翻译成语言翻译成B B语言语言n用用C2C2编译器对编译器对C1C1重新进行编译,得到
18、一个重新进行编译,得到一个B B语言表示的语言表示的B B机器上的编译机器上的编译器器第一章 引 论自编译方式自编译方式 我们还可以采用我们还可以采用“自编译方式自编译方式”产生编译程序。方法是,先对语言的产生编译程序。方法是,先对语言的核心部分构造一个小小的编译程序(可用低级语言实现),再以他为工具核心部分构造一个小小的编译程序(可用低级语言实现),再以他为工具构造一个能够编译更多语言成分的较大编译程序。如此扩展下去,就像滚构造一个能够编译更多语言成分的较大编译程序。如此扩展下去,就像滚雪球一样,越滚越大,最后形成人们所期望的整个编译程序。雪球一样,越滚越大,最后形成人们所期望的整个编译程序
19、。n本章小结本章小结n什么是编译器什么是编译器n编译器的基本结构及基本功能编译器的基本结构及基本功能n编译程序的结构编译程序的结构n编译程序与程序运行环境编译程序与程序运行环境n编译程序的开发编译程序的开发第一章 引 论自测练习题自测练习题1.1.选择题选择题(从下列各题从下列各题4 4个备选答案中选出一个或多个正确答案写在题干的横线上个备选答案中选出一个或多个正确答案写在题干的横线上)(1)(1)若源程序是高级语言编写的程序,目标程序若源程序是高级语言编写的程序,目标程序 是是 ,则称它为编译程序。,则称它为编译程序。A A汇编语言程序或高级语言程序汇编语言程序或高级语言程序 B B高级语言
20、程序或机器语言程序高级语言程序或机器语言程序 C C汇编语言程序或机器语言程序汇编语言程序或机器语言程序 D D连接程序或运行程序连接程序或运行程序(2)(2)编译程序是对编译程序是对 程序进行翻译。程序进行翻译。A A高级语言高级语言 B B机器语言机器语言 C.C.自然语言自然语言 D.D.汇编语言汇编语言(3)(3)如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:.A A编译阶段编译阶段 B.B.汇编阶段汇编阶段 C.C.运行阶段运行阶段 D D置初值阶段置初值阶段(4)(4)编译程序的工作过程一
21、般可划分为下列编译程序的工作过程一般可划分为下列5 5个基本阶段:个基本阶段:词法分析、词法分析、代码优化和目标代码生成。、代码优化和目标代码生成。A A出错处理出错处理 B B语义分析和中间代码生成语义分析和中间代码生成 C C语法分析语法分析 D D表格管理表格管理 (5)(5)编译过程中,词法分析阶段的任务是编译过程中,词法分析阶段的任务是 。A A识别表达式识别表达式 B.B.识别语言单词识别语言单词 C C识别语句识别语句 D D识别程序识别程序.第一章 引 论2.2.判断题判断题(1)(1)编译程序是种常用的应用软件。编译程序是种常用的应用软件。()()(2)C(2)C语言的编译程
22、序可以用语言的编译程序可以用C C语言来编写。语言来编写。()()(3)(3)编译方式与解释方式的根本区别在于是否生成目标代码编译方式与解释方式的根本区别在于是否生成目标代码.().()(4)(4)编译程序与具体的语言无关。编译程序与具体的语言无关。()()(5)(5)编译程序与具体的机器有关。编译程序与具体的机器有关。()()(6)(6)对编译程序而言,代码优化是不可缺少的部分。对编译程序而言,代码优化是不可缺少的部分。()()(7)(7)对编译程序而言,中间代码生成是不可缺少的一部分。对编译程序而言,中间代码生成是不可缺少的一部分。()()(8)(8)编译程序生成的目标程序一定是可执行的程
23、序。编译程序生成的目标程序一定是可执行的程序。()()(9)(9)含有优化部分的编译程序的执行效率高。含有优化部分的编译程序的执行效率高。()()作业作业1.什么叫编译程序?编译程序和解释程序的区别是什么?什么叫编译程序?编译程序和解释程序的区别是什么?2.描述一下编译程序的结构和各组成部分的功能,并画出编译程序的结构框图。描述一下编译程序的结构和各组成部分的功能,并画出编译程序的结构框图。3.描述一下编译器生成的几种方法。描述一下编译器生成的几种方法。第一章 引 论第二章 高级语言及其语法描述第二章第二章 高级语言及其语法描述高级语言及其语法描述n程序设计语言的语法 程序设计语言的语义n程序
24、设计语言的特点 程序设计语言的语法描述2.1 程序语言的定义n任何语言实现的基础是语言的定义。n在定义方面,编译程序研制者与一般用户有所不同u用户关心语言如何使用u开发人员关心文法的定义。他们对哪些构造允许出现更感兴趣。即使一时不能看出某种构造的实际应用,或者判断实现该结构会导致严重的困难,但仍必须严格根据语言的定义实现它。n程序语言主要由语法和语义两方面定义。第二章 高级语言及其语法描述2.1.1 语法u所谓一个语言的语法是指这样的一组规则,用它可以形成和产生一个合适的程序。u这些规则一部分称为词法规则,另一部分能称为语法规则(或产生规则)。几个概念a.一个语言只是用一个有限字符集作为字母表
25、;b.词法规则是指单词符号的形成规则。单词符号一般包括:各类型的常数、标识符、基本字、算符和界符等。C.语言的语法规则规定了如何从单词符号形成更大的结构(即语法单位或语法范畴),换言之,语法规则是语法单位的形成规则。一般程序语言的语法单位有:表达式、语句、分程序、函数、过程和程序等。2.1.2 2.1.2 语义语义n对于一个语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法单位的意义。这就是语义问题。n语义是指这样的一组规则,使用它可以定义一个程序的意义。n我们采用的方法为:属性文法和基于属性文法的语法制导翻译方法。第二章 高级语言及其语法描述 n程序语言的基本功能是描述数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 高级程序设计语言 第二 高级 程序设计语言
限制150内