object StructuralAnalysis
An algorithm that identifies several different types of flow regions in a given flow graph and reduces them to a single node iteratively. The algorithm terminates either when a single node is left in the flow graph or such a state could not be reached after maxIterations.
On termination, the analyze function returns:
- The reduced flow graph, a single node equal to the root node of the control tree.
-
A super flow graph as a combination of the given source flow graph and the control tree. For each
node contained in the control tree, the super flow graph contains the node itself and edges to its children
as referenced the control tree. However, its children are still connected with edges as contained in the
source flow graph.
This representation eases traversal for data flow analysis such as by DataFlowAnalysis.
- The control tree, as a hierarchic representation of the control flow regions identified by the algorithm.
This algorithm is adapted from Muchnick, S.S. (1997). Advanced Compiler Design and Implementation and optimized for performance.
- Source
- StructuralAnalysis.scala
- See also
- Alphabetic
- By Inheritance
- StructuralAnalysis
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final val MaxIterationsKey: String("org.opalj.si.flowanalysis.StructuralAnalysis.maxIterations")
- def analyze(initialGraph: FlowGraph, entry: FlowGraphNode)(implicit config: Config): (FlowGraph, SuperFlowGraph, ControlTree)
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated @Deprecated
- Deprecated