// 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 -> FinishedProduct, assignment, Assignment {{
    out.print("");
    needSpace = false;
  }}
  after -> FinishedProduct, rawmaterial, RawMaterial {{
    out.print("");
    needSpace = false;
  }}
  before -> ConstraintType, relation, Relation {{
    out.print("");
    needSpace = false;
  }}
  after -> ConstraintType, relation, Relation {{
    out.print("");
    needSpace = false;
  }}
  before -> RawMaterial, constraintlist, ConstraintList {{
    out.print("");
    needSpace = false;
  }}
  after -> RawMaterial, constraintlist, ConstraintList {{
    out.print("");
    needSpace = false;
  }}
  before -> Constraint, weight, Weight {{
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("");
    needSpace = false;
  }}
  before -> Constraint, variablelist, VariableList {{
    out.print("");
    needSpace = false;
  }}
  after -> Constraint, variablelist, VariableList {{
    out.print("");
    needSpace = false;
    out.print("");
    needSpace = false;
  }}
  before -> Relation, v, int {{
    out.print("");
    needSpace = false;
    space();
    out.print(source.get_v());
    needSpace = true;
  }}
  after -> Relation, v, int {{
    out.print("");
    needSpace = false;
  }}
  before -> Weight, v, int {{
    out.print("");
    needSpace = false;
    space();
    out.print(source.get_v());
    needSpace = true;
  }}
  after -> Weight, v, int {{
    out.print("");
    needSpace = false;
  }}
  before -> Literal, lit, Lit {{
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("");
    needSpace = false;
  }}
  after -> Literal, lit, Lit {{
    out.print("");
    needSpace = false;
  }}
  before PosLiteral {{
    out.print("");
    needSpace = false;
    out.print("");
    needSpace = false;
  }}
  before NegLiteral {{
    out.print("");
    needSpace = false;
    out.print("");
    needSpace = false;
  }}
  before -> Variable, v, Ident {{
    out.print("");
    needSpace = false;
    space();
    out.print(source.get_v());
    needSpace = true;
  }}
  after -> Variable, v, Ident {{
    out.print("");
    needSpace = false;
  }}
  before -> Assignment, literallist, LiteralList {{
    out.print("");
    needSpace = false;
  }}
  after -> Assignment, literallist, LiteralList {{
    out.print("");
    needSpace = false;
  }}
  before -> Main, s, String {{
    space();
    out.print("\"" + source.get_s() + "\"");
    needSpace = true;
  }}
  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;
  }}
}