《编译原理课件第02章》由会员分享,可在线阅读,更多相关《编译原理课件第02章(73页珍藏版)》请在金锄头文库上搜索。
1、国防科技大学计算机系602教研室,第二章 高级语言及其语法描述,常用的高级语言 FORTRAN 数值计算 COBOL 事务处理 PASCAL 结构程序设计 ADA 大型程序、嵌入式实时系统 PROLOG 逻辑程序设计 ALGOL 算法语言 C/C+ 系统程序设计 Java Internet程序设计,国防科技大学计算机系602教研室,与机器语言或汇编语言比较,高级语言的优点: 较接近于数学语言和工程语言,比较直观、自然和易于理解; 便于验证其正确性,易于改错; 编写效率高; 易于移植.,国防科技大学计算机系602教研室,2.1 程序语言的定义,程序语言由两方面定义: 语法 语义 语用,国防科技大
2、学计算机系602教研室,一. 语法,程序本质上是一定字符集上的字符串。 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序。,国防科技大学计算机系602教研室,语 法,词法规则:单词符号的形成规则。 单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基本字、算符、界符等。 描述工具:有限自动机 语法规则:语法单位的形成规则。 语法单位通常包括:表达式、语句、分程序、过程、函数、程序等; 描述工具:上下文无关文法,国防科技大学计算机系602教研室,Ei EE+E EE*E E(E) 语法规则和词法规则定义了程序的的形式结构。定义语法单位的意义属于语义问题。
3、,国防科技大学计算机系602教研室,二. 语义,语义:一组规则,用它可以定义一个程序的意义。 描述方法: 自然语言描述:隐藏错误、二义性和不完整性 形式描述: 操作语义(PL/1) 指称语义(ADA) 代数语义(PASCAL),国防科技大学计算机系602教研室,三程序语言的基本功能和层次结构,程序语言的基本功能:描述数据和对数据的运算。 所谓程序,本质上说是描述一定数据的处理过程。,国防科技大学计算机系602教研室,程序的层次结构,程序 | 子程序或分程序、过程、函数 | 语句 | 表达式 | 数据引用 算符 函数调用,国防科技大学计算机系602教研室,程序语言每个组成成分的逻辑和实现意义,抽
4、象的逻辑的意义 数学意义 计算机实现的意义 具体实现,国防科技大学计算机系602教研室,2.2 高级语言的一般特性,高级语言的分类 强制式语言(Imperative Languge)也称过程式语言:命令驱动,面向语句 FORTRAN、C、Pascal,Ada 应用式语言(Applicative Language):注重程序所表示的功能,而不是一个语句接一个语句地执行 LISP、ML,国防科技大学计算机系602教研室,2.2 高级语言的一般特性,2.2.1 高级语言的分类 基于规则的语言(Rule-based Language):检查一定的条件,当它满足值,则执行适当的动作 Prolog 面向对
5、象语言(Object-Oriented Language):封装性、继承性和多态性 Smalltalk,C+,Java,国防科技大学计算机系602教研室,2.2 高级语言的一般特性,2.2.2 程序结构 FORTRAN 一个程序由一个主程序段和若干辅程序段组成。 辅程序段可以是子程序、函数段或数据块。 每个程序段有一系列的说明语句和执行语句组成。各段可以独立编译。 模块结构,没有嵌套和递归 各程序段中的名字相互独立,同一个标识符在不同的程序段中代表不同的名字。,国防科技大学计算机系602教研室,主程序 PROGRAM end 辅程序1 SUBROUTINE end 辅程序2 FUNCTION
6、end,国防科技大学计算机系602教研室,PASCAL PASCAL程序本身可以看成是一个操作系统所调用的过程,过程可以嵌套和递归。 一个PASCAL过程: 过程头; 说明段(由一系列的说明语句组成); begin 执行体(由一系列的执行语句组成); end,国防科技大学计算机系602教研室,作用域:一个名字能被使用的区域范围称作这个名字的作用域。 允许同一个标识符在不同的过程中代表不同的名字。 名字作用域规则-“最近嵌套原则“ 一个在子程序B1中说明的名字X只在B1中有效(局部于B1); 如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效。如果B2对
7、X重新作了说明,那么,B2对X的任何引用都是指重新说明过的这个X。,国防科技大学计算机系602教研室,program main var A, B : real; procedure P1 var B:boolean; begin end procedure P2 var A:integer; begin end begin end,A(real),B(real),B(bool),A(integer),国防科技大学计算机系602教研室,PASCAL提供了丰富的数据类型和运算方式,它允许用户动态地申请和退还存贮空间。,国防科技大学计算机系602教研室,ADA 程序包(package):把数据和操作
8、代码封装在一起,支持数据抽象。 一个程序包分为两部分: 可见的规范说明部分,它定义了程序包外面可以访问的对象。 程序包体,它实际定义程序包的实现细节。,国防科技大学计算机系602教研室,package STACKS is type ELEM is private; type STACK is limited private; procedure push (S: in out STACK; E: in ELEM); procedure pop (S: in out STACK; E: out ELEM); end STACK; package body STACKS is procedure
9、push(S: in out STACK; E: in ELEM); begin 实现细节 end push; procedure pop (S: in out STACK; E: out ELEM); begin 实现细节 end pop; end;,国防科技大学计算机系602教研室,JAVA Java是一种面向对象的高级语言 类(Class) 继承(Inheritance) 多态性(Polymorphism)和动态绑定(Dynamic binding),国防科技大学计算机系602教研室,class Car int color_number; int door_number; int spe
10、ed; push_break ( ) add_oil ( ) class Trash_Car extends car double amount; fill_trash ( ) ,国防科技大学计算机系602教研室,2.2.3 数据类型与操作,一个数据类型通常包括以下三种要素: 用于区别这种类型数据对象的属性 这种类型的数据对象可以具有的值 可以作用于这种类型的数据对象的操作,国防科技大学计算机系602教研室,2.2.3 数据类型与操作,一初等数据类型 数值类型:整型、实型、复数、双精度, 运算:+,-,*,/等 逻辑类型:布尔运算:, 字符类型:符号处理 指针类型,国防科技大学计算机系602教
11、研室,标识符与名字,标识符:以字母开头的,由字母数字组成的字符串。 标识符与名字两者有本质区别: 标识符是语法概念 名字有确切的意义和属性,国防科技大学计算机系602教研室,Jordan ?,标识符!,?,?,国防科技大学计算机系602教研室,标识符与名字,名字: 值:单元中的内容 属性:类型和作用域 名字的性质的说明方式: 由说明语句来明确规定的 隐含说明:FORTRAN 以I,J,K,N为首的名字代表整型,否则为实型。 动态确定:走到哪里,是什么,算什么,国防科技大学计算机系602教研室,二 数据结构,1 数组 逻辑上,数组是由同一类型数据所组成的某种n维矩形结构,沿着每一维的距离,称为下
12、标。 数组可变与不可变:编译时能否确定其存贮空间的大小。 访问:给出数组名和下标值 存放方式: 按行存放,按列存放,国防科技大学计算机系602教研室,数组元素地址计算,数组A10,20的A1,1为a,各维下标为1,按行存放,那么Ai,j地址为: a+(i-1)*20+(j-1) 数组元素地址计算公式,国防科技大学计算机系602教研室,国防科技大学计算机系602教研室,内情向量,把数组的有关信息记录在一个“内情向量”中,每个数组的内情向量必须包括:维数,各维的上、下限,首地址,以及数组(元素)的类型。,国防科技大学计算机系602教研室,2 记录,逻辑上说,记录结构由已知类型的数据组合在一起的一种
13、结构。 record char NAME20; integer AGE; bool MARRIED; CARD1000 访问:复合名 CARDk.NAME 存储:连续存放 域的地址计算:相对于记录结构起点的相对数OFFSET。,国防科技大学计算机系602教研室,3 字符串、表格、栈,字符串:符号处理、公式处理 表格:本质上是一种记录结构 线性表:一组顺序化的记录结构 栈:一种线性表,后进先出,POP, PUSH,国防科技大学计算机系602教研室,三 抽象数据类型,一个抽象数据类型包括: 数据对象的一个集合; 作用于这些数据对象的抽象运算的集合; 这种类型对象的封装,即,除了使用类型中所定义的运
14、算外,用户不能对这些对象进行操作。 程序设计语言对抽象数据类型的支持 Ada语言通过程序包(package)提供了数据封装的支持 Smalltalk、C+和Java语言则通过类(Class)对抽象数据类型提供支持。,国防科技大学计算机系602教研室,2.2.4 语句与控制结构,一表达式 表达式由运算量(也称操作数,即数据引用或函数调用)和算符(操作符)组成。 形式:中缀、前缀、后缀 X*Y -A P 表达式形成规则,国防科技大学计算机系602教研室,算符的优先次序,一般的规定 PASCAL:左结合A+B+C=(A+B)+C FORTRAN:对于满足左、右结合的算符可任取一种,如A+B+C就可以
15、处理成(A+B)+C,也可以处理成A+(B+C)。 注意两点: 代数性质能引用到什么程度视具体的语言不同而不同; 在数学上成立的代数性质在计算机上未必完全成立。,国防科技大学计算机系602教研室,二语句,赋值语句: A := B 名字左值:该名字代表的那个单元(地址)称为该名字的左值。(所代表的存贮单元的地址) 右值:一个名字的值称为该名字的右值。(所代表的存贮单元的内容),国防科技大学计算机系602教研室,控制语句:,无条件转移语句 goto L,条件语句 if B then S if B then S1 else S2,循环语句 while B do S repeat S until B
16、for i:=E1 step E2 until E3 do S,过程调用语句 call P(X1, X2, . ,Xn),返回语句 return (E),国防科技大学计算机系602教研室,说明语句:定义各种不同数据类型的变量或运算,定义名字的性质。,国防科技大学计算机系602教研室,简单句和复合句,简单句:不包含其他语句成分的基本句 复合句:句中有句的语句,国防科技大学计算机系602教研室,复习:程序语言的定义,程序语言由两方面定义: 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序 词法规则:单词符号的形成规则。 常数、标识符、基本字、算符、界符等。 有限自动机 语法规则:语法单位的形成规则。 表达式、语句、分程序、过程、函数、程序等; 上下文无关文法 语义:一组规则,用它可以定义一个程序的意义,国防科技大学计算机系602教研室,复习:程序语言的基本功能