我将实现points-to analysis算法。我想主要基于the algorithm by Whaley and Lam来实现这种分析。 Whaley和Lam使用基于BDD的Datalog实现来表示和计算点到分析关系。
以下列出了典型点分析中使用的一些关系。请注意,如果D(w, z) :− A(w, x),B(x, y), C(y, z)
,D(w, z)
和A(w, x)
都为真,B(x, y)
表示C(y, z)
为真。 BDD是用于表示这些关系的数据结构。
关系
input vP0 (variable : V, heap : H)
input store (base : V, field : F, source : V)
input load (base : V, field : F, dest : V)
input assign (dest : V, source : V)
output vP (variable : V, heap : H)
output hP (base : H, field : F, target : H)
规则
vP(v, h) :− vP0(v, h)
vP(v1, h) :− assign(v1, v2), vP(v2, h)
hP(h1, f,h2) :− store(v1, f, v2), vP(v1, h1), vP(v2, h2)
vP(v2, h2) :− load(v1, f, v2), vP(v1, h1), hP(h1, f, h2)
我需要了解Maude是否是实施积分分析的良好环境。我注意到Maude使用名为BuDDy的BDD库。但是,它看起来像Maude uses BDDs for a different purpose, i.e. unification。所以,我想我可以使用Maude而不是Datalog引擎来计算我的点与分析之间的关系。我假设Maude同时传播独立信息。而这种并发性可能使我的分析 - 分析比顺序处理规则更快。但是,我不知道在Maude中代表我的关系的最佳方式。我应该自己在Maude中实施BDD,还是基于BDD的Maude内部统一具有相同的效果?