我正在创建一个编译器,我需要确保依赖图永远不会有周期,所以我的问题是S属性和L属性的SDD总是会产生DAG依赖图,如果是?怎么会这样?
答案 0 :(得分:1)
没有。可以从根到每个叶子继承一些属性。没有循环。可以从所有叶子(例如“计数1个孩子”)合成不同的属性,并在树的上一路上对它们求和。没有周期。
所以,这是一个没有周期的反例。所以你不总是获得周期。
但是,是的,您可以使用循环编写属性语法。如果通过将遗传属性与合成属性组合来计算遗传属性,并且合成属性取决于继承属性,则在依赖图中将有一个循环。
实际上,你可以简单地忽略这种情况。任何编写这样一个AG的人都会为它付费,如果他们盲目编译并运行它,当它陷入循环时。如果她有任何好处,她会发现有一个循环并打破它,问题就消失了。如果该工具构造一个抽象依赖图并告诉她,那就更好了。