[拼音]:zhicheng yuyixue
[外文]:denotational semantics
形式语义学的一个分支。人们用程序设计语言编制程序,命令计算机系统去加工数据。不同的计算机系统有不同的结构,因此对同一个命令的执行过程可以不同,但最终效果应该相同。指称语义学方法认为不应该将程序设计语言中各个成分的执行过程计入语言成分的语义中。语言成分的语义,应该是执行语言成分所要得到的最终效果。这是语言成分所要表达的含义,是语言成分本身所固有的,不因计算机系统的不同而改变。执行语言成分产生的最终效果被看作是语言成分的所指,称作为语言成分的指称物。这种语义学以语言成分的指称物作为语言成分的语义,故名为指称语义学。
指称语义学中用于定义语义的指称物多数是传统的数学对象,如整数、集合、映象等,故早期又称为数学语义学。这一名称容易使人误认为其他形式语义学分支是非数学的,后已不再使用。
历史情况指称语义学的主要思想是英国牛津大学C.斯特拉切于1964年前后提出的。美国D.斯高特创建的论域理论为指称语义学奠定了数学基础。论域理论是讨论各种语言成分指称物的数学结构,以及提供在这种数学结构上定义语言成分的语义和推导语言成分特性所必需的数学工具。
IBM公司维也纳实验室在研究 *** 作语义学方法VDL的基础上,于70年代初转向指称语义学的研究,发展了基于指称语义学方法的一整套开发软件的工程方法,称为维也纳开发方法(简称VDM)。
1976年英国一些学者发展了论域理论,提出幂论域理论,从而为定义非决定性程序的指称语义奠定了理论基础。
基本方法算术表达式的效果就是根据程序变量当前值计算出表达式的值。程序变量的当前值可以用一个数值向量来表示。如有k个程序变量x1x2…xk,则k维数值向量(n1,n2,…,nk)表示x1的值为n1,x2的值为n2,xk的值为nk。程序变量的一种取值称为程序的一个状态。状态的全体集合称为状态空间,记作State。算术表达式的值的范围记作Num。算术表达式的指称物就是State至Num的一个映象,也就是根据State中的任意一个元素(即程序变量的一组取值)可求得Num中对应的一个元素(即表达式在变量的这组取值下的值)。数学中的映象只反映集合间元素的对应,用映象作为语言成分的指称物在语义的定义中就避免了涉及语言成分的执行过程。State至Num的全体映象,即全体表达式的指称物,记作State→Num。不同的表达式的指称物是不同的,对算术表达式的语义下定义,就是要对每个算术表达式至其指称物的一个对应下定义,故也可表示为一种映象。用Exp表示算术表达式的全体,那么Exp的语义定义,就是Exp至指称物集合(State-Num)的映象,记作
Exp→(State→Num)
常量n是一种算术表达式,变量x本身也是一种算术表达式,两个算术表达式的和及积等也是算术表达式,故算术表达式Exp的抽象语法可用巴科斯-瑙尔范式表示:
指称语义映象
可定义如下:
第一个公式表示,无论程序处于何种状态S,常量n的值不变,为数学中相应的量n。用黑体表示元语言中的符号,为了区分元语言和程序设计语言,指称语义定义中将程序设计语言中的成分用[│及│]括起来。
第二个公式表示,变量xi在状态S时的值为数值向量S的第i个分量Si。
第三、四个公式表示,表达式(e1+e2)和(e1*e2)在状态S时的值分别为子表达式e1和e2在状态S 时的值的和与积。
表达式的抽象语法规定如何用最简单的表达式常量和变量构成其他表达式。而表达式的语义定义也是先给 出最简单的表达式的语义,然后按照语法的构造过程去定义其他表达式的语义,使得复合成分的语义由各成分语义复合而成。这种定义语义的方法叫作结构式方法,或叫语法引导方法。指称语义学就是一种结构式形式语义学。
执行程序设计语言中的语句,导致程序状态的改变(即程序变量取值的改变),故语句的指称物应是State至State的映象:State→State。定义语句的语义就相当于定义映象
:
:Sts→(State→State),
Sts表示所有语句的集合。如
表示赋值语句(xi:=e)的语义即改变状态S 为
。
表示将S 中的第i个分量(即xi的值)改变为表达式e在状态S 时所取的值(即[
|e|](s))。
这表示顺序执行语句S1和S2,就是先执行S1,并将执行S1后形成的新状态
作为当前状态再执行S2。
实际的程序设计语言非常复杂,所定义的语义映象比之上文例举的远为复杂。为了允许同名变量在不同的过程体中表示的值不同,指称语义中引进环境的概念;为了刻划程序控制的转移又引进后续的概念,这些概念在描述和简化语义定义中有重要的作用。
程序设计语言的指称语义独立于语言的实施,便于语言设计者用来规定语言的语义。但已有的程序设计语言因受限于早期计算机的速度和容量,在设计阶段就着重考虑实施的效率,故绝大多数的语言在设计时都从语言的实施角度来规定语言的语义,也就是用 *** 作语义方法来规定语言的语义。新一代计算机系统不仅在速度和容量上是已有的系统所不能比拟的,而且将具有更高的智能。这类系统中的程序设计语言是用来告诉系统要做什么,而不必详述如何去做。指称语义学在未来的程序设计语言中将发挥更大的作用 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)