综合属性 可以在分析输入符号串的同时由自下而上的 分析器来计算。 S-属性文法的翻译器通常可借助于LR分析器实现。 在对输入串进行语法分析的同时对属性进行计算。 TF F (E) F digit 注: ntop: 新的栈顶指针 ntop = top r +1 , r 产生式右边长度 如 F (E) 应为 val [top - 2 ] := val [top 1] 表6.6 翻译输入3*5+4n所作的动作 产 生 式 LEn 代 码 段 print (val [ top] ) 输入 State Val - 用到的产生式 3*5+4n - F digit +4n T*5 +4n T*F +4n T +4n E 4n E+ n E+4 n E+F 3-5 3-5 15 15 15- 15-4 15-4 F dight F dight T T*F E T val [ntop ] := val [top 1] n E+T n E En L E E1 + T val [ntop ] := val [top 2] + val [top] ET Leabharlann Baidu*5+4n 3 *5+4n F *5+4n T 5+4n T* 3 3 3 3- F dight T F T T1 * F val [ntop ] := val [top 2] * val [top] TF F (E) 15-4 T F 19 19- 19 L En E E+T
分析栈中的综合属性 假设语义规则 A. a := f( X.x, Y.y, Z.z) 对应于产生式 A→XYZ 假设综合属性是刚好在每次 归约前计算的
state val ... ... X Y X.x Y. y top Z Z. z ... ... 图6.9 带有综合属性域的分析栈 表6.5 用LR分析器实现台式计算器 产 生 式 LEn E E1 + T ET T T1 * F val [ntop ] :=val [top 2] * val [top] val [ntop ] :=val [top 1] 代 码 段 print (val [ top] ) val [ntop ] :=val [top 2] + val [top]