第六章——属性文法和语法制导翻译.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 属性文法和语法制导翻译 语义分析的功能 审查静态语义,验证语法结构合法的程序是否真正有意义 静态语义正确,翻译为中间语言或实际的目标代码 属性文法:也称属性翻译文法,是在上下文无关文法的基础上为每个文法符号(终结符或非终结符)配备若干个相关的“值”(称为“属性”)。 综合属性 属性 继承属性 对一个属性文法,每个产生式A→α都有一套与之相关的语义规则,每条规则的形式为: b := f ( c1,c2,...,ck ) 其中:f是一个函数,而且: 或者(1)b是A的一个综合属性且c1,c2,...,ck是产生式右边文法符号的属性; 或者(2)b是产生式右部某个文法符号的一个继承属性并且c1,c2,...,ck是A或产生式右部任何文法符号的属性。 这两种情况均称属性b依赖于属性c1,c2,...,ck。 (1)终结符只有综合属性,它们由词法分析器提供。 (2)非终结符既可有综合属性也可有继承属性。文法开始符号的所有继承属性作为属性计算前的初始值。 一个简单台式计算器的语法制导定义 语法制导翻译实现 从概念上讲,语法制导翻译即基于属性文法的处理过程通常是这样的:对单词符号串进行语法分析,构造语法分析树,然后根据需要遍历语法树并在语法树的各结点处按语义规则进行计算 输入符号串 ? ? ? 依赖图 由称为依赖图的一个有向图 描述分析树中的继承属性和属性中间的相互依赖关系。 依赖图的构造算法: for 分析树中每一个结点n do for 结点的文法符号的每一个属性a do 为a在依赖图中建立一个结点; for 分析树中每一个结点n do for 结点n所用产生式对应的每一个语义规则 b:=f(c1,c2,…ck) do for i :=1 to k do 从ci结点到b结点构造一条有向边 带有继承属性L.in的语法树 Real id1,id2,id3分析树的依赖图 Real id1,id2,id3分析树的依赖图 属性的计算顺序 一个有向非循环图的拓扑序是图中结点的任何顺序m1, m2, …, mk,使得边必须是从序列中前面的结点指向后面的结点。也就是说,如果mi→mj是mi到mj的一条边,那么在序列中mi必须出现在mj之前。 在拓扑排序中,在一个结点,语义规则b:=f(c1,c2,…ck)中的属性c1,c2,…ck在计算b以前都是可用的。 从依赖图的拓扑排序中,我们可以得到计算语义规则的顺序。用这个顺序来计算语义规则就得到输入符号串的翻译。 属性计算方法 树遍历的属性计算方法 设语法树已经建立起了,并且树中已带有开始符号的继承属性和终结符的综合属性。然后以某种次序遍历语法树,直至计算出所有属性。 最常用的遍历方法是深度优先,从左到右的遍历方法。如果需要的话,可使用多次遍历(或称遍)。 对无循环的属性文法进行属性计算的算法 While 还有未被计算的属性 do VisitNode(S) /*S为开始符号*/ Procedure VisitNode(N:Node) ; Begin if N是一个非终结符 then /*假设它的产生式为N→X1… Xm*/ for i:=1 to m do if not Xi∈VT then begin 计算Xi所有能计算的继承属性; VisitNode(Xi) end 计算N所有能计算的综合属性 end 例: 属性计算 属性计算方法 2. 一遍扫描的处理方法 与树遍历的属性计算文法不同,一遍扫描的处理方法是在语法分析的同时计算属性值,而不是语法分析构造语法树之后进行属性的计算,而且无需构造实际的语法树。 因为一遍扫描的处理方法与语法分析器的相互作用,它与下面两个因素密切相关: (1)所采用的语法分析方法 (2)属性的计算次序。 抽象语法树 在语法树中去掉对翻译不必要的信息,从而获得更有效的源程序中间表示,这种经变换后的语法树称为抽象语法树。 在抽象语法树中,关键字和操作符都不做为叶结

文档评论(0)

精华文档888 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档