《编译原理》6章 类型检查.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理》6章 类型检查

语义分析;第六章 类 型 检 查 ; 每个程序设计语言都有自己的类型机制,包括类型说明和使用。 ? 类型分析是编译器语义分析的重要组成部分?。编译器首先根据类型说明,确定每一个变量和常量的类型?,计算其使用存储空间的大小,从而建立其到存储空间的映射。进而,编译器要确定每个语言结构的类型,以完成下面的主要任务: (1) 判定重载算符(函数)在程序中代表的是哪一个运算;(2) 进行类型转换;(3) 对语言结构进行类型检查。;?6.1.1 类型表达式定义 ??? ?语言结构的类型由类型表达式表示,类型表达式依赖于程序语言的类型体制。类型表达式或者是简单类型表达式,或者是构造符作用在类型表达式上得到的类型表达式。类型表达式的定义如下: ???(1) 类型名和基本类型是类型表达式。integer、char、real、boolean是基本类型,所以它们是类型表达式。另外,void表示“无类型”,type_error表示“出错类型”,它们也是类型表达式。;??(2)类型构造符作用于类型表达式的结果 仍然是类型表达式。类型构造符包括: ??(a)数组构造符ARRAY:若T是类型表达 式,则ARRAY(I,T)是类型表达式。 (b)笛卡儿乘积?:若T1、T2是类型表达 式,则T1? T2是类型表达式,且?是左结合的。 ? (c)记录类型构造符RECORD:若有标识符N1、N2……、Nn与类型表达式T1、T2、…、Tn, 则RECORD((N1 ? T1) ? (N2 ? T2)? …? (Nn ? Tn))是一个类型表达式,它表示一个记录类型。 ;???(d)指针类型构造符POINTER:若T是类型表达式,则POINTER(T)是类型表达式,它表示一个指针类型。 ???(e)函数类型构造符→:若D1、D2、…、Dn和R是类型表达式,则D1?D2 ? ……? Dn→R是类型表达式,其中?优先于→,它表示从定义域类型D1 ? D2 ? … ? Dn到值域类型R的映射。 ??(3) 类型表达式中可出现类型变量,变量是类型表达式。;?设有Pascal 程序片段: ?TYPE stype=RECORD ??? ????????? name:ARRAY [1..8] OF char; ??? ??????? score:integer ??? ???????? END; ?VAR ??table:ARRAY [1..50] OF stype; ??? ?? ?p: ↑stype; 则stype代表的类型表达式 ?????RECORD((name?ARRAY(1..8,char)) ? (score ? integer)) 和table绑定的类型表达式 ARRAY(1..50,stype) 和p绑定的类型表达式 ?POINTER(stype) ;?例1 ?设有下面的函数定义 ??? FUNCTION f(P1:T1;P2:T2;…,Pn:Tn):T; ??? BEGIN ……END; 和f绑定的类型表达式 T1?T2 ? … ? Tn→T ?例2 ?在函数式语言中可如下定义恒等函数 ??? fun f(x)=x ? x可以是任何类型的语言结构。因此x可以是任何类型。f的类型表达式为?? ???? ??? ?为类型变量,其值是任何类型表达式。;???1.树:内部结点是类型构造符,叶结点是基本类型,类型名或类型变量。例如, FUNCTION f (a,b:char):?integer: ……… char?char?pointer(integer);2.位串(对类型表达式作某些限制) 例如,考虑由POINTER、→和ARRAY 作为构造符的类型表达式。pointer(t)表示指向类型为t的指针,freturns(t)表示若干变元的函数,其中t为函数返回对象的类型,而函数变元的类型则存放在其它地方。ARRAY(t) 表示元素类型为t的数组,而数组元素的个数保存在其它地方。这样,构造符都成为一元算符,它们作用于基本类型形成的类型表达式有非常统一的结构。; 类型构造符 编码 pointer 01 array 10 freturns 11 基本 类型 编码 boolean 0000 char

文档评论(0)

gm8099 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档