package cfg.C;
import ast.ASTNode;
import ast.functionDef.Parameter;
import ast.functionDef.ParameterList;
import ast.statements.BreakStatement;
import ast.statements.CompoundStatement;
import ast.statements.ContinueStatement;
import ast.statements.DoStatement;
import ast.statements.ForStatement;
import ast.statements.GotoStatement;
import ast.statements.IfStatement;
import ast.statements.Label;
import ast.statements.ReturnStatement;
import ast.statements.SwitchStatement;
import ast.statements.WhileStatement;
import ast.walking.ASTNodeVisitor;
import cfg.CFG;
import cfg.nodes.ASTNodeContainer;
import cfg.nodes.CFGNode;
class StructuredFlowVisitor extends ASTNodeVisitor
{
private CFG returnCFG;
CFG getCFG()
{
return returnCFG;
}
public void visit(ParameterList paramList)
{
returnCFG = CCFGFactory.newInstance(paramList);
}
public void visit(Parameter param)
{
returnCFG = CCFGFactory.newInstance(param);
for(CFGNode node : returnCFG.getVertices()){
if(!(node instanceof ASTNodeContainer))
continue;
returnCFG.registerParameter(node);
}
}
public void visit(CompoundStatement content)
{
returnCFG = CCFGFactory.newInstance(content);
}
public void visit(ASTNode expression)
{
returnCFG = CCFGFactory.newInstance(expression);
}
public void visit(ReturnStatement expression)
{
returnCFG = CCFGFactory.newInstance(expression);
}
public void visit(GotoStatement expression)
{
returnCFG = CCFGFactory.newInstance(expression);
}
public void visit(IfStatement node)
{
returnCFG = CCFGFactory.newInstance(node);
}
public void visit(ForStatement node)
{
returnCFG = CCFGFactory.newInstance(node);
}
public void visit(WhileStatement node)
{
returnCFG = CCFGFactory.newInstance(node);
}
public void visit(DoStatement node)
{
returnCFG = CCFGFactory.newInstance(node);
}
public void visit(SwitchStatement node)
{
returnCFG = CCFGFactory.newInstance(node);
}
public void visit(Label node)
{
returnCFG = CCFGFactory.newInstance(node);
}
public void visit(ContinueStatement expression)
{
returnCFG = CCFGFactory.newInstance(expression);
}
public void visit(BreakStatement expression)
{
returnCFG = CCFGFactory.newInstance(expression);
}
}