// This file is automatically generated by DemeterJ. PrintVisitor { {{ protected java.io.PrintWriter out = new java.io.PrintWriter(System.out, true); java.io.PrintWriter get_out() { return out; } void set_out(java.io.PrintWriter new_out) { out = new_out; } PrintVisitor(java.io.PrintWriter out) { set_out(out); } PrintVisitor(java.io.PrintStream out) { set_out(new java.io.PrintWriter(out, true)); } }} finish {{ out.flush(); }} protected void space() {{ if (needSpace) out.print(" "); needSpace = false; }} before -> LetRec, bind, Arg {{ out.print("(letrec"); needSpace = true; out.print(" "); needSpace = false; out.print("("); needSpace = false; }} before -> LetRec, e, Exp {{ out.print(" "); needSpace = false; }} before -> LetRec, body, Exp {{ out.print(")"); needSpace = false; out.print(" "); needSpace = false; }} after -> LetRec, body, Exp {{ out.print(")"); needSpace = false; }} before -> Lambda, formal, Arg {{ out.print("(lambda"); needSpace = true; out.print(" "); needSpace = false; out.print("("); needSpace = false; }} before -> Lambda, body, Exp {{ out.print(")"); needSpace = false; out.print(" "); needSpace = false; }} after -> Lambda, body, Exp {{ out.print(")"); needSpace = false; }} before -> Sym, name, Ident {{ space(); out.print(source.get_name()); needSpace = true; }} before -> Addr, offset, Integer {{ out.print("{"); needSpace = false; space(); out.print(source.get_offset()); needSpace = true; }} after -> Addr, offset, Integer {{ out.print("}"); needSpace = false; }} before -> Arg, sym, Sym {{ out.print(" "); needSpace = false; }} before -> Num, value, Integer {{ space(); out.print(source.get_value()); needSpace = true; }} before True {{ out.print("#t"); needSpace = true; }} before False {{ out.print("#f"); needSpace = true; }} before -> If, cond, Exp {{ out.print("(if"); needSpace = true; out.print(" "); needSpace = false; }} before -> If, then, Exp {{ out.print(" "); needSpace = false; }} before -> If, otherwise, Exp {{ out.print(" "); needSpace = false; }} after -> If, otherwise, Exp {{ out.print(")"); needSpace = false; }} before -> Call, proc, Exp {{ out.print("("); needSpace = false; }} before -> Call, args, ExpList {{ out.print(" "); needSpace = false; }} after -> Call, args, ExpList {{ out.print(")"); needSpace = false; }} before Plus {{ out.print("+"); needSpace = false; }} before Minus {{ out.print("-"); needSpace = false; }} before Div {{ out.print("/"); needSpace = false; }} before Mult {{ out.print("*"); needSpace = false; }} before Less {{ out.print("<"); needSpace = false; }} before Greater {{ out.print(">"); needSpace = false; }} before Or {{ space(); out.print("or"); needSpace = true; }} before And {{ space(); out.print("and"); needSpace = true; }} before Eq {{ out.print("="); needSpace = false; }} before -> Print, type, Type {{ space(); out.print("print<"); needSpace = false; }} after -> Print, type, Type {{ out.print(">"); needSpace = false; }} before BoolT {{ space(); out.print("bool"); needSpace = true; }} before NumT {{ space(); out.print("int"); needSpace = true; }} before -> FuncT, args, TypeList {{ out.print("("); needSpace = false; }} before -> FuncT, ret, Type {{ out.print("-> "); needSpace = false; }} after -> FuncT, ret, Type {{ out.print(")"); needSpace = false; }} before -> SymCons, rest, SymList {{ out.print(" "); needSpace = false; }} before -> ArgCons, first, Arg {{ out.print("("); needSpace = false; }} before -> ArgCons, rest, ArgList {{ out.print(")"); needSpace = false; out.print(" "); needSpace = false; }} before -> ExpCons, rest, ExpList {{ out.print(" "); needSpace = false; }} before -> TypeCons, rest, TypeList {{ out.print(" "); needSpace = false; }} before -> NumVal, value, int {{ space(); out.print(source.get_value()); needSpace = true; }} before -> ValCons, first, Val {{ space(); out.print(source.get_first()); needSpace = true; }} before -> TEnvCons, rest, TEnv {{ out.print(" "); needSpace = false; }} before -> PrintVisitor, indent, int {{ space(); out.print(source.get_indent()); needSpace = true; }} before -> PrintVisitor, needSpace, boolean {{ space(); out.print(source.get_needSpace()); needSpace = true; }} }