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 == 1) { System.out.println("SUCCESS"); } else { System.out.println("FAILURE"); } // parse again // String name = args[0];// expect *.input String name = "program.input"; File inputfile = new File(name); if (inputfile.canRead()) { aAparsed = A.parse(new FileInputStream(inputfile));} else {System.out.println("input file is not readable");} result2 = aAparsed.F(); if(result == result2) { System.out.println("SUCCESS"); } else { System.out.println("FAILURE"); } } @) } A { traversal TestTraversal(TestVisitor t) { bypassing { -> *,b,*, -> *,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."); @) }