类型

不同语言对类型有着不同的定义。非严谨的概括是:类型约等于数据+操作

数据是一个类型所包含的所有取值集合,操作是一个类型支持的所有操作集合。类型检查是计算各个表达式的类型,检查各个运算是否是相关类型所支持的合法操作。

基本类型的变量声明

语句文法

语句:

SDSASεAid=ES \rightarrow D S|A S| \varepsilon \\ A \rightarrow \mathbf{i d}=E

变量声明:

DTLTintfloatLL,ididD \rightarrow T L \\T \rightarrow int \mid float \\ L \rightarrow L , id | id

属性文法没有副作用,但是增加了描述的复杂度。比如语法分析时,如果没有副作用,标识符表就必须作为属性传递。可以把标识符表作为全局变量,然后通过函数来添加新的标识符。如果我们允许属性文法有受控的副作用,这样就不会对属性求值产生约束,既可以按照任何拓扑顺序求值,不会影响最终结果。比如我们可以在变量声明SDD中有受控副作用:

类型结构

类型的含义:

  • 类型包括两个部分:T->BC,基本类型是B,分量是C

  • 分量形如[2][3],表示二维数组

  • 数组构造算符array(n,t)

总结:

  • 通过带副作用的SDD分析变量类型

  • 通过L属性的SDD分析数组类型

Last updated