SDD的求值顺序


语义规则建立了属性之间的依赖关系,在对语法分析树节点的一个属性求值之前,必须首先求出这个属性值所依赖的所用属性值。

依赖图

  • 依赖图是一个描述了分析树种节点属性间依赖关系的有向图
  • 分析树中每个标号为X的节点的每个属性a都对应着依赖图中的一个结点
  • 如果属相X.a的值依赖于属性Y.b的值,则依赖图中有一条从Y.b的结点指向X.a的结点的有向边

例如:

SDD的求值顺序

属性值的计算顺序

  • 可行的求值顺序是满足下列条件的结点序列$N_1,N_2,...,N_k$:如果依赖图中有一条从结点$N_i$$N_j$的边$(N_i \rightarrow{N_j})$,那么$i<j$(即在结点序列中,$N_i$排在$N_j$前面)
    • 这样的排序讲一个有向图变成了一个线性排序,这个排序称为这个图的拓扑排序

SDD的求值顺序

注:画红线的部分代表它们之间互不依赖,也就是说它们之间的顺序是可调的。

  • 对于只具有综合属性的SDD,可以按照任何自底向上的顺序计算它们的值。
  • 对于同时具有继承属性和综合属性的SDD,不能保证存在一个顺序来对各个结点上的属性进行求值。

SDD的求值顺序