二章节程序设计语言设计概述.ppt
《二章节程序设计语言设计概述.ppt》由会员分享,可在线阅读,更多相关《二章节程序设计语言设计概述.ppt(61页珍藏版)》请在三一文库上搜索。
1、第1页,第二章 程序设计语言设计概述,2.1 表示与抽象 2.2 设计目标 2.3 设计准则 2.4 规格说明,第2页,2.1 表示与抽象,表示是人为制造的符号组合以表达我们需要表达的意思。 程序是程序设计语言表示的计算 float n; /n 是浮点数变量 sqrt(n) ; /对n取平方根 同一程序的高级语言表示、经翻译后的汇编码表示、机器码表示就是该程序在不同抽象层次上的表示。,第3页,2.1 表示与抽象,程序在不同抽象层次表示的关系 例:x = x + 1在机器码上就有两种方法。,从内存代表x的地址中取出 值放在运算器中。 加1,将结果放于某临时单元。 将临时单元内容做类型检查(必要时
2、转换)并放入x中。,从内存代表x的地址中取出 值放在运算器中。 加1,将结果放入x地址中。,第4页,2.1 表示与抽象,儿子10岁女儿8岁母亲35岁 几年后儿女岁数之和大于等于母亲?,u=m-s-d,每人每年增1岁每增 一年比较一次,满足 条件即所求。,read(m,s,d); u=m-s-d; print(u),read(m,s,d); u=0; while(m+us+d+2u) u+; print(u);,m,s,d,u,指令集,客观世界 问题抽象,模型世界 数学模型 模拟模型,程序世界 以程序世界术语 表示描述模型,机器世界 以机器的术语 实现程序,图2-1 计算机解题的四个世界,第5页
3、,2.2 PL设计目标,定义一组能表示某种范型的特征集,每个特征有严格定义并可在机器上高效实现,程序员可灵活运用这些特征表达它所希望的任何计算。,第6页,语言设计:目标演化,第6页,Fortran 设计中最主要的考虑是易用性(与机器和汇编语言比较)和高效实现,特别关注程序能翻译成高效执行的代码,因为这样才可能被接受(今天Fortran 仍高效) 。 随着计算机变得越来越快,越来越便宜,效率问题虽然还是很重要,但重要性已大大下降。易用性方面的考虑仍非常明显: 提高程序设计工作的效率 帮助人们提高程序(软件)的质量,可靠性 设法支持某些高级的软件设计技术 语言最主要作用是用于描述所需要的计算过程。
4、为此需要: 清晰,简洁的形式(例子:C,Pascal,APL ) 清晰简单的语义(易理解,易验证) 正交性(避免重复的可相互替代的特征,人们对此有些不同意见) 可读性(人容易阅读理解的东西,计算机也容易处理),第7页,语言设计:目标演化,第7页,随着程序设计语言的发展,语言的设计目标也发生了很大变化 语言的初始设计目标就是更方便地为计算机写程序 后来人们认识到,程序设计语言也是人的工具,用于描述算法、交流算法,用于服务于交流、教学和科研的需要 随着计算机应用发展,程序变得越来越复杂,开发程序变成代价高昂的工作。为支持复杂程序开发,提高开发工作的效率,语言设计有了许多新目标: 支持对基本语言的扩
5、充,提供各种扩充定义和抽象机制,过程、函数定义机制,扩充语言的基本操作,数据类型定义机制(及OO机制),扩充数据描述方式和功能。 例:C+ 在语言机制扩充方面有许多考虑(如运算符重载) 可扩充语言(Extendable Languages),允许程序形式的改变(Lisp),第8页,语言设计:目标演化,第8页,2. 提供支持复杂程序所需的高级组织的机制,支持大型程序开发模块机制(信息隔离和屏蔽),支持分别编译的机制,支持程序的物理组织 3. 支持软件重用,包括软件中的部分的重用,支持通用的基本程序库。Pascal 失败之处之一就是忽略了库的开发。C/Fortran 都做得很好。Ada、C+ 和J
6、ava 的设计都特别考虑了对库的支持。许多新语言定义了功能非常丰富的标准程序库。 支持库开发:库是最基本的重用方式。是否支持库开发,决定了语言能否大范围使用。支持用户和第三方供应商开发各种扩充的和专用的库 支持某些层次或者方式的软件部件概念 问题:库开发或者部件是否需要本语言之外的功能? OO 概念可能在上面许多方面起作用,因此成为复杂软件开发的重要方法,第9页,语言设计:目标演化,第9页,语言设计中需要考虑的另外一些重要问题: 正常处理的异常/错误处理的良好集成(在产品软件的程序里,处理错误和各种特殊情况的代码占很大的比例,可能达70%) 对于程序的易修改可维护性的支持 对于并发程序设计的支
7、持,用什么样的机制支持并发程序设计。这方面的问题将长期成为语言研究和设计的热点问题 安全性设计:是否有助于程序员写出安全可靠的程序?这一问题在未来许多年都会是语言设计的一个重要关注点 由于语言承载的功能越来越多,设计时需考虑的问题越来越多,新语言正在变得越来越复杂,语言的实现需要做的工作也越来越多(基本处理、对开发过程的支持、库等等),设计一种语言,支持所有需要变得越来越困难。,第10页,2.2 PL设计目标,定义一组能表示某种范型的特征集,每个特征有严格定义并可在机器上高效实现,程序员可灵活运用这些特征表达它所希望的任何计算。,模型有力 Model Power 语义清晰 Semantic C
8、larity 移植性好 Portability 可读性好 Readability 程序质量 Quality 安全性 并发,方便 Convenience 简单 Simplicity 高效 Efficiency 灵活性 Flexibility 可扩充性 Extensible 可重用性 Reusable,第11页,2.3 设计准则,频度准则 越常用越简单 方便、可读 结构一致 程序结构和计算的逻辑结构一致 可读、方便 局部性 Locality 只有全局变量Basic 不鼓励全局变量Pascal,C 无全局变量函数式 Java 词法内聚 Lexical Coherence 变量在使用处就近声明 (Pa
9、scal声明和语句严格分开),(lambda (x y) (let (x 3.5) (y (+ a 2) (+ (* x y) (+ (* x y) (- x y) (- x y) 3.5 (+ a 2) x.y.(x*y)+(x-y) 3.5 (a+2),第12页,续,语法一致性 GO TO (L1, L2, , Ln), I I=1n GO TO N, (L1, L2, , Ln) ASSIGN Li TO N N=L1.Ln 安全性Security 语言编译系统自动找出安全漏洞,不能弥补也要支持 安全性强类型,即每个计算操作运算之前类型必须确定 C 留给程序员 过程参数不检查 一般不安全
10、,第13页,续,正交性和正规性(Orthogonality & Regularity) 正交: 每个语言特征都是独立的, 增减不影响其它 正规: 每一约定或规则无一例外 不正规:数组不能作返回值, 不能赋值 函数不能做参数 不正交不正规,第14页,续,数据隐藏 (Data hiddening) 封装,以名字封装内部数据设计者可见使用者不可见 局部性不一定封装,如: Do l0 I=1,10,2 当I=7时 GOTO 20 10 CONTINUE 20 . R=I 可以,此时R=7.0,. . .,第15页,续,抽象表达 抽取因子、递归表达、高层模块名、 常量名=常量表达式(易于维护) 先抽象再
11、修饰具体(如同自然语言) static const int maxlndex=MAX_LENGTH_1 MATHLIB.TRIANG COS(X) 可移植性 力图不依赖环境 预定义机制、预处理程序,第16页,形式语法:以形式结构规则的语言元素组合规则 微语法 词法 Lexicon 宏语法 定义特征的规则,2.4 程序设计语言规格说明 语言参考手册,2.4.1 语法规格说明,第17页,第17页,词法和词法分析,构成程序的基本词法元素包括标识符、运算符、字面量、注释等。 复杂的词(标识符、各种字面量)需要明确定义的构词法,即词法 处理源程序的第一步是词法分析: 编译器处理表示源程序的字符序列,根据
12、词法规则做词法分析,将源程序切分为符合词法的段,识别出源程序的有意义单词(token) 词法分析得到一个(表达被分析的源程序的)单词流,流中各单词标明了词法类别(是“标识符”,“整数”,“加号”,“左括号”,等等) 词法分析中抛弃所有无保留价值的分隔符(如空白符)和噪声词 例:对int main (void) return 0; 做词法分析,得到的单词序列是: “int“ “main“ “(“ “void“ “)“ “ “return“ “0“ “;“ “ 共10个单词 类别:标识符,左/右圆括号,左/右花括号,整数,分号,第18页,第18页,词法分析,词法分析通常采用最长可能原则,确定可能成
13、为单词的最长字符串。 例:staticint是一个标识符,而不是关键字static 和int x+y (C语言)的分析结果是:x,+,+,y;而不是x,+,+,y x+y 是x, +, +, +, y(语法错,+ 的运算对象非左值) 早期的Fortran 中存在复杂的词法问题。例如: DO 10 I = 1.5 的意思类似于C 语言的DO10I = 1.5 而 DO 10 I = 1,5 是枚举循环头部,类似于C 的for (I = 1; I 5; +I) . 后来的语言都避免了这类问题,保证单词很容易识别(能局部识别)人们已经开发了许多帮助构造词法分析器的自动工具,如lex/flex等,第1
14、9页,第19页,语法,语法规定位于词法层次之上的程序结构。例如: 表达式的合法形式 基本语句的形式,组合语句的构成方式 更上层的结构,如子程序、模块等的构成形式 语法用于确定一个输入序列是否合法的程序。但什么是“合法”? 程序存在多个不同层次的合法性问题: 1. 局部结构 例:C程序里的if 之后是不是左括号,括号是否配对 2. 上下文关系 例:变量使用前是否有定义,使用是否符合类型的要求 3. 深层问题 例:使用变量的值之前,变量是否已经初始化 语言的语法定义通常只描述1(程序形式中的上下文无关部分) 编译程序通常检查条件1和2,有人称2 为“静态语义”,第20页,T是终结符号串的有限集。N
15、是非终结符号串的有限集。 TN = ,即它们是不相交的。S是起始符号串, SN。 P是产生式, 一般形式是: ,(TN)* “”表示左端可推导出右端, 如, , 则可写为:| 如果产生式将语言的非终结符中的每一个标记都推得为终结符号, 则这一组产生式集即为该语言的全部文法。,2.4.1.1 文法 文法 产生符合语法的语言(句子集合)规则,如: G=(S,N,T,P) SN,TN=*,第21页,整数的产生式表示法: 设0|1|2|3|4|5|6|7|8|9 则 一位数是整数 两位数也是 n位数也是 n个 这势必造成产生式臃肿, 如果写成: | | ,续,第22页,续,Chomsky的四种文法 产
16、生式 左符号集右符号集 由左符号集推导出右符号集 0型文法 (NT)+,(NT)* 递归可枚举语言 图灵机可以识别 1型文法 A B ,(NT)*, AN, B(NT)+ 上下文相关文法上下文敏感语言 线性有界自动机可识别 2型文法 A (NUT)*, AN 上下文无关文法语言 非确定下推自动机可识别,第23页,续,3型文法 ABB T*, A,BN 正则文法 正则语言 有限自动机可以识别 可消除右端非终法符 P可以成为终结符表达式 例: N=S,R,Q, T=a,b,c P=SRa,SQ,RQb,Qc 则有 SRaQbacba|SQc RQbcb Qc 简单语言用 3型,汇编,词法子语言 最
17、常用 2型 0、1型无法判定二义性, 不常用,0,1,2,3,第24页,2.4.1.2 上下文无关文法,文法的递归表示法 0123|4|5|6|7|89 一位数 二位数 . n 位数 n个 左递归 右递归尾递归,第25页,2.4.1.3 BNF 和EBNF,BNF: :=代替 BNF表达能力同EBNF 指示非终结 终结符直接写出(或黑体) 或者 有扩充: 括号内容是可选的 括号内容可重复0至多次 或扩充: C+ Kleene加 C可重复1至多次 C* Kleene星 C可重复0至多次,第26页,续,BNF示例 := | := + |- | := | | , := +|- := | := + :
18、= | ,第27页,EBNF: 左端取消, 空白加- 减少递归表示再加(,),., 尽量用正则表达式 终结符号加 号或黑体,续,第28页,续,program := ; . program-heading := program ( ). program-parameters := . identifier-list := , . program-block := . block := . variable-declaration-part := var ; ; . variable-declaration := ; . statement-part := compound-statement.,
19、第29页,compound-statement := begin end. statement-sequence := ; . statement:= :(|). simple-statement := | | | . structured-statement := | | | .,续,第30页,2.4.1.4 语法图,同EBNF 取消 以短路表示 以迥环表示,非终结符,走向,复合语句,;,begin,end,语句,终结符,终结符,第31页,2.4.1.5 语法分析,语法规格说明定义了该语言程序合法的特征和语句。语言处理器则通过语法分析接受合法的程序,这就叫做程序释义(Parsing a Pr
20、ogram),释义过程是产生式生成句子的逆过程。,语法分析的算法可归为两类: “自顶向下” 释义则从文法的起始符开始,按可能产生的表达式寻找语句相同的结构匹配。每一步都产生下一个可能的源符号串,找到再往下走。 “由底向上”释义则相反,它先查找源代码的各个符号串,看它能否匹配归结为产生式左边的非终结符,如果有含混则向前多读入k个符号串,为此归约下去,一个短语一个短语,最后到达起始符号串,归约的过程就形成了释义树。,第32页,begin x := 17 ; writeIn ( x ) end,标识符,变量标识符,变量访问,无符号常量,完整变量,无符号数,无符号整数,因子,项,简单表达式,表达式,过
21、程标识符,标识符,变量标识符,完整变量,变量访问,因子,项,简单表达式,表达式,write参数,writeln参数表,赋值语句,简单语句,语句,过程语句,简单语句,语句,语句序列,复合语句,第33页,第33页,语法分析是语言翻译过程的一个重要阶段。语法分析技术是“编译原理”或“编译技术”课程的重要内容 本课程不准备详细介绍语法分析的技术,词法分析和语法分析过程并不仅用在编译系统里。 许多计算机软件的用户输入都需要做词法分析和简单的语法分析 今天的大部分语法分析器都是用工具生成的。例yacc/bison。 这些工具接受某种类似BNF 的语法描述,生成对应的语法分析器人们为各种主要语言(C/C+/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章节 程序设计语言 设计 概述
链接地址:https://www.31doc.com/p-3106664.html