SDD的求值顺序
语义规则建立了属性之间的依赖关系,在对语法分析树节点的一个属性求值之前,必须首先求出这个属性值所依赖的所用属性值。
依赖图
- 依赖图是一个描述了分析树种节点属性间依赖关系的有向图
- 分析树中每个标号为
X
的节点的每个属性a
都对应着依赖图中的一个结点 - 如果属相
X.a
的值依赖于属性Y.b
的值,则依赖图中有一条从Y.b
的结点指向X.a
的结点的有向边
例如:
属性值的计算顺序
- 可行的求值顺序是满足下列条件的结点序列
$N_1,N_2,...,N_k$
:如果依赖图中有一条从结点$N_i$
到$N_j$
的边$(N_i \rightarrow{N_j})$
,那么$i<j$
(即在结点序列中,$N_i$
排在$N_j$
前面)- 这样的排序讲一个有向图变成了一个线性排序,这个排序称为这个图的拓扑排序 。
注:画红线的部分代表它们之间互不依赖,也就是说它们之间的顺序是可调的。
- 对于只具有综合属性的SDD,可以按照任何自底向上的顺序计算它们的值。
- 对于同时具有继承属性和综合属性的SDD,不能保证存在一个顺序来对各个结点上的属性进行求值。