4.1语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 E.yal 18 E.yal 8 T.yal 10 T.yal 8 T.yal 5 F.yal 2 F.val 8 Eval-5 digit.lexval 2 digit.lexyal 8 digit.lexyal 5
4 1. 语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 注释分析树:结点的属性值都标注出来的分析树 E.yal 18 E.yal 8 T.yal 10 T.yal 8 T.yal 5 F.yal 2 F.val 8 Eval-5 digit.lexval 2 digit.lexyal 8 digit.lexval 5
4 1. 语法制导的翻译 注释分析树:结点的属性值都标注出来的分析树 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 4.1.2 语法树 语法树是分析树的浓缩表示:算符和关键字是作为 内部结点 语法制导翻译可以基于分析树,也可以基于语法树 语法树的例子: if B then S else S2 8+5*2 if-then-else B
4 1. 语法制导的翻译 4.1.2 语法树 • 语法树是分析树的浓缩表示:算符和关键字是作为 内部结点 • 语法制导翻译可以基于分析树,也可以基于语法树 • 语法树的例子: if B then S1 else S2 8 + 5 2 if-then-else + 8 * B S1 S2 * 5 2 8
4.1语法制导的翻译 4.1.3构造语法树的翻译方案 产生式 语义动作 E→E,+T E.nptr mkNode(+'E.nptr,T.nptr) E→T E.nptr T.nptr T->T *F T.nptr mkNode(*'Ti.nptr,F.nptr) T→F T.nptr F.nptr F→(E) F.nptr E.nptr F→id F.nptr mkLeaf (id,id.entry) F→num F.nptr mkLeaf (num,num.val)
4 1. 语法制导的翻译 4.1.3 构造语法树的翻译方案 产 生 式 语 义 动 作 E E1 + T E.nptr = mkNode( ‘+’, E1 .nptr, T.nptr) 1 pt ode( , 1 pt , pt ) E T E.nptr = T.nptr T T1 F T.nptr = mkNode( ‘’, T1.nptr, F.nptr) T F T.nptr = F.nptr F (E) F.nptr = E.nptr F id F.nptr = mkLeaf (id, id.entry) F num F.nptr = mkLeaf (num num (num, num.val)
4.1语法制导的翻译 a+5*b的语法树的构造 E.np E.nptr T.nptr- F.nptr. F.nptr- ....9 num num 5 id 指向符号表中a的入口 指向符号表中b的入口
4 1. 语法制导的翻译 a+5b的语法树的构造 E.nptr T.nptr E.nptr + T.nptr T.nptr F.nptr + F.nptr id F.nptr id id num id num 5 id 指向符号表中a 的入口 指向符号表中b 的入口