《编译原理与技术讲义》课件_编译原理与技术讲义-第8章.pptVIP

《编译原理与技术讲义》课件_编译原理与技术讲义-第8章.ppt

  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文档。上传文档
查看更多

编译原理与技术*8.4数据类型与类型检查类型名等价定义8.10两个类型表达式类型名等价,当且仅当它们都是简单类型或者具有相同的类型名。对于下面的类型声明type1=integer;type2=integer;由于type1和type2的名字不同,它们不是等价类型,和integer也不等价。编译原理与技术*8.4数据类型与类型检查声明等价在声明等价的意义下,每个类型名都和其基类型名等价。而基类型名或者是预定义的类型,或者是用类型构造器构造出的类型表达式。因而,type1=integer;type2=integer;type1和type2都和integer等价,或者说是类型integer的别名。又如t1=array[20]char;t2=array[20]char;t3=t2;t1和t3在声明等价的意义下等价,但是都不等价于t2。编译原理与技术*8.4.3类型检查类型检查的属性文法假设存在包含了变量名及其类型的符号表,并且提供函数insert(name,type),把变量名name及其类型type填入符号表,函数lookup(name)返回变量名name的类型。文法符号的属性type表示它的类型,标识符id具有name的属性。type-error表示类型错误。假定该语言的数组从下标1开始,采用了Pascal的前缀运算符“?”建立指针类型,所以,由?real得到一个指针类型表达式pointer(real)。记录类型的类型表达式实际上是D的子域的笛卡儿积的形式。函数类型表达式就采用了映射符号“?”。文法规则语义规则T?BTT.type:=BT.typeT?STT.type:=ST.typeBT?integerBT.type:=integerBT?booleanBT.type:=booleanBT?realBT.type:=realBT?charBT.type:=charBT?voidBT.type:=voidST?array[num]ofTST.type:=array(num.val,T.type)ST?recordDendST.type:=record(D.type)ST??TST.type:=pointer(T.type)ST?T1‘?’T2ST.type:=T1.type?T2.type编译原理与技术*8.4.3类型检查文法规则语义规则E?trueE.type:=booleanE?numE.type:=integerE?idE.type:=lookup(id.name)E?E1+E2E.type:=ifE1.type≡integerandE2.type≡integerthenintegerelsetype-errorE?E1andE2E.type:=ifE1.type≡booleanandE2.type≡booleanthenbooleanelsetype-errorE?E1[E2]E.type:=iftypeEqual(E1.type,array(s,t))andE2.type≡integerthentelsetype-errorE?E1?E.type:=iftypeEqual(E1.type,pointer(t))thentelsetype-errorE?E1(E2)E.type:=iftypeEqual(E2.type,s)andtypeEqual(E1.type,s?t)thentelsetype-error表达式的类型检查E的综合属性type通过类型系统把类型表达式赋给由E产生的表达式.E?id的语义规则表示,E的类型就是标识符id的类型,用函数lookup在符号表中读取。对于二元表达式,该语言要求两个运算数的类型一致,否则就出现类型错误,用type-error表示。在数组引用E1[E2]中,下标表达式E2必须具有整型。在这种情况下,结果是从E1的类型array(s,t)获得的元素类型t,而和数组下标类型无关。在指针E1?表达式里,运算符“?”产生由其操作数E1所指的数据对象,故E1?的类型是指针E所指的对象的类型t。函数调用E1(E2),E1的类型必须是从E2的类型s到某个值域类型t的函数类型s?t,所以E1(E2)的

文档评论(0)

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

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

1亿VIP精品文档

相关文档