Interface TabulationProblem<T,P,F>

Type Parameters:
T - type of node in the supergraph
P - 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 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()