- attribute grammmars
- Ad Hoc
context-sensitive analysis
我们需要知道一些除了基本句意以外的信息,理解输入程序中的计算模型,值得表示,存储与流动,程序如何与外部设备交流。这需要deeper analysis即context-sensitive analysis
用来对代码抽象的方法有很多,我们主要讨论type system
####overview 在这一部分中,我们需要辨析contet-free和context-sensitive的不同:
首先考虑在生成可执行代码时我们需要解决的问题:
对于一个变量x来说:
- 他的值的类型
- 值的大小
- 值应该被维护的时间
对于一个函数来说:
- 其参数的多少,类型,以及去哪里去找我们需要的参数
- 返回值的大小,类型,和去哪里找
还有变量的空间开辟问题
以上提出的问题相当一部分可以通过强类型语言中的类型声明来做,弱类型则要通过推导解决
以上问题大部分都超出了context-free的能力界限。context-free只能理解其syntax,无法理解其meaning。
syntax和meaning的区别在书p164
An introduction To type systems
type是和数据值相关的属性的集合,该集合被所有该类型的值共有。
type system是一系列type的集合和规则来指定程序行为的集合。
The purpose of Type system
type system能够描述确定性语言的形式和行为。可以用来完成以下目的:safety, expressiveness, runtime efficiency
Ensuring Runtime safety
type system 可以辨别有问题的程序在他们执行之前。(不可能消除所有错误)
完成任务的手段:
- 对表达式进行类型推断
- 检查操作符对应的操作数是否满足规则
强类型语言完成infering和checking,而弱类型语言虽然增加了灵活性,但需要实现做大量的运行时推断和检测
Improving Expressiveness
可以更好的使程序行为简洁,例如operator overloading,不同的符号面对不同的类型有不同的含义, context free 做不到。
Generating Better Code
Components of a Type System
- base type
- compound and constructed types
- type Equibalence
- Inference Rules
书上相关内容对inference有一定补充