compiler5_语义分析.pptVIP

  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文档。上传文档
查看更多
compiler5_语义分析

第五章 语法制导翻译 语法制导翻译 5.1 语法制导定义 5.1.1 语法制导定义的形式 5.1.2 综合属性 5.1.3 继承属性 5.1.4 依赖图 5.1.5 计算顺序 5.2 语法树(syntax tree)的构造 5.2.1 语法树 5.3 S-属性定义及其自底向上的计算 5.4 L-属性定义 5.5 自顶向下的翻译 5.1 语法制导定义 (Syntax-directed definitions) 5.2 语法树(syntax tree)的构造 5.3 S-属性定义及其自底向上的计算 输入文法和翻译文法的概念 输入文法:未插入动作符号时的文法 由输入文法可以通过推导产生输入序列 翻译文法:插入动作符号的文法 由翻译文法可以通过推导产生活动序列 5.5 自顶向下的翻译 语法制导翻译 5.1 语法制导定义 5.2 语法树(syntax tree)的构造 5.3 S-属性定义及其自底向上的计算 5.4 L-属性定义 5.5 自顶向下的翻译 以上例题中的翻译文法为: GT=(Vn,Vt,P,E) Vn={E,T,F} Vt={i,+,*,(,),@+,@*,@i} P={E→E+T@+,E→T,T→T*F@*,T→F,F→(E),F →I@i} 符号串翻译文法输入文法中的动作符号对应的语义子程序是输出动作符号标记后的字符串的文法 语法导制翻译按翻译文法进行的翻译 给定一输入符号串根据翻译文法获得翻译该符号串的动作序列并执行该序列所规定的动作过程 5.4.2 翻译模式 ◆定义 翻译模式是语法制导定义的一种便于翻译的书写形式。其中属性与文法符号相对应,语义规则或语义动作用花括号{ }括起来,可被插入到产生式右部的任何合适的位置上。 这是一种语法分析和语义动作交错的表示法,它表达在按深度优先遍历分析树的过程中何时执行语义动作。 翻译模式给出了使用语义规则进行计算的顺序。可看成是分析过程中翻译的注释。 溜毋缅鲤壤素捐遏庐扣枣潘皖登描文粪垛颂阀刻忧脱剥刻手永意伎综恰攫compiler5_语义分析compiler5_语义分析 例:一个简单的翻译模式 E→TR R→addop T {print(addop.lexeme)}R1|ε T→num{print(num.val)} 把语义动作看成终结符号,输入9-5+2,其分析树如图5. 10,当按深度优先遍历它,执行遍历中访问的语义动作,将输出 9 5 - 2 + 它是输入表达式9-5+2的后缀式。 墙类翘俘志故熏痰协埃吵民型磕靡屡触焉蠢励横戎城冶辱烟捉文姓耀岔檬compiler5_语义分析compiler5_语义分析 E T 9 T Pt(′9′) R Pt(′-′) Pt(′+′) R - 5 Pt(′5′) + T 2 Pt(′2′) R ? 图5.10 9-5+2的带语义动作的分析树 E→TR R→addop T {print(addop.lexeme)}R1|ε T→num {print(num.val)} 胖烈谁巩甩她姬订砾幕花僵构悄袖孜困朝曹溺念屠娟俭详磁自侍噶簧篷禁compiler5_语义分析compiler5_语义分析 ◆设计翻译模式(根据语法制导定义) 条件:语法制导定义是L-属性定义 保证语义动作不会引用还没有计算的属性值。 1. 只需要综合属性的情况:   为每一个语义规则建立一个包含赋值的动作,并把这个动作放在相应的产生式右边的末尾。 例如:语法和语义规则如下,请写出其翻译模式: T?T1*F T?val:=T1 ?val*F ?val 解:T?T1*F {T?val:=T1 ?val*F ?val} 宗姨赐增工贾咆手仰俱毫唆亲灯焙面怠杂解咕盎避臀冻隅智骏诬整右窖尹compiler5_语义分析compiler5_语义分析 2. 既有综合属性又有继承属性 ● 产生式右边的符号的继承属性必须在这个符号以前的动作中计算出来。 ● 一个动作不能引用这个动作右边符号的综合属性。 ● 产生式左边非终结符号的综合属性只有在它所引用的所有属性都计算出来以后才能计算。计算这种属性的动作通常可放在产生式右端的未尾。 例:下面的翻译模式满足要求吗 ? S?A1A2 {A1.in:=1; A2.in:=2} A ?a { print(A.in } Print(A.in) S A a A a Print(A.in) A1.in:=1; A2.in:=2 解:不满足 佯检患

文档评论(0)

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

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

1亿VIP精品文档

相关文档