第五章类型检查 记号语法 中间 语法类型语法代码厂表示 中间 流分析树检查 器 器 树 生成 器 本章内容 静态检查中最典型的部分一类型检查: 类型系统、类型检查、多态函数、重载 忽略其它的静态检査:控制流检查、唯一性检查、 关联名字检查
第五章 类 型 检 查 本章内容 – 静态检查中最典型的部分 — 类型检查: 类型系统、类型检查、多态函数、重载 – 忽略其它的静态检查:控制流检查、唯一性检查、 关联名字检查 语法 分析 器 类型 检查 器 中间 代码 生成 器 语 法 树 语 法 树 中间 表示 记号 流
5.1类型在编程语言中的作用 511执行错误和安全语言 介绍一些和程序运行有联系的概念
5.1 类型在编程语言中的作用 5.1.1 执行错误和安全语言 介绍一些和程序运行有联系的概念
5.1类型在编程语言中的作用 511执行错误和安全语言 1、程序运行时的执行错误分成两类 会被捕获的错误( trapped error)
5.1 类型在编程语言中的作用 5.1.1 执行错误和安全语言 1、程序运行时的执行错误分成两类 • 会被捕获的错误(trapped error)
5.1类型在编程语言中的作用 511执行错误和安全语言 1、程序运行时的执行错误分成两类 会被捕获的错误( trapped error) 例:非法指令错误
5.1 类型在编程语言中的作用 5.1.1 执行错误和安全语言 1、程序运行时的执行错误分成两类 • 会被捕获的错误(trapped error) – 例:非法指令错误
5.1类型在编程语言中的作用 511执行错误和安全语言 1、程序运行时的执行错误分成两类 会被捕获的错误( trappederror) 例:非法指令错误、非法内存访问
5.1 类型在编程语言中的作用 5.1.1 执行错误和安全语言 1、程序运行时的执行错误分成两类 • 会被捕获的错误(trapped error) – 例:非法指令错误、非法内存访问
5.1类型在编程语言中的作用 511执行错误和安全语言 1、程序运行时的执行错误分成两类 会被捕获的错误( trappederror) 例:非法指令错误、非法内存访问、除数为零 引起计算立即停止 不会被捕获的错误( untrapped error) 例:下标变量的访问越过了数组的末端 例:跳到一个错误的地址,该地址开始的内存正 好代表一个指令序列 错误可能会有一段时间未引起注意
5.1 类型在编程语言中的作用 5.1.1 执行错误和安全语言 1、程序运行时的执行错误分成两类 • 会被捕获的错误(trapped error) – 例:非法指令错误、非法内存访问、除数为零 – 引起计算立即停止 • 不会被捕获的错误(untrapped error) – 例:下标变量的访问越过了数组的末端 – 例:跳到一个错误的地址,该地址开始的内存正 好代表一个指令序列 – 错误可能会有一段时间未引起注意
5.1类型在编程语言中的作用 511执行错误和安全语言 2、良行为的程序 不同场合对良行为的定义略有区别 例如,没有任何不会被捕获错误的程序 3、安全语言 任何合法程序都是良行为的 通常是设计一个类型系统,通过静态的类型检查 来拒绝不会被捕获错误 但是,设计一个类型系统,它正好只拒绝不会被 捕获错误是非常困难的
5.1 类型在编程语言中的作用 5.1.1 执行错误和安全语言 2、良行为的程序 – 不同场合对良行为的定义略有区别 – 例如,没有任何不会被捕获错误的程序 3、安全语言 – 任何合法程序都是良行为的 – 通常是设计一个类型系统,通过静态的类型检查 来拒绝不会被捕获错误 – 但是,设计一个类型系统,它正好只拒绝不会被 捕获错误是非常困难的
5.1类型在编程语言中的作用 511执行错误和安全语言 禁止错误( forbidden error) 不会被捕获错误集合+会被捕获错误的一个子集 为语言设计类型系统的目标是在排除禁止错误 良行为程序和安全语言也可基于禁止错误 来定义
5.1 类型在编程语言中的作用 5.1.1 执行错误和安全语言 • 禁止错误(forbidden error) – 不会被捕获错误集合 + 会被捕获错误的一个子集 – 为语言设计类型系统的目标是在排除禁止错误 良行为程序和安全语言也可基于禁止错误 来定义
5.1类型在编程语言中的作用 512类型化语言和类型系统 4、类型化的语言 变量的类型 变量在程序执行期间的取值范围
5.1 类型在编程语言中的作用 5.1.2 类型化语言和类型系统 4、类型化的语言 • 变量的类型 – 变量在程序执行期间的取值范围
5.1类型在编程语言中的作用 512类型化语言和类型系统 4、类型化的语言 变量的类型 类型化的语言 变量都被给定类型的语言 表达式、语句等程序构造的类型都可以静态确定 例如,类型b0lemn的变量x在程序每次运行时的值只能是 布尔值,mot(x)总有意义
5.1 类型在编程语言中的作用 5.1.2 类型化语言和类型系统 4、类型化的语言 • 变量的类型 • 类型化的语言 – 变量都被给定类型的语言 – 表达式、语句等程序构造的类型都可以静态确定 – 例如,类型boolean的变量x在程序每次运行时的值只能是 布尔值,not (x)总有意义