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 Detail

      • 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()