L属性的SDD
Last updated
Last updated
S属性的SDD每个属性都是综合属性,都是根据子构造的属性计算出父构造的属性。在依赖图中,总是通过子节点的属性值来计算父节点的属性值,可以与自底向上或自顶向下的语法分析过程一起计算。
自底向上:在构造分析树结点的同时计算相关的属性(此时子节点的属性必然已经计算完毕)
自顶向下:在递归子程序法中,在过程A()的最后计算A的属性,此时A调用的其他过程(对应于其子结构)已经计算完毕。
在分析树上计算SDD,按照后序遍历的顺序计算属性值即可。在LR分析过程中,实际上不需要构造分析树结点。
S属性的SDD中每个属性都是综合属性,便于计算。但是无法计算同时需要继承和综合属性的语义信息。
每个属性是综合属性或继承属性,且
特点:依赖图中的边,综合属性是从下到上,继承属性是从上到下或从左到右。计算一个属性值时,它所依赖的属性值已计算完毕。
在递归程序法中实现L属性:对于每个非终结符号A,调用其对应过程前计算继承属性,从过程返回前计算综合属性。
L属性SDD其属性总可以按照如下方式计算:
非L属性的例子:
L属性的例子:基本类型和数组类型的L属性定义