// 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 -> Main, s, String {{
    space();
    out.print("\"" + source.get_s() + "\"");
    needSpace = true;
  }}

  before -> Block, declaration_list, Declaration_List {{
    out.print("{");
    needSpace = false;
  }}

  before -> Block, statement_nlist, Statement_NList {{
    space();
    out.print("body");
    needSpace = true;
  }}

  after -> Block, statement_nlist, Statement_NList {{
    out.print("}");
    needSpace = false;
  }}

  before -> Declaration, type, Type {{
    out.print("(");
    needSpace = false;
  }}

  before -> Declaration, exp, Exp {{
    out.print("=");
    needSpace = false;
  }}

  after -> Declaration, exp, Exp {{
    out.print(")");
    needSpace = false;
  }}

  before Bool {{
    space();
    out.print("bool");
    needSpace = true;
  }}

  before Inte {{
    space();
    out.print("int");
    needSpace = true;
  }}

  before -> Variable, ident, Ident {{
    space();
    out.print(source.get_ident());
    needSpace = true;
  }}

  before -> Numbe, val, int {{
    space();
    out.print(source.get_val());
    needSpace = true;
  }}

  before -> Compound, arg1, Exp {{
    out.print("(");
    needSpace = false;
  }}

  after -> Compound, arg2, Exp {{
    out.print(")");
    needSpace = false;
  }}

  before Plus {{
    out.print("+");
    needSpace = false;
  }}

  before GT {{
    out.print(">");
    needSpace = false;
  }}

  before -> Assignment, variable, Variable {{
    out.print("(");
    needSpace = false;
  }}

  before -> Assignment, exp, Exp {{
    out.print("=");
    needSpace = false;
  }}

  after -> Assignment, exp, Exp {{
    out.print(")");
    needSpace = false;
  }}

  before -> IfStat, exp, Exp {{
    out.print("(if");
    needSpace = true;
  }}

  before -> IfStat, elsePart, Block {{
    space();
    out.print("else");
    needSpace = true;
  }}

  after -> IfStat, elsePart, Block {{
    out.print(")");
    needSpace = false;
  }}

  before -> WhileStat, exp, Exp {{
    out.print("(while");
    needSpace = true;
  }}

  after -> WhileStat, block, Block {{
    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;
  }}

  before -> CopyVisitor, copy, Object {{
    space();
    out.print(source.get_copy());
    needSpace = true;
  }}

  before -> SubgraphVisitor, is_equal, boolean {{
    space();
    out.print(source.get_is_equal());
    needSpace = true;
  }}

  before -> EqualVisitor, is_equal, boolean {{
    space();
    out.print(source.get_is_equal());
    needSpace = true;
  }}

  before -> DisplayVisitor, indent, int {{
    space();
    out.print(source.get_indent());
    needSpace = true;
  }}

  before -> TraceVisitor, indent, int {{
    space();
    out.print(source.get_indent());
    needSpace = true;
  }}

}