Interface TabulationProblem<T,P,F>
- Type Parameters:
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 problem
- All Known Subinterfaces:
PartiallyBalancedTabulationProblem<T,
P, F>
- All Known Implementing Classes:
Slicer.SliceProblem
public interface TabulationProblem<T,P,F>
Representation of a Dyck-language graph reachability problem for the tabulation solver.
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
-
Method Summary
Modifier and TypeMethodDescriptionSpecial case: if supportsMerge(), then the problem is not really IFDS anymore.Define the set of path edges to start propagation with.
-
Method Details
-
getSupergraph
ISupergraph<T,P> getSupergraph() -
getDomain
TabulationDomain<F,T> getDomain() -
getFunctionMap
IFlowFunctionMap<T> getFunctionMap() -
initialSeeds
Collection<PathEdge<T>> initialSeeds()Define the set of path edges to start propagation with. -
getMergeFunction
IMergeFunction getMergeFunction()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.- Returns:
- the merge function, or null if !supportsMerge()
-