Algorithm description: if(node is marked as visited) -> stop process and ask for another from queue if(node has only one predecessor) { -> process node's element and mark it as visited } else { if(all node's predecessors are visited) { -> try to join all nodes with same CFGNode -> process actual node's element and mark it as visited } else { if(predecessor's is part of a cycle.
More...
Algorithm description: if(node is marked as visited) -> stop process and ask for another from queue if(node has only one predecessor) { -> process node's element and mark it as visited } else { if(all node's predecessors are visited) { -> try to join all nodes with same CFGNode -> process actual node's element and mark it as visited } else { if(predecessor's is part of a cycle.
Singleton class executes algorithm which traverse CFG the way, where every cycles (while, for etc) are traversed only once.
@note(predecessor's ID is higher then actual node)) {
-> process all actual node's successors which compose cycles and
-> add them to queue
} else {
-> try to join nodes with same CFGNode and add actual node to
-> queue's bottom
}
}
}
- Author
- Jan Kučera