[工学]编译原理第1章

上传人:tia****nde 文档编号:70785590 上传时间:2019-01-18 格式:PPT 页数:62 大小:994.14KB
返回 下载 相关 举报
[工学]编译原理第1章_第1页
第1页 / 共62页
[工学]编译原理第1章_第2页
第2页 / 共62页
[工学]编译原理第1章_第3页
第3页 / 共62页
[工学]编译原理第1章_第4页
第4页 / 共62页
[工学]编译原理第1章_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《[工学]编译原理第1章》由会员分享,可在线阅读,更多相关《[工学]编译原理第1章(62页珍藏版)》请在金锄头文库上搜索。

1、编译原理 主讲教师:张小艳 Email: QQ:1161880978,2,一、本课程讨论的领域和希望达到的目的 1.1 领域 程序设计语言的应用程序设计(PLA) 程序设计语言的翻译编译器的构造(PLT) 程序设计语言的设计语法、语义(PLD),3,1.了解PL的基本要素、工作原理、语言翻译的基本方法; 2.用不同的PL进行程序设计,即自学计算机语言的能力; 3.具备语言翻译的基本技能。,1.2 目的,2.1 本课程的特点 理论与实践并重 理论学习要严谨、方法掌握要灵活 提高自学能力 2.2 理论与技术的关系 适应飞速变化的技术的根本是注重基础理论学习 理论的演变是缓慢的、理论基础是相通的 相

2、同的原理可以应用于不同的技术,二、学习方法,5,2.3 勤动手、多实践、提高学习能力,1.学到的知识是死的,总有过时的时候。只有通过学习知 识提高学习能力,才是立于不败之地的保证。 2.记笔记:好记性不如烂笔头,通过动手加深理解和记忆。 3.做作业、做上机题。,6,课前思考 什么是编译程序 编译过程和编译程序的结构 为什么要学习编译程序,学习目标 明确编译程序的功能及其在计算机系统中的作用。 了解源语言程序被编译为目标程序的整个过程,这个过程一般划分为哪些阶段。 知道编译技术可用于哪类软件的设计和开发。,第一章 绪论,难重点,本章主要对编译程序的功能和结构做一综述。 通过课程的学习应掌握各个成

3、分的功能和设计原则,以及在编译阶段的逻辑关系。理解他们怎样作为一个整体完成编译任务的。,学习指南,编译程序是现代计算机系统的基本组成部分之一。 编译程序一般由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、目标代码生成程序、代码优化程序、表格管理程序和出错处理程序等成分构成。 通过学习应掌握各个成分的功能和设计原则,以及在编译阶段的逻辑关系。理解他们怎样作为一个整体完成编译任务的。,程序设计语言分低级语言和高级语言两类 低级语言:机器语言、汇编语言等;其特点对计算机的依赖性强、直观性差、编写程序的工作量大,对程序设计人员要求较高。 高级语言:常用的有BASIC、FORTRAN、PA

4、SCAL、C、JAVA等。 但高级语言与机器之间有一“鸿沟”:机器不能理解高级语言! 方法:对程序进行翻译或进行解释。 翻译:在计算机中放置一能由计算机直接执行的翻译程序,它将某程序设计语言(源语言)所编写的程序(源程序)作为加工对象,将其翻译成为与之等价的另一种语言(目标语言)的程序(目标程序) 计算机执行某高级语言程序,需经两个阶段,即编译阶段和运行阶段。 在执行时,一般应有一些辅助子程序配合。如:数据格式转换子程序、标准函数、动态存储分配子程序等等,由它们构成的子程序库称为运行系统。 编译系统=编译程序+运行系统,10,1.1 从面向机器的语言到面向人类的语言 面向机器的语言:机器指令、

5、汇编语言 面向人类的语言:通用程序设计语言、非过程式语言,等等,计算机语言举例 例 通用程序设计语言与汇编语言(包括机器指令) Pascal语句:x := a+b; 汇编指令: 十六进制代码 汇编指令 A10002 MOV AX, A 8B1E0202 MOV BX, B 01D8 ADD AX, BX A30402 MOV X, AX,11,给出003号学生所选课程与成绩: Select 学号,姓名,课程名,成绩 from 学生,选课 where 学生.学号=“003” ;,例 SQL语言 学 生: 选 课:,12,CCC2002PL: 1过程式语言、面向对象语言:通用程序设计语言,包括FO

6、RTRAN、Pascal、C/C+、Ada83/Ada95、Java等; 2函数语言:面向特点领域的、递归特性,典型代表:Lisp; 3说明性、非算法式语言:浓厚的数学特征,典型代表:LEX/YACC、SQL; 4脚本式语言:仅是一种安排,没有复杂的逻辑关系,典型代表:shell语言。, 按范型划分的程序设计语言,13, 其他面向特定应用领域的语言,a互连网应用:HTML、XML b计算机辅助设计:MATLAB c集成电路设计:VHDL、Verilog d虚拟现实:VRML ,问题: 如何将形形色色的语言翻译成可以在计算机上运行的0、1串?,14,1.2 语言之间的翻译,高级,汇编,机器,L1

7、,L2,A1,A2,M1,M2,反汇编,从功能上看,一个编译程序就是一个语言翻译程序。它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。源语言通常是一个高级语言,目标语言通常是一个低级语言。,高级语言程序 (源程序),请注意:所谓的源和目标程序的等价是什麽含义-他们的功能一样。,编译程序,目标程序,如果从计算机系统的角度看,什么是编译程序呢?我们说编译程序是一种软件,是系统软件。通常认为系统软件是居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。系统软件和具体的应用领域无关,如编译系统和操作系统等。,编译程序也是一种语言处理系统,即把软件语言

8、书写的各种程序处理成可在计算机上执行的程序。,软件:计算机系统中的程序及其文档,系统软件:居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。他和具体的应用领域无关,如编译系统和操作系统等。,语言处理系统:把软件语言书写的各种程序处理成可在计算机上执行的程序。,软件语言:用于书写软件的语言。它主要包括需求定义语言,功能性语言,设计性语言,程序设计语言以及文档语言。,来自计算机百科全书的定义,18,语言翻译的两种基本形态 1.先翻译后执行 2. 边翻译边执行,例5 假设有源程序:read(x); write(“x=“, x);,1.3 编译器与解释器,19,特点: 1编译器:工

9、作效率高,即时间快、空间省;交互性与动态特性差、可移植性差。大多数PL采用此种方法翻译; 2解释器:工作效率低,即时间慢、空间费;交互性与动态特性好、可移植性好。早期的Basic和现在的Java等。 基本功能:二者相同; 所采用的技术:从翻译的角度来讲,两种方式所涉及的原理、方法、技术相似。,20,1从语言抽象的演变看: 过程抽象数据类型(ADT,程序包) 类 2共同特点:两大部分组成:声明操作完整定义 3以过程式语言为例:,声明性语句: 提供操作对象的性质,如数据类型、值、作用域等; 操作性语句:确定操作的计算次序,完成实际操作。 过程头过程体过程定义,1.4 编译器的工作原理与基本组成 1

10、.4.1 通用程序设计语言的主要成份,4编译器对两类语句的翻译: 声明:生成相应的环境,一般是配置存储空间。 操作:生成可执行的代码序列。,计算机执行高级语言程序的步骤,源程序P,目标程序P,运行结果S,编译程序,数据,运行程序,计算机A,计算机B,编译阶段,运行阶段,23,1自然语言的翻译过程: 识别单词 识别句子结构 理解意思 译成中文并修饰,2编译器的工作过程: 词法分析 语法分析 语义分析 目标代码生成 3编译器的阶段 (逻辑模块划分),4中间代码的重要作用 使编译程序在逻辑上更为简单清晰; 可进行优化,1.4.2 以阶段划分编译器,编译程序的逻辑结构,词法分析程序,语法分析程序,语义

11、分析程序,中间代码生成,代码优化程序,目标代码生成,信息表管理程序,错误检查和处理程序,源 程 序,目 标 代 码,词法分析 词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。,例如某源程序片断如下: begin var sum, first, count: real; sum:=first+count*10 end. 词法分析阶段将构成这段程序的字符组成了如下19个,单词序列: 1. 保留字begin 2. 保留字var 3. 标识符sum 4. 逗号, 5. 标识符fir

12、st 6. 逗号, 7. 标识符count 8. 冒号: 9. 保留字real 10. 分号;,11. 标识符sum 12. 赋值号= 13. 标识符first 14. 加号+ 15. 标识符count 16. 乘号* 17. 整数10 18. 保留字end 19. 界符,标识符用于表示变量名,可以很方便的使用id1,id2和id3分别表示sum,first和count三个标识符的内部形式,那么经过词法分析后上述程序片断中的赋值语句 sum=first+count*10 表示为: id1=id2+id3*10,词法分析阶段的任务是读字符流的源程序、从中识别并构成单词。,一个Pascal源程序片

13、断: position := initial + rate * 60; 词法分析后可能返回: 单词类型 单词值 标识符 position 算符(赋值) := 标识符 initial 算符(加) + 标识符 rate 算符(乘) * 整数 60 界符(分号) ;,一个C源程序片断: int a; a = a + 2; 词法分析后可能返回: 单词类型 单词值 保留字 int 标识符 a 界符 ; 标识符 a 算符(赋值) = 标识符 a 算符(加) + 整数 2 界符 ;,有关的英文 词法分析-lexical analysis 或者scanning 单词-token 保留字-resered wor

14、d 标识符-identifier(user-defined name),语法分析 语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等。一般这种语法短语,也称语法单位可表示成语法树,比如上述程序段中的单词序列: id1=id2+id3*10 经语法分析得知其是PASCAL语言的“赋值语句”,表示成如下页图所示的语法树,id1=id2+id3*10,id1=id2+id3*10,语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。程序的结构通常是由递归规则表

15、示的,例如,我们可以用下面的规则来定义表达式: (1) 任何标识符是表达式。 (2) 任何常数(整常数、实常数)是表达式。 (3) 若表达式1和表达式2都是表达式,那么:表达式1+表达式2以及表达式1 * 表达式2都是表达式。,类似地,语句也可以递归地定义,如 (1) 标识符=表达式是语句。 (2) while(表达式)do语句和 if(表达式 )then语句 else语句都是语句。,词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字串,这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字组合在一起而构成单词标识符。但这种线性扫描则不能用于识别递归定义的语法成分,比如就无法仅用线性扫描去匹配表达式中的括号。,语义分析 语义分析阶段的任务是审查源程序有无语义错误。源程序中有些语法成分,按照语法规则去判断,它是正确的,但它不符合语义规则。比如使用了没有声明的变量;或者给一个过程名赋值;或者调用函数时参数类型不合适或者参加

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号