Root { traversal all(AppendVisitor av) { through -> *,parent_of,* to *; } (@ Names Find_Name() { AppendVisitor av = new AppendVisitor(new Names()); this.all(av); return av.get_names(); } @) } Expected { traversal Get_Expected(ExpectedVisitor ev) { to {Expected_Wrapper}; } (@ Names Fill_Vector() { ExpectedVisitor ev = new ExpectedVisitor(new Names()); this.Get_Expected(ev); return ev.get_list(); } @) } Names { (@ public boolean s_equals(Names result2) { Enumeration a = this.elements(); Enumeration b = result2.elements(); boolean r = false; while (a.hasMoreElements()) { if(b.hasMoreElements()) r = true; else { r = false; break; } if(b.nextElement().toString().equals(a.nextElement().toString())) r = true; else { r = false; break; } } return r; } public void print_names() { Enumeration a = this.elements(); System.out.println("\n"); while (a.hasMoreElements()) { System.out.println(" " + a.nextElement().toString()); } } @) } Main { (@ static public void main (String args[]) throws Exception { InputStream in1, in2; in1 = new FileInputStream(args[0]); in2 = new FileInputStream(args[1]); Root in_put = Root.parse(in1); Expected ex = Expected.parse(in2); Names result1 = in_put.Find_Name(); Names result2 = ex.Fill_Vector(); result1.print_names(); result2.print_names(); if(result1.s_equals(result2)) System.out.println("SUCCESS!"); else System.out.println("FAILURE!"); } @) } AppendVisitor { before -> *,parent_of,* (@ this.get_names().addElement("b_CE"); @) after -> *,parent_of,* (@ this.get_names().addElement("a_CE"); @) before {Root, Last_SubClass} (@ this.get_names().addElement("b" + host.get_className()); @) after {Root, Last_SubClass} (@ this.get_names().addElement("a" + host.get_className()); @) } ExpectedVisitor { before Expected_Wrapper (@ this.get_list().addElement(host.get_wrapper_name()); @) }