package de.gaalop.visitors;
import de.gaalop.cfg.*;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Prints an extended view of the Control Flow Graph.
*
* Additional to the standard printout, the name of the node type is printed.
*
* @author Christian Steinmetz
*/
public class CFGExtendedPrinter extends EmptyControlFlowVisitor {
private PrintStream output;
private CFGExtendedPrinter(OutputStream output) {
this.output = new PrintStream(output);
}
public static void print(ControlFlowGraph graph, OutputStream output) {
CFGExtendedPrinter printer = new CFGExtendedPrinter(output);
graph.accept(printer);
try {
output.flush();
} catch (IOException ex) {
Logger.getLogger(CFGExtendedPrinter.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void visit(StartNode node) {
output.println("StartNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(AssignmentNode node) {
output.println("AssignmentNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(StoreResultNode node) {
output.println("StoreResultNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(IfThenElseNode node) {
output.println("IfThenElseNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(BlockEndNode node) {
output.println("BlockEndNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(LoopNode node) {
output.println("LoopNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(BreakNode node) {
output.println("BreakNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(Macro node) {
output.println("MacroNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(ExpressionStatement node) {
output.println("ExpressionStatement: "+node.toString());
super.visit(node);
}
@Override
public void visit(EndNode node) {
output.println("EndNode: "+node.toString());
super.visit(node);
}
@Override
public void visit(ColorNode node) {
output.println("ColorNode: "+node.toString());
super.visit(node);
}
}