编译原理 马位文洁率语法制导制译 属性的计算次序 一个有向非循环图的拓扑序是图中结点的任何顺序 m1,m2..mk,使得边必须是从序列中前面的结点指向 后面的结点。 慧如果mi→mj是mi到mj的一条边,那么在序列中mi必 须出现在mj之前。 第21页
编译原理 第21页 属性文法和语法制导翻译 属性的计算次序 一个有向非循环图的拓扑序是图中结点的任何顺序 m1,m2,…mk,使得边必须是从序列中前面的结点指向 后面的结点。 如果mi→mj是mi到mj的一条边,那么在序列中mi必 须出现在mj之前
编泽原理 具使文洁和语法制导制译 一个依赖图的任何拓扑排序都给出一个语法树中结点的语 义规则计算的有效顺序。 在拓扑排序中,在一个结点上,语义规则 b:=f(c1, c2,...,ck) 中的属性cl,c2.,ck 在计算b以前都是可用的。 属性文法说明的翻译是很精确的。基础文法用于建立输入 符号串的语法分析树。依赖图如上面讨论的那样建立。从 依赖图的拓扑排序中,我们可以得到计算语义规则的顺序。 用这个顺序来计算语义规则就得到输入符号串的翻译。 第22苑
编译原理 第22页 属性文法和语法制导翻译 一个依赖图的任何拓扑排序都给出一个语法树中结点的语 义规则计算的有效顺序。 在拓扑排序中,在一个结点上,语义规则 b:=f(c1, c2,…,ck) 中的属性 cl,c2…,ck 在计算b以前都是可用的。 属性文法说明的翻译是很精确的。基础文法用于建立输入 符号串的语法分析树。依赖图如上面讨论的那样建立。从 依赖图的拓扑排序中,我们可以得到计算语义规则的顺序。 用这个顺序来计算语义规则就得到输入符号串的翻译
编泽原理 马位文洁和语洁制导制译 墨在上图的依赖图中,每一条边都是从序号较低的结点 指向序号较高的结点。因此,依赖图的一个拓扑排序 可以从低序号到高序号顺序写出。从这个拓扑排序中 我们可以得到下列程序,用an来代表依赖图中与序 号n的结点有关的属性.这些语法规则的计算将把real 类型填入到每个标识符对应的符号表项中。 a4:=real a5:=a4 addtype(id3.entry,a5) a7:=a5 addtype(id2.entry,a7) a9:=a7 addtype(id1.entry,a9) 第23页
编译原理 第23页 属性文法和语法制导翻译 在上图的依赖图中,每一条边都是从序号较低的结点 指向序号较高的结点。因此,依赖图的一个拓扑排序 可以从低序号到高序号顺序写出。从这个拓扑排序中 我们可以得到下列程序,用an来代表依赖图中与序 号n的结点有关的属性.这些语法规则的计算将把real 类型填入到每个标识符对应的符号表项中。 a4:=real a5:=a4 addtype(id3.entry,a5) a7:=a5 addtype(id2.entry,a7) a9:=a7 addtype(id1.entry,a9)
编泽原理 具使文洁和语法制导制译 树遍历的属性计算方法 假设语法树已经建立好了,并且树中已带有开始符号的继 承属性和终结符的综合属性。 然后以某种次序遍历语法树,直至计算出所有属性。最常 用的遍历方法是深度优先,从左到右的遍历方法。如果需 要的话,可使用多次遍历(或称遍)。 第2苑
编译原理 第24页 属性文法和语法制导翻译 树遍历的属性计算方法 假设语法树已经建立好了,并且树中已带有开始符号的继 承属性和终结符的综合属性。 然后以某种次序遍历语法树,直至计算出所有属性。最常 用的遍历方法是深度优先,从左到右的遍历方法。如果需 要的话,可使用多次遍历(或称遍)
编译原理 马位文洁和语洁制导制译 下面算法可对任何无循环的属性文法进行计算 While还有未被计算的属性 do VisittNode(S)/*S是开始符号*/ procedure VisitNode (N:Node); begin ifN是一个非终结符then /*假设它的产生式为N→X1,X2,.…Xm*/ for i:=1 to m do if not Xi∈Vt then/*即Xi是非终结符*/ begin 计算1的所有能够计算的继承属性; VisitNode(X;) end; 计算N的所有能够计算的综合属性 end 第25页1
编译原理 第25页 属性文法和语法制导翻译 下面算法可对任何无循环的属性文法进行计算 While 还有未被计算的属性 do VisittNode(S) /*S是开始符号*/ procedure VisitNode(N: Node); begin if N是一个非终结符 then /* 假设它的产生式为N→X1,X2,…Xm */ for i:=1 to m do if not Xi∈Vt then/* 即Xi 是非终结符 * / begin 计算 Xi 的所有能够计算的继承属性; VisitNode (X;) end; 计算 N 的所有能够计算的综合属性 end