首页 >
操作语义学
✍ dations ◷ 2025-10-29 10:42:26 #操作语义学
操作语义学是计算机科学中的一个概念,它是使得计算机程序在数学上更加严谨的一种手段。其它类似的手段包括提供形式语义学,包括公理语义学和指称语义。一个计算机语言的操作语义描述一段合理的程序是怎样被理解为一系列计算机步骤的。这些步骤就是这个程序的意义。在函数编程语言中一段终结性的序列在最后一步的返回程序的值。(由于一个程序可能是非非决定的,一般来说一个程序能够有许多不同的计算步骤和许多不同的返回值。)操作语义最早被用来定义Algol 68的语义。下面这句话引用修正的ALGOL 68报告:一个使用严格语言编写的程序的意义是通过一个假设的计算机来执行该程序的组成部分时完成的行动来解释的。(Algol68,第二章)丹纳·司科特是第一个在今天的这个定义下使用操作语义这个概念的(Plotkin04b)。以下是司科特关于形式语义学的讲稿,其中他提到了语义的“操作”观点。把目光注意使得语义在更‘抽象’和更‘清晰’可以,但是假如把操作方面完全忽略的话这个计划毫无用处。(Scott70)戈登·普罗特金(Gordon Plotkin)在(Plotkin04a)中引入了结构操作语义的概念作为一个定义操作语义的逻辑方式。其基本主意是使用程序组成部分的行为来定义一个程序的行为,由此来提供一个对操作语义结构性的,即按照句法和归纳性的,分析。结构操作语义对一个程序的行为的说明是通过一(组)变化关系来表示的。其形式是一系列推理规则,这些推理规则通过一组句法的转换来定义该组的合理转换。比如我们考虑一个简单计算机语言的部分语义,在Plotkin04a和Hennessy90以及其它教科书中有相应的图像。设
C
1
,
C
2
{displaystyle C_{1},C_{2}}
为该语言的程序域,
s
{displaystyle s}
是状态域(即函数的存储地址及值)。假如我们有表述(
E
{displaystyle E}
的域)、值(
V
{displaystyle V}
)和存储地址(
L
{displaystyle L}
),则一个存储更新指令的语义为:
⟨
E
,
s
⟩
⇒
V
⟨
L
:=
E
,
s
⟩
⟶
(
s
⊎
(
L
↦
V
)
)
{displaystyle {frac {langle E,srangle Rightarrow V}{langle L:=E,,,srangle longrightarrow (suplus (Lmapsto V))}}}使用普通语言,这个公式说假如在
s
{displaystyle s}
状态的
E
{displaystyle E}
的值为
V
{displaystyle V}
则程序
L
:=
E
{displaystyle L:=E}
会通过
L
=
V
{displaystyle L=V}
更新
s
{displaystyle s}
的状态。系列的语义可以用下列规则来表达:
⟨
C
1
,
s
⟩
⟶
⟨
C
1
′
,
s
′
⟩
⟨
C
1
;
C
2
,
s
⟩
⟶
⟨
C
1
′
;
C
2
,
s
′
⟩
⟨
C
1
,
s
⟩
⟶
s
′
⟨
C
1
;
C
2
,
s
⟩
⟶
⟨
C
2
,
s
′
⟩
⟨
s
k
i
p
,
s
⟩
⟶
s
{displaystyle {frac {langle C_{1},srangle longrightarrow langle C_{1}',s'rangle }{langle C_{1};C_{2},,srangle longrightarrow langle C_{1}';C_{2},,s'rangle }}quad {frac {langle C_{1},srangle longrightarrow s'}{langle C_{1};C_{2},,srangle longrightarrow langle C_{2},s'rangle }}quad {frac {}{langle mathbf {skip} ,srangle longrightarrow s}}}第一个规则说假如处于状态
s
{displaystyle s}
的程序
C
1
{displaystyle C_{1}}
可以被简化为处于状态
s
′
{displaystyle s'}
的程序
C
1
′
{displaystyle C_{1}'}
的话则处于状态
s
{displaystyle s}
的程序
C
1
;
C
2
{displaystyle C_{1};C_{2}}
能被简化为处于状态
s
′
{displaystyle s'}
的程序
C
1
′
;
C
2
{displaystyle C_{1}';C_{2}}
。第二个规则说假如处于状态
s
{displaystyle s}
的程序
C
1
{displaystyle C_{1}}
以状态
s
′
{displaystyle s'}
结束的话,则处于状态
s
{displaystyle s}
的程序
C
1
;
C
2
{displaystyle C_{1};C_{2}}
可以简化为处于状态
s
′
{displaystyle s'}
的程序
C
2
{displaystyle C_{2}}
。这里的语义是结构化的,因为程序序列
C
1
;
C
2
{displaystyle C_{1};C_{2}}
的意义是由
C
1
{displaystyle C_{1}}
的意义和
C
2
{displaystyle C_{2}}
的意义定义的。假如我们还有状态的布尔函数表示
B
{displaystyle B}
的话我们可以定义while指令的语义:
⟨
B
,
s
⟩
⇒
t
r
u
e
⟨
w
h
i
l
e
B
d
o
C
,
s
⟩
⟶
⟨
C
;
w
h
i
l
e
B
d
o
C
,
s
⟩
⟨
B
,
s
⟩
⇒
f
a
l
s
e
⟨
w
h
i
l
e
B
d
o
C
,
s
⟩
⟶
s
{displaystyle {frac {langle B,srangle Rightarrow mathbf {true} }{langle mathbf {while} B mathbf {do} C,srangle longrightarrow langle C;mathbf {while} B mathbf {do} C,srangle }}quad {frac {langle B,srangle Rightarrow mathbf {false} }{langle mathbf {while} B mathbf {do} C,srangle longrightarrow s}}}这样的定义允许对程序行为进行公式化的分析和研究程序间的关系。由于结构操作语义看上去非常易懂,结构简单,因此它获得了很大的欢迎,实际上成为定义操作语义的标准。结构操作语义最初的报告因此获得了约900次引用,成为计算机科学中被引用最多的技术报告之一。
相关
- 并发症并发症(complication)指在疾病发展过程中之续发性反应所造成的结果,是医学、病理,可能是因为病患在医疗或护理过程中,因为一种疾病合并引发其他的另一种或几种疾病。
- 诊断方法诊断,在医学意义上指对人体生理或精神疾病及其病理原因所作的判断。作出这种判断一般需要的的资料有:医生等专业人员根据症状、病史(包括家庭病史)、病历及医疗检查结果等。其概
- 瑞德西韦GS-5734 伦地西韦瑞德西韦(英语:Remdesivir),又译伦地西韦,是由美国吉利德科学公司开发的一种新型实验性广谱抗病毒药物,用来针对埃博拉病毒及被认为可以有效抑制呼吸道上皮细胞
- 热能食物热量(英语:Food energy),泛指食物经过消化,通过细胞的代谢,所能获得的能量。单位以每公克焦耳或每公克卡路里方式表示。在实验室中,将食物燃烧,去计算其燃烧所消耗的重量,与其加
- 蟠尾丝虫症蟠尾丝虫症或蟠尾丝虫病(拉丁语:Onchocerciasis),又名河川盲、河盲症(river blindness),是一种因感染蟠尾丝虫引起的疾病。病状包括严重搔痒、皮下肿块,以及失明。是全球仅次于沙眼
- 卡马西平卡马西平(Carbamazepine,简称CBZ),商品名得理多(Tegretol)是一种治疗癫痫病和神经性疼痛(英语:neuropathic pain)的药物。同样能治疗癫痫病的还有苯妥英及丙戊酸等等,但对失神性发作(英
- 阿德里安堡战役阿德里安堡战役也作哈德良堡战役,是公元378年罗马帝国军队与反叛的哥特人之间的一次战斗,发生在当时罗马帝国的色雷斯行省马里查河河畔的阿德里安堡(也称为哈德良堡),位于今天的
- 肚脐肚脐、脐,俗称肚脐眼,中医称之为“神阙”,从本质上来说是胎儿出生后,脐带脱落后留下的疤痕。肚脐位于髂前上棘水平的腹部正中线上,直径约为1.0至2.0公分。它通常可以是一个小凹陷
- 以人口排列的语言列表本条目为主要语言人口列表,罗列现时世上主要语言的语言人口,并依其人口排序。所谓语言人口,系指以该语言为母语的人口。由于不同统计之间的数据有所分别(有以母语为基础,或以第一
- 尼罗-撒哈拉语系尼罗-撒哈拉语系分布于非洲的尼罗河沿岸,尼日尔河沿岸以及非洲中部的撒哈拉地区,包括了中苏丹语族、东苏丹语族、撒哈拉语族、桑海语族、马巴语族等语族。多为声调语言,名词有
