网站大量收购独家精品文档,联系QQ:2885784924

4.4类型表达式的等价-Read.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.4类型表达式的等价-Read

上次课程小结 4.4 类型表达式的等价 4.4.1 结构等价与等价的判别 1 结构等价的判别 1 结构等价的判别(续) 2 类型表达式的优化表示 2 类型表达式的优化表示(续1) 2 类型表达式的优化表示(续2) 4.4.2 引入类型名的等价判别 4.4.2 引入类型名的等价判别(续1) 为什么规定采用何种类型等价 为什么规定采用何种类型等价(续) 单态类型检查的一般过程 4.5 多态函数的类型检查 4.5.1 多态函数与类型变量的表示 2 含多态函数语言的文法 2 含多态函数语言的文法(续1) 2 含多态函数语言的文法(续2) 结 束(2005年4月29日) “五一”节快乐! (五一后第一周两次课!) 多态函数的简单回顾 4.5.2 代换、实例与合一 4.5.2 代换、实例与合一(续1) 4.5.2 代换、实例与合一(续2) 最一般的合一 代换算法 代换算法(续) 4.5.3 多态函数的类型检查 4.5.3 多态函数的类型检查(续1) 4.5.3 多态函数的类型检查(续2) 4.5.3 多态函数的类型检查(续3) deref(deref(q))的类型检查 deref(deref(q))的类型检查(续1) deref(deref(q))的类型检查(续2) 有环类型的合一操作 结 束(2005年5月10日) (AG4.1)与(AG4.4) 确定E4.type:建立叶子γ1和E3.type→γ1的新节点m: pointer(α1)→α1 E2.tyep: pointer(pointer(int)) E3.tyep: 合一n2和m,即unify(11, 6): 得到E4.type=pointer(int): E4.type: E4 → E2(E3) E4.type=γ1=pointer(int) 再确定E5.type:建立叶子γ0和E4.type→γ0的新节点m: E5→E1(E4) 合一n1和m,即unify(12, 3): pointer(α0)→α0 E1.tyep: 得到E5.type=int: * 类型系统:赋给程序各部分的一组规则 类型表达式:由类型构造符作用与基本类型表达式。 基本的类型表达式:基本类型、类型名、类型变量的值 类型构造符:×、+、array(I, T)、pointer(T)、 record(F1×F2×...)、D→R 简单的类型检查:语法制导翻译 声明时构造类型表达式 引用时计算类型表达式(类型检查) 在简单的类型检查中,通过判定所给的两个类型表达式是否相等来进行类型检查。 对于单态的类型,我们引入一个更专业的术语,类型等价来描述类型检查。 类型的等价与类型的表示有关,表示不同,等价的概念也不同。 本节讨论三个重要问题: 有哪些类型等价 程序设计语言规定什么样的等价 以及等价的判别 若两个仅由类型构造符作用于基本类型组成的类型表达式完全相同,则称两个类型表达式结构等价。 换句话说,类型表达式结构等价当且仅当二者完全相等。若类型表达式中没有名字,则结构等价就是类型等价。 例如int与int结构等价,array(1..10, real)与array(1..10, real)结构等价。 反映在类型表达式的语法树上,就是两棵语法树完全相同。 算法4.1 判别类型是否结构等价 输入 两个类型表达式 输出 若两个类型表达式结构等价则返回true否则false 方法 用下述递归函数进行判别: function sequiv(s, t) return boolean is begin end sequiv; if s and t are the same type then return true; elsif s=array(s1, s2) and t=array(t1, t2) then return sequiv(s1, t1) and sequiv(s2, t2); elsif s=s1×s2 and t=t1×t2 then return sequiv(s1, t1) and sequiv(s2, t2); elsif s=pointer(s1) and t=pointer(t1) then return sequiv(s1, t1); elsif s=s1→s2 and t=t1→t2 then return sequiv(s1, t1) and sequiv(s2, t2); else return false; end if; 例4.13 再考虑函数声明 function max(x, y : integer):integer和调用max(5,8)

文档评论(0)

2752433145 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档