这一章重要的是2个概念:
SDD:语法制导定义,由一个上下文无关文法和属性及规则组成
SDT:语法制导翻译,是在其产生式体内嵌入了程序片段的一个上下文无关文法
5.1 语法制导定义
图5.5中计算过程比较复杂,看完5.2节求值顺序就会理解更多
5.1.1比较简单,就是自底向上语法树中加上 .val就行
5.1.2
5.2 SDD的求值顺序
5.2.1 保证下表中从左到右排就行
1->3->5 2->4 |
4,5->6 | 6->7 | 7->8 | 8->9 |
5.2.2 依赖图比注释语法分析树增加了依赖关系
本题中的注释语法分析树完全类似图5-9
5.2.3 A->BCD
S属性 | L属性 | 求值顺序是否影响规则(中文书中翻译有问题) | |
A.s=B.i+C.s | no(有继承属性) | yes | |
A.s=B.i+C.s D.i=A.i+B.s |
no | yes | |
A.s=B.s+D.s | yes | yes | |
A.s=D.i B.i=A.s+C.s C.i=B.s D.i=B.i+C.i |
no | no |
5.2.4
S->L1.L2 L1.side = left L2.side=right S.value=L1.value+L2.value
S->L L1.side = left S.value=L.value
L->L1B L1.side=L.side if(L.side==left) L.value=L1.value*2+B.value else L.value=L1.value+B/2^(length(L1))
L->B if(L.side==left) L.value=B.value else L.value=B.value/2
B->0 B.value = 0
B->1 B.value = 1
5.2.5
S->LEFT.RIGHT | LEFT
LEFT->