类型表达式 类型的等价性 按名等价: type tp= array[1..10] of integer var a, b tp: 则称a,b是相同类型的变量 结构等价: type tp1 array[1..10] of integer type tp2=array [1.10]of integer var a: tpl b: tp2; 则称a,b是相同类型的变量 类型的相容性
类型表达式 类型的等价性 按名等价:type tp=array[1..10]of integer; var a,b:tp; 则称a,b是相同类型的变量 结构等价:type tp1=array[1..10]of integer type tp2=array[1..10]of integer; var a:tp1; b:tp2; 则称a,b是相同类型的变量 类型的相容性
类型相容性 运算分量类型的相容性 ÷赋值语句左右类型的相容性; 形参和实参类型的相容性 类型相容: ◆类型等价则相容 ◆整型或整型子界类型与整型、实型相容 ◆两个子界类型定义的范围相包含则相容 ◆对结构类型,如果同一结构,且子类型 相容则相容
类型相容性 运算分量类型的相容性; 赋值语句左右类型的相容性; 形参和实参类型的相容性; 类型相容: ⬧类型等价则相容 ⬧整型或整型子界类型与整型、实型相容 ⬧两个子界类型定义的范围相包含则相容 ⬧对结构类型,如果同一结构,且子类型 相容则相容
类型的分析 作用:构造类型的内部表示,类型检查。 分析过程:读 Token序列,识别出各种类型, 类型检查,返回类型内部表示的地址 array arrKind ow=1 tp1=intPtr 10 up=10 tp2=intPtr IndexPtr=(1, subTy, intPtr, 1,10) of integer ElemPtr=intPtr size=(up-low+1)*sizeof (int) aPtr:=(size, arrTy, IndexPtr, ElemPtr)
类型的分析 作用:构造类型的内部表示,类型检查。 分析过程:读Token序列,识别出各种类型, 类型检查,返回类型内部表示的地址。 array [ 1 .. 10 ] of integer arrKind … low=1 tp1=intPtr … up=10 tp2=intPtr IndexPtr= (1,subTy, intPtr ,1 ,10) … … ElemPtr=intPtr size=(up-low+1) * sizeof (int) aPtr := ( size, arrTy, IndexPtr, ElemPtr )
类型出现的位置: 类型定义 TYPE id=t; 变量声明 VAR id:t 过/函声明 Proce/ Func p(A1:t…,)(:t 类型的种类: name, subr ange, enum, array record, set file, pointer ÷类型分析模块: 类型检查,返回类型的内部表示地址Pr和 Forward
类型出现的位置: 类型定义 TYPE id = t; 变量声明 VAR id : t; 过/函声明 Proce/Func P(A1:t1,…)(:t) 类型的种类: name,subrange,enum,array,record,set, file,pointer…… 类型分析模块: 类型检查,返回类型的内部表示地址Ptr和 Forward
NameType 形式:id(类型标识符) ÷处理思想: 查符号表→>无声明错 ◆ type ind? ◆ TypePtr为Ptr的值 ◆ Forward:=0
NameType 形式:id (类型标识符) 处理思想: ⬧ 查符号表 → 无声明错 ⬧ typekind ? ⬧ TypePtr 为Ptr的值 ⬧ Forward:=0