A. Di Pierro
等人理论计算机科学电子笔记
190
(
2007
)
59
[[a]]
a
σ=n [[
x
]]
a
σ=σ
(
x
)
[a
1
<$a
2
]]
a
σ=[[a
1
]]
a
σ<$[[a
2
]]
a
σ
[[
TRUE
]]
b
σ
=
TRUE
[[
FALSE
]]
b
σ
=
FALSE
[[<
$b]]
b
σ=<$[[b]]
b
σ
[[
b
1
<$
b
2
]]
b
σ
=[[
b
1
]]
b
σ
<
$[[
b
2
]]
b
σ
[[b
1
<$
b
2
]]
b
σ=[[b
1
]]
b
σ
<
$[[b
2
]]
b
σ
[[
a
1
>
a
2
]]
b
σ
=
[[
a
1
]]
b
σ
>
[[
a
2
]]
b
σ
表2表达式
算术和布尔表达式的值由函数[. ]]
a
和[. ]]
b
在表2中定义。我们将从函数[中省略
索引
。
”当它是明确的从上下文。
一个
配置
是由一个陈述
S
和一个状态
σ
∈
State组成的一对S,σ ∈。
概率转
移关系−→
p
由表
1
中的规则定义。这些
除了存在标记每个转换的概率之外,它还反映了经典while语言的典型语义。最后的
状态是通过一个在配置上的循环来表示
的。
这允许我们将计算建模为马尔可夫链
因为它保证表示
pWhile
程序
是一个随机矩阵(cf.第3.1节)。
2.2.2
抽象语法
按照
[16]
中的方法,为了确定 对于一个程序,不管每个语句执行的实际状态的具体
信息如何,我们都将一个来自集合
Lab的
标签与每个赋值关联起来。
语句、skip语句以及出现在条件和
循环语句我们称结果程序为
标号程序
,并定义其语法,我们称之为
抽象语法
,如下
所示:
S
::
=
[
skipp
]
l
|
[
st
op
]
l
|
[
x
←
a
]
l
|
S1
;
S2
|
[
ch
oo
se
]
l
p
1
:
S
1
or
p
2
:
S
2
|
while[ b ] l do S en d while
|
w
hile
[
b
]
l
do
S
end
w
hile
我们将把基本标记指令称为
命令
,并用Cmd表示具有典型元素
c1
,
c2
,
.. . ,对应于前
[
skip
]
l
或
[
b
]
l
,
etc
的状态。
我们
将
把
u
me
a
un
iqu
e
l
ab
lin
g
of
commands
,即我们将把
l
与c互换使用,其中c是带有标签l的基本指令;这有时被称为标签一致性属性[16]。程
序S的控制流
FS
则
被定义为一组对(l
,
l
J
)
或{c
1
,
c
2
},它们记录了这样一个事实,即
在执行c
1
之后,下一个执行的命令可能是c
2
(从测试的具体结果中抽象出来)。
原则上,可以从FS中的
对
l
,
l
J
重建原始程序S的语法:我们只需要指出当测试成
功或失败时采取哪个分支;并且对于概率选择,我们需要记录转移概率。如果我们这
样做,S的控制流
FS
,有时也被称为它的抽象语法
[5]
,可以被视为程序语法的另一
种描述。在本文中,我们将使用术语控制流和抽象语法