package tests.udg; import java.util.Stack; import org.antlr.v4.runtime.ParserRuleContext; import parsing.ModuleParser; import parsing.C.Modules.ANTLRCModuleParserDriver; import ast.ASTNode; import ast.ASTNodeBuilder; import ast.functionDef.FunctionDef; import ast.walking.ASTNodeVisitor; import ast.walking.ASTWalker; import cfg.ASTToCFGConverter; import cfg.CFG; public class CFGCreator { private class NodeVisitor extends ASTNodeVisitor { private CFG cfg; private ASTToCFGConverter astToCFG = new ASTToCFGConverter(); public void visit(FunctionDef node) { cfg = astToCFG.convert(node); } public CFG getResult() { return cfg; } } private class Walker extends ASTWalker { NodeVisitor visitor = new NodeVisitor(); @Override public void startOfUnit(ParserRuleContext ctx, String filename) { } @Override public void endOfUnit(ParserRuleContext ctx, String filename) { } @Override public void processItem(ASTNode node, Stack<ASTNodeBuilder> nodeStack) { node.accept(visitor); } public CFG getResult() { return visitor.getResult(); } } public CFG getCFGForCode(String code) { ANTLRCModuleParserDriver driver = new ANTLRCModuleParserDriver(); ModuleParser parser = new ModuleParser(driver); Walker walker = new Walker(); parser.addObserver(walker); parser.parseString(code); return walker.getResult(); } }