Prog2
本文最后更新于 2026年5月27日 晚上
本来感觉没啥难的,半路杀出一个和 Prog1 一样恶心的语法,记录一下。
Formal Semantics
这里依然是取一个子集, 我们叫它 C0.
Tokens
1 | |
两个函数
我们有两层抽象:
- 变量名到地址,用 表示
- 地址到储存的值,用 表示
理论上来说, state , 但有了语法糖我们直接写变量名到值的语法糖也行。
注意如果有 NULL 地址的话好像还是得分开写。
Config & Execution Trace
进一步,我们定义 Config 为
然后 Execution Trace 就是一个程序执行后 的集合。所以是:
Eval
这里分为两种 Eval : R and L
R 出 Val, L 出地址。
两个可以通过 互转
Termination
到这里应该可以看出来这个是状态机模型了。
这里 Terminate 的定义是对于一个 Execution Trace , 不存在 使得 , 那么有 , 也即这个 Config terminate 于 . 反之就不 Terminate。
Pointer Support
记住 R 出 Val, L 出 地址
这个需要在 Eval 部分新加两个语法:
Prog2
https://chenxizhou233.github.io/posts/9ee7703c.html