S属性的语法制导定义 ·注释分析树:结点的属性值都标注出来的分析树 8+5*2n的注释分析树 L .val= i 8 E.val= 18 E.val 8 Tval= 10 Tval= 8 Tval= 5 Fval= 2 f.val= 8 F val= 5 digit.lexval= 2 digit.lexval =8 digit.lexval= 5
S属性的语法制导定义 • 注释分析树:结点的属性值都标注出来的分析树 8+5*2 n 的注释分析树 digit.lexval = 2 L.val = 18 E.val = 18 n E.val = 8 T.val = 10 T.val = 8 F.val = 8 digit.lexval = 8 T.val = 5 + F.val = 5 F.val = 2 digit.lexval = 5
s属性的语法制导定义 ·分析树各结点属性的计算可以自下而上地完成 L .val= i 8 E.val= 18 E.val 8 Tval= 10 Tval= 8 Tval= 5 Fval= 2 f.val= 8 F val= 5 digit.lexval= 2 digit.lexval =8 digit.lexval= 5
S属性的语法制导定义 • 分析树各结点属性的计算可以自下而上地完成 digit.lexval = 2 L.val = 18 E.val = 18 n E.val = 8 T.val = 10 T.val = 8 F.val = 8 digit.lexval = 8 T.val = 5 + F.val = 5 F.val = 2 digit.lexval = 5
继承属性 int id 1 3 产生式 语义规则 D→ TL L in=T!ype T→int T type= integer T-> real T type=real L→L1, id Lr in=Li; addType(id entry, Lin L→>id addTypelid. entry, Lin)
继承属性 int id1 , id2 , id3 产 生 式 语 义 规 则 D → TL L.in = T.type T→ int T. type = integer T→ real T. type = real L→ L1 , id L1 .in = L.in; addType(id.entry, L.in) L→ id addType(id.entry, L.in)
继承属性 例 int id,id2,id3的标注了部分属性的分析树 不可能像综合属性那样自下而上标注属性 D Ttype= integer L in=integer int Lin= integer Lin= integer 2
继承属性 • 例 int id1 , id2 , id3的标注了部分属性的分析树 不可能像综合属性那样自下而上标注属性 D int T.type = integer , id3 L.in = integer L.in = integer L.in = integer id2 id1
属性依赖图 ·例 int id,id2,id3的分析树(虚线)的依赖图 (实线) D→TL.in=Type D t 4 type in 5 L6 int in7 l 8 id3 3 ent in id2 2 ent id1 1 entry
属性依赖图 • 例 int id1 , id2 , id3的分析树(虚线)的依赖图 (实线) D → TL L.in = T.type D int T , id3 L L L id2 id1 , 1 entry 10 2 entry 3 entry in 9 in 7 8 4 type in 5 6