Main { // main program (@ public static void main(String args[]) throws Exception { E iE1 = new E( ); E iE2 = new E( ); D iD3 = new D( iE1,iE2 ); E iE4 = new E( ); E iE5 = new E( ); D iD6 = new D( iE4,iE5 ); C iC7 = new C( iD3,iD6 ); E iE8 = new E( ); E iE9 = new E( ); D iD10 = new D( iE8,iE9 ); E iE11 = new E( ); E iE12 = new E( ); D iD13 = new D( iE11,iE12 ); C iC14 = new C( iD10,iD13 ); B iB15 = new B( iC7,iC14 ); E iE16 = new E( ); E iE17 = new E( ); D iD18 = new D( iE16,iE17 ); E iE19 = new E( ); E iE20 = new E( ); D iD21 = new D( iE19,iE20 ); C iC22 = new C( iD18,iD21 ); E iE23 = new E( ); E iE24 = new E( ); D iD25 = new D( iE23,iE24 ); E iE26 = new E( ); E iE27 = new E( ); D iD28 = new D( iE26,iE27 ); C iC29 = new C( iD25,iD28 ); B iB30 = new B( iC22,iC29 ); A theA = new A( iB15,iB30 ); int result; int result2; A aAparsed = A.parse(System.in); // much shorter result = theA.F(); result2 = aAparsed.F(); System.out.println("\n*** result ***\n" + result); if(result == result2) { System.out.println("SUCCESS"); } else { System.out.println("FAILURE"); } if(result == 2) { System.out.println("SUCCESS"); } else { System.out.println("FAILURE"); } } @) } A { traversal TestTraversal(TestVisitor t) { bypassing { -> *,c,*, -> *,d,*, -> *,e,*} to E; } } A { (@ int F() { TestVisitor t = new TestVisitor(new Integer(0)); this.TestTraversal(t); return t.get_count().intValue(); } @) } TestVisitor { before E (@ count = new Integer(count.intValue() + 1); System.out.println("in E."); @) }