自底向上翻译.PPT

  1. 1、本文档共98页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
自底向上翻译

* * 6.4.4 L-属性定义的自底向上翻译(续) 产 生 式 代 码 段 S ? LB stack[ntop].val2 := stack[top].val2 stack[ntop].val3 := stack[top].val3 L ? ? stack[ntop].val1 := 10 B ? B1 MB2 stack[ntop].val2 := max(stack[top-2].val2, stack[top].val2) stack[ntop].val3 := max(stack[top-2].val3, stack[top].val3) M ? ? stack[ntop].val1 := stack[top-1].val1 B ? B1 sub NB2 stack[ntop].val2:= max(stack[top-3].val2, stack[top].val2-0.25×stack[top-4].val1) stack[ntop].val3 := max(stack[top-3].val3, stack[top].val3+0.25×stack[top-4].val1) N ? ? stack[ntop].val1 := 0.7×stack[top-2].val1 B ? text stack[ntop].val2 := getheight(stack[top-1].val1,text.lexval) stack[ntop].val3 := getdepth(stack[top-1].val1,text.lexval) * * 本章小结 语法分析中进行静态语义检查和中间代码生成的技术称为语法制导翻译技术。 为了通过将语义属性关联到文法符号、将语义规则关联到产生式,有效地将语法和语义关联起来,人们引入了语法制导定义。没有副作用的语法制导定义又称为属性文法。 * * 本章小结 为相应的语法成分设置表示语义的属性,属性的值是可以计算的,根据属性值计算的关联关系,将其分成综合属性和继承属性,根据属性文法中所含的属性将属性文法分成S-属性文法和L-属性文法。 如果不仅将语义属性关联到文法符号、将语义规则关联到产生式,而且还通过将语义动作嵌入到产生式的适当位置来表达该语义动作的执行时机,这就是翻译模式。翻译模式给语义分析的实现提供了更好的支持。 * * 本章小结 注释分析树和相应的依赖图是属性值的关联关系和计算顺序的表达形式,语义关系可以使用抽象语法树表示。 依据语法分析方法有自底向上的和自顶向下的,语法制导翻译既可以按照自底向上的策略进行,也可以按照自顶向下的策略进行。 * * * * * * * * * * * * * * * * A?a=g(g(f(X?x),Y1?y),Y2?y) A?a=g(f(X?x),Y1?y) A?a=f(X?x) Y2 Y1 X (a) 输入:XY1Y2 * * A R?i=f(X?x) R?i=g(f(X?x),Y1?y) R?i=g(g(f(X?x),Y1?y),Y2?y) ε Y2 Y1 X (b) * * L-属性定义的递归下降翻译器的构造: 1.对每个非终结符A构造一个函数A,将非终结符A的各个继承属性当作函数A的形式参数,而将非终结符A的综合属性集当作函数A的返回值,为了便于讨论,假设每个非终结符只具有一个综合属性。 2.在函数A的过程体中,不仅要进行语法分析,而且要处理相应的语义属性。函数A的代码首先根据当前输入确定用哪个产生式展开A,然后按照3中所给的方法对各产生式进行编码。 2. L-属性定义的递归下降翻译法 * * 3.与每个产生式对应的程序代码的工作过程为:按照从左到右的次序,依次对产生式右部的记号、非终结符和语义动作执行如下的动作: 1) 对带有综合属性x的符号X,将x的值保存在X.x中,并生成一个函数调用来匹配X,然后继续读入下一个输入符号; 2) 对非终结符B,生成一个右部带有函数调用的赋值语句c:=B(b1,b2,…,bk),其中,b1,b2,…,bk是代表B的继承属性的变量,c是代表B的综合属性的变量; 3) 对于语义动作,将其代码复制到语法分析器中,并将对属性的引用改为对相应变量的引用。 2. L-属性定义的递归下降翻译法 * * 例 6.16 function T:↑syntax_tree_node; function T (inh: ↑syntax_tree_node):↑syntax_tree_node; function F:↑syntax_tree_node; funct

文档评论(0)

youbika + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档