1、第五章 语法制导翻译学习重点m语法制导定义概念m利用语法制导定义构造语法树mS-属性定义、 L-属性定义m自顶向下计算属性m自底向上计算属性m递归方法计算属性m内存分配概述m 语法制导定义m 翻译模式m“编程语言的翻译根据语法进行 ”m“属性 ”, attributem 每个语法符号与若干属性相关联m 翻译 指定属性的相互依赖关系m 语义规则, semantic rulem 语言规则的执行反映属性的相互关系5.1 语法制导定义m 扩充 CFGq 语法符号 属性 语法树节点,记录域q 产生式 语义规则 语法树节点,用于计算属性m 属性类型q 综合, synthesized, 根据孩子节点属性计算
2、q 继承, inherited, 由父、兄弟节点属性计算m 依赖图, dependency graphm 注释语法树:节点属性值计算完毕annotated parse tree, annotating, decorating5.1.1 语法制导定义的形式m 每个产生式 A 与 一组语义规则相关联,每个语义规则具有如下形式:q b = f(c1, c2, , c k), 两种可能情况q b为 A的综合属性, c1, c2, , c k为 A、 中 语法符号的属性q b为 中某个符号 的继承属性, c1, c2, , c k为 A、 中语法符号的属性q b依赖 c1, c2, , c km 属性文
3、法 :扩充了语法制导定义,无副作用例 5.1mdigit.lexval: 终结符只有综合属性,由词法分析器提供m 开始符号通常没有继承属性L E n print(E.val)E E1 + T E.val = E1.val + T.val E T E.val = T.valT T1 * F T.val = T1.val * F.val T F T.val = F.val F (E) F.val = E.val F digit F.val = digit .lexval产生式 语义规则5.1.2 综合属性m只有综合属性: S-属性定义m语法树自底向上计算属性例 55.1.3 继承属性m表达程序语言结构在上下文中的相互依赖关系更加自然、方便例 5.3 变量定义real id1, id2, id3;D T L L.in = T.typeT int T.type = integerT real T.type = realL L1 , id L1.in = L.inaddtype(id.entry, L.in)L id addtype(id.entry, L.in)产生式 语义规则