第四章程序语言的性质模型.pptx
《第四章程序语言的性质模型.pptx》由会员分享,可在线阅读,更多相关《第四章程序语言的性质模型.pptx(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章 程序语言的性质程序语言的性质1语言的形式化模型语言的形式化模型nBNF为描述程序设计语言的属性提供了一种很为描述程序设计语言的属性提供了一种很好的手段,但并不是充分的手段。好的手段,但并不是充分的手段。BNF回答了回答了程序看起来象什么,但没有回答程序是做什么程序看起来象什么,但没有回答程序是做什么的。的。n形式化模型采用精确的数学模型来刻画研究对形式化模型采用精确的数学模型来刻画研究对象,为研究、分析和操纵研究对象提供严谨的象,为研究、分析和操纵研究对象提供严谨的数学工具和手段。数学工具和手段。n本章将介绍下列形式化模型:本章将介绍下列形式化模型:n形式文法:乔姆斯基文法分级形
2、式文法:乔姆斯基文法分级n语言的语义语言的语义:属性文法属性文法、指称语义指称语义n程序的验证程序的验证24.1 语言的形式化性质语言的形式化性质n乔姆斯基分级文法乔姆斯基分级文法n语言的能力语言的能力3乔姆斯基分级文法乔姆斯基分级文法n文法文法n由非终结符、终结符、开始(非终结)符、由非终结符、终结符、开始(非终结)符、及产生式构成及产生式构成n文法的类别文法的类别n3型文法:正则文法,定义词法的模型型文法:正则文法,定义词法的模型n2型文法:型文法:BNF文法,上下文无关文法文法,上下文无关文法n1型文法:上下文有关文法型文法:上下文有关文法n0型文法:型文法:43型文法:正则文法型文法:
3、正则文法n为词法分析器提供模型。为词法分析器提供模型。n这类文法的大多数性质都是可判定的这类文法的大多数性质都是可判定的n如,能产生什么样的串、给定串是否属于文法规如,能产生什么样的串、给定串是否属于文法规定的语言、语言中的串是否有限等定的语言、语言中的串是否有限等n正则文法可以产生形如正则文法可以产生形如an的串,其中的串,其中a为有为有限字符序列限字符序列n正则文法只能计数有限数正则文法只能计数有限数n常用于关键字或单词扫描常用于关键字或单词扫描52型文法型文法上下文无关文法上下文无关文法n产生式的形式为:产生式的形式为:X ,其中其中 可以是终结符可以是终结符和非终结符的任意序列和非终结
4、符的任意序列n同样,这类文法的大多数性质都是可判定的同样,这类文法的大多数性质都是可判定的n如,能产生什么样的串、给定串是否属于文法规定的语言、如,能产生什么样的串、给定串是否属于文法规定的语言、语言是否为空等语言是否为空等n可用来计数和比较两个项,产生形如可用来计数和比较两个项,产生形如ancbn的串的串n可以用堆栈来实现可以用堆栈来实现n可用来自动产生程序的语法分析树可用来自动产生程序的语法分析树n2型和型和3型文法的相关问题都已基本上得到解决型文法的相关问题都已基本上得到解决61型文法型文法上下文有关文法上下文有关文法n产生式的形式为:产生式的形式为:,其中其中 任意非终结符任意非终结符
5、串,串,是终结符和非终结符的任意序列,但是终结符和非终结符的任意序列,但 中的符号个数应不多于中的符号个数应不多于 的符号个数的符号个数n从开始符开始导出的串的长度是递增的从开始符开始导出的串的长度是递增的n在生成串时,需要使用固定数量的存储空间,例如在生成串时,需要使用固定数量的存储空间,例如识别上下文无关文法无法识别的串识别上下文无关文法无法识别的串ancnbnn上下文有关文法太复杂,很难用于程序设计语言上下文有关文法太复杂,很难用于程序设计语言n人们对上下文有关文法的很多特征还不太清楚人们对上下文有关文法的很多特征还不太清楚70型文法型文法非限定型文法非限定型文法n对产生式的形式对产生式
6、的形式 没有任何限制没有任何限制n可用来识别任意可计算的函数可用来识别任意可计算的函数n其大多数性质都是不可判定的其大多数性质都是不可判定的返回8不可判定性不可判定性n不同类型的文法越来越复杂,产生的语不同类型的文法越来越复杂,产生的语言也越来越复杂,但是否说明计算机解言也越来越复杂,但是否说明计算机解决问题的能力可以越来越强,没有限制决问题的能力可以越来越强,没有限制?n例如:能否编写一个例如:能否编写一个C语言程序来判断另一语言程序来判断另一个个C语言程序能否结束?语言程序能否结束?n但这基本上是不可能的,这不是编程人员的但这基本上是不可能的,这不是编程人员的问题,而是因为问题,而是因为计
7、算机所基于的数学模型计算机所基于的数学模型本本身的局限性而导致的。身的局限性而导致的。9图灵机图灵机n一般来说,用一种语言编写的程序也可以用其一般来说,用一种语言编写的程序也可以用其他另一种语言来实现。他另一种语言来实现。n那么是否存在某个程序,只能用某种语言来实那么是否存在某个程序,只能用某种语言来实现,而用其他语言就无法实现?现,而用其他语言就无法实现?n如果没有,那么有哪些程序是其它程序设计语言无如果没有,那么有哪些程序是其它程序设计语言无法表示的,为什么还需要那么多种不同的语言?法表示的,为什么还需要那么多种不同的语言?n如果我们将能够表示所有计算的语言都称为通用语如果我们将能够表示所
8、有计算的语言都称为通用语言,那么是不是所有语言都是通用语言?如果是,言,那么是不是所有语言都是通用语言?如果是,是否存在更简单的通用语言?是否存在更简单的通用语言?10图灵机的结构图灵机的结构n图灵机是一种用来定义可计算函数的抽图灵机是一种用来定义可计算函数的抽象计算机象计算机n图灵机只有一个单一的数据结构,即一个称图灵机只有一个单一的数据结构,即一个称为为“带子带子”的可变长线性数组的可变长线性数组n带子被分为很多格,每格上只包含一个字符带子被分为很多格,每格上只包含一个字符n图灵机还有一个指针变量,称为图灵机还有一个指针变量,称为“读出头读出头”,它总是指向带子上的某个格。,它总是指向带子
9、上的某个格。11图灵机的操作图灵机的操作n图灵机只提供几个简单的操作:图灵机只提供几个简单的操作:n读出头所指定位置的字符可以被读出或被修读出头所指定位置的字符可以被读出或被修改。程序可以根据读出的值进行转移。改。程序可以根据读出的值进行转移。n读出头可以左右移动。如果读出头移动到带读出头可以左右移动。如果读出头移动到带子的最末端,则自动在带子上加上一格,并子的最末端,则自动在带子上加上一格,并赋予一个空字符作为初始值。赋予一个空字符作为初始值。12图灵机的运行图灵机的运行n图灵机开始运行时,带子上存放输入数图灵机开始运行时,带子上存放输入数据,读出头指向输入数据的最左端的字据,读出头指向输入
10、数据的最左端的字符;符;n图灵机根据预先编好的操作序列读写带图灵机根据预先编好的操作序列读写带子上的数据、或移动读出头;子上的数据、或移动读出头;n如果最终能够停机,则带子上的内容就如果最终能够停机,则带子上的内容就是最后的输出结果。是最后的输出结果。13图灵机的能力图灵机的能力n任意可计算函数都可以用图灵机计算出任意可计算函数都可以用图灵机计算出来(来(Church论题)论题)n图灵机等价于图灵机等价于0型文法型文法n确定型图灵机等价于非确定型图灵机。确定型图灵机等价于非确定型图灵机。14停机问题停机问题n是否存在某个通用的算法,它能够断定任意给是否存在某个通用的算法,它能够断定任意给定的图
11、灵机在任意的输入下能否停机?定的图灵机在任意的输入下能否停机?n停机问题是不可判断的,即不存在这样的通用算法。停机问题是不可判断的,即不存在这样的通用算法。n任意一个不可判断的问题,都等价于停机问题。任意一个不可判断的问题,都等价于停机问题。n结论:结论:n任何一种程序设计语言都可能代替其它语言任何一种程序设计语言都可能代替其它语言n程序设计语言不存在质的区别,只有量的区别,如程序设计语言不存在质的区别,只有量的区别,如是否优美、易用、高效等是否优美、易用、高效等n任何一种程序设计语言都有它存在的理由任何一种程序设计语言都有它存在的理由返回154.2 语言的语义语言的语义n程序设计语言基本上都
12、是以上下文无关文法(特别是 LR(k)文法)的核心设计的。n但语法分析已经不再是人们感兴趣的研究问题了。n现在的问题是如何确定程序的含义(即语义)。16语言的语义语言的语义n语言的手册必须定义语言中每个结构的含义,包括单语言的手册必须定义语言中每个结构的含义,包括单独结构的含义以及和其他结构组合时的含义。独结构的含义以及和其他结构组合时的含义。n语言提供了不同结构,用户(为了写正确的程序,预语言提供了不同结构,用户(为了写正确的程序,预测语句的执行效果)和实现者(正确地实现语言)需测语句的执行效果)和实现者(正确地实现语言)需要这些结构的精确定义。要这些结构的精确定义。n大多数语言中,形式文法
13、用于定义语法,一段文字或大多数语言中,形式文法用于定义语法,一段文字或例子用于定义语义,但定义是不精确的,有二义性,例子用于定义语义,但定义是不精确的,有二义性,不同作者可能有不同理解。不同作者可能有不同理解。n语义定义问题还是理论研究的目标,但至今没有令人语义定义问题还是理论研究的目标,但至今没有令人满意的解答。满意的解答。n已有各种形式方法用于语义定义。已有各种形式方法用于语义定义。17语义建模(语义建模(1)文法模型文法模型n对定义语言的对定义语言的BNF文法进行扩展,给出文法进行扩展,给出程序的语法分析树,从树中抽取出附加程序的语法分析树,从树中抽取出附加信息。属性文法便是抽取附加信息
14、的一信息。属性文法便是抽取附加信息的一种方式。种方式。18语义建模(语义建模(2)命令或操作模型命令或操作模型n定义程序如何在某虚拟机上执行。通常定义程序如何在某虚拟机上执行。通常描述为一自动机,但比语法用的简单自描述为一自动机,但比语法用的简单自动机远为复杂。动机远为复杂。n自动机有内部状态自动机有内部状态对应程序执行时对应程序执行时的内部状态,包括所有变量的值、执行的内部状态,包括所有变量的值、执行程序本身、以及各种系统定义的数据结程序本身、以及各种系统定义的数据结构。构。19语义建模(语义建模(2)命令或操作模型命令或操作模型n一组形式定义的操作用于刻划自动机内部状态如何改一组形式定义的
15、操作用于刻划自动机内部状态如何改变。此外还需定义程序文本如何翻译成自动机的初始变。此外还需定义程序文本如何翻译成自动机的初始状态。状态。n语言的操作定义对语言如何实际执行给出了相当直接语言的操作定义对语言如何实际执行给出了相当直接的抽象。的抽象。n也可能提出一个更抽象的模型,作为语言的软件解释也可能提出一个更抽象的模型,作为语言的软件解释的基础。的基础。n70年代的年代的VDL(Vienna Definition Language)是是一个操作方法。一个操作方法。n它扩展语法分析树已包含机器解释器。它扩展语法分析树已包含机器解释器。n计算的状态是程序树加上描述机器中所有数据的树。计算的状态是程
16、序树加上描述机器中所有数据的树。n每条语句的执行使树的状态发生变化。每条语句的执行使树的状态发生变化。20语义建模(语义建模(3)作用型模型作用型模型n试图直接构造每个程序的函数的定义,采用层次式的试图直接构造每个程序的函数的定义,采用层次式的构造方式。构造方式。n程序中每个基本的或程序员定义的操作代表一个数学程序中每个基本的或程序员定义的操作代表一个数学函数。函数。n语言的程序控制结构用于将这些函数复合为更大的序语言的程序控制结构用于将这些函数复合为更大的序列,代表表达式和语言。列,代表表达式和语言。n语句序列和条件分叉表示为个体函数构造而成的函数。语句序列和条件分叉表示为个体函数构造而成的
17、函数。n循环通常表示为递归函数。循环通常表示为递归函数。n最终,为整个程序导出一个完整的函数模型,指称语最终,为整个程序导出一个完整的函数模型,指称语义归于此类。义归于此类。21语义建模(语义建模(4)公理模型公理模型n使用谓词演算,每个语法结构的语义被描述为使用谓词演算,每个语法结构的语义被描述为公理或推导规则,用于导出结构的执行效果。公理或推导规则,用于导出结构的执行效果。n从一个初始假设开始,从一个初始假设开始,n假设输入变量满足一定的约束,假设输入变量满足一定的约束,n在程序语句执行后,使用公理和推导规则来推导其在程序语句执行后,使用公理和推导规则来推导其他变量值需满足的限制,他变量值
18、需满足的限制,n最终,程序的结果被证明满足希望的约束(描述了最终,程序的结果被证明满足希望的约束(描述了它们的值和输入值的关系)。它们的值和输入值的关系)。n如如Hoare的公理语义。的公理语义。22语义建模(语义建模(5)规约模型规约模型n描述实现程序的各个函数的关系,只要描述实现程序的各个函数的关系,只要我们可以证明一个实现符合了所有的函我们可以证明一个实现符合了所有的函数间的关系,则称实现相对于规约是正数间的关系,则称实现相对于规约是正确的。确的。n代数数据类型是形式规约的一种形式。代数数据类型是形式规约的一种形式。n例如:实现栈的程序,例如:实现栈的程序,S表示栈,则有公理,表示栈,则
19、有公理,npop(push(S,x)=Sn任何一个实现如果能保持这种关系,则称是任何一个实现如果能保持这种关系,则称是栈的正确实现。栈的正确实现。23语义模型语义模型小结小结n上述各种形式语义模型各有优点,但均上述各种形式语义模型各有优点,但均不能称为完全实用的和适用的,各有其不能称为完全实用的和适用的,各有其适合范围。适合范围。n操作语义为语言的实现提供了一种形式模型,操作语义为语言的实现提供了一种形式模型,但对用户来说太细节但对用户来说太细节n公理语义易于理解,但很难用来定义复杂的公理语义易于理解,但很难用来定义复杂的程序设计语言,且缺乏对语言实现的支持程序设计语言,且缺乏对语言实现的支持
20、返回24语义建模语义建模属性文法属性文法n这是最早的开发语义模型的工作之一。这是最早的开发语义模型的工作之一。n其思想是对分析树中的每个结点关联一个函数,从而其思想是对分析树中的每个结点关联一个函数,从而给出结点的语义内容。给出结点的语义内容。n属性文法的创建过程是为文法中的每一条规则都定义属性文法的创建过程是为文法中的每一条规则都定义相关的语义函数。相关的语义函数。n继承属性继承属性是一个函数,它将树中非终结符值和树中更是一个函数,它将树中非终结符值和树中更高层的非终结符值相关联。换言之,任何规则右端的高层的非终结符值相关联。换言之,任何规则右端的非终结符的函数值是左端非终结符的函数。非终结
21、符的函数值是左端非终结符的函数。n综合属性综合属性是一个函数,它将左端非终结符和右端非终是一个函数,它将左端非终结符和右端非终结符的值相关联,这些属性在树中向上传递信息,即结符的值相关联,这些属性在树中向上传递信息,即从树中下层信息进行从树中下层信息进行“综合综合”。25属性文法属性文法n例:考虑算术表达式的简单文法。例:考虑算术表达式的简单文法。ET|E+TTP|TPPI|(E)n其语义通过文法中非终结符间的关系集合定义。如:其语义通过文法中非终结符间的关系集合定义。如:下面函数生成该文法生成的任意表达式的值:下面函数生成该文法生成的任意表达式的值:产生式产生式属性属性EE+TValue(E
22、1)=V(E2)+V(T)ETV(E)=V(T)TTPV(T1)=V(T2)V(P)TPV(T)=V(P)PIV(P)=数数I的值的值P(E)V(P)=V(E)26属性文法属性文法n下图是一个属下图是一个属性树,它给出性树,它给出了表达式了表达式2+4(1+2)值值 27属性文法属性文法n属性文法可用于在语法树中传递语义信息。例如,声属性文法可用于在语法树中传递语义信息。例如,声明信息可以通过语言的声明产生式收集。沿树向下传明信息可以通过语言的声明产生式收集。沿树向下传的符号表信息可用于生成表达式代码。的符号表信息可用于生成表达式代码。n下面属性可加到非终结符下面属性可加到非终结符和和来创建一
23、个程序中声明的名字集合。来创建一个程序中声明的名字集合。产生式产生式属性属性:=decl_set(declaration1)=declaname(decl)decl_set(declaration2):=decl_set(declaration)=decl-name(decl):=declare xdecl-name(decl)=x(decl):=declare ydecl-name(decl)=y(decl):=declare zdecl-name(decl)=zn这是综合属性,包含程序中声明的名字集合。该属性这是综合属性,包含程序中声明的名字集合。该属性可以沿树向下传递,成为继承属性,用于
24、正确地生成可以沿树向下传递,成为继承属性,用于正确地生成数据的代码。数据的代码。28属性文法的使用属性文法的使用n首先创建语法分析树。属性文法假设你已经知道表达首先创建语法分析树。属性文法假设你已经知道表达式是如何推导出来的,它并不关心是如何分析推导出式是如何推导出来的,它并不关心是如何分析推导出来的。来的。n定义属性的函数可以是任意给定的,因此定义属性的定义属性的函数可以是任意给定的,因此定义属性的过程完全是手工完成的。过程完全是手工完成的。n如果只有综合属性,并且文法是如果只有综合属性,并且文法是 LR(k),那么,属性,那么,属性文法可以用来在语法分析时自动产程中间代码。文法可以用来在语
25、法分析时自动产程中间代码。n这就是这就是 YACC 如何工作的,它利用属性文法来计算所如何工作的,它利用属性文法来计算所有非终结符的值。有非终结符的值。n在构造分析树时,非终结符的信息逐层向上传递给分析树上在构造分析树时,非终结符的信息逐层向上传递给分析树上层的非终结符。层的非终结符。n语法分析完毕,所有属性的值将计算出来。语法分析完毕,所有属性的值将计算出来。返回返回29指称语义指称语义n指称语义是一种用来描述程序设计语言指称语义是一种用来描述程序设计语言的语义的作用型语义模型的语义的作用型语义模型n指称语义基于指称语义基于-演算演算30-演算演算n-演算是一种和图灵机的计算能力相当演算是一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 章程 语言 性质 模型
限制150内