import EDU.neu.ccs.demeter.*; import EDU.neu.ccs.demeter.dj.*; /* A1 = A1 A1. A2 = A1 A1. A = "x" X Integer. X = . B = Long. C = Integer Integer. T : R | S. S = Vector A. */ class Main { public static void main(String[] args) { // Adj_1: A1 = A1 A1 Vertex adj1_vertex = new Vertex(new Ident("A1")); Nany_vertex_list adj1_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("c"),adj1_vertex),new Empty()); Nany_vertex_list adj1_nvl1 = new Nany_vertex_list(new Labeled_vertex(new Ident("b"),adj1_vertex), adj1_nvl2); Neighbors adj1_neighbors = new Construct( adj1_nvl1); Adj adj1 = new Adj(adj1_vertex, adj1_neighbors); // Adj_2: A2 = A1 A1 Vertex adj2_vertex = new Vertex(new Ident("A2")); Adj adj2 = new Adj(adj2_vertex, adj1_neighbors); // Adj_3: A = "x" X Integer. Vertex adj3_vertex = new Vertex(new Ident("A")); Vertex adj3_vertex_int = new Vertex(new Ident("Integer")); Vertex adj3_vertex_X = new Vertex(new Ident("X")); Nany_vertex_list adj3_nvl3 = new Nany_vertex_list(new Labeled_vertex(new Ident("i"),adj3_vertex_int),new Empty()); Nany_vertex_list adj3_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("x"),adj3_vertex_X), adj3_nvl3); Nany_vertex_list adj3_nvl1 = new Nany_vertex_list(new Syntax_vertex(new String("X")), adj3_nvl2); Neighbors adj3_neighbors = new Construct( adj3_nvl1); Adj adj3 = new Adj(adj3_vertex, adj3_neighbors); // Adj_4: X = . Vertex adj4_vertex = new Vertex(new Ident("X")); Neighbors adj4_neighbors = new Construct( new Empty()); Adj adj4 = new Adj(adj4_vertex, adj4_neighbors); // Adj_5: B = Long. Vertex adj5_vertex = new Vertex(new Ident("B")); Vertex adj5_vertex_long = new Vertex(new Ident("Long")); Nany_vertex_list adj5_nvl1 = new Nany_vertex_list(new Labeled_vertex(new Ident("l"),adj5_vertex_long), new Empty()); Neighbors adj5_neighbors = new Construct(adj5_nvl1); Adj adj5 = new Adj(adj5_vertex, adj5_neighbors); // Adj_6: C = Integer Integer. Vertex adj6_vertex = new Vertex(new Ident("C")); Nany_vertex_list adj6_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("i2"),adj3_vertex_int),new Empty()); Nany_vertex_list adj6_nvl1 = new Nany_vertex_list(new Labeled_vertex(new Ident("i1"),adj3_vertex_int),adj6_nvl2); Neighbors adj6_neighbors = new Construct(adj6_nvl1); Adj adj6 = new Adj(adj6_vertex, adj6_neighbors); // Adj_7: T : R | S. Vertex adj7_vertex = new Vertex(new Ident("T")); Vertex adj7_first = new Vertex(new Ident("R")); Vertex adj7_second = new Vertex(new Ident("S")); Neighbors adj7_neighbors = new Alternat(adj7_first, adj7_second); Adj adj7 = new Adj(adj7_vertex, adj7_neighbors); // Adj_8: S = Vector A. Vertex adj8_vertex = new Vertex(new Ident("S")); Vertex adj8_vertex_vector = new Vertex(new Ident("Vector")); Vertex adj8_vertex_A = new Vertex(new Ident("A")); Nany_vertex_list adj8_nvl2 = new Nany_vertex_list(new Labeled_vertex(new Ident("a"),adj8_vertex_A),new Empty()); Nany_vertex_list adj8_nvl1 = new Nany_vertex_list(new Labeled_vertex(new Ident("v"),adj8_vertex_vector),adj8_nvl2); Neighbors adj8_neighbors = new Construct(adj8_nvl1); Adj adj8 = new Adj(adj8_vertex, adj8_neighbors); Adj_list cd_graph8 = new Cd_graph(adj8, new Empty_cd_graph()); Adj_list cd_graph7 = new Cd_graph(adj7, cd_graph8); Adj_list cd_graph6 = new Cd_graph(adj6, cd_graph7); 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); // THE FOLLOWING IDENTICAL IN BOTH PROGRAMS ClassGraph cg=new ClassGraph(); System.out.println("The DJ version is: " + cg.getVersion()); System.out.println("The class graph is" + "============================="); System.out.println(cg); System.out.println("end class graph " + "============================="); // The purpose of traversal tg1 is to // collect all the class names that are defined // in the cd TraversalGraph tg1 = new TraversalGraph( new Strategy("from Cd_graph to Adj"), cg); // The purpose of traversal tg2 is to // visit all parts of all classes TraversalGraph tg2 = new TraversalGraph( new Strategy("from Cd_graph via Construct to Vertex"), cg); DefinedClassVisitor v1 = new DefinedClassVisitor(); // find defined classes tg1.traverse( cd_graph, v1); // check for violations TBRVisitor v2 = new TBRVisitor(v1.GetDefinedClasses()); tg2.traverse(cd_graph, v2); // for diagnostic reasons: print the traversal structure System.out.println("The traversal graph tg1 is "); System.out.println(tg1); System.out.println("end traversal graph "); System.out.println("The summarized traversal graph of tg1 is"); System.out.println(tg1.toClassGraph()); System.out.println("end summarized traversal graph "); System.out.println("The traversal graph tg2 is "); System.out.println(tg2); System.out.println("end traversal graph "); System.out.println("The summarized traversal graph of tg2 is"); System.out.println(tg2.toClassGraph()); System.out.println("end summarized traversal graph "); System.out.println("SUCCESS"); } }