刘坚 编译原理基础 学习笔记(6)类型检查

本文深入探讨了程序设计语言中的类型检查,从简单的类型检查开始,涵盖表达式、语句和函数的类型检查。介绍了类型表达式的等价性,包括结构等价和名字等价。进一步讨论了多态函数的概念,以及在类型推断中的应用。文章还涉及了含多态语言的文法,展示了如何将类型变量引入类型系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型:类型是一个系统,由一组的集合&值集合上的操作组成的系统。
表示为type=(value-set,operator-set)
值只能进行操作集合中允许的操作。


一、简单的类型检查

        1.一个简单的程序设计语言
                它具有声明部分D和表达式部分E,并且先声明再引用。


        2.表达式的类型检查
                当声明语句被确定类型后,可执行语句中表达式E的类型可以如此检查


        3.语句的类型检查
                语句本身没有类型,用void作为语句的类型表达式。其中E作为条件判断应该是布尔类型的。


        4.函数的类型检查
                函数(->,function)函数也被看做一个类型,是定义域到值域的一个映射。若定义域类型为D,值域类型为R,则函数的类型表达式为D->R。当值域是T时,函数调用是一个表达式,否则函数调用是一个语句。将函数看作一个类型,则有


二、类型表达式的等价

        1.结构等价
                类型表达式结构等价当且仅当二者完全相等。以下算法用来判断两个类型表达式是否等价,实际上它模拟了两个表达式的语法树的遍历。

        2.引入类型名的等价判别
                在允许为类型命名的程序设计语言中,类型名被看做是一个基本类型表达式。
                        若每个类型名,作为一个可区分的类型出现在表达式中,并使得两个类型表达式完全相同,则称他们名字等价。
                        若将两个类型表达式中的所有名字,替换成用其定义的类型表达式后,两个类型表达式完全相同,则称他们结构等价。
                可见名字等价是比较严格的等价。

        3.单态的类型检查
                (1) 确定一种类型等价方式:结构等价or名字等价
                (2) 根据类型信息构造类型表达式。
                (3) 判断表达式的类型等价,就是判断它们的类型表达式是否相等


三、多态函数的类型检查
        1.多态函数
                多态函数中,参数的类型可以是变量,该变量可以有无穷多个值,但所有类型均对应同一代码序列。
                从语言结构的使用方式推断其类型,被称为类型推断
        2.含多态语言的文法
                多态函数与单态函数本质的区别就是形参不但可以是常量还可以是变量。扩充文法得到含有类型变量的类型定义
                文法将原来的单态类型扩展为多态类型Q, Q除了包括T产生式的全部外,又引入了受约束的类型变量。同时T产生式中增加了类型变量,即将类型变量引入类型。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值