|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Object | +--de.rwth.dfa.DataFlowSolver
Implements the text-book graph based data flow analysis algorithm. Given a data flow problem, it computes the maximum fixed point (MPF) solution.
| Field Summary | |
protected boolean |
forward
Forward (along the edges) or backward (opposite the edges) data flow problem? |
protected Graph.NodeDyer |
functions
The transfer functions for the computation. |
protected RootedGraph |
g
The graph to operate on. |
protected Graph.NodeDyer |
inits
The initial values for the computation. |
protected boolean |
isAll
Universal (meet) or existential (join) data flow problem? |
protected long |
iterations
Number of iterations computed so far. |
protected long |
iterationsBound
Upper bound for the number of iterations. |
protected Lattice |
l
The lattice for the values and on which the functions operate. |
protected java.lang.Class |
worklistFactory
The class used to create a new work list. |
| Constructor Summary | |
DataFlowSolver(RootedGraph g,
Graph.NodeDyer inits,
Graph.NodeDyer functions,
boolean isAll,
boolean forward)
Creates a new DataFlowSolver instance with default upper bound and
work list StackWorklist. |
|
DataFlowSolver(RootedGraph g,
Graph.NodeDyer inits,
Graph.NodeDyer functions,
boolean isAll,
boolean forward,
long iterationsBound,
java.lang.Class worklistFactory)
Creates a new DataFlowSolver instance. |
|
| Method Summary | |
protected void |
addDepending(Worklist worklist,
Graph.Node node)
Adds all nodes which depend on a specific node in the graph of this solver to a work list. |
long |
getIterations()
Returns the number of iterations used in solve(). |
protected java.lang.Object |
recompute(Graph.Node node,
Graph.NodeDyer values)
Recomputes the value for node in the graph of this data flow solver. |
Graph.NodeDyer |
solve()
Solves this data flow problem. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
protected RootedGraph g
protected Graph.NodeDyer inits
gprotected Graph.NodeDyer functions
gprotected Lattice l
protected boolean isAll
protected boolean forward
protected long iterations
protected long iterationsBound
protected java.lang.Class worklistFactory
| Constructor Detail |
public DataFlowSolver(RootedGraph g,
Graph.NodeDyer inits,
Graph.NodeDyer functions,
boolean isAll,
boolean forward,
long iterationsBound,
java.lang.Class worklistFactory)
throws java.lang.IllegalArgumentException
DataFlowSolver instance. The data flow problem is
described by a graph g, colorings of the graph giving initial
values and transfer function, kind of problem, and direction of control flow in
the graph. The functions must be monotonic on the underlying
lattice! Otherwise, the computation may be complete nonsense and
terminate only when the upper bound of iterations is reached.g - a RootedGraph valueinits - a Graph.NodeDyer valuefunctions - a Graph.NodeDyer valueisAll - a boolean valueforward - a boolean valueiterationsBound - a long valueworklistFactory - a Class valuejava.lang.IllegalArgumentException - if
functions is not a Function.functions does not have identical
domain and range (endomorphism).functions does not have a Lattice as domain and range.functions have the same domain and
range.inits is not an element of the unique
Lattice determined by functions.
public DataFlowSolver(RootedGraph g,
Graph.NodeDyer inits,
Graph.NodeDyer functions,
boolean isAll,
boolean forward)
throws java.lang.IllegalArgumentException
DataFlowSolver instance with default upper bound and
work list StackWorklist.g - a RootedGraph valueinits - a Graph.NodeDyer valuefunctions - a Graph.NodeDyer valueisAll - a boolean valueforward - a boolean valuejava.lang.IllegalArgumentException - if an error occursDataFlowSolver(RootedGraph, Graph.NodeDyer, Graph.NodeDyer, boolean , boolean, long, Class)| Method Detail |
public long getIterations()
solve().long value: If solve was not called so for, -1
protected java.lang.Object recompute(Graph.Node node,
Graph.NodeDyer values)
throws FunctionException
node in the graph of this data flow solver.node - a Graph.Node valuevalues - a Graph.NodeDyer valueObject valueFunctionException - if on the functions in the functions
of this data flow solver throws this exception.
protected void addDepending(Worklist worklist,
Graph.Node node)
worklist - a Worklist valuenode - a Graph.Node value
public Graph.NodeDyer solve()
throws java.lang.InstantiationException,
java.lang.IllegalAccessException,
java.lang.ClassCastException,
FunctionException,
java.lang.IllegalArgumentException
Graph.NodeDyer value: The results as coloring of the graph.java.lang.InstantiationException - if this exception is caused by creating a new
instance of the work list factory.java.lang.IllegalAccessException - if this exception is caused by creating a new
instance of the work list factory.java.lang.ClassCastException - if the new instance created by the work list
factory is not a work list.FunctionException - if one of the functions throws itjava.lang.IllegalArgumentException - if the number of iterations reaches the
upper bound.
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||