Consider the class dictionary SELF-DESCRIBING and the following method called Cd_graph { void display() bypassing -> *,tail,* to * (DisplayVisitor); {{ void test(){ TraversalGraph tg = new TraversalGraph( "from Cd_graph bypassing -> *,rest,* to Adj", Main.cg); System.out.println(tg); tg. traverse(this, new Visitor() { void before(Adj host){ System.out.println(host); } }); } }} } called on the object corresponding to the sentence: // 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. /////////////// CountingVisitor = int. /////////////// Main = . The output produced by test is: Start set: [Cd_graph: {0}] Copy 0: Nodes: Cd_graph Adj java.lang.Object java.io.Serializable Adj_list Edges: -> Cd_graph,first,Adj Edges to other copies: Finish set: [Adj: {0}] Adj@910040 done Find the UNKNOWNs.