编译原理第二章
文章目录
引言
什么是数据类型
数据类型实质上是对存储器中所存储的数据进行的抽象。它包含了一组值的集合和一组操作。
数据类型的作用
实现了数据的抽象,从机器的具体特征中解脱出来,提高了编程效率
数据类型的分类
- 内部类型
- 用户定义类型
内部类型
内部类型的特点
内部类型的优越性
-
基本类型不可见某些动态特性不一定能查出,如i/j中j=0
-
编译能检查变量使用的正确性
-
编译时可确定无二意性
-
精度控制
精度说明有利于空间优化
精度说明可作为检查的一种手段
精度说明有利于程序的修改
用户自定义类型
笛卡尔积
有限映像
序列
递归
判断或
幂集
C语言的数据类型
非结构类型
分为内部类型和用户自定义类型
非结构内部类型有整型、实型和字符型
聚合构造
数组
实现有限映像
说明的格式
<类型说明符> <数组名> [常量表达式]
可以定义多维数组
说明的格式
<类型说明符> <数组名> [常量表达式]…[常量表达式]
C语言的数组按行存放
对数组名的处理相当于指针
结构
联合
文件
指针
空类型
抽象数据类型
用户定义类型与内部定义类型的抽象
抽象数据类型的定义
类型检查
静态检查:在编译时的检查
动态检查:在运行时的检查
无类型语言:没有类型的语言
弱类型语言:语言的类型检查不能全部在编译时完成,有些在运行时完成
强类型语言:语言的类型检查全部在编译时完成
类型转换
将一个类型的值转换成另一个类型的值,称为类型转换;
类型转换分为拓展(widening)和收缩(narrowing);
扩展:转换之后的类型值的集合包含转换之前的类型值的集合;
例如:
整型->实型
收缩:转换之前的类型值的集合包含转换之后的类型值的集合;例如:
实型->整型
在某些语言中,类型转换的要求和规则是隐式的,它由编译器自动生成类型转换的代码;
一般来说,语言对基本类型提供适当的类型转换,而对复合类型或用户自定义类型不提供转换;
隐式转换发生在下述的情况下:
混合运算:级别低的类型向级别高的类型值转换。
**将表达式的值赋给变量:**表达式的值向变量类型的值转换。
**实参向函数形参传值:**实参的值向形参的值进行转换。
**函数返回值:**返回值向函数返回类型的值进行转换。
类型等价
若T1和T2是两个类型,T1的任何值都可以赋予T2类型的变量,反之亦然,T1类型的实参可以对应类型T2的形参,反之亦然,则称T1和T2是相容的,或等价的;
两种相容性实现时的比较
①名字等价的实现比较简单
②结构等价的实现需要的模式匹配过程可能十分复杂
实现模型
在实现模型中,数据用描述符和数据对象来表示;描述符用来描述数据对象的所有属性
内部类型和用户定义的非结构类型的实现模型
描述符一般由“类型”和一个指针组成
子界的描述符必须包括子界的界值
布尔型和字符型可以压缩存储
来源:CSDN
作者:谁唱江南断肠句
链接:https://blog.csdn.net/qq_43309286/article/details/104430895