package EDU.neu.ccs.demeter.tools.apstudio.graphedit;
import java.awt.*;
import java.io.*;
import java.util.*;
import EDU.neu.ccs.demeter.*;
import EDU.neu.ccs.demeter.common.tg.*;


import EDU.neu.ccs.demeter.*;
class PrintVisitor extends UniversalVisitor {
  protected int indent;
  public int get_indent() { return indent; }
  public void set_indent(int new_indent)
    { indent = new_indent; }
  protected boolean needSpace;
  public boolean get_needSpace() { return needSpace; }
  public void set_needSpace(boolean new_needSpace)
    { needSpace = new_needSpace; }
  PrintVisitor() { super(); }
  public PrintVisitor(int indent, boolean needSpace) {
    super();
    set_indent(indent);
    set_needSpace(needSpace);
  }

    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)); }
    public void finish() { out.flush(); }
  protected void space() {
    if (needSpace) out.print(" ");
    needSpace = false;
  }
  public void before(UGraph host) {
    out.print("#Class");
    needSpace = true;
    out.print("#Dictionary");
    needSpace = true;
    out.print("#Graph");
    needSpace = true;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void after_pkg(UGraph source, Package dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void after_imports(UGraph source, Import_SList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void after_preamble(UGraph source, JavaCode dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_idToVertexTable(UGraph source, Hashtable dest) {
    space();
    out.print(source.get_idToVertexTable());
    needSpace = true;
  }
  public void before_idToEdgeTable(UGraph source, Hashtable dest) {
    space();
    out.print(source.get_idToEdgeTable());
    needSpace = true;
  }
  public void before_nameToIdVertexTable(UGraph source, Hashtable dest) {
    space();
    out.print(source.get_nameToIdVertexTable());
    needSpace = true;
  }
  public void before_first(UVertex_List source, Nonempty_UVertex_List dest) {
    out.print("#Vertex");
    needSpace = true;
    out.print("#List");
    needSpace = true;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  }
  public void after_first(UVertex_List source, Nonempty_UVertex_List dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    indent--;
  }
  public void before_inArcIdList(UVertex source, Vector dest) {
    space();
    out.print(source.get_inArcIdList());
    needSpace = true;
  }
  public void before_outArcIdList(UVertex source, Vector dest) {
    space();
    out.print(source.get_outArcIdList());
    needSpace = true;
  }
  public void before_tgv(UVertex source, TGVertex dest) {
    space();
    out.print(source.get_tgv());
    needSpace = true;
  }
  public void before_persp(UVertex source, Perspective dest) {
    space();
    out.print(source.get_persp());
    needSpace = true;
  }
  public void before_outEdgeNameList(UConstOrAltVertex source, Vector dest) {
    space();
    out.print(source.get_outEdgeNameList());
    needSpace = true;
  }
  public void before(YaParse host) {
    out.print("#parse");
    needSpace = true;
  }
  public void before(NopParse host) {
    out.print("#noparse");
    needSpace = true;
  }
  public void before_first(IEdge_List source, Nonempty_IEdge_List dest) {
    out.print("#Incoming");
    needSpace = true;
  }
  public void before_first(OEdge_List source, Nonempty_OEdge_List dest) {
    out.print("#Outgoing");
    needSpace = true;
  }
  public void before(UConstVertex host) {
    out.print("#ConstVertex");
    needSpace = true;
  }
  public void before_syntax(UBefore source, String dest) {
    out.print("#Before");
    needSpace = true;
    space();
    out.print("\"" + source.get_syntax() + "\"");
    needSpace = true;
  }
  public void before_syntax(UAfter source, String dest) {
    out.print("#After");
    needSpace = true;
    space();
    out.print("\"" + source.get_syntax() + "\"");
    needSpace = true;
  }
  public void before(UAltVertex host) {
    out.print("#AltVertex");
    needSpace = true;
  }
  public void before(UInterface host) {
    out.print("#Interface");
    needSpace = true;
  }
  public void before(PublicModifier host) {
    out.print("#public");
    needSpace = true;
  }
  public void before(UTermConstVertex host) {
    out.print("#TermConstVertex");
    needSpace = true;
  }
  public void before(UTermInterface host) {
    out.print("#TermInterface");
    needSpace = true;
  }
  public void before(PublicIdentifier host) {
    out.print("#public");
    needSpace = true;
  }
  public void before(FinalIdentifier host) {
    out.print("#final");
    needSpace = true;
  }
  public void before_first(UEdge_List source, Nonempty_UEdge_List dest) {
    out.print("#Edge");
    needSpace = true;
    out.print("#List");
    needSpace = true;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  }
  public void after_first(UEdge_List source, Nonempty_UEdge_List dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    indent--;
  }
  public void before_persp(UEdge source, ArcPerspective dest) {
    space();
    out.print(source.get_persp());
    needSpace = true;
  }
  public void before_tge(UAltEdge source, TGAEdge dest) {
    out.print("#AltEdge");
    needSpace = true;
    space();
    out.print(source.get_tge());
    needSpace = true;
  }
  public void before_tge(UExtendEdge source, TGAEdge dest) {
    out.print("#ExtendEdge");
    needSpace = true;
    space();
    out.print(source.get_tge());
    needSpace = true;
  }
  public void before_tge(UImplEdge source, TGIEdge dest) {
    out.print("#ImplEdge");
    needSpace = true;
    space();
    out.print(source.get_tge());
    needSpace = true;
  }
  public void before(UConstEdge host) {
    out.print("#ConstEdge");
    needSpace = true;
  }
  public void before_tge(UConstEdge source, TGCEdge dest) {
    space();
    out.print(source.get_tge());
    needSpace = true;
  }
  public void before(FinalMod host) {
    out.print("#final");
    needSpace = true;
  }
  public void before(StaticMod host) {
    out.print("#static");
    needSpace = true;
  }
  public void before(ReadOnlyMod host) {
    out.print("#read-only");
    needSpace = true;
  }
  public void before(PrivateMod host) {
    out.print("#private");
    needSpace = true;
  }
  public void before_lower(Cardinality source, Lower dest) {
    out.print("#Cardinality");
    needSpace = true;
  }
  public void before_l(Lower source, Integer dest) {
    space();
    out.print(source.get_l());
    needSpace = true;
  }
  public void before_u(Upper source, String dest) {
    out.print(".");
    needSpace = false;
    out.print(".");
    needSpace = false;
    space();
    out.print("\"" + source.get_u() + "\"");
    needSpace = true;
  }
  public void before_id(UID source, Integer dest) {
    space();
    out.print(source.get_id());
    needSpace = true;
  }
  public void before_name(UEdgeName source, Ident dest) {
    space();
    out.print(source.get_name());
    needSpace = true;
  }
  public void before_name(UVertexName source, Ident dest) {
    space();
    out.print(source.get_name());
    needSpace = true;
  }
  public void before_x(Coordinates source, X dest) {
    out.print("{");
    needSpace = false;
  }
  public void after_y(Coordinates source, Y dest) {
    out.print("}");
    needSpace = false;
  }
  public void before_x(X source, Integer dest) {
    space();
    out.print(source.get_x());
    needSpace = true;
  }
  public void before_y(Y source, Integer dest) {
    space();
    out.print(source.get_y());
    needSpace = true;
  }
  public void before_travtag(Decorator source, Integer dest) {
    space();
    out.print("travstat");
    needSpace = true;
    space();
    out.print(source.get_travtag());
    needSpace = true;
  }
  public void before_travtaglist(Decorator source, Vector dest) {
    space();
    out.print(source.get_travtaglist());
    needSpace = true;
  }
  public void after_imports(GlobalImports source, Import_SList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_packagename(Import source, PackageName dest) {
    space();
    out.print("import");
    needSpace = true;
  }
  public void after(Import host) {
    out.print(";");
    needSpace = false;
  }
  public void before(ImportAllClasses host) {
    out.print(".*");
    needSpace = false;
  }
  public void before_defdict(ClassGraph source, Hashtable dest) {
    space();
    out.print(source.get_defdict());
    needSpace = true;
  }
  public void before_tg(ClassGraph source, TraversalGraph dest) {
    space();
    out.print("tg:");
    needSpace = false;
    space();
    out.print(source.get_tg());
    needSpace = true;
  }
  public void before_localimports(PackageDirective source, LocalImports dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_packagename(Package source, PackageName dest) {
    space();
    out.print("package");
    needSpace = true;
  }
  public void after_packagename(Package source, PackageName dest) {
    out.print(";");
    needSpace = false;
  }
  public void after_imports(LocalImports source, Import_SList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_parsedirective(ClassDef source, ParseDirective dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_classparts(ClassDef source, ClassParts dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_eoftoken(ClassDef source, EOFtoken dest) {
    out.print(" ");
    needSpace = false;
  }
  public void after(ClassDef host) {
    out.print(".");
    needSpace = false;
  }
  public void before_parameters(ParamClassName source, ClassName_Commalist dest) {
    out.print("(");
    needSpace = false;
  }
  public void after_parameters(ParamClassName source, ClassName_Commalist dest) {
    out.print(")");
    needSpace = false;
  }
  public void before_parts(ConstOrAltClass source, PartOrSyntax_List dest) {
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  }
  public void after_parents(ConstOrAltClass source, ClassParents dest) {
    indent--;
    indent--;
    indent--;
  }
  public void before_partname(Part source, PartName dest) {
    out.print("<");
    needSpace = false;
  }
  public void after_partname(Part source, PartName dest) {
    out.print(">");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_javacode(PartInit source, JavaCode dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before(OptionalPart host) {
    out.print("[");
    needSpace = false;
  }
  public void after_part(OptionalPart source, Part_Sandwich dest) {
    out.print("]");
    needSpace = false;
  }
  public void before(ConstructionClass host) {
    out.print("=");
    needSpace = false;
  }
  public void before(AlternationClass host) {
    out.print(":");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  }
  public void after_subclasses(AlternationClass source, Subclass_Barlist dest) {
    indent--;
    indent--;
    indent--;
  }
  public void before_sandwiched(RepetitionClass source, RepeatedPart_Sandwich dest) {
    out.print("~");
    needSpace = false;
  }
  public void after_nonempty(RepeatedPart source, ClassSpec dest) {
    out.print("{");
    needSpace = false;
  }
  public void after_repeated(RepeatedPart source, ClassSpec_Sandwich dest) {
    out.print(" ");
    needSpace = false;
    out.print("}");
    needSpace = false;
  }
  public void before_actual_parameters(ClassSpec source, ClassSpec_Commalist dest) {
    out.print("(");
    needSpace = false;
  }
  public void after_actual_parameters(ClassSpec source, ClassSpec_Commalist dest) {
    out.print(")");
    needSpace = false;
  }
  public void before_string(PlainSyntax source, String dest) {
    space();
    out.print("\"" + source.get_string() + "\"");
    needSpace = true;
  }
  public void before(PrintIndent host) {
    out.print("+");
    needSpace = false;
  }
  public void before(PrintUnindent host) {
    out.print("-");
    needSpace = false;
  }
  public void before(PrintSkip host) {
    out.print("*l");
    needSpace = true;
  }
  public void before(PrintSpace host) {
    out.print("*s");
    needSpace = true;
  }
  public void before(EOFtoken host) {
    out.print("*EOF*");
    needSpace = false;
  }
  public void before_strategyname(StrategyDefinition source, StrategyName dest) {
    space();
    out.print("strategy");
    needSpace = true;
  }
  public void before_exp(StrategyDefinition source, StrategyExpression dest) {
    out.print("=");
    needSpace = false;
  }
  public void after_exp(StrategyDefinition source, StrategyExpression dest) {
    out.print(".");
    needSpace = false;
  }
  public void before(StrategyGraph host) {
    out.print("{");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  }
  public void before_edgeVec(StrategyGraph source, Vector dest) {
    space();
    out.print("vec:");
    needSpace = false;
    out.print(" ");
    needSpace = false;
    space();
    out.print(source.get_edgeVec());
    needSpace = true;
  }
  public void after_edges(StrategyGraph source, SGEdge_SList dest) {
    indent--;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("}");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_sources(StrategyGraph source, ClassGlobSpec dest) {
    space();
    out.print("source:");
    needSpace = false;
  }
  public void before_sourceEdges(StrategyGraph source, Integer_NList dest) {
    space();
    out.print("source-edge:");
    needSpace = false;
  }
  public void before_targets(StrategyGraph source, ClassGlobSpec dest) {
    space();
    out.print("target:");
    needSpace = false;
  }
  public void before_dest(SGEdge source, ClassGlobSpec dest) {
    out.print(" ");
    needSpace = false;
    out.print("->");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before(Through host) {
    space();
    out.print("through");
    needSpace = true;
  }
  public void before(Via host) {
    space();
    out.print("via");
    needSpace = true;
  }
  public void before(Bypassing host) {
    space();
    out.print("bypassing");
    needSpace = true;
  }
  public void before(OnlyThrough host) {
    space();
    out.print("only-through");
    needSpace = true;
  }
  public void before(To host) {
    space();
    out.print("to");
    needSpace = true;
  }
  public void before(ToStop host) {
    space();
    out.print("to-stop");
    needSpace = true;
  }
  public void before_strategyname(StrategyVariable source, StrategyName dest) {
    space();
    out.print("do");
    needSpace = true;
  }
  public void before_args(CompoundStrategy source, StrategyExpression_Commalist dest) {
    out.print("(");
    needSpace = false;
  }
  public void after_args(CompoundStrategy source, StrategyExpression_Commalist dest) {
    out.print(")");
    needSpace = false;
  }
  public void before(Join host) {
    space();
    out.print("join");
    needSpace = true;
  }
  public void before(Merge host) {
    space();
    out.print("merge");
    needSpace = true;
  }
  public void before(Intersect host) {
    space();
    out.print("intersect");
    needSpace = true;
  }
  public void before(GlobSet host) {
    out.print("{");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void after_globs(GlobSet source, Glob_Commalist dest) {
    out.print(" ");
    needSpace = false;
  }
  public void after(GlobSet host) {
    out.print("}");
    needSpace = false;
  }
  public void before_source(PartGlob source, SourceGlob dest) {
    out.print("->");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_name(PartGlob source, PartNameGlob dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_dest(PartGlob source, DestGlob dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_source(SubclassGlob source, SourceGlob dest) {
    out.print("=>");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_dest(SubclassGlob source, DestGlob dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_source(SuperclassGlob source, SourceGlob dest) {
    out.print(":>");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_dest(SuperclassGlob source, DestGlob dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before(AnyClass host) {
    out.print("*");
    needSpace = false;
  }
  public void before(AnyPart host) {
    out.print("*");
    needSpace = false;
  }
  public void before_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    out.print("{");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void after_globs(ClassGlobSet source, ClassGlob_Commalist dest) {
    out.print(" ");
    needSpace = false;
    out.print("}");
    needSpace = false;
  }
  public void before(ClassMethods host) {
    out.print("{");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  }
  public void after_methods(ClassMethods source, Method_SList dest) {
    indent--;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("}");
    needSpace = false;
  }
  public void before_wrapperdict(ClassMethods source, Hashtable dest) {
    space();
    out.print("wrappers:");
    needSpace = false;
    space();
    out.print(source.get_wrapperdict());
    needSpace = true;
  }
  public void before_exactHosts(HostSet source, Hashtable dest) {
    space();
    out.print("exact:");
    needSpace = false;
    space();
    out.print(source.get_exactHosts());
    needSpace = true;
  }
  public void before_partnames(HostSet source, Hashtable dest) {
    space();
    out.print("partnames:");
    needSpace = false;
    space();
    out.print(source.get_partnames());
    needSpace = true;
  }
  public void before_globs(HostSet source, GlobSet dest) {
    space();
    out.print("globs:");
    needSpace = false;
  }
  public void before_name(TraversalDef source, TraversalName dest) {
    space();
    out.print("traversal");
    needSpace = true;
  }
  public void before_strat(TraversalDef source, StrategyExpression dest) {
    out.print(" ");
    needSpace = false;
    out.print("{");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  }
  public void after_strat(TraversalDef source, StrategyExpression dest) {
    out.print(";");
    needSpace = false;
    indent--;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("}");
    needSpace = false;
  }
  public void before(TraversalParms host) {
    out.print("(");
    needSpace = false;
  }
  public void after(TraversalParms host) {
    out.print(")");
    needSpace = false;
  }
  public void after_name(MethodSignature source, MethodName dest) {
    out.print("(");
    needSpace = false;
  }
  public void before_throwsclause(MethodSignature source, Throws dest) {
    out.print(")");
    needSpace = false;
  }
  public void before(PublicMethod host) {
    space();
    out.print("public");
    needSpace = true;
  }
  public void before(ProtectedMethod host) {
    space();
    out.print("protected");
    needSpace = true;
  }
  public void before(PrivateMethod host) {
    space();
    out.print("private");
    needSpace = true;
  }
  public void before(StaticMethod host) {
    space();
    out.print("static");
    needSpace = true;
  }
  public void before(FinalMethod host) {
    space();
    out.print("final");
    needSpace = true;
  }
  public void before(AbstractMethod host) {
    space();
    out.print("abstract");
    needSpace = true;
  }
  public void before(ArraySpec host) {
    out.print("[");
    needSpace = false;
    out.print("]");
    needSpace = false;
  }
  public void before_exceptions(Throws source, ClassName_Commalist dest) {
    out.print(" ");
    needSpace = false;
    space();
    out.print("throws");
    needSpace = true;
  }
  public void before(NoMethodBody host) {
    out.print(";");
    needSpace = false;
  }
  public void before(Equals host) {
    out.print("=");
    needSpace = false;
  }
  public void before_visitorClasses(WithVisitorRef source, ClassName_Commalist dest) {
    space();
    out.print("with");
    needSpace = true;
  }
  public void after_visitorClasses(WithVisitorRef source, ClassName_Commalist dest) {
    out.print(";");
    needSpace = false;
  }
  public void before_visitorClasses(ParenVisitorRef source, ClassName_Commalist dest) {
    out.print("(");
    needSpace = false;
  }
  public void after_visitorClasses(ParenVisitorRef source, ClassName_Commalist dest) {
    out.print(")");
    needSpace = false;
    out.print(";");
    needSpace = false;
  }
  public void before(Before host) {
    space();
    out.print("before");
    needSpace = true;
  }
  public void before(Around host) {
    space();
    out.print("around");
    needSpace = true;
  }
  public void before(After host) {
    space();
    out.print("after");
    needSpace = true;
  }
  public void before(Getter host) {
    space();
    out.print("get");
    needSpace = true;
  }
  public void before(Setter host) {
    space();
    out.print("set");
    needSpace = true;
  }
  public void before_javacode(Constructor source, JavaCode dest) {
    space();
    out.print("init");
    needSpace = true;
  }
  public void before_javacode(Start source, JavaCode dest) {
    space();
    out.print("start");
    needSpace = true;
  }
  public void before_javacode(Finish source, JavaCode dest) {
    space();
    out.print("finish");
    needSpace = true;
  }
  public void before(ReturnValue host) {
    space();
    out.print("return");
    needSpace = true;
  }
  public void before_name(MethodName source, Ident dest) {
    space();
    out.print(source.get_name());
    needSpace = true;
  }
  public void before_name(ParmName source, Ident dest) {
    space();
    out.print(source.get_name());
    needSpace = true;
  }
  public void before_name(StrategyName source, Ident dest) {
    space();
    out.print(source.get_name());
    needSpace = true;
  }
  public void before_code(JavaCode source, Text dest) {
    space();
    out.print("(@" + source.get_code() + "@" + ")");
    needSpace = true;
  }
  public void before(ParseIdent host) {
    space();
    out.print("parse");
    needSpace = true;
  }
  public void before(NoParseIdent host) {
    space();
    out.print("noparse");
    needSpace = true;
  }
  public void before(VisitorsIdent host) {
    space();
    out.print("visitors");
    needSpace = true;
  }
  public void before(EndVisitorsIdent host) {
    space();
    out.print("endvisitors");
    needSpace = true;
  }
  public void before(VisitorIdent host) {
    space();
    out.print("visitor");
    needSpace = true;
  }
  public void before(NotParsedIdent host) {
    space();
    out.print("notparsed");
    needSpace = true;
  }
  public void before(DerivedIdent host) {
    space();
    out.print("derived");
    needSpace = true;
  }
  public void before(InitIdent host) {
    space();
    out.print("init");
    needSpace = true;
  }
  public void before(CommonIdent host) {
    space();
    out.print("common");
    needSpace = true;
  }
  public void before(LookaheadIdent host) {
    space();
    out.print("lookahead");
    needSpace = true;
  }
  public void before_id(OtherIdent source, Ident dest) {
    space();
    out.print(source.get_id());
    needSpace = true;
  }
  public void before(DoParseWithoutStars host) {
    space();
    out.print("parse");
    needSpace = true;
  }
  public void before(DoParseWithStars host) {
    out.print("*parse*");
    needSpace = false;
  }
  public void before(DontParseWithoutStars host) {
    space();
    out.print("noparse");
    needSpace = true;
  }
  public void before(DontParseWithStars host) {
    out.print("*noparse*");
    needSpace = false;
  }
  public void before(BeginVisitorsWithoutStars host) {
    space();
    out.print("visitors");
    needSpace = true;
  }
  public void before(BeginVisitorsWithStars host) {
    out.print("*visitors*");
    needSpace = false;
  }
  public void before(EndVisitorsWithoutStars host) {
    space();
    out.print("endvisitors");
    needSpace = true;
  }
  public void before(EndVisitorsWithStars host) {
    out.print("*endvisitors*");
    needSpace = false;
  }
  public void before(PublicClassWithoutStars host) {
    space();
    out.print("public");
    needSpace = true;
  }
  public void before(PublicClassWithStars host) {
    out.print("*public*");
    needSpace = false;
  }
  public void before(FinalClassWithoutStars host) {
    space();
    out.print("final");
    needSpace = true;
  }
  public void before(FinalClassWithStars host) {
    out.print("*final*");
    needSpace = false;
  }
  public void before(InterfaceClassWithoutStars host) {
    space();
    out.print("interface");
    needSpace = true;
  }
  public void before(InterfaceClassWithStars host) {
    out.print("*interface*");
    needSpace = false;
  }
  public void before(VisitorClassWithoutStars host) {
    space();
    out.print("visitor");
    needSpace = true;
  }
  public void before(VisitorClassWithStars host) {
    out.print("*visitor*");
    needSpace = false;
  }
  public void before(NotParsedClassWithoutStars host) {
    space();
    out.print("notparsed");
    needSpace = true;
  }
  public void before(NotParsedClassWithStars host) {
    out.print("*notparsed*");
    needSpace = false;
  }
  public void before(FinalPartWithoutStars host) {
    space();
    out.print("final");
    needSpace = true;
  }
  public void before(FinalPartWithStars host) {
    out.print("*final*");
    needSpace = false;
  }
  public void before(StaticPartWithoutStars host) {
    space();
    out.print("static");
    needSpace = true;
  }
  public void before(StaticPartWithStars host) {
    out.print("*static*");
    needSpace = false;
  }
  public void before(ReadOnlyPartWithoutStars host) {
    space();
    out.print("read-only");
    needSpace = true;
  }
  public void before(ReadOnlyPartWithStars host) {
    out.print("*read-only*");
    needSpace = false;
  }
  public void before(PrivatePartWithoutStars host) {
    space();
    out.print("private");
    needSpace = true;
  }
  public void before(PrivatePartWithStars host) {
    out.print("*private*");
    needSpace = false;
  }
  public void before(DerivedPartWithoutStars host) {
    space();
    out.print("derived");
    needSpace = true;
  }
  public void before(DerivedPartWithStars host) {
    out.print("*derived*");
    needSpace = false;
  }
  public void before(PartInitKeywordWithoutStars host) {
    space();
    out.print("init");
    needSpace = true;
  }
  public void before(PartInitKeywordWithStars host) {
    out.print("*init*");
    needSpace = false;
  }
  public void before(ExtendsKeywordWithoutStars host) {
    space();
    out.print("extends");
    needSpace = true;
  }
  public void before(ExtendsKeywordWithStars host) {
    out.print(" ");
    needSpace = false;
    out.print("*extends*");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before(ImplementsKeywordWithoutStars host) {
    space();
    out.print("implements");
    needSpace = true;
  }
  public void before(ImplementsKeywordWithStars host) {
    out.print(" ");
    needSpace = false;
    out.print("*implements*");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before(CommonWithoutStars host) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    space();
    out.print("common");
    needSpace = true;
    indent--;
    indent--;
    indent--;
  }
  public void before(CommonWithStars host) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("*common*");
    needSpace = false;
    indent--;
    indent--;
    indent--;
  }
  public void before(LookaheadKeywordWithoutStars host) {
    space();
    out.print("lookahead");
    needSpace = true;
  }
  public void before(LookaheadKeywordWithStars host) {
    out.print("*lookahead*");
    needSpace = false;
  }
  public void before_is_con(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_con());
    needSpace = true;
  }
  public void before_is_alt(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_alt());
    needSpace = true;
  }
  public void before_is_rep(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_rep());
    needSpace = true;
  }
  public void before_is_public(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_public());
    needSpace = true;
  }
  public void before_is_final(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_final());
    needSpace = true;
  }
  public void before_is_interface(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_interface());
    needSpace = true;
  }
  public void before_is_not_parsed(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_not_parsed());
    needSpace = true;
  }
  public void before_is_visitor(ClassType source, boolean dest) {
    space();
    out.print(source.get_is_visitor());
    needSpace = true;
  }
  public void before_is_final(PartType source, boolean dest) {
    space();
    out.print(source.get_is_final());
    needSpace = true;
  }
  public void before_is_static(PartType source, boolean dest) {
    space();
    out.print(source.get_is_static());
    needSpace = true;
  }
  public void before_is_derived(PartType source, boolean dest) {
    space();
    out.print(source.get_is_derived());
    needSpace = true;
  }
  public void before_has_getter(PartType source, boolean dest) {
    space();
    out.print(source.get_has_getter());
    needSpace = true;
  }
  public void before_has_setter(PartType source, boolean dest) {
    space();
    out.print(source.get_has_setter());
    needSpace = true;
  }
  public void before_edgetype(EdgeDistinctionVisitor source, String dest) {
    space();
    out.print("\"" + source.get_edgetype() + "\"");
    needSpace = true;
  }
  public void before_graphstring(VertexReadingVisitor source, String dest) {
    space();
    out.print("\"" + source.get_graphstring() + "\"");
    needSpace = true;
  }
  public void before_lookupvid(VertexReadingVisitor source, Integer dest) {
    space();
    out.print(source.get_lookupvid());
    needSpace = true;
  }
  public void before_uppervalue(VertexReadingVisitor source, Integer dest) {
    space();
    out.print(source.get_uppervalue());
    needSpace = true;
  }
  public void before_graphstring(EdgeReadingVisitor source, String dest) {
    space();
    out.print("\"" + source.get_graphstring() + "\"");
    needSpace = true;
  }
  public void before_commonstring(EdgeReadingVisitor source, String dest) {
    space();
    out.print("\"" + source.get_commonstring() + "\"");
    needSpace = true;
  }
  public void before_lookupvid(EdgeReadingVisitor source, Integer dest) {
    space();
    out.print(source.get_lookupvid());
    needSpace = true;
  }
  public void before_fromtype(EdgeReadingVisitor source, String dest) {
    space();
    out.print("\"" + source.get_fromtype() + "\"");
    needSpace = true;
  }
  public void before_pipeswitch(EdgeReadingVisitor source, Integer dest) {
    space();
    out.print(source.get_pipeswitch());
    needSpace = true;
  }
  public void before_listswitch(EdgeReadingVisitor source, Integer dest) {
    space();
    out.print(source.get_listswitch());
    needSpace = true;
  }
  public void before_construction(VertexContainer source, Vector dest) {
    space();
    out.print(source.get_construction());
    needSpace = true;
  }
  public void before_alternation(VertexContainer source, Vector dest) {
    space();
    out.print(source.get_alternation());
    needSpace = true;
  }
  public void before_termination(VertexContainer source, Vector dest) {
    space();
    out.print(source.get_termination());
    needSpace = true;
  }
  public void before_construction(EdgeContainer source, Vector dest) {
    space();
    out.print(source.get_construction());
    needSpace = true;
  }
  public void before_alternation(EdgeContainer source, Vector dest) {
    space();
    out.print(source.get_alternation());
    needSpace = true;
  }
  public void before_total(CountingVisitor source, Integer dest) {
    space();
    out.print(source.get_total());
    needSpace = true;
  }
  public void before_sv(ListVectorVisitor source, Vector dest) {
    space();
    out.print(source.get_sv());
    needSpace = true;
  }
  public void before_dv(ListVectorVisitor source, Vector dest) {
    space();
    out.print(source.get_dv());
    needSpace = true;
  }
  public void before_bv(ListVectorVisitor source, Vector dest) {
    space();
    out.print(source.get_bv());
    needSpace = true;
  }
  public void before_v(DecoCollectVisitor source, Vector dest) {
    space();
    out.print(source.get_v());
    needSpace = true;
  }
  public void before_vtable(PlaceVertexVisitor source, Hashtable dest) {
    space();
    out.print(source.get_vtable());
    needSpace = true;
  }
  public void before_etable(PlaceVertexVisitor source, Hashtable dest) {
    space();
    out.print(source.get_etable());
    needSpace = true;
  }
  public void before_return_val(cdStringVisitor source, String dest) {
    space();
    out.print("\"" + source.get_return_val() + "\"");
    needSpace = true;
  }
  public void before_vtable(ConstVisitor source, Hashtable dest) {
    space();
    out.print(source.get_vtable());
    needSpace = true;
  }
  public void before_etable(ConstVisitor source, Hashtable dest) {
    space();
    out.print(source.get_etable());
    needSpace = true;
  }
  public void before_vtable(AltVisitor source, Hashtable dest) {
    space();
    out.print(source.get_vtable());
    needSpace = true;
  }
  public void before_etable(AltVisitor source, Hashtable dest) {
    space();
    out.print(source.get_etable());
    needSpace = true;
  }
  public void before_vtable(IntVisitor source, Hashtable dest) {
    space();
    out.print(source.get_vtable());
    needSpace = true;
  }
  public void before_etable(IntVisitor source, Hashtable dest) {
    space();
    out.print(source.get_etable());
    needSpace = true;
  }
  public void before_found_one(GlobMatcher source, boolean dest) {
    space();
    out.print(source.get_found_one());
    needSpace = true;
  }
  public void before_c(SGEdgeMatcher source, ClassNameI dest) {
    space();
    out.print(source.get_c());
    needSpace = true;
  }
  public void before_index(SGEdgeMatcher source, int dest) {
    space();
    out.print(source.get_index());
    needSpace = true;
  }
  public void before_return_val(SGEdgeMatcher source, Vector dest) {
    space();
    out.print(source.get_return_val());
    needSpace = true;
  }
  public void before_tg(TGVertexCollector source, TraversalGraph dest) {
    space();
    out.print(source.get_tg());
    needSpace = true;
  }
  public void before_g(TGCreateVisitor source, TraversalGraph dest) {
    space();
    out.print(source.get_g());
    needSpace = true;
  }
  public void before_vtable(TGCreateVisitor source, Hashtable dest) {
    space();
    out.print(source.get_vtable());
    needSpace = true;
  }
  public void before_graphString(SaveGraphVisitor source, String dest) {
    space();
    out.print("\"" + source.get_graphString() + "\"");
    needSpace = true;
  }
  public void before_bflag(SelectMarkedVisitor source, boolean dest) {
    space();
    out.print(source.get_bflag());
    needSpace = true;
  }
  public void before_cflag(SelectMarkedVisitor source, boolean dest) {
    space();
    out.print(source.get_cflag());
    needSpace = true;
  }
  public void before_anyEdgeflag(SelectMarkedVisitor source, boolean dest) {
    space();
    out.print(source.get_anyEdgeflag());
    needSpace = true;
  }
  public void before_graphString(SelectMarkedVisitor source, String dest) {
    space();
    out.print("\"" + source.get_graphString() + "\"");
    needSpace = true;
  }
  public void before_ioeString(SelectMarkedVisitor source, String dest) {
    space();
    out.print("\"" + source.get_ioeString() + "\"");
    needSpace = true;
  }
  public void before_names(SGraphCollector source, Vector dest) {
    space();
    out.print(source.get_names());
    needSpace = true;
  }
  public void before_graphs(SGraphCollector source, Vector dest) {
    space();
    out.print(source.get_graphs());
    needSpace = true;
  }
  public void before_names(VecVisitor source, Vector dest) {
    space();
    out.print(source.get_names());
    needSpace = true;
  }
  public void before_name(StringVisitor source, String dest) {
    space();
    out.print("\"" + source.get_name() + "\"");
    needSpace = true;
  }
  public void before_indent(PrintVisitor source, int dest) {
    space();
    out.print(source.get_indent());
    needSpace = true;
  }
  public void before_needSpace(PrintVisitor source, boolean dest) {
    space();
    out.print(source.get_needSpace());
    needSpace = true;
  }
  public void before_is_equal(EqualVisitor source, boolean dest) {
    space();
    out.print(source.get_is_equal());
    needSpace = true;
  }
  public void before_indent(DisplayVisitor source, int dest) {
    space();
    out.print(source.get_indent());
    needSpace = true;
  }
  public void before_indent(TraceVisitor source, int dest) {
    space();
    out.print(source.get_indent());
    needSpace = true;
  }
  public void after_first(ClassGraphEntry_DList source, Nonempty_ClassGraphEntry_DList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_inner(Part_Sandwich source, Part dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_inner(RepeatedPart_Sandwich source, RepeatedPart dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_inner(ClassSpec_Sandwich source, ClassSpec dest) {
    out.print(" ");
    needSpace = false;
  }
  public void after_first(Behavior_DList source, Nonempty_Behavior_DList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_next(Nonempty_UVertex_List source, Nonempty_UVertex_List dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_next(Nonempty_IEdge_List source, Nonempty_IEdge_List dest) {
    out.print(",");
    needSpace = false;
  }
  public void before_next(Nonempty_OEdge_List source, Nonempty_OEdge_List dest) {
    out.print(",");
    needSpace = false;
  }
  public void before_next(Nonempty_UEdge_List source, Nonempty_UEdge_List dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_next(Nonempty_PackageName source, Nonempty_PackageName dest) {
    out.print(".");
    needSpace = false;
  }
  public void before_it(Nonempty_Name source, Ident dest) {
    space();
    out.print(source.get_it());
    needSpace = true;
  }
  public void before_next(Nonempty_Name source, Nonempty_Name dest) {
    out.print(".");
    needSpace = false;
  }
  public void before_next(Nonempty_Import_SList source, Nonempty_Import_SList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_next(Nonempty_ClassGraphEntry_DList source, Nonempty_ClassGraphEntry_DList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_next(Nonempty_ClassKeyword_List source, Nonempty_ClassKeyword_List dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_ClassName_Commalist source, Nonempty_ClassName_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_PartOrSyntax_List source, Nonempty_PartOrSyntax_List dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_PartKeyword_List source, Nonempty_PartKeyword_List dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_Superclass_Commalist source, Nonempty_Superclass_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_Interface_Commalist source, Nonempty_Interface_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_Subclass_Barlist source, Nonempty_Subclass_Barlist dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("|");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_Syntax_List source, Nonempty_Syntax_List dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_ClassSpec_Commalist source, Nonempty_ClassSpec_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_Behavior_DList source, Nonempty_Behavior_DList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_next(Nonempty_SGEdge_SList source, Nonempty_SGEdge_SList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_it(Nonempty_Integer_NList source, Integer dest) {
    space();
    out.print(source.get_it());
    needSpace = true;
  }
  public void before_next(Nonempty_Integer_NList source, Nonempty_Integer_NList dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_PathSegment_List source, Nonempty_PathSegment_List dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_StrategyExpression_Commalist source, Nonempty_StrategyExpression_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_Glob_Commalist source, Nonempty_Glob_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_ClassGlob_Commalist source, Nonempty_ClassGlob_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_Method_SList source, Nonempty_Method_SList dest) {
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  }
  public void before_next(Nonempty_Visitor_Commalist source, Nonempty_Visitor_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_MethodKeyword_List source, Nonempty_MethodKeyword_List dest) {
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_MethodParm_Commalist source, Nonempty_MethodParm_Commalist dest) {
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  }
  public void before_next(Nonempty_ArraySpec_List source, Nonempty_ArraySpec_List dest) {
    out.print(" ");
    needSpace = false;
  }
  void universal_trv0_bef(UniversalVisitor _v_) {
    super.universal_trv0_bef(_v_);
  }
  void universal_trv0_aft(UniversalVisitor _v_) {
    super.universal_trv0_aft(_v_);
  }
  void universal_trv0(UniversalVisitor _v_) {
    universal_trv0_bef(_v_);
    super.universal_trv0(_v_);
    universal_trv0_aft(_v_);
  }
}

