mkdir: cannot make directory `generated': File exists ln: ./program.cd: File exists ln: ./program.beh: File exists ln: ./program.input: File exists ln: ./Makefile: File exists demjava -code program Parsing program.cd... Expanding parameterized classes... Converting repetition classes... Filling in part names... Setting inheritance links... Parsing program.beh... Gathering methods... Expanding traversals... Expanding GenerateCopyTraversal... Expanding IsDemeterClassTraversal... Expanding GetCDNameTraversal... Expanding GetPNameTraversal... Expanding GetPCNameTraversal... Expanding GetCSNameTraversal... Generating Java code to program.java... Done. demjava -grammar program Parsing program.cd... Expanding parameterized classes... Converting repetition classes... Filling in part names... Setting inheritance links... Generating grammar to program.jack... Done. jack program.jack Jack Version 0.5. Copyright (c) 1996 Sun Microsystems Inc. (type "jack" with no arguments for help) Reading from file program.jack . . . File "ParseError.java" does not exist. Will create one. File "Token.java" does not exist. Will create one. Parser generated successfully. javac -d . program.java Parser.java ParseError.java ParserConstants.java ParserTokenManager.java Token.java ASCII_UCodeESC_CharStream.java touch ./Main.class java Main < program.input CopyVisitor { (@ Stack history; void Init(String firstClass) { this.history = new Stack(); try { this.history.push(Class.forName(firstClass).newInstance()); } catch(Exception e) { e.printStackTrace(); } } Object GetResult() { return history.peek(); } @) before -> A,b,B (@ A containingObject = (A)history.peek(); Class theClass = dest.getClass(); Object newPartObject = null; try { newPartObject = theClass.newInstance(); } catch(Exception e) { e.printStackTrace(); } containingObject.set_b((B)newPartObject); this.history.push(newPartObject); @) after -> A,b,B (@ this.history.pop(); @) before -> A,c,C (@ A containingObject = (A)history.peek(); Class theClass = dest.getClass(); Object newPartObject = null; try { newPartObject = theClass.newInstance(); } catch(Exception e) { e.printStackTrace(); } containingObject.set_c((C)newPartObject); this.history.push(newPartObject); @) after -> A,c,C (@ this.history.pop(); @) before -> D,a,A (@ D containingObject = (D)history.peek(); Class theClass = dest.getClass(); Object newPartObject = null; try { newPartObject = theClass.newInstance(); } catch(Exception e) { e.printStackTrace(); } containingObject.set_a((A)newPartObject); this.history.push(newPartObject); @) after -> D,a,A (@ this.history.pop(); @) }