《编译原理与技术》类型检查.PDF
《编译原理与技术》
类型检查
计算机科学与技术学院
李 诚
5/11/2018
Announcement
上周书面作业延期到11.15日与今天的书面作
业一起提交,project的提交时间不变。
2018/11/05 Cheng @ Compiler Fall 2018, USTC 2
主要内容
注释
语法 分析 类型检 分析 中间代码中间表
记号流 分析器 树 查器 树 生成 示
符号表
静态检查—类型检查
描述类型系统的语言
简单类型检查器的说明
类型表达式的等价
2018/11/05 Cheng @ Compiler Fall 2018, USTC 3
程序运行时的执行错误
会被捕获的错误(trapped error)
例:非法指令错误、非法内存访问、除数为零
引起计算立即停止
不会被捕获的错误(untrapped error)
例:下标变量的访问越过了数组的末端;跳到一
个错误的地址,该地址开始的内存正好代表一个
指令序列
错误可能会有一段时间未引起注意
希望可执行的程序不存在不会被捕获的错误
2018/11/05 Cheng @ Compiler Fall 2018, USTC 4
安全语言
良行为的(well-behaved)程序
没有统一的定义
如: 没有任何不会被捕获的错误的程序
安全语言(safe language)
定义: 安全语言的任何合法程序都是良行为的
设计类型系统, 通过静态类型检查拒绝不会被捕获错误
设计正好只拒绝不会被捕获错误的类型系统是困难的
禁止错误(forbidden error)
不会被捕获错误集合+ 会被捕获错误的一个子集
2018/11/05 Cheng @ Compiler Fall 2018, USTC 5
类型化的语言
变量的类型
限定了变量在程序执行期间的取值范围
类型化的语言(typed language)
变量都被给定类型的语言
表达式、语句等程序构造的类型都可以静态确定
例如,类型boolean的变量x在程序每次运行时的值
只能是布尔值,not (x)总有意义
未类型化的语言(untyped language)
不限制变量值范围的语言,如JavaScript 、Perl
2018/11/05 Cheng @ Compiler Fall 2018, USTC 6
类型化的语言
显式类型化语言
类型是语法的一部分
隐式类型化的语言
不存在隐式类型化的主流语言,但可能存在忽略
类型信息的程序片段,如不需要程序员声明函数的
参数类型
2018/11/05 Cheng @ Compiler Fall 2018, USTC 7
类型系统
语言的组成部分,其构成成分是一组定型规则
(typing rule),用来给各种程序构造指派类型
设计目的
用静态检查的方式来保证合法程序在运行时的良
行为
类型系统的形式化
类型表达式、定型断言、定型规则
类型检查算法
通常是静态地完成类型检查
2018/11/05 Cheng @ Compiler Fall 2018, USTC
原创力文档

文档评论(0)