第二章 高级语言及其语法描述 常用的高级语言 FORTRAN 数值计算 COBOL 事务处理 PASCAL 结构程序设计

Slides:



Advertisements
Similar presentations
第二章 文法和语言 2.1 文法的基本概念 符号和符号串 2.2 句型的分析 文法和语言的形式定义 推导与递归 文法的分类 语法树
Advertisements

编 译 原 理 指导教师:杨建国 二零一零年三月.
Tool Command Language --11级ACM班 金天行.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
§1 线性空间的定义与性质 ★线性空间的定义 ★线性空间的性质 ★线性空间的子空间 线性空间是线性代数的高等部分,是代数学
第二章 高级语言及其文法 School of Computer Science & Technology
Oracle数据库 Oracle 子程序.
“08高考化学学业水平(必修科目)测试的命题和教学对策研究”
§5.3 定积分的换元法 和分部积分法 一、 定积分的换元法 二、 定积分的分部积分法 三、 小结、作业.
第三节 格林公式及其应用(2) 一、曲线积分与路径无关的定义 二、曲线积分与路径无关的条件 三、二元函数的全微分的求积 四、小结.
2-7、函数的微分 教学要求 教学要点.
新世代計算機概論 第14章 程式語言.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
程序、模型与表达 前端工程师的程序设计思考.
程序的形式验证 - 简介 中国科学院软件研究所 张文辉 1.
编译原理与技术 --文法和分析 2018/9/17 《编译原理与技术》讲义.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
第八章 符号表 符号表的作用: 一致性检查和作用域分析; 辅助代码生成..
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
语法分析在编译程序中的逻辑位置 语 法 分 析 表 处 理 源 程 序 词 法 分 析 语 义 分 析 中 间 代 码 生 成 中 间 代
管理信息结构SMI.
走进编程 程序的顺序结构(二).
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
第二章 Java语言基础.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
编译原理 第四章 语法分析—自上而下分析 编译原理.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第一章 函数与极限.
第2章 高级语言及其语法描述 2.1 程序语言的定义 2.2 高级语言的一般特征 2.3 程序语言的语法描述.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
复习.
第四章 文法和语言 本章目的 为语言的语法描述寻求工具
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
第3 语言翻译问题 [学习目标]:学习和掌握语言的语法的基本概念和基本要素,理解翻译的步骤;学习和掌握BNF文法。
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
正切函数的图象和性质 周期函数定义: 一般地,对于函数 (x),如果存在一个非零常数T,使得当x取定义域内的每一个值时,都有
定理21.9(可满足性定理)设A是P(Y)的协调子集,则存在P(Y)的解释域U和项解释,使得赋值函数v(A){1}。
第九章 运行时存储空间组织 网上教学系统: : 编译原理
第九节 赋值运算符和赋值表达式.
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
1.2 子集、补集、全集习题课.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
复习:程序语言的语法描述 几个概念: 考虑一个有穷 字母表∑ 字符集 其中每一个元素称为一个字符
2.2矩阵的代数运算.
上杭二中 曾庆华 上杭二中 曾庆华 上杭二中 曾庆华.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
§4.5 最大公因式的矩阵求法( Ⅱ ).
编译原理实践 6.程序设计语言PL/0.
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

第二章 高级语言及其语法描述 常用的高级语言 FORTRAN 数值计算 COBOL 事务处理 PASCAL 结构程序设计 第二章 高级语言及其语法描述 常用的高级语言 FORTRAN 数值计算 COBOL 事务处理 PASCAL 结构程序设计 ADA 大型程序、嵌入式实时系统 PROLOG 逻辑程序设计 ALGOL 算法语言 C/C++ 系统程序设计 Java Internet程序设计 程序设计语言(10) Alan J. Perlis (1966) -- ALGOL Edsger Wybe Dijkstra (1972) -- ALGOL John W. Backus (1977) -- FORTRAN Kenneth Eugene Iverson (1979) -- APL程序语言 Niklaus Wirth (1984) -- PASCAL John Cocke (1987) -- RISC & 编译优化 Ole-Johan Dahl,Kristen Nygaard (2001) -- Simula语言和面向对象概念 Alan Kay(2003) -- SmallTalk语言和面向对象程序设计 Peter Naur(2005) -- ALGOL60以及编译设计 形式语言, 程序语言语义 (4) Robert W. Floyd (1978) -- 编程语言语义,自动程序验证 C. Antony R. Hoare (1980) -- Hoare Logic, CSP Robin Milner (1991) -- LCF,ML,CCS,PI-calculus Amir Pnueli (1996) -- 时序逻辑和系统验证 国防科技大学计算机系602教研室

与机器语言或汇编语言比较,高级语言的优点: 较接近于数学语言和工程语言,比较直观、自然和易于理解; 便于验证其正确性,易于改错; 编写效率高; 易于移植. 国防科技大学计算机系602教研室

2.1 程序语言的定义 程序语言由两方面定义: 语法 语义 语用 国防科技大学计算机系602教研室

一. 语法 程序本质上是一定字符集上的字符串。 语法:一组规则,用它可以形成和产生一 个合式(well-formed)的程序。 一. 语法 程序本质上是一定字符集上的字符串。 语法:一组规则,用它可以形成和产生一 个合式(well-formed)的程序。 国防科技大学计算机系602教研室

语 法 词法规则:单词符号的形成规则。 语法规则:语法单位的形成规则。 语 法 词法规则:单词符号的形成规则。 单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基本字、算符、界符等。 描述工具:有限自动机 语法规则:语法单位的形成规则。 语法单位通常包括:表达式、语句、分程序、过程、函数、程序等; 描述工具:上下文无关文法 国防科技大学计算机系602教研室

语法规则和词法规则定义了程序的的形 式结构。定义语法单位的意义属于语义 问题。 E→i E→E+E E→E*E E→(E) 语法规则和词法规则定义了程序的的形 式结构。定义语法单位的意义属于语义 问题。 国防科技大学计算机系602教研室

二. 语义 语义:一组规则,用它可以定义一个程序的意义。 描述方法: 自然语言描述:隐藏错误、二义性和不完整性 形式描述: 操作语义(PL/1) 指称语义(ADA) 代数语义(PASCAL) 国防科技大学计算机系602教研室

三.程序语言的基本功能和层次结构 程序语言的基本功能:描述数据和对数据的运算。 所谓程序,本质上说是描述一定数据的处理过程。 国防科技大学计算机系602教研室

程序的层次结构 程序 | 子程序或分程序、过程、函数 语句 表达式 数据引用 算符 函数调用 国防科技大学计算机系602教研室

程序语言每个组成成分的逻辑和实现意义 抽象的逻辑的意义 数学意义 计算机实现的意义 具体实现 国防科技大学计算机系602教研室

2.2 高级语言的一般特性 高级语言的分类 强制式语言(Imperative Languge)也称过程式语言:命令驱动,面向语句 FORTRAN、C、Pascal,Ada 应用式语言(Applicative Language):注重程序所表示的功能,而不是一个语句接一个语句地执行 LISP、ML 国防科技大学计算机系602教研室

2.2 高级语言的一般特性 2.2.1 高级语言的分类 基于规则的语言(Rule-based Language):检查一定的条件,当它满足值,则执行适当的动作 Prolog 面向对象语言(Object-Oriented Language):封装性、继承性和多态性 Smalltalk,C++,Java 国防科技大学计算机系602教研室

2.2 高级语言的一般特性 2.2.2 程序结构 FORTRAN 一个程序由一个主程序段和若干辅程序段组成。 辅程序段可以是子程序、函数段或数据块。 每个程序段有一系列的说明语句和执行语句组成。各段可以独立编译。 模块结构,没有嵌套和递归 各程序段中的名字相互独立,同一个标识符在不同的程序段中代表不同的名字。 国防科技大学计算机系602教研室

主程序 PROGRAM … … end 辅程序1 SUBROUTINE … 辅程序2 FUNCTION … 国防科技大学计算机系602教研室

PASCAL PASCAL程序本身可以看成是一个操作系统所调用的过程,过程可以嵌套和递归。 一个PASCAL过程: 过程头; 说明段(由一系列的说明语句组成); begin 执行体(由一系列的执行语句组成); end 国防科技大学计算机系602教研室

作用域:一个名字能被使用的区域范围称作这个名字的作用域。 允许同一个标识符在不同的过程中代表不同的名字。 名字作用域规则--"最近嵌套原则" 一个在子程序B1中说明的名字X只在B1中有效(局部于B1); 如果B2是B1的一个内层子程序且B2中对 标识符X没有新的说明,则原来的名字X在 B2中仍然有效。如果B2对X重新作了说明, 那么,B2对X的任何引用都是指重新说明 过的这个X。 国防科技大学计算机系602教研室

A(real) A(integer) B(real) B(bool) program main var A, B : real; … procedure P1 var B:boolean; begin end procedure P2 var A:integer; 国防科技大学计算机系602教研室

PASCAL提供了丰富的数据类型和运算方式,它允许用户动态地申请和退还存贮空间。 国防科技大学计算机系602教研室

ADA 程序包(package):把数据和操作代码封装在一起,支持数据抽象。 一个程序包分为两部分: 可见的规范说明部分,它定义了程序包外面可以访问的对象。 程序包体,它实际定义程序包的实现细节。 国防科技大学计算机系602教研室

type STACK is limited private; 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 push(S: in out STACK; E: in ELEM); begin ……实现细节 end push; end pop; end; 国防科技大学计算机系602教研室

JAVA Java是一种面向对象的高级语言 类(Class) 继承(Inheritance) 多态性(Polymorphism)和动态绑定(Dynamic binding) 国防科技大学计算机系602教研室

class Trash_Car extends car { double amount; fill_trash ( ) { class Car{ int color_number; int door_number; int speed; … push_break ( ) { } add_oil ( ) {   class Trash_Car extends car { double amount; fill_trash ( ) { 国防科技大学计算机系602教研室

2.2.3 数据类型与操作 一个数据类型通常包括以下三种要素: 用于区别这种类型数据对象的属性 这种类型的数据对象可以具有的值 2.2.3 数据类型与操作 一个数据类型通常包括以下三种要素: 用于区别这种类型数据对象的属性 这种类型的数据对象可以具有的值 可以作用于这种类型的数据对象的操作 国防科技大学计算机系602教研室

2.2.3 数据类型与操作 一.初等数据类型 数值类型:整型、实型、复数、双精度, 运算:+,-,*,/等 逻辑类型:布尔运算:∨,∧,┑ 2.2.3 数据类型与操作 一.初等数据类型 数值类型:整型、实型、复数、双精度, 运算:+,-,*,/等 逻辑类型:布尔运算:∨,∧,┑ 字符类型:符号处理 指针类型 国防科技大学计算机系602教研室

标识符与名字 标识符:以字母开头的,由字母数字组成的字符串。 标识符与名字两者有本质区别: 标识符是语法概念 名字有确切的意义和属性 国防科技大学计算机系602教研室

Jordan ? 标识符! ? ? 国防科技大学计算机系602教研室

标识符与名字 名字: 名字的性质的说明方式: 值:单元中的内容 属性:类型和作用域 由说明语句来明确规定的 隐含说明:FORTRAN 以I,J,K,…N为首的名字代表整型,否则为实型。 动态确定:走到哪里,是什么,算什么 国防科技大学计算机系602教研室

二 数据结构 1 数组 逻辑上,数组是由同一类型数据所组成的某种n维矩形结构,沿着每一维的距离,称为下标。 二 数据结构 1 数组 逻辑上,数组是由同一类型数据所组成的某种n维矩形结构,沿着每一维的距离,称为下标。 数组可变与不可变:编译时能否确定其存贮 空间的大小。 访问:给出数组名和下标值 存放方式: 按行存放,按列存放 存放方式: 按行存放(C, PASCAl),按列存放(FORTRAN) 国防科技大学计算机系602教研室

数组元素地址计算 数组A[10,20]的A[1,1]为a,各维下标为1,按行存放,那么A[i,j]地址为: a+(i-1)*20+(j-1) 数组元素地址计算公式 国防科技大学计算机系602教研室

国防科技大学计算机系602教研室

内情向量 把数组的有关信息记录在一个“内情向量”中,每个数组的内情向量必须包括:维数,各维的上、下限,首地址,以及数组(元素)的类型。 国防科技大学计算机系602教研室

2 记录 逻辑上说,记录结构由已知类型的数据组合在一起的一种结构。 访问:复合名 CARD[k].NAME 存储:连续存放 record { char NAME[20]; integer AGE; bool MARRIED; } CARD[1000] 访问:复合名 CARD[k].NAME 存储:连续存放 域的地址计算:相对于记录结构起点的相对数OFFSET。 国防科技大学计算机系602教研室

3 字符串、表格、栈 字符串:符号处理、公式处理 表格:本质上是一种记录结构 线性表:一组顺序化的记录结构 栈:一种线性表,后进先出,POP, PUSH 国防科技大学计算机系602教研室

三 抽象数据类型 一个抽象数据类型包括: 程序设计语言对抽象数据类型的支持 数据对象的一个集合; 作用于这些数据对象的抽象运算的集合; 三 抽象数据类型 一个抽象数据类型包括: 数据对象的一个集合; 作用于这些数据对象的抽象运算的集合; 这种类型对象的封装,即,除了使用类型中所定义的运算外,用户不能对这些对象进行操作。 程序设计语言对抽象数据类型的支持 Ada语言通过程序包(package)提供了数据封装的支持 Smalltalk、C++和Java语言则通过类(Class)对抽象数据类型提供支持。 国防科技大学计算机系602教研室

2.2.4 语句与控制结构 一.表达式 表达式由运算量(也称操作数,即数据引用或函数调用)和算符(操作符)组成。 形式:中缀、前缀、后缀 2.2.4 语句与控制结构 一.表达式 表达式由运算量(也称操作数,即数据引用或函数调用)和算符(操作符)组成。 形式:中缀、前缀、后缀 X*Y -A P↑ 表达式形成规则 国防科技大学计算机系602教研室

算符的优先次序 一般的规定 注意两点: PASCAL:左结合A+B+C=(A+B)+C FORTRAN:对于满足左、右结合的算符可任取一种,如A+B+C就可以处理成(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 for i:=E1 step E2 until E3 do S 过程调用语句 call P(X1, X2, ... ,Xn) 返回语句 return (E) 国防科技大学计算机系602教研室

说明语句:定义各种不同数据类型的变量或运算,定义名字的性质。 国防科技大学计算机系602教研室

简单句和复合句 简单句:不包含其他语句成分的基本句 复合句:句中有句的语句 国防科技大学计算机系602教研室

复习:程序语言的定义 程序语言由两方面定义: 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序 词法规则:单词符号的形成规则。 常数、标识符、基本字、算符、界符等。 有限自动机 语法规则:语法单位的形成规则。 表达式、语句、分程序、过程、函数、程序等; 上下文无关文法 语义:一组规则,用它可以定义一个程序的意义 国防科技大学计算机系602教研室

复习:程序语言的基本功能和层次结构 程序语言的基本功能:描述数据和对数据的运算。 所谓程序,本质上说是描述一定数据的处理过程。 程序 | 子程序或分程序、过程、函数 语句 表达式 数据引用 算符 函数调用 国防科技大学计算机系602教研室

复习:高级语言的一般特性 高级语言的分类 程序结构 数据类型与操作 语句与控制结构 初等数据类型 数据结构 抽象数据类型 国防科技大学计算机系602教研室

2.3 程序语言的语法描述 几个概念: 考虑一个有穷 字母表∑ 字符集 其中每一个元素称为一个字符 2.3 程序语言的语法描述 几个概念: 考虑一个有穷 字母表∑ 字符集 其中每一个元素称为一个字符 ∑上的字(也叫字符串) 是指由∑中的字符所构成的一个有穷序列 不包含任何字符的序列称为空字,记为ε 用∑*表示∑上的所有字的全体,包含空字ε 例如: 设 ∑={a, b},则 ∑*={ε,a,b,aa,ab,ba,bb,aaa,...} 国防科技大学计算机系602教研室

∑*的子集U和V的连接(积)定义为 UV={  | U & V } 设: U={ a, aa } V= { b, bb } 那么: UV= { ab, abb, aab, aabb} 国防科技大学计算机系602教研室

UV={  | U & V } Vn=VV…V V*=V0∪V1∪V2∪V3∪… 称V*是V的闭包; 记 V+=VV* ,称V+是V的正规闭包。 国防科技大学计算机系602教研室

设: U={ a, aa } 那么: U* = {  , a, aa, aaa, aaaa, …} 国防科技大学计算机系602教研室

2.3.1 上下文无关文法 文法: 描述语言的语法结构的形式规则 He gave me a book. 2.3.1 上下文无关文法 文法: 描述语言的语法结构的形式规则 He gave me a book. <句子>  <主语><谓语><间接宾语><直接宾语> <主语>  <代词> <谓语>  <动词> <间接宾语>  <代词> <直接宾语>  <冠词> <名词> <代词>  He <代词>  me <名词>  book <冠词>  a <动词>  gave 国防科技大学计算机系602教研室

<句子>  <主语><谓语><间接宾语><直接宾语> <主语>  <代词> <谓语>  <动词> <间接宾语>  <代词> <直接宾语>  <冠词> <名词> <代词>  He <代词>  me <名词>  book <冠词>  a <动词>  gave <句子> <主语><谓语><间接宾语><直接宾语> <代词><谓语><间接宾语><直接宾语> He <谓语><间接宾语><直接宾语> He <动词><间接宾语><直接宾语> He gave <间接宾语><直接宾语> He gave <代词><直接宾语> He gave me <直接宾语> He gave me <冠词><名词> He gave me a <名词> He gave me a book 国防科技大学计算机系602教研室

上下文无关文法的定义: 一个上下文无关文法G是一个四元式 G=(VT,VN,S,P),其中 VT:终结符集合(非空) VN:非终结符集合(非空),且VT  VN= S:文法的开始符号,SVN P:产生式集合(有限),每个产生式形式为 P, PVN,   (VT  VN)* 开始符S至少必须在某个产生式的左部出现一次。 国防科技大学计算机系602教研室

G=<{i,+,*,(,)},{E},E, P>, 其中,P由下列产生式组成: 例,定义只含+,*的算术表达式的文法 G=<{i,+,*,(,)},{E},E, P>, 其中,P由下列产生式组成: E  i E  E+E E  E*E E  (E) 国防科技大学计算机系602教研室

G(E): E  i | E+E | E*E | (E) 几点规定: “  ”也可以用“::="表示, 这种表示称为巴科斯范式(BNF) P  1 P  2 可缩写为 P  1|2||n  P  n 其中,“|”读成“或”,称为P的一个候选式。 表示一个文法时,通常只给出开始符号和产生式,如上例,可表示为: G(E): E  i | E+E | E*E | (E) 例,定义只含+,*的算术表达式的文法 G=<{i,+,*,(,)},{E},E, P>, 其中,P由下列产生式组成: E  i E  E+E E  E*E E  (E) 国防科技大学计算机系602教研室

如果1  2   n,则我们称这个序 列是从1到n的一个推导。若存在一个从 1到n的推导,则称1可以推导出n 。 定义:称A直接推出,即 A 仅当A  是一个产生式, 且,  (VT  VN)* 。 如果1  2   n,则我们称这个序 列是从1到n的一个推导。若存在一个从 1到n的推导,则称1可以推导出n 。 对文法G(E): E  i | E+E | E*E | (E) E  (E)  (E+E) (i+E) (i+i) 国防科技大学计算机系602教研室

通常,用 表示:从1出发,经过 一步或若干步,可以推出n。 所以 : 即 或 定义:假定G是一个文法,S 是它的开始符号。 如果 ,则称是一个句型。仅含终结符 号的句型是一个句子。文法G所产生的句子的全 体是一个语言,将它记为 L(G)。 国防科技大学计算机系602教研室

G(E): E  i | E+E | E*E | (E) 的一个句子。 证明: 例: (i*i+i)是文法 G(E): E  i | E+E | E*E | (E) 的一个句子。 证明: E  (E)  (E+E) (E*E+E) (i*E+E) (i*i+E)  (i*i+i) E,(E),(E*E+E),…,(i*i+i)是句型。 国防科技大学计算机系602教研室

例:文法G1(A): A  c|Ab G1(A)的语言? L(G1)={c,cb,cbb,} 以c开头,后继若干个b 国防科技大学计算机系602教研室

例:文法G2(S): S  AB A  aA|a B  bB|b G2(S)的语言? L(G2)={ambn|m,n>0} 国防科技大学计算机系602教研室

例:给出产生语言为{anbn|n1}的文法。 G3(S): S  aSb S  ab 国防科技大学计算机系602教研室

例:给出产生语言为{ambn|1nm2n}的 文法。 G4(S): S  aSb | aaSb S  ab | aab 国防科技大学计算机系602教研室

E+Ei+Ei+i E+EE+ii+i 从一个句型到另一个句型的推导往往不唯一。 E+Ei+Ei+i E+EE+ii+i 最左推导:任何一步  都是对中的最 左非终结符进行替换。 最右推导:任何一步  都是对中的最 右非终结符进行替换。 国防科技大学计算机系602教研室

2.3.2 语法树与二义性 用一张图表示一个句型的推导,称为语法树。 (i*i+i)的语法树 E (E) (E+E) (E*E+E) G(E): E  i | E+E | E*E | (E) (i*i+i) E (E) (E+E) (E*E+E) (i*E+E) (i*i+E) (i*i+i) E (E) (E+E) (E+i) (E*E+i) (E*i+i) (i*i+i) 一棵语法树是不同推导过程的共性抽象。 国防科技大学计算机系602教研室

如果使用最左(右)推导,则一个最左(右)推导与语法树一一对应。 一个句型是否只对应唯一一棵语法树? 国防科技大学计算机系602教研室

G(E): E  i|E+E|E*E|(E) 是二义文法。 定义:如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。 G(E): E  i|E+E|E*E|(E) 是二义文法。 语言的二义性:一个语言是二义性的,如果对它不存在无二义性的文法。 可能存在G和G’,一个为二义的,一个为无二义的。但L(G)=L(G’) 二义性问题是不可判定问题,即不存在一个算法,它能在有限步骤内,确切地判定一个文法是否是二义的。 可以找到一组无二义文法的充分条件。 国防科技大学计算机系602教研室

G(E): E  i|E+E|E*E|(E) 二义文法: G(E): E  i|E+E|E*E|(E) 无二义文法: G(E):E  T | E+T T  F | T*F F  (E) | i 表达式 项|表达式+项 项  因子 | 项*因子 因子  (表达式) | i 国防科技大学计算机系602教研室

) E F T i + * ( 考虑句子(i*i+i) E T F (E) (E+T) (T+T) (T*F+T) (F*F+T) (i*F+T) (i*i+T) (i*i+F) (i*i+i) 国防科技大学计算机系602教研室

描述程序设计语言时,对于上下文无关文法的限制 : 1 不含PP形式的产生式 2 每个非终结符P必须有用处 即: 国防科技大学计算机系602教研室

2.3.3 形式语言鸟瞰 Chomsky于1956年建立形式语言体系,他把文法分成四种类型:0,1,2,3型。 2.3.3 形式语言鸟瞰 Chomsky于1956年建立形式语言体系,他把文法分成四种类型:0,1,2,3型。 与上下文无关文法一样,它们都由四部分组成,但对产生式的限制有所不同。 国防科技大学计算机系602教研室

0型(短语文法,图灵机): 1型(上下文有关文法,线性界限自动机): 产生式形如:    产生式形如:    其中: (VT  VN)*且至少含有一个非终结符; (VT  VN)* 1型(上下文有关文法,线性界限自动机): 其中:||  ||,仅 S 例外。 国防科技大学计算机系602教研室

2型(上下文无关文法,非确定下推自动机): 产生式形如: A   其中:A VN; (VT  VN)*。 3型(正规文法,有限自动机): 产生式形如: A  B 或 A   其中:  VT*;A,BVN 产生式形如: A  B 或 A   右线性文法 左线性文法 国防科技大学计算机系602教研室

四种类型描述能力比较 0型 1型 2型 3型 国防科技大学计算机系602教研室

L5={anbn|n1} 不能由正规文法产生,但可由上下文无关文法产生: G5(S): S  aSb| ab L6={anbncn|n1}不能由上下文无关文法产 生,但可由上下文有关文法产生: G6(S): S  aSBC| aBC CB  BC aB  ab bB  bb bC  bc cC  cc 国防科技大学计算机系602教研室

程序设计语言不是上下文无关语言,甚至不是上下文有关语言。 L7={c| (a|b)*}不能由上下文无关文法产生,甚至连上下文有关文法也不能产生,只能由0型文法产生。 标识符引用 过程调用过程中,"形-实参数地对应性"(如个数,顺序和类型一致性) 现今程序设计语言的语言结构,用上下文无关文法描述就足够了。 国防科技大学计算机系602教研室

作业 P36-6,7,8,9,10,11 国防科技大学计算机系602教研室