编译原理第二章

别等时光非礼了梦想. 提交于 2020-02-21 19:51:38

编译原理第二章

引言

什么是数据类型

数据类型实质上是对存储器中所存储的数据进行的抽象。它包含了一组值的集合和一组操作。

数据类型的作用

实现了数据的抽象,从机器的具体特征中解脱出来,提高了编程效率

数据类型的分类

  • 内部类型
  • 用户定义类型

内部类型

内部类型的特点

内部类型的优越性

  • 基本类型不可见某些动态特性不一定能查出,如i/j中j=0

  • 编译能检查变量使用的正确性

  • 编译时可确定无二意性

  • 精度控制

    精度说明有利于空间优化
    精度说明可作为检查的一种手段
    精度说明有利于程序的修改

用户自定义类型

笛卡尔积

有限映像

序列

递归

判断或

幂集

C语言的数据类型

非结构类型

分为内部类型和用户自定义类型
非结构内部类型有整型、实型和字符型

聚合构造

数组

实现有限映像
说明的格式
<类型说明符> <数组名> [常量表达式]

可以定义多维数组
说明的格式
<类型说明符> <数组名> [常量表达式]…[常量表达式]

C语言的数组按行存放
对数组名的处理相当于指针

结构

联合

文件

指针

空类型

抽象数据类型

用户定义类型与内部定义类型的抽象

抽象数据类型的定义

类型检查

静态检查:在编译时的检查

动态检查:在运行时的检查

无类型语言:没有类型的语言

弱类型语言:语言的类型检查不能全部在编译时完成,有些在运行时完成

强类型语言:语言的类型检查全部在编译时完成

类型转换

将一个类型的值转换成另一个类型的值,称为类型转换;
类型转换分为拓展(widening)收缩(narrowing)

扩展:转换之后的类型值的集合包含转换之前的类型值的集合;

例如:
整型->实型

收缩:转换之前的类型值的集合包含转换之后的类型值的集合;例如:
实型->整型

在某些语言中,类型转换的要求和规则是隐式的,它由编译器自动生成类型转换的代码;
一般来说,语言对基本类型提供适当的类型转换,而对复合类型或用户自定义类型不提供转换;

隐式转换发生在下述的情况下:
混合运算:级别低的类型向级别高的类型值转换。
**将表达式的值赋给变量:**表达式的值向变量类型的值转换。
**实参向函数形参传值:**实参的值向形参的值进行转换。
**函数返回值:**返回值向函数返回类型的值进行转换。

类型等价

若T1和T2是两个类型,T1的任何值都可以赋予T2类型的变量,反之亦然,T1类型的实参可以对应类型T2的形参,反之亦然,则称T1和T2是相容的,或等价的;

两种相容性实现时的比较
①名字等价的实现比较简单
②结构等价的实现需要的模式匹配过程可能十分复杂

实现模型

在实现模型中,数据用描述符和数据对象来表示;描述符用来描述数据对象的所有属性

内部类型和用户定义的非结构类型的实现模型

描述符一般由“类型”和一个指针组成

子界的描述符必须包括子界的界值
布尔型和字符型可以压缩存储

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!