简单DAG生成算法的一个性质
2009-06-03 08:30:24 来源:WEB开发网核心提示: 对应习题里c)的DAG应该是: 上面的代码做出来的效果还有待改善就是了,对 a + b + (b + a) 这样的表达式,简单DAG生成算法的一个性质(7),生成的DAG会是: 右侧中间的那个+下面的左节点与右节点的顺序反掉了,其实仔细留心的话,下面的lambda表达式: C#代码x =&
对应习题里c)的DAG应该是:
上面的代码做出来的效果还有待改善就是了。对 a + b + (b + a) 这样的表达式,生成的DAG会是:
右侧中间的那个+下面的左节点与右节点的顺序反掉了。其实仔细留心的话,前面对习题的b)给出的DAG也有一个节点的左右关系是反了的。
要调整这个细节挺麻烦的,我还没想好怎么实现比较干净。不过暂时就这么凑合看看好了 = =
顺带提一下.NET 3.5里的LINQ Expression Tree和DLR里的LINQ Expression Tree v2。
在LINQ与DLR的Expression tree(1):简介LINQ与Expression tree一帖的Expression tree与lambda表达式一节里,我简单的提到过“Expression Tree表示的是AST”这样的概念。当时只是为了说明方便,其实并不准确。
用那帖的例子来说,下面的lambda表达式:
C#代码
x => -x
在那帖里我给出了这样的AST图:
也说明了图中虚线连接的两个节点实际上是一个节点。
但我们都知道,树这种数据结构的重要性质就是它的每个节点都只有一个父节点(根节点除外)。上述lambda表达式对应的Expression Tree中的节点情况实际上应该这样画:
更多精彩
赞助商链接