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

语法制导翻译和中间代码生成.pptVIP

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

自下而上计算继承属性讨论在自下而上的分析过程中实现L-属性文法的方法。这种方法可以实现任何基于LL(1)文法的L-属性文法,它还可以实现许多(不是所有)基于LR(1)文法的L-属性文法。这种方法是S-属性文法的自下而上翻译技术的一般化自下而上分析器对产生式A→XY的右部是通过把X和Y从分析栈中移出并用A代替它们。假设X有一个综合属性X.s,按照前面所介绍的方法我们把它与X一起放在分析栈中。由于X.s的值在Y以下的子树中的任何归约之前已经放在栈中,这个值可以被Y继承。也就是说,如果继承属性Y.i是由复写规则Y.i:=X.s定义的,则可以在需要y.i值的地方使用X.s的值。在自下而上分析中计算属性值时复写规则起非常重要的作用。看下面例子。T→int {T.type:=integer}T→real {T.type:=real}L→ {L1.in:=L.in}L1,id {addtype(id.entry,L.in)}L→id {addtype(id.entry,L.in)}L假设某翻译模式为:D→T {L.in:=T.type}5678910T4DLLLRealtypeininin3entry2entryentryid3id2id1..1例8.2输入串realRealid1,id2,id3的分析过程当L的右部被归约时,T恰好在这个右部的下面输入状态(符号)使用产生式Realid1,id2,id3#id1,id2,id3#realid1,id2,id3#TT?real,id2,id3#Tid1,id2,id3#TLL?idid2,id3#TL,,id3#TL,id2,id3#TLL?Li,did3#TL,#TL,id3#TLL?Li,d#DD?TL用综合属性代替继承属性有时,改变基础文法可能避免继承属性。例如,一个Pascal的说明由一标识符序列后跟类型组成,如,m,n:integer。这样的说明的文法可由下面形式的产生式构成D→L:TT→integer|charL→L,id|id因为标识符由L产生而类型不在L的子树中,我们不能仅仅使用综合属性就把类型与标识符联系起来。事实上,如果非终结符L从第一个产生式中它的右边T中继承了类型,则我们得到的属性文法就不是L-属性的,因此,基于这个属性文法的翻译工作不能在语法分析的同时进行。使类型作为标识符表的最后一个元素:D→idLL→,idL|:TT→integer|char这样,类型可以通过综合属性L.type进行传递,当通过L产生每个标识符时,它的类型就可以填入到符号表中。一个解决的方法是重新构造文法E–TE01E–ATE|?02T–FT03T–MFT|?04F–(E)|int05A–+|-06M–*|/07语义制导翻译的编译实现:例8.6E-TEE-ATE{rhs=PopOperand();lhs=PopOperand();switch(PopOperator()){caseADD:PushOpera

文档评论(0)

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

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

1亿VIP精品文档

相关文档