程序设计语言与编译-编译原理_数据类型

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计语言与编译
结构、共用体举例
name num
type
Score
chen
00000Hale Waihona Puke Baidu2 teacher
situation Hardworking
Zhang 2000112 student 90,88,99,89
20
程序设计语言与编译
结构、共用体举例
Struct { char name[10];
结果00100010
8
程序设计语言与编译
2.编译时能检查变量使用的正确性 进行静态类型检查,如非法运算,形实参类型匹配 (某些动态特性不一定能查出,如i/j中j=0) 3.编译时可以确定无二义的操作
超载(多态)的概念:运算符的意义依赖于操作数的类 型。如“+”可以表示整数加或实数加 编译时,可拒绝混合运算,或提供类型转换指令 合理地使用超载,可以提高语言的可读性和可用性
9
程序设计语言与编译
4.精度控制 可以通过数据类型显式定义数据的精度 精度说明有利于空间优化 精度说明可作为检查的一种手段 精度说明有利于程序的修改
10
程序设计语言与编译
第三节 用户定义类型
许多语言除了定义内部类型外,还允许程 序员定义新的数据类型,规定基本数据对象的 聚合,乃至聚合的聚合。
How to define?
例:二叉树可通过递归类型 来定义。它的左子树和右子 树分别是另一棵二叉树。
18
程序设计语言与编译 5.判定或 定义:判定或是一个选择对象结构的构造机制, 规定在两个不同选择对象之间作出适当的选择; 每一选择对象结构称为变体。
例如:PASCAL和ADA中的变体 记录; C和ALGOL68中的联合。
19
Int num; Char type[8]; Union { float score[10];
Char situation[40]; }state; }person[2];
21
程序设计语言与编译 6.幂集
定义:类型T的元素所有子集的集合,称为幂集, 记为Powerset(T),T称为基类型。
幂集类型的操作: 由于具有该类型的变量的值是一个子集,因此它
串的一般操作有4种: 连接 首项选取 尾项选取 子串
例:串是从所周知的序列,
其成分类型为字符;顺序文 件的思路也来自序列的概念
17
程序设计语言与编译
4.递归
定义:若数据类型T包含属于同一类型T的成份, 那么类型T称为递归类型。
递归类型的特点: 1) 允许在类型定义中使用被定义类型的名字 2) 指针是建立递归数据对象的重要手段
11
程序设计语言与编译 1. 笛卡尔积
定 义 : N 个 集 合 A1,A2,…,An 的 笛 卡 尔 积 表 示 为 A1A2…An , 它 是 一 个 集 合 , 其 元 素 为 (a1,a2,…,an), 其中 aiAi
在语言中 对应什么 构造?
12
程序设计语言与编译
例:对于如前定义的多边形,有两个域no-of-edges和edge-
一. 内部类型的特点
• 内部类型反映基本硬件特性 • 在语言级,内部类型是共用某些操作的
数据对象的抽象表示
7
程序设计语言与编译
二. 内部类型的优越性
1.基本表示的不可见性
• 基本位串对程序员是不可见的。 • 优点:
导致不同的程序设计风格 可写性 可读性 例:25+9=34 可修改性 基本表示00011001+00001001
15
程序设计语言与编译 有限映像(射)的一些特点 DT到相应值的特定子集的绑定策略:
.编译时绑定 (静态数组) .对象建立时绑定 (执行到分程序时,
动态数组) .对象处理时绑定(对APL,子集范围可变)
16
程序设计语言与编译 3.序列
定义:序列由任意多个数据项组成,这些数据项 称为该序列的成分,且类型相同(记为CT)。
2
程序设计语言与编译
2.1 引言
1. 数据类型的作用
实现了数据抽象 从机器的具体特征中解脱出来 提高了编程效率
3
程序设计语言与编译
语言的某种特定的数据抽象受到两个 因素的影响:
语言所面向的机器(只提供定点运算或 同时提供浮点运算);
语言所面向的应用领域。
4
程序设计语言与编译
2. 数据类型的分类
内部类型 自定义类型
5
程序设计语言与编译
语言根据所面向的机器和应用定义 了不同的数据类型,这些类型称为内 部类型(语言定义类型 )。
自Pascal 语言开始,语言提供了 由用户定义类型的方法。采用这类方 法由用户自己定义的数据类型称为用 户定义类型(自定义类型)。
6
程序设计语言与编译
第二节 内部类型
t1.edge-size = 3.75;
注意:语言把笛卡尔积数据对象看成由若干个域组成, 每个域有一个唯一的名字;通常用域名来选取域,对它进行 修改;
13
程序设计语言与编译 2. 有限映像(射)
定义:从定义域类型DT(domain type)的值的 有限集合,到值域类型RT(range type)的值 的有限集合的函数称为有限映像(射) 。
们的基本操作是集合的操作,比如:联合、与、以及 测试某个元素是否在一个集合中等。
size,
边数
Struct polygon
{int no-of-edges;
表示为
double e任dg意e-正si多ze边形
integer real
}t1;
若tt11是.在 称 称n一oC为为个-oO记结边fB-录构长eOdL;。为ge和在7s.PA5=A3LS的3GC;每等AOL边L边中中边三长角形(3,3.75),则可以写为:
程序设计语言与编译
第二章 数据类型
数据类型实质上是对存储器中所存储的数据 进行的抽象。它包含了一组值的集合和一组 操作。
1
程序设计语言与编译
本章内容
1、将类型作为数据结构的抽象表示 可以分为三个层次的抽象,即 内部类型、用户定义类型和抽象数据类型
2、数据类型与编译有关的几个问题 3、类型的实现模型
在语言中 对应什么 构造?
14
程序设计语言与编译 有限映像(射)的一些特点
在高级语言中通常体现为数组构造; 值域对象通过下标选取 下标越界会出错,动态检查 下标可用来选取值域的多个元素(如数组的分割、切片)
SNOBOL4的ARRAY构造符并不要求值域集的所有元素是同 一类型的
例如:Char array[50] 可看成是从0到49的整数到字符 集的有限映像
相关文档
最新文档