语法

翻译规则/指称语义

最直觉的规则:

携带(表示当前环境中的变量/参数):

处理语句块

语义中采用的模式为通过 Seq 连接语句,而实际的语言中使用语句块来表示多条语句。

转换模式:计算每条语句的第一条可执行语句和剩余的语句列表。对于嵌套语句块,直接展平。

于是翻译规则可以定义如下:

块作用域

展平语句块后,块作用域的信息丢失了。我们需要在翻译时保留块作用域的信息。

int x = 2;
{ int x = 1; }
return x;

对嵌套作用域内的变量提前重命名:

int x = 2;
{ int x' = 1; }
return x;

语句命名

带有语句命名的语法:

从语句块到带命名的语句的转换: