跳过正文

Reading Log for Fernández's Programming Languages and Operational Semantics

·229 字·2 分钟

By Chapter
#

2: Mathematical Background
#

2.3 Transition System
#

一个transition system由以下要素构成:

  • 一个集合 \(Config\),由所有可能的 configuration 或 state 组成;
  • \(Config\) 上的一个二元关系,记为 \(\rightarrow\),它满足 \(\rightarrow \subseteq Config \times Config\);

Inital/Final subset: \(Config\) 的一个子集,分别记为 \(I\) 和 \(T\)。

  • 显然我们可以有这样的结论:\(\forall c\in T, c\not\to\).

4: 指令式语言的操作语义(以 SIMP 为例)
#

4.3 SIMP 的结构式操作语义
#

总体而言,

  • 小步语义(small-step semantics)是归约(reduction)的语义,更关心程序的执行过程;
  • 大步语义(big-step semantics)是评估(evaluation)的语义,更关心程序的最终结果(我更愿意称之为机器状态改变的情况)

SIMP 的小步语义为例,

Configurations 的形式为

$$ \langle P, s \rangle, $$

其中 \(P\) 是一个 SIMP 程序,\(s\) 是一个存储(store)。存储的表示形式是一些从地址(locations)到整数(integers) 的偏函数(partial function)。

  • \(s\left[ l\mapsto n\right]\) 表示在存储 \(s\) 上更新地址 \(l\) 的值为 \(n\)。

常见的其他记号:\(!l\) 表示解引用.

小步语义的 reduction 即为 configuration 之间的 transition 关系,通常记为 \(\rightarrow\).

SIMP 的小步语义的具体规则可以参考这本书 p78 的 Fig.4.2.

可以推演一个“交换x和y”的程序来体会小步语义的细节(Example 4.8)。(假设\(s(z)= 0, s(x)= 1, s(y)= 2\))

$$ \begin{align} \langle z\coloneqq !x; (x\coloneqq !y; y\coloneqq z), s\rangle \rightarrow& \langle z\coloneqq 1; (x\coloneqq !y; y\coloneqq z), s\rangle\\ \rightarrow& \langle skip,(x\coloneqq !y; y\coloneqq z), s[z\mapsto 1]\rangle \\ \rightarrow& \langle x\coloneqq !y; y\coloneqq z, s[z\mapsto 1]\rangle \\ \rightarrow& \langle x\coloneqq 2; y\coloneqq z, s[z\mapsto 1]\rangle \\ \rightarrow& \langle skip, y\coloneqq z, s[z\mapsto 1,x\mapsto 2]\rangle \\ \rightarrow& \langle y\coloneqq z, s[z\mapsto 1,x\mapsto 2]\rangle \\ \rightarrow& \langle y\coloneqq 1, s[z\mapsto 1,x\mapsto 2]\rangle \\ \rightarrow& \langle skip, s[z\mapsto 1,x\mapsto 2,y\mapsto 1]\rangle \end{align} $$

Final configurations即为不可归约(irreducible)的 configuration。(在 SIMP 中它一般是以下这样的形式:

  • \(\langle n, s\rangle\),其中 \(n\) 是一个整数;
  • \(\langle b, s\rangle\),其中 \(b\) 是一个布尔值;
  • \(\langle !l, s\rangle\),其中 \(l\not\in dom(s)\)(相当于是未定义的变量);
  • \(\langle skip, s\rangle\)。

要讨论大步语义,就得先定义 Evaluation 是什么。

大步语义的 evaluation 也是 configuration 之间的 transition 关系,通常记为 \(\Downarrow\).

SIMP 的大步语义的具体规则可以参考这本书 p82 的 Fig.4.3.

对前面的同一个问题,用大步语义分析时可以直接分步使用 (var) 规则和 (seq) 规则。和小步语义对比的话,小步语义必须遵循程序的执行顺序来得到 transition 的过程(非常符合指令式程序的运行直觉),而大步语义则更关注“程序可以从这个状态转变为那个状态”,并且可以直接合理组装所需要的结论得到最终结论。

Others
#

WIP