Cd_graph{ {{ static ClassDefList delist,terminal,keylist; static TraversalGraph tg_adj; static TraversalGraph tg_list; static TraversalGraph tg_ded; static TraversalGraph tg_part; static TraversalGraph tg_sub; static TraversalGraph tg_parameter; static TraversalGraph tg_com; void findUndefinedClasses(TraversalGraph tg){ createTerminalList(); //System.out.println("11"); //find defined classes FindCVisitor fV= new FindCVisitor(); tg.traverse(this,fV); //System.out.println("22"); //find undefind classes FindAdjVisitor fdV = new FindAdjVisitor(); tg_adj.traverse(this,fdV); //System.out.println("33"); flattingClassGraph(); //System.out.println("44"); //find unique parts CheckUPartVisitor uV = new CheckUPartVisitor(); tg_list.traverse(delist,uV); //System.out.println("55"); //find inheritance circle CheckCircleVisitor iV = new CheckCircleVisitor(); tg_list.traverse(delist,iV); } }} } Cd_graph{ {{ void createTerminalList() { terminal = ClassDefList.parse("{}");; delist = ClassDefList.parse("{}"); keylist = ClassDefList.parse("{}");; ClassInfo ci = new ClassInfo(); ClassName name = new ClassName(); Ident ident = new Ident("Ident"); name.set_ident(ident); ci.set_name(name); terminal.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("String"); name.set_ident(ident); ci.set_name(name); terminal.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Text"); name.set_ident(ident); ci.set_name(name); terminal.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Real"); name.set_ident(ident); ci.set_name(name); terminal.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Number"); name.set_ident(ident); ci.set_name(name); terminal.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Visitor"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Stack"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("extends"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("EOF"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("int"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("float"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Integer"); name.set_ident(ident); ci.set_name(name); terminal.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Float"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("Boolean"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); ci = new ClassInfo(); name = new ClassName(); ident = new Ident("boolean"); name.set_ident(ident); ci.set_name(name); keylist.get_classinfo_list().addElement(ci); tg_list = new TraversalGraph("from ClassDefList bypassing {->*,partclass,*, ->*,tail,*, ->*,parent,*, ->*,subclass,*, ->*,parameter,*} to ClassInfo ",Main.cg); tg_ded = new TraversalGraph("from Adjacency bypassing {Neighbors, ->*,parameters,*,Vertext} to Vertex",Main.cg); tg_adj = new TraversalGraph("from Cd_graph to Adjacency",Main.cg); tg_com = new TraversalGraph("from Adjacency bypassing {Neighbors, ->*,source,*, ->*,tail,*} to Vertex",Main.cg); tg_part = new TraversalGraph("from Adjacency bypassing {-> *,source,*, ->*,parameters,*, Repetit_n, ->*,alternat_ns,*, ->*,actual_parameters,*} to {Vertex,Labeled}",Main.cg); tg_sub = new TraversalGraph("from Adjacency bypassing {-> *,source,*, ->*,parameters,*, Repetit_n, ->*,construct_ns,*} to Vertex",Main.cg); tg_parameter = new TraversalGraph("from Adjacency bypassing {-> *,source,*, ->*,parameters,*, Repetit_n, ->*,alternat_ns,*, ->*,vertex,*} to Vertex",Main.cg); } }} } Cd_graph{ {{ static ClassInfo check_undefined(Ident name){ FindUCVisitor fV = new FindUCVisitor(name); ClassInfo result = (ClassInfo)Cd_graph.tg_list.traverse(Cd_graph.delist,fV); if (result == null){ // searching in the list of defined classes fV = new FindUCVisitor(name); result = (ClassInfo) Cd_graph.tg_list.traverse(Cd_graph.terminal,fV); if (result == null){ //searching in the list of terminals result = (ClassInfo) Cd_graph.tg_list.traverse(Cd_graph.keylist,fV); if (result == null){ //searching in the list of key words System.out.println("Error: Class " + name + " is not defined in the cd"); Main.err_num++; result = new ClassInfo(); ClassName n = new ClassName(); n.set_ident(name); result.set_name(n); Cd_graph.delist.get_classinfo_list().addElement(result); return result; } else return null; } else return result; } else return result; } }} } Cd_graph{ {{ void flattingClassGraph(){ FlattingVisitor fV = new FlattingVisitor(); tg_list.traverse(delist,fV); } }} }