《编译原理与技术》类型检查.PDF

《编译原理与技术》类型检查.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)

1亿VIP精品文档

相关文档