// This file is automatically generated by DemeterJ.

DisplayVisitor {
  {{
    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; }
    DisplayVisitor(java.io.PrintWriter out)     { set_out(out); }
    DisplayVisitor(java.io.PrintStream out)
      { set_out(new java.io.PrintWriter(out, true)); }
  }}
  finish {{ out.flush(); }}


  before Main {{
    out.print(": Main  (");
    indent++;
  }}
  after Main {{
    out.print(" )");
    indent--;
  }}
  before CollectVisitor {{
    out.print(": CollectVisitor  (");
    indent++;
  }}
  after CollectVisitor {{
    out.print(" )");
    indent--;
  }}
  before SelectorLanguage {{
    out.print(": SelectorLanguage  (");
    indent++;
  }}
  after SelectorLanguage {{
    out.print(" )");
    indent--;
  }}
  before -> SelectorLanguage, strategylanguage, StrategyLanguage {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<strategylanguage> ");
  }}
  before -> SelectorLanguage, nodesubsetlanguage, NodeSubsetLanguage {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<nodesubsetlanguage> ");
  }}
  before -> SelectorLanguage, selectorname, SelectorName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<selectorname> ");
  }}
  before -> SelectorLanguage, classdict, ClassDict {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<classdict> ");
  }}
  before SelectorName {{
    out.print(": SelectorName  (");
    indent++;
  }}
  after SelectorName {{
    out.print(" )");
    indent--;
  }}
  before -> SelectorName, ident, Ident {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<ident> ");
    out.print(" : Ident");
    out.print(" \"" + source.get_ident() + "\"");
  }}
  before ClassDict {{
    out.print(": ClassDict  (");
    indent++;
  }}
  after ClassDict {{
    out.print(" )");
    indent--;
  }}
  before -> ClassDict, text, Text {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<text> ");
    out.print(" : Text");
    out.print(" {{" + source.get_text() + "}" + "}" + " ");
  }}
  before StrategyLanguage {{
    out.print(": StrategyLanguage  (");
    indent++;
  }}
  after StrategyLanguage {{
    out.print(" )");
    indent--;
  }}
  before -> StrategyLanguage, strategydef_nplist, StrategyDef_NPList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<strategydef_nplist> ");
  }}
  before StrategyDef {{
    out.print(": StrategyDef  (");
    indent++;
  }}
  after StrategyDef {{
    out.print(" )");
    indent--;
  }}
  before -> StrategyDef, strategyname, StrategyName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<strategyname> ");
  }}
  before -> StrategyDef, strategyexpression, StrategyExpression {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<strategyexpression> ");
  }}
  before NodeSubsetLanguage {{
    out.print(": NodeSubsetLanguage  (");
    indent++;
  }}
  after NodeSubsetLanguage {{
    out.print(" )");
    indent--;
  }}
  before -> NodeSubsetLanguage, nodesubsetspec_plist, NodeSubsetSpec_PList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<nodesubsetspec_plist> ");
  }}
  before NodeSubsetSpec {{
    out.print(": NodeSubsetSpec  (");
    indent++;
  }}
  after NodeSubsetSpec {{
    out.print(" )");
    indent--;
  }}
  before -> NodeSubsetSpec, nodesubsetname, NodeSubsetName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<nodesubsetname> ");
  }}
  before -> NodeSubsetSpec, nodesubsetexpression, NodeSubsetExpression {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<nodesubsetexpression> ");
  }}
  before Compound {{
    out.print(": Compound  (");
    indent++;
  }}
  after Compound {{
    out.print(" )");
    indent--;
  }}
  before -> Compound, op, Operator {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<op> ");
  }}
  before -> Compound, args, NodeSubsetExpression_List {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<args> ");
  }}
  before Union {{
    out.print(": Union  (");
    indent++;
  }}
  after Union {{
    out.print(" )");
    indent--;
  }}
  before Intersection {{
    out.print(": Intersection  (");
    indent++;
  }}
  after Intersection {{
    out.print(" )");
    indent--;
  }}
  before Complement {{
    out.print(": Complement  (");
    indent++;
  }}
  after Complement {{
    out.print(" )");
    indent--;
  }}
  before ClassNameSet {{
    out.print(": ClassNameSet  (");
    indent++;
  }}
  after ClassNameSet {{
    out.print(" )");
    indent--;
  }}
  before -> ClassNameSet, classname_bclist, ClassName_BCList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<classname_bclist> ");
  }}
  before GraphNodes {{
    out.print(": GraphNodes  (");
    indent++;
  }}
  after GraphNodes {{
    out.print(" )");
    indent--;
  }}
  before -> GraphNodes, strategyname, StrategyName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<strategyname> ");
  }}
  before GraphNodeRegExp {{
    out.print(": GraphNodeRegExp  (");
    indent++;
  }}
  after GraphNodeRegExp {{
    out.print(" )");
    indent--;
  }}
  before -> GraphNodeRegExp, classname, ClassName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<classname> ");
  }}
  before -> GraphNodeRegExp, wildcard, WildCard {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<wildcard> ");
  }}
  before WildCard {{
    out.print(": WildCard  (");
    indent++;
  }}
  after WildCard {{
    out.print(" )");
    indent--;
  }}
  before StrategyExpression {{
    out.print(": StrategyExpression  (");
    indent++;
  }}
  after StrategyExpression {{
    out.print(" )");
    indent--;
  }}
  before -> StrategyExpression, strategy, Strategy {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<strategy> ");
  }}
  before -> SimpleStrategy, parsedNameMap, NameMap {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<parsedNameMap> ");
  }}
  before StrategyGraph {{
    out.print(": StrategyGraph  (");
    indent++;
  }}
  after StrategyGraph {{
    out.print(" )");
    indent--;
  }}
  before -> StrategyGraph, edges, SGEdge_SList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<edges> ");
  }}
  before SGEdge {{
    out.print(": SGEdge  (");
    indent++;
  }}
  after SGEdge {{
    out.print(" )");
    indent--;
  }}
  before -> SGEdge, sourcemarker, SourceMarker {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<sourcemarker> ");
  }}
  before -> SGEdge, source, GlobSpec {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<source> ");
  }}
  before -> SGEdge, targetmarker, TargetMarker {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<targetmarker> ");
  }}
  before -> SGEdge, target, GlobSpec {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<target> ");
  }}
  before -> SGEdge, constraint, NegativeConstraint {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<constraint> ");
  }}
  before SourceMarker {{
    out.print(": SourceMarker  (");
    indent++;
  }}
  after SourceMarker {{
    out.print(" )");
    indent--;
  }}
  before TargetMarker {{
    out.print(": TargetMarker  (");
    indent++;
  }}
  after TargetMarker {{
    out.print(" )");
    indent--;
  }}
  before PathDirective {{
    out.print(": PathDirective  (");
    indent++;
  }}
  after PathDirective {{
    out.print(" )");
    indent--;
  }}
  before -> PathDirective, source, SourceDirective {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<source> ");
  }}
  before -> PathDirective, constraint, NegativeConstraint {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<constraint> ");
  }}
  before -> PathDirective, segments, PathSegment_List {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<segments> ");
  }}
  before -> PathDirective, target, TargetDirective {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<target> ");
  }}
  before -> SourceDirective, sources, ClassGlobSpec {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<sources> ");
  }}
  before From {{
    out.print(": From  (");
    indent++;
  }}
  after From {{
    out.print(" )");
    indent--;
  }}
  before PathSegment {{
    out.print(": PathSegment  (");
    indent++;
  }}
  after PathSegment {{
    out.print(" )");
    indent--;
  }}
  before -> PathSegment, node, PositiveConstraint {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<node> ");
  }}
  before -> PathSegment, constraint, NegativeConstraint {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<constraint> ");
  }}
  before -> Constraint, glob, GlobSpec {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<glob> ");
  }}
  before Through {{
    out.print(": Through  (");
    indent++;
  }}
  after Through {{
    out.print(" )");
    indent--;
  }}
  before Via {{
    out.print(": Via  (");
    indent++;
  }}
  after Via {{
    out.print(" )");
    indent--;
  }}
  before Bypassing {{
    out.print(": Bypassing  (");
    indent++;
  }}
  after Bypassing {{
    out.print(" )");
    indent--;
  }}
  before OnlyThrough {{
    out.print(": OnlyThrough  (");
    indent++;
  }}
  after OnlyThrough {{
    out.print(" )");
    indent--;
  }}
  before -> TargetDirective, targets, ClassGlobSpec {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<targets> ");
  }}
  before To {{
    out.print(": To  (");
    indent++;
  }}
  after To {{
    out.print(" )");
    indent--;
  }}
  before ToStop {{
    out.print(": ToStop  (");
    indent++;
  }}
  after ToStop {{
    out.print(" )");
    indent--;
  }}
  before -> StrategyCombination, first, Strategy {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before -> StrategyCombination, rest, Strategy_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<rest> ");
  }}
  before Join {{
    out.print(": Join  (");
    indent++;
  }}
  after Join {{
    out.print(" )");
    indent--;
  }}
  before Merge {{
    out.print(": Merge  (");
    indent++;
  }}
  after Merge {{
    out.print(" )");
    indent--;
  }}
  before Intersect {{
    out.print(": Intersect  (");
    indent++;
  }}
  after Intersect {{
    out.print(" )");
    indent--;
  }}
  before StrategyReference {{
    out.print(": StrategyReference  (");
    indent++;
  }}
  after StrategyReference {{
    out.print(" )");
    indent--;
  }}
  before -> StrategyReference, ident, Ident {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<ident> ");
    out.print(" : Ident");
    out.print(" \"" + source.get_ident() + "\"");
  }}
  before NameMap {{
    out.print(": NameMap  (");
    indent++;
  }}
  after NameMap {{
    out.print(" )");
    indent--;
  }}
  before -> NameMap, bindings, NameBinding_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<bindings> ");
  }}
  before NameBinding {{
    out.print(": NameBinding  (");
    indent++;
  }}
  after NameBinding {{
    out.print(" )");
    indent--;
  }}
  before -> NameBinding, sgName, Name {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<sgName> ");
  }}
  before -> NameBinding, cgNames, ClassGlobSpec {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<cgNames> ");
  }}
  before OneGlob {{
    out.print(": OneGlob  (");
    indent++;
  }}
  after OneGlob {{
    out.print(" )");
    indent--;
  }}
  before -> OneGlob, glob, Glob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<glob> ");
  }}
  before GlobSet {{
    out.print(": GlobSet  (");
    indent++;
  }}
  after GlobSet {{
    out.print(" )");
    indent--;
  }}
  before -> GlobSet, globs, Glob_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<globs> ");
  }}
  before ClassGlob {{
    out.print(": ClassGlob  (");
    indent++;
  }}
  after ClassGlob {{
    out.print(" )");
    indent--;
  }}
  before -> ClassGlob, name, ClassNameGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
  }}
  before PartGlob {{
    out.print(": PartGlob  (");
    indent++;
  }}
  after PartGlob {{
    out.print(" )");
    indent--;
  }}
  before -> PartGlob, source, SourceGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<source> ");
  }}
  before -> PartGlob, name, PartNameGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
  }}
  before -> PartGlob, target, TargetGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<target> ");
  }}
  before SubclassGlob {{
    out.print(": SubclassGlob  (");
    indent++;
  }}
  after SubclassGlob {{
    out.print(" )");
    indent--;
  }}
  before -> SubclassGlob, source, SourceGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<source> ");
  }}
  before -> SubclassGlob, target, TargetGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<target> ");
  }}
  before SuperclassGlob {{
    out.print(": SuperclassGlob  (");
    indent++;
  }}
  after SuperclassGlob {{
    out.print(" )");
    indent--;
  }}
  before -> SuperclassGlob, source, SourceGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<source> ");
  }}
  before -> SuperclassGlob, target, TargetGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<target> ");
  }}
  before SourceGlob {{
    out.print(": SourceGlob  (");
    indent++;
  }}
  after SourceGlob {{
    out.print(" )");
    indent--;
  }}
  before -> SourceGlob, name, ClassNameGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
  }}
  before TargetGlob {{
    out.print(": TargetGlob  (");
    indent++;
  }}
  after TargetGlob {{
    out.print(" )");
    indent--;
  }}
  before -> TargetGlob, name, ClassNameGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
  }}
  before ClassNameExact {{
    out.print(": ClassNameExact  (");
    indent++;
  }}
  after ClassNameExact {{
    out.print(" )");
    indent--;
  }}
  before -> ClassNameExact, classname, ClassName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<classname> ");
  }}
  before AnyClass {{
    out.print(": AnyClass  (");
    indent++;
  }}
  after AnyClass {{
    out.print(" )");
    indent--;
  }}
  before PartNameExact {{
    out.print(": PartNameExact  (");
    indent++;
  }}
  after PartNameExact {{
    out.print(" )");
    indent--;
  }}
  before -> PartNameExact, partname, PartName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<partname> ");
  }}
  before AnyPart {{
    out.print(": AnyPart  (");
    indent++;
  }}
  after AnyPart {{
    out.print(" )");
    indent--;
  }}
  before OneClassGlob {{
    out.print(": OneClassGlob  (");
    indent++;
  }}
  after OneClassGlob {{
    out.print(" )");
    indent--;
  }}
  before -> OneClassGlob, classglob, ClassGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<classglob> ");
  }}
  before ClassGlobSet {{
    out.print(": ClassGlobSet  (");
    indent++;
  }}
  after ClassGlobSet {{
    out.print(" )");
    indent--;
  }}
  before -> ClassGlobSet, globs, ClassGlob_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<globs> ");
  }}
  before ClassName {{
    out.print(": ClassName  (");
    indent++;
  }}
  after ClassName {{
    out.print(" )");
    indent--;
  }}
  before -> ClassName, name, Name {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
  }}
  before PartName {{
    out.print(": PartName  (");
    indent++;
  }}
  after PartName {{
    out.print(" )");
    indent--;
  }}
  before -> PartName, name, Ident {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
    out.print(" : Ident");
    out.print(" \"" + source.get_name() + "\"");
  }}
  before Name {{
    out.print(": Name  {");
    indent++;
  }}
  after Name {{
    out.print(" }");
    indent--;
  }}
  before -> Name, first, Nonempty_Name {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before StrategyName {{
    out.print(": StrategyName  (");
    indent++;
  }}
  after StrategyName {{
    out.print(" )");
    indent--;
  }}
  before -> StrategyName, name, Ident {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
    out.print(" : Ident");
    out.print(" \"" + source.get_name() + "\"");
  }}
  before NodeSubsetName {{
    out.print(": NodeSubsetName  (");
    indent++;
  }}
  after NodeSubsetName {{
    out.print(" )");
    indent--;
  }}
  before -> NodeSubsetName, name, Ident {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<name> ");
    out.print(" : Ident");
    out.print(" \"" + source.get_name() + "\"");
  }}
  before SymbolicNameMapI {{
    out.print(": SymbolicNameMapI  (");
    indent++;
  }}
  after SymbolicNameMapI {{
    out.print(" )");
    indent--;
  }}
  before PrintVisitor {{
    out.print(": PrintVisitor  (");
    indent++;
  }}
  after PrintVisitor {{
    out.print(" )");
    indent--;
  }}
  before -> PrintVisitor, indent, int {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<indent> ");
    out.print(" : int \"" + dest + "\"");
  }}
  before -> PrintVisitor, needSpace, boolean {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<needSpace> ");
    out.print(" : boolean \"" + dest + "\"");
  }}
  before CopyVisitor {{
    out.print(": CopyVisitor  (");
    indent++;
  }}
  after CopyVisitor {{
    out.print(" )");
    indent--;
  }}
  before -> CopyVisitor, copy, Object {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<copy> ");
  }}
  before SubgraphVisitor {{
    out.print(": SubgraphVisitor  (");
    indent++;
  }}
  after SubgraphVisitor {{
    out.print(" )");
    indent--;
  }}
  before -> SubgraphVisitor, is_equal, boolean {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<is_equal> ");
    out.print(" : boolean \"" + dest + "\"");
  }}
  before EqualVisitor {{
    out.print(": EqualVisitor  (");
    indent++;
  }}
  after EqualVisitor {{
    out.print(" )");
    indent--;
  }}
  before -> EqualVisitor, is_equal, boolean {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<is_equal> ");
    out.print(" : boolean \"" + dest + "\"");
  }}
  before DisplayVisitor {{
    out.print(": DisplayVisitor  (");
    indent++;
  }}
  after DisplayVisitor {{
    out.print(" )");
    indent--;
  }}
  before -> DisplayVisitor, indent, int {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<indent> ");
    out.print(" : int \"" + dest + "\"");
  }}
  before TraceVisitor {{
    out.print(": TraceVisitor  (");
    indent++;
  }}
  after TraceVisitor {{
    out.print(" )");
    indent--;
  }}
  before -> TraceVisitor, indent, int {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<indent> ");
    out.print(" : int \"" + dest + "\"");
  }}
  before StrategyDef_NPList {{
    out.print(": StrategyDef_NPList  {");
    indent++;
  }}
  after StrategyDef_NPList {{
    out.print(" }");
    indent--;
  }}
  before -> StrategyDef_NPList, first, Nonempty_StrategyDef_NPList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before NodeSubsetSpec_PList {{
    out.print(": NodeSubsetSpec_PList  {");
    indent++;
  }}
  after NodeSubsetSpec_PList {{
    out.print(" }");
    indent--;
  }}
  before -> NodeSubsetSpec_PList, first, Nonempty_NodeSubsetSpec_PList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before NodeSubsetExpression_List {{
    out.print(": NodeSubsetExpression_List  {");
    indent++;
  }}
  after NodeSubsetExpression_List {{
    out.print(" }");
    indent--;
  }}
  before -> NodeSubsetExpression_List, first, Nonempty_NodeSubsetExpression_List {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before ClassName_BCList {{
    out.print(": ClassName_BCList  {");
    indent++;
  }}
  after ClassName_BCList {{
    out.print(" }");
    indent--;
  }}
  before -> ClassName_BCList, first, Nonempty_ClassName_BCList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before SGEdge_SList {{
    out.print(": SGEdge_SList  {");
    indent++;
  }}
  after SGEdge_SList {{
    out.print(" }");
    indent--;
  }}
  before -> SGEdge_SList, first, Nonempty_SGEdge_SList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before PathSegment_List {{
    out.print(": PathSegment_List  {");
    indent++;
  }}
  after PathSegment_List {{
    out.print(" }");
    indent--;
  }}
  before -> PathSegment_List, first, Nonempty_PathSegment_List {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before Strategy_Commalist {{
    out.print(": Strategy_Commalist  {");
    indent++;
  }}
  after Strategy_Commalist {{
    out.print(" }");
    indent--;
  }}
  before -> Strategy_Commalist, first, Nonempty_Strategy_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before NameBinding_Commalist {{
    out.print(": NameBinding_Commalist  {");
    indent++;
  }}
  after NameBinding_Commalist {{
    out.print(" }");
    indent--;
  }}
  before -> NameBinding_Commalist, first, Nonempty_NameBinding_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before Glob_Commalist {{
    out.print(": Glob_Commalist  {");
    indent++;
  }}
  after Glob_Commalist {{
    out.print(" }");
    indent--;
  }}
  before -> Glob_Commalist, first, Nonempty_Glob_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before ClassGlob_Commalist {{
    out.print(": ClassGlob_Commalist  {");
    indent++;
  }}
  after ClassGlob_Commalist {{
    out.print(" }");
    indent--;
  }}
  before -> ClassGlob_Commalist, first, Nonempty_ClassGlob_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<first> ");
  }}
  before Nonempty_Name {{
    out.print(": Nonempty_Name  (");
    indent++;
  }}
  after Nonempty_Name {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_Name, it, Ident {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
    out.print(" : Ident");
    out.print(" \"" + source.get_it() + "\"");
  }}
  before -> Nonempty_Name, next, Nonempty_Name {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_StrategyDef_NPList {{
    out.print(": Nonempty_StrategyDef_NPList  (");
    indent++;
  }}
  after Nonempty_StrategyDef_NPList {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_StrategyDef_NPList, it, StrategyDef {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_StrategyDef_NPList, next, Nonempty_StrategyDef_NPList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_NodeSubsetSpec_PList {{
    out.print(": Nonempty_NodeSubsetSpec_PList  (");
    indent++;
  }}
  after Nonempty_NodeSubsetSpec_PList {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_NodeSubsetSpec_PList, it, NodeSubsetSpec {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_NodeSubsetSpec_PList, next, Nonempty_NodeSubsetSpec_PList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_NodeSubsetExpression_List {{
    out.print(": Nonempty_NodeSubsetExpression_List  (");
    indent++;
  }}
  after Nonempty_NodeSubsetExpression_List {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_NodeSubsetExpression_List, it, NodeSubsetExpression {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_NodeSubsetExpression_List, next, Nonempty_NodeSubsetExpression_List {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_ClassName_BCList {{
    out.print(": Nonempty_ClassName_BCList  (");
    indent++;
  }}
  after Nonempty_ClassName_BCList {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_ClassName_BCList, it, ClassName {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_ClassName_BCList, next, Nonempty_ClassName_BCList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_SGEdge_SList {{
    out.print(": Nonempty_SGEdge_SList  (");
    indent++;
  }}
  after Nonempty_SGEdge_SList {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_SGEdge_SList, it, SGEdge {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_SGEdge_SList, next, Nonempty_SGEdge_SList {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_PathSegment_List {{
    out.print(": Nonempty_PathSegment_List  (");
    indent++;
  }}
  after Nonempty_PathSegment_List {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_PathSegment_List, it, PathSegment {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_PathSegment_List, next, Nonempty_PathSegment_List {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_Strategy_Commalist {{
    out.print(": Nonempty_Strategy_Commalist  (");
    indent++;
  }}
  after Nonempty_Strategy_Commalist {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_Strategy_Commalist, it, Strategy {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_Strategy_Commalist, next, Nonempty_Strategy_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_NameBinding_Commalist {{
    out.print(": Nonempty_NameBinding_Commalist  (");
    indent++;
  }}
  after Nonempty_NameBinding_Commalist {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_NameBinding_Commalist, it, NameBinding {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_NameBinding_Commalist, next, Nonempty_NameBinding_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_Glob_Commalist {{
    out.print(": Nonempty_Glob_Commalist  (");
    indent++;
  }}
  after Nonempty_Glob_Commalist {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_Glob_Commalist, it, Glob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_Glob_Commalist, next, Nonempty_Glob_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
  before Nonempty_ClassGlob_Commalist {{
    out.print(": Nonempty_ClassGlob_Commalist  (");
    indent++;
  }}
  after Nonempty_ClassGlob_Commalist {{
    out.print(" )");
    indent--;
  }}
  before -> Nonempty_ClassGlob_Commalist, it, ClassGlob {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<it> ");
  }}
  before -> Nonempty_ClassGlob_Commalist, next, Nonempty_ClassGlob_Commalist {{
    out.println();    for (int i = 0; i < indent; i++) out.print("\t");
    out.print("<next> ");
  }}
}