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

编译原理第七章 中间语言(2).ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.3 中间代码翻译算法 ※ 属性文法构造示例 : ※ 属性计算过程示例 : 7.3.2 语法制导翻译技术 ※逆波兰式翻译文法构造示例: ※ 四元式翻译文法构造示例1: ※ 四元式翻译文法构造示例2: ※ 动作函数(序列)执行过程示例 : 7.3.3 四元式翻译文法设计扩展1 7.3.3 四元式翻译文法设计扩展2 7.3.3 四元式翻译文法设计扩展3 7.3.3 四元式翻译文法设计扩展4 ※ 翻译文法应用验证示例 习题: 【习题7.5】解释下列词语: 属性文法;语法制导翻译技术; 【习题7.6】已知算术表达式的逆波兰翻译文法: 谢谢收看! * * 7.3.1 属性文法 A=(G, V, E); 【定义】 属性文法是上下文无关文法在语义上的扩展,可定义为如下三元组: 其中: G(文法);V(属性集);E(属性规则集)。 ⑴ 属性 代表与文法符号相关的信息,这里主要指语义信息(类型、种类、值和值地址…);文法产生式中的每个文法符号都附有若干个这样的属性。 ⑵ 属性可以进行计算和传递,属性规则就是在同一产生式中,相互关联的属性求值规则。 ⑶ 属性分两类(按属性求值规则区分): 综合属性:其值由子女属性值来计算(自底向上求值); 继承属性:其值由父兄属性值来计算(自顶向下求值)。 说明 【例7.7】 算术表达式的属性文法; ※ 设:X.val 为文法符号 X 的值属性; ※ 下述属性文法用于算术表达式的求值运算: E - E1 + T ; || E.val:= E1.val + T.val T - T1 * F ; || T.val:= T1.val * F.val E - T ; || E.val:= T.val T - F ; || T.val:= F.val F - ( E ) ; || F.val:= E.val F - i ; || F.val:= i.val E - E1 - T ; || E.val:= E1.val - T.val T - T1 / F ; || T.val:= T1.val / F.val 【注】可以看出: X.val 属性是综合属性。 根据算术表达式属性文法及其相应的属性求值规则, 2+4*(5-9/3)的属性语法树: E.10 E1.2 + T.8 T.2 T.4 * F.2 F.2 F.4 ( E.2 ) 2 4 E.5 - T.3 T.5 T.9 / F.3 F.5 F.9 3 5 9 按 最左推导或 最左归约 传递规则: 计算规则: 【定义】语法制导(syntax_directed)是指根据语言的形式文法对输入序列进行分析、翻译处理;核心技术是构造 翻译文法 ---- 在源文法产生式中插入语义动作符号(翻译子程序),借以指明属性文法中属性求值时机和顺序。 ※以算术表达式文法为例,探讨翻译文法的构造! ※通俗地说,所谓语法制导翻译技术,是指: 语法分析技术 翻译文法构造技术 + 注 为叙述简便起见,除非临时详细指明,标识符 X 的属性一律视为符号表项指针,同时用: X 表示 X.point !! ※符号串 a*(b+c)的分析(翻译)过程(推导法): E =T =T*F{*} =F*F{*} =a{a}*F{*} =a{a}*(E){*} =a{a}*(E+T{+}){*} =a{i}*(T+T{+}){*} 导出序列 a{a}*(b{b}+c{c}{+}){*} = + ※ 分解导出序列: 去掉动作符号: a*(b+c) ………. 源表达式; 去掉文法符号: abc+* ………. 逆波兰式; 【例7.8】 算术表达式逆波兰式翻译文法 {a}:动作符号; 含义:输出(a) E - T | E+T{+} | E-T{-} T - F | T*F{*} | T/F{/} F - i{i} | (E) G`(E) 注 Ⅰ. 从逆波兰式的翻译到四元式的翻译: ⑴ t1 = c / d ⑵ t2 = t1 - e ⑶ t3 = b * t2 ⑷ t4 = a + t3 四元式 则 算术表达式 a+b*(c/d-e) 的 逆波兰式算符进栈之日,也就是四元式生成之时。 重要结论 逆波兰式(生成)计算顺序: {a} 即为 PUSH(a) --- 逆波兰式在栈中! 假定:

文档评论(0)

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

文档来源于网络

1亿VIP精品文档

相关文档