import EDU.neu.ccs.demeter.*; import EDU.neu.ccs.demeter.dj.*; /* Cd_graph = < first > Adj < rest > Adj_list . Adj = < vertex > Vertex < ns > Neighbors "." . Neighbors : Construct | Alternat . Construct = "=" < c_ns > Any_vertex_list . Alternat = ":" < first > Vertex "|" < second > Vertex . Any_vertex : Labeled_vertex | Syntax_vertex . */ class Main { public static void main(String[] args) { // Adj_1: Cd_graph = < first > Adj < rest > Adj_list . Vertex adj1_vertex = new Vertex(new Ident("Cd_graph")); Vertex adj1_cls1 = new Vertex(new Ident("Adj")); Vertex adj1_cls2 = new Vertex(new Ident("Adj_list")); Nany_vertex_list adj1_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("rest"),adj1_cls2),new Empty()); Nany_vertex_list adj1_nvl1 = new Nany_vertex_list(new Labeled_vertex(new Ident("first"),adj1_cls1), adj1_nvl2); Neighbors adj1_neighbors = new Construct( adj1_nvl1); Adj adj1 = new Adj(adj1_vertex, adj1_neighbors); // Adj_2: Adj = < vertex > Vertex < ns > Neighbors "." . Vertex adj2_vertex = new Vertex(new Ident("Adj")); Vertex adj2_cls1 = new Vertex(new Ident("Vertex")); Vertex adj2_cls2 = new Vertex(new Ident("Neighbors")); Nany_vertex_list adj2_nvl3 = new Nany_vertex_list(new Syntax_vertex("."), new Empty()); Nany_vertex_list adj2_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("rest"), adj2_cls2), adj2_nvl3); Nany_vertex_list adj2_nvl1 = new Nany_vertex_list(new Labeled_vertex(new Ident("first"), adj2_cls1), adj2_nvl2); Neighbors adj2_neighbors = new Construct( adj2_nvl1); Adj adj2 = new Adj(adj2_vertex, adj2_neighbors); // Adj_3: Neighbors : Construct | Alternat . Vertex adj3_vertex = new Vertex(new Ident("Neighbors")); Vertex adj3_first = new Vertex(new Ident("Construct")); Vertex adj3_second = new Vertex(new Ident("Alternat")); Neighbors adj3_neighbors = new Alternat(adj3_first, adj3_second); Adj adj3 = new Adj(adj3_vertex, adj3_neighbors); // Adj_4: Construct = "=" < c_ns > Any_vertex_list . Vertex adj4_vertex = new Vertex(new Ident("Construct")); Vertex adj4_cls = new Vertex(new Ident("Any_vertex_list")); Nany_vertex_list adj4_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("c_ns"), adj4_cls), new Empty()); Nany_vertex_list adj4_nvl1 = new Nany_vertex_list(new Syntax_vertex("="), adj4_nvl2); Neighbors adj4_neighbors = new Construct( adj4_nvl1); Adj adj4 = new Adj(adj4_vertex, adj4_neighbors); // Adj_5: Alternat = ":" < first > Vertex "|" < second > Vertex . Vertex adj5_vertex = new Vertex(new Ident("Alternat")); Vertex adj5_cls = new Vertex(new Ident("Vertex")); Nany_vertex_list adj5_nvl4 = new Nany_vertex_list(new Labeled_vertex(new Ident("second"), adj5_cls), new Empty()); Nany_vertex_list adj5_nvl3 = new Nany_vertex_list(new Syntax_vertex("|"), adj5_nvl4); Nany_vertex_list adj5_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("first"), adj5_cls), adj5_nvl3); Nany_vertex_list adj5_nvl1 = new Nany_vertex_list(new Syntax_vertex(":"), adj5_nvl2); Neighbors adj5_neighbors = new Construct( adj5_nvl1); Adj adj5 = new Adj(adj5_vertex, adj5_neighbors); // Adj_6: Any_vertex : Labeled_vertex | Syntax_vertex . Vertex adj6_vertex = new Vertex(new Ident("Any_vertex")); Vertex adj6_first = new Vertex(new Ident("Labeled_vertex")); Vertex adj6_second = new Vertex(new Ident("Syntax_vertex")); Neighbors adj6_neighbors = new Alternat(adj6_first, adj6_second); Adj adj6 = new Adj(adj6_vertex, adj6_neighbors); Adj_list cd_graph6 = new Cd_graph(adj6, new Empty_cd_graph()); Adj_list cd_graph5 = new Cd_graph(adj5, cd_graph6); Adj_list cd_graph4 = new Cd_graph(adj4, cd_graph5); Adj_list cd_graph3 = new Cd_graph(adj3, cd_graph4); Adj_list cd_graph2 = new Cd_graph(adj2, cd_graph3); Cd_graph cd_graph = new Cd_graph(adj1, cd_graph2); ClassGraph cg=new ClassGraph(); TraversalGraph tg = TraversalGraph.compute(cg, new Strategy("from Cd_graph via Alternat to Vertex")); CountInhRelsVisitor v = new CountInhRelsVisitor(); tg.traverse( cd_graph, v); } }