《编译技术编译原理 (29).pdf》由会员分享,可在线阅读,更多相关《编译技术编译原理 (29).pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编译技术语 法 制 导 的 翻 译本节内容属 性 依 赖 图输入串分析树依赖图语义规则计算次序属 性 依 赖 图 在一棵分析树中的结点的继承属性和综合属性之间的相互依赖关系可以由称作依赖图的一个有向图来描述。为每一个包含过程调用的语义规则引入一个虚拟综合属性b,这样把每一个语义规则都写成 b:=f(c1,c2,ck)的形式。依赖图中为每一个属性设置一个结点,如果属性b依赖于属性c,则从属性c的结点有一条有向边连到属性b的结点。属 性 依 赖 图EE1E2E.val:=E1.val+E2.valE1+E2Evalvalval属 性 依 赖 图id1L,id2L,id3LintTD4type5in
2、6-addtype(id.entry,L.in)7in8 addtype9in10 addtype1entry2entry3entry属 性 计 算 次 序id1L,id2L,id3LintTD4type5in6-addtype(id.entry,L.in)7in8 addtype9in10 addtype1entry2entry3entryint id1,id2,id3的分析树的依赖图D TLL.in:=T.typeaddtype(id.entry,L.in)id1L,id2L,id3LintTD4type5in6-addtype(id.entry,L.in)7in8 addtype9in1
3、0 addtype1entry2entry3entry拓扑排序:结点的一种排序,使得边只会从该次序中先出现的结点到后出现的结点。例:例:1,2,3,4,5,6,7,8,9,10属 性 计 算 次 序依赖图的任一拓扑排序都是一个合理的属性计算顺序属 性 计 算 次 序如果一属性文法不存在属性之间的循环依赖关系,那么称该文法为良定义的。循 环 依 赖 Circular dependency产生式产生式语义规则语义规则A BA.s:=B.iB.i:=A.s+1ABA.sB.i一个依赖图的任何拓扑排序都给出一个语法树中结点的语义规则计算的有效顺序。属性文法说明的翻译是很精确的属 性 计 算 次 序基础
4、文法用于建立输入符号串的语法分析树;根据语义规则建立依赖图从依赖图的拓扑排序中,可以得到计算语义规则的顺序。输入串分析树依赖图语义规则计算次序id1L,id2L,id3LintTD4type5in6-addtype(id.entry,L.in)7in8 addtype9in10 addtype1entry2entry3entryint id1,id2,id3的分析树的依赖图的分析树的依赖图属 性 计 算 次 序a4:=int;a5:=a4addtype(id3.entry,a5);a7:=a5;addtype(id2.entry,a7);a9:=a7addtype(id1.entry,a9);
5、属 性 计 算 次 序1 1、构造输入的分析树、构造输入的分析树2 2、构造属性依赖图、构造属性依赖图3 3、对结点进行拓扑排序、对结点进行拓扑排序4 4、按拓扑排序的次序计算属性、按拓扑排序的次序计算属性语义规则的计算方法语 法 制 导 的 定 义分析树方法:前面介绍的方法(有环则失败)基于规则的方法:静态确定语义规则的计算次序。忽略规则的方法:事先确定属性的计算策略(如边分析边计算),那么语义规则的设计必须符合所选分析方法的限制。基于(语义)规则的方法语 义 规 则 的 计 算 方 法语法分析和属性计算分开,先构造分析树,然后按预先定义的语法分析和属性计算分开,先构造分析树,然后按预先定义
6、的策略遍历分析树来计算属性。策略遍历分析树来计算属性。语义规则的定义和计算顺序语义规则的定义和计算顺序(翻译模式翻译模式)在编译器构造之前确定。在编译器构造之前确定。分析树遍历策略的确定(构造编译器时)要考虑语义规则的分析树遍历策略的确定(构造编译器时)要考虑语义规则的定义及计算顺序,因此是基于规则的方法。定义及计算顺序,因此是基于规则的方法。忽略(语义)规则的方法语 义 规 则 的 计 算 方 法 在进行语法分析的同时进行翻译,即边分析边计算属性,计算次序由分析方法确定而与语义规则无关。缺点:这样确定计算次序将限制能实现的语法制导定义的种类。优点:不构造依赖图,不对依赖图进行拓扑排序,提高了时空效率。