A { (@ void g_print() { PrintingVisitor pv = new PrintingVisitor(); this.t(pv); } @) traversal t(PrintingVisitor pv) {to *;} } Main { (@ static public void main(String args[]) throws Exception { A a = A.parse(System.in); a.g_print(); System.out.println(" "); } @) } PrintingVisitor{ before A (@ System.out.print(" a "); @) after A (@ System.out.print(" enda "); @) before B (@ System.out.print(" ( "); @) after B (@ System.out.print(" ) "); @) before X (@ System.out.print(" x "); @) after X (@ System.out.print(" "); @) before Y (@ System.out.print(" "); @) before D (@ System.out.print(" d " + host.get_text() + " "); @) after D (@ System.out.print(" "); @) before E (@ System.out.print(" e " + host.get_integer().intValue() + " "); @) after E (@ System.out.print(" "); @) before Main (@ System.out.print(" "); @) before PrintingVisitor (@ System.out.print(" "); @) }