Neighbors { {{ public static final String bypassed = " bypassing {Strategy, TraversalGraph, ClassGraph, String, Set}"; void addPart(String partName) {} Set parts = new HashSet(); boolean gotLocalParts = false; public static Strategy partStrategy;// = null; public TraversalGraph partGraph;// = new TraversalGraph(partStrategy, Main.cg); Set getParts(TraversalGraph tg) { if (! gotLocalParts) { tg.traverse(this, new PartGatherVisitor(parts)); gotLocalParts = true; } return parts; } void propagateTBRV() { } }} } Construct_ns { {{ public static final Strategy partStrategy = new Strategy("from Construct_ns bypassing Term_Bar_list to {Regular, Labeled}"); public final TraversalGraph partGraph = new TraversalGraph(partStrategy, Main.cg); void addPart(String partName, String partType) { if (parts.contains(partName)) throw new RuntimeException("Part " + partName + " already exists!"); parts.add(partName); } Set getParts() { return getParts(partGraph); } void flatten() { getParts(); } }} } Alternat_ns { {{ public static final Strategy partStrategy = new Strategy("from Alternat_ns to {Regular, Labeled}"); public static final Strategy subclassStrategy = new Strategy("from Alternat_ns through Term_Bar_list to Vertex"); public final TraversalGraph partGraph = new TraversalGraph(partStrategy, Main.cg); public final TraversalGraph subclassGraph = new TraversalGraph(subclassStrategy, Main.cg); Set subclasses = new HashSet(); boolean gotSubclasses = false; Set getSubclasses() { if (! gotSubclasses) { subclassGraph.traverse(this, new SubclassGatherVisitor(subclasses)); gotSubclasses = true; } return subclasses; } void addPart(String partName, String partType) { Iterator iter = getSubclasses().iterator(); for(;iter.hasNext();) { ((Adjacency)Cd_graph.adjs.get(iter.next())).addPart(partName, partType); } } Set getParts() { return getParts(partGraph); } void resolveSubclasses(String myName) { Iterator sIter = getSubclasses().iterator(); Adjacency adj; for(;sIter.hasNext();) { adj = (Adjacency)Cd_graph.adjs.get(sIter.next()); adj.addSuperClass(myName); } } void flatten() { TraversalGraph tg = new TraversalGraph("from Any_vertex_List through Normal to " + Main.FIDENT, Main.cg); Iterator ptIter = tg.gather(this.get_construct_ns()).iterator(); Iterator pIter = getParts().iterator(); Iterator sIter = getSubclasses().iterator(); Map adjs = Cd_graph.adjs; String partName; String partType; String subclassName; Adjacency adj; for (;pIter.hasNext();) { partType = ptIter.next().toString(); partName = pIter.next().toString(); for (sIter = getSubclasses().iterator();sIter.hasNext();) { subclassName = sIter.next().toString(); adj = (Adjacency)adjs.get(subclassName); if (adj == null) { System.out.println("The definition for " + subclassName + " is missing!"); System.exit(1); } else try { // System.out.println("Processing " + partName + " which is instance of: " + partType); adj.addPart(partName,partType); } catch (RuntimeException re) { System.out.println("Duplicate name of \"" + partName + "\" found in \"" + subclassName + "\""); } } } } void propagateTBRV() { Iterator iter = getSubclasses().iterator(); for(;iter.hasNext();) { ((Adjacency)Cd_graph.adjs.get(iter.next())).propagateTBRV(); } } }} }