文档介绍:该【编译原理类型检查公开课获奖课件赛课一等奖课件 】是由【业精于勤】上传分享,文档一共【100】页,该文档可以免费在线阅读,需要了解更多关于【编译原理类型检查公开课获奖课件赛课一等奖课件 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。第六章 类型检查
内容
类型系统
类型体现式的等价
类型转换
函数和运算符的重载
多态函数
一致化算法
静态检查(static checking)
类型检查(type check)
操作对象必须与操作符匹配:函数名相加×
控制流检查(flow-of-control check)
break必须退出while、for、switch…
唯一性检查(uniqueness check)
对象(变量、标号…)定义必须唯一
名字关联检查(name-related check)
相似名字在不一样位置
类型检查
检查语法构造的类型与上下文匹配
简单的类型检查
两个类型的匹配
代码生成要运用类型信息
重载,多态
类型系统
语法构造、类型、将类型赋予语法构造
+, -, *的两个运算数均为整数,成果为整数
&的成果为指向操作对象的指针,若操作对象类型为T,成果类型为“指向T的指针”
每个体现式均有一种有关联的类型
类型是有构造的!——指针
基本类型:语言内部支持类型
构造类型:组合基本类型构成新类型
类型体现式
type expression——用以表达语言构造的类型
基本类型或用类型构造符组合基本类型
基本类型:boolean, char, integer, real, type_error, void
类型名
类型体现式(续)
类型构造符
数组:T是类型体现式,I为索引集合(整数范围),则array(I, T)是一种类型体现式,表达元素为类型T的数组类型int A[10];——array({0, …, 9}, integer)
笛卡儿积:T1、T2为类型体现式,则T1×T2为类型体现式
类型体现式(续)
记录:与笛卡儿积的不一样之处仅在于记录的域有名字。<域名,域类型>元组typedef struct { int address; char lexeme[15];} row;row table[101];类型体现式为:record((address×integer)× (lexeme×array({0, …, 15}, char)))
类型体现式(续)
指针:T为类型体现式,则pointer(T)为类型体现式,表达“指向类型为T的对象的指针”类型row *p;——pointer(row)
函数:数学上,一种集合“定义域”到另一种集合“值域”的映射。程序语言,定义域类型D到值域类型R的映射:DR。%运算符——(int×int)intint *f(char a, char b);——(char×char)pointer(integer)不考虑函数返回数组、函数类型的状况(integerinteger)(integerinteger)
可使用类型体现式变量
图表达类型体现式
(char×char)pointer(integer)