第6章属性文法2.0.pptVIP

  1. 1、本文档共63页,可阅读全部内容。
  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文档。上传文档
查看更多
第6章属性文法2.0

属性文法和语法制导翻译;※回顾※;本章我们应该掌握什么;一 属性文法的基本概念; 可以在复杂的处理(甚至编译程序的构造)之前确定属性。例如,一个数的有效位数可以根据语言的定义确定(或者至少给出一个最小值)。 属性也可以在程序执行期间才确定,如(非常数)表达式的值,或者动态分配的数据结构的位置。属性的计算及将计算值与正在讨论的语言结构联系的过程称作属性的联编( b i n d i n g )。联编属性发生时编译/执行过程的时间称作联编时间(binding time)。不同的属性变化,甚至不同语言的相同属性都可能有完全不同的联编时间。在执行之前联编的属性称作静态的( s t a t i c ),而只在执行期间联编的属性是动态的( d y n a m i c )。对于编译程序编写者而言,当然对那些在翻译时联编的动态属性感兴趣。 ; 语义规则:;强调;※例一※;综合属性; 产生式;继承属性;给出句子real id1,id2,id3,看 看它的带注释的语法树;※参考举例※;产 生 式;;二 基于属性文法的处理方法;? 依赖图; ※举例四※; ※举例五※;real;属性的计算次序;依赖图中的拓扑序;;S有继承属性a,综合属性b X有继承属性c,综合属性d Y有继承属性e,综合属性f Z有继承属性h,综合属性g;参照树遍历的算法,对其计算属性;一遍扫描的处理方法是在语法分析的同时计算属性值,而不是语法分析构造语法树之后进行属性的计算。; 在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种经变换后的语法树称之为抽象语法树(Abstract Syntax Tree)。 ;Digit.lexval=3;如何建立表达式的抽象语法树;下面一系列函数调用建立了表达式a-4+c的抽象语法树,在这个序列中,p1,p2,…,p5是指向结点的指针,entrya和entryc分别是指向符号表中的标识符a和c的指针。;下面考虑建立语法分析树的语义规则 用例子来说明: 下表什一个为包涵运算符号+和-的表达式建立抽象语法树的 S-属性文法. 利用文法的基本产生式来安排函数mknode和mkleaf 的调用来建立语法树. E 和T 的综合属性nptr什函数调用返回的 指针; ※举例八※;回顾;S-属性文法:只含有综合属性。;分析栈中的综合属性; ※举例九※;前面介绍过通过深度优先的方法对语法树进行遍历,从而计算属性文法的所有属性值。在这里我们讨论一类属性文法,叫做L-属性文法,这类属性文法允许我们通过一次遍历就计算机出所有属性值。;这个是L-属性文法吗??; 属性文法可以看作是语言翻译的高级规范说明,其中隐去实现 细节,使用户从明确说明翻译顺序的工作中解脱出来。 这里我们要讨论一种适合语法制导翻译的另一种描述形式,称 为翻译模式(Translation schemes),它给出了使用语义规则进行计 算的次序。 在翻译模式中,和文法符号相关的属性和语义规则(这里我们 也称语义动作),用花括号{}括起来,插入到产生式右部的合适位 置上。; 这是一个简单的翻译模式的例子,它把带加号和减号的中缀 表达式翻译称相应的后缀表达式。;首先画出9- 5+2的语法树;翻译模式设计;如果既有综合属性又有继承属性 (1)产生式右边的符号的继承属性必须在这个符号以前的动作中计算出来。 (2)一个动作不能引用这个动作右边的符号的综合属性。 (3)产生式左边非终结符的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可放在产生式右端的末尾。 下面的翻译模式不满足上述三个条件中的第一个条件: S-A1A2 {A1.in := 1; A2.in := 2} A-a {print(A.in)} 按深度优先遍历输入串aa的语法树时,能想出会出现什么错误吗???;;;转换左递归翻译模式;将构造抽象语法树的属性文法定义转换为翻译模式;S-属性文法的自下而上翻译; 这里,我们讨论在自下而上的分析过程中实现L-属性文法的方法。这种方法可以实现任何基于LL(1)文法的L-属性文法,它还可以实现许多(不是所有)基于LR(1)文法的L-属性文法。这种方法是前面介绍的自下而上翻译技术的一般化。;① 从翻译模式中去掉嵌入在产生式中间的动作;② 分析栈中的继承属性 ; 我们看看使用L产生式时是怎样得到属性 T.type 的

文档评论(0)

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

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

1亿VIP精品文档

相关文档