use of claw.tatsu.analysis.topology.DirectedGraph in project claw-compiler by C2SM-RCM.
the class ClawTranslator method reorderTransformations.
/**
*/
private void reorderTransformations() {
if (getGroups().containsKey(ScaForward.class)) {
TransformationGroup tg = getGroups().get(ScaForward.class);
if (tg.count() <= 1) {
return;
}
DirectedGraph<Transformation> dg = new DirectedGraph<>();
Map<String, List<Transformation>> fctMap = new HashMap<>();
for (Transformation t : tg.getTransformations()) {
ScaForward p = (ScaForward) t;
dg.addNode(p);
if (fctMap.containsKey(p.getCallingFctName())) {
List<Transformation> tList = fctMap.get(p.getCallingFctName());
tList.add(p);
} else {
List<Transformation> tList = new ArrayList<>();
tList.add(p);
fctMap.put(p.getCallingFctName(), tList);
}
}
for (Transformation t : tg.getTransformations()) {
ScaForward p = (ScaForward) t;
if (p.getCalledFctName() != null && fctMap.containsKey(p.getCalledFctName())) {
List<Transformation> tList = fctMap.get(p.getCalledFctName());
for (Transformation end : tList) {
dg.addEdge(p, end);
}
}
}
List<Transformation> ordered = TopologicalSort.sort(TopologicalSort.reverseGraph(dg));
tg.setTransformations(ordered);
}
}
Aggregations