一片自留地 斯坦福 CS143(编译原理)操作语义

magicyang · 2021年03月13日 · 1754 次阅读

语义综述

编译整体结构:

语言的真正实现存在了大量细节:

这里引入操作语义的概念:

补充两个语义概念:

操作语义

符号定义:

和类型检查类似,这里的 result 是 value,类型检查的 result 是 type.
示例:

这里用

记录 scope 和对应的值。
举例说明:

Cool 语言中的元素描述:

特例:

Cool 操作语义的表达方式:

注意点:

  1. so,E 在 expression 操作过程中不会改变。
  2. 只有运算完成后,才会又返回值。


理解对于 object,申请之后元素地址内容可以变,地址资源不会变。
整体上看确实不易理解。

cool 语义说明:

常量:

获取属性:


self:

赋值:


这里地址会发生变化。

运算:


这里看到 e1 的 S1 依赖 S,e2 的 S2 依赖 S1.
通用顺序表达式:

举例说明:

注意这里 [l<-12] 表示存储 12 的地址。

条件表达式:


这里是 true 的示例,false 与之对称。

Loop:


let:



这里申请 newloc 有点绕。

object 生成:


初始化值:

cool 在创建时可以传入初始数据

其 attribute 顺序按照 greatest ancestor。
对象创建对应的语义:

函数调用:



函数调用的表达式:

函数调用总结:

操作语义时依赖于类型检查的,类型检查可以规避也写错误判断。

操作语义总结:

个人总结,操作语义过于抽象,看的我就想睡觉。。。。

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册