T - type of node in the supergraphP - type of a procedure (like a box in an RSM)F - type of factoids propagated when solving this problempublic interface TabulationProblem<T,P,F>
Special case: if supportsMerge(), then the problem is not really IFDS anymore. (TODO: rename it?). Instead, we perform a merge operation before propagating at every program point. This way, we can implement standard interprocedural dataflow and ESP-style property simulation, and various other things.
Note that at the moment, the data structures in the TabulationSolver are not set up to do merge efficiently. TODO.
See Reps, Horwitz, Sagiv POPL 95
| Modifier and Type | Method and Description |
|---|---|
TabulationDomain<F,T> |
getDomain() |
IFlowFunctionMap<T> |
getFunctionMap() |
IMergeFunction |
getMergeFunction()
Special case: if supportsMerge(), then the problem is not really IFDS anymore.
|
ISupergraph<T,P> |
getSupergraph() |
java.util.Collection<PathEdge<T>> |
initialSeeds()
Define the set of path edges to start propagation with.
|
ISupergraph<T,P> getSupergraph()
TabulationDomain<F,T> getDomain()
IFlowFunctionMap<T> getFunctionMap()
java.util.Collection<PathEdge<T>> initialSeeds()
IMergeFunction getMergeFunction()