F. Bannwart
,
P.Müller/Electronic Notes in Theoretical Computer Science 141
(
2005
)
255
ObjectStore和以下函数:
iv
(v
,
f
):V
值
×
F ieldId
→
InstV ar
操作系统
配置a:
=
v
:ObjectStore
×
InstV ar
×
V
alue
→
ObjectStore
操作系统
(f):ObjectStore
×
InstV
ar
→
V alue
操作
系统配置:ObjectStore
×
ClassTypeId→ObjectStore
new
(OS
,
T):ObjectStore
×
ClassTypeId→
值
一
个值
是一个原始类型或引用的值Field Id和ClassTypeId
分别
是字段和类
的唯一标识符。InstVar是程序中所有对象的字段地址的集合。
iv
(v
,
f
)
从对象v得到一个由
f
标识的场的地址。OSa:
=
v返回对象存储,其中实例变
量a被更新为新值v。OST产生存储区,其中分配了类型T的新对象。 new
(OS
,
T)返回OS中T类型的新对象。关于这些函数的公理化,请参见
[18]。
为了在形式语义中统一处理变量和对象存储,我们使用
$
作为当前对
象存储的标识符
2.3
操作语义
在本小节中,我们提出了
VM
K
的操作语义。
配置。一个方法执行的配置函数S
,
σ
,
l由一个状态S、一个计算栈σ和
程序计数器l
组成,
l是下一个要执行的指令的标签。状态将局部变量的标
识符(
sort
V arId)、形式参数和当前对象存储映射到值。计算堆栈是一
个值序列。
状
态(V arId{
this
,
p} →Vvalue {undef})
×
({$} →ObjectStore)
堆栈堆栈
值
对于S
∈
State
,我们将应用程序的S(
x
)写入变量或参数
-
对象存储的
应用程序的
ter identifier
和S(
$
)。 序列(σ
,
e1
,
e2
,
. . )是从σ通过附
加e
1
,然后e
2
等获得的序列。
l是有效标签,即,它在标签集合
{
0
,
.
、
|
p
|
方法主体
p
的
{\displaystyle
p}
。
|
p
|
表示
p
中的指令数。
p
(l)是
p
中标签
l
处的指令。当方法体
p
从上
下文中清除时,我们简单地将
标签
l
处的指令写入
I
l。
指令语义学转移关系
p;
S
,
σ
,
l
→
S
J
,
σ
J
,
l
J
表示在方法体
p
中执行指令I
l
带
来