Class Dictionary: *.cd ------------------------------- // class dictionary Cd_graph = Adj Adj_list. Adj = Vertex Neighbors ".". Neighbors: Construct | Alternat. Construct = "=" Any_vertex_list. Alternat = ":" Vertex "|" Vertex. Any_vertex : Labeled_vertex | Syntax_vertex. Syntax_vertex = String. Labeled_vertex = "<" Ident ">" Vertex. Adj_list: Cd_graph | Empty_cd_graph. Any_vertex_list: Nany_vertex_list | Empty. Nany_vertex_list = Any_vertex Any_vertex_list. Empty = . Empty_cd_graph = . Vertex = Ident. ExplorationVisitor = Integer. Main = . Behavior file: *.beh -------------------------- Cd_graph { traversal goToAll(ExplorationVisitor e) { to *; } } ExplorationVisitor { before {Vertex,Adj} (@ System.out.println("Entering " + host.getClass().toString()); this.set_total(new Integer( total.intValue() + 1)) ; @) after {Vertex,Adj} (@ System.out.println("Leaving " + host.getClass().toString()); @) } Main { (@ static public void main(String args[]) throws Exception { Cd_graph graph = Cd_graph.parse(System.in); ExplorationVisitor e = ExplorationVisitor.parse("0"); graph.goToAll(e); int result = e.get_total().intValue(); System.out.println("result = " + result ); if(result == 11) { System.out.println("SUCCESS"); } else { System.out.println("FAILURE"); } System.out.println("done"); } @) } input file: *.input ------------------------- // class dictionary A = B. B : C | D. C = "c". D = "d". Output: java Main < class-graph.input Entering class Adj Entering class Vertex Leaving class Vertex Entering class Vertex Leaving class Vertex Leaving class Adj Entering class Adj Entering class Vertex Leaving class Vertex Entering class Vertex Leaving class Vertex Entering class Vertex Leaving class Vertex Leaving class Adj Entering class Adj Entering class Vertex Leaving class Vertex Leaving class Adj Entering class Adj Entering class Vertex Leaving class Vertex Leaving class Adj result = 11 SUCCESS done