/* Generated By:JavaCC: Do not edit this line. Parser.java */
package CSU670_Plugin.gen;
import edu.neu.ccs.demeter.dj.*;
import edu.neu.ccs.demeter.aplib.cd.ClassDefVisitor;
import edu.neu.ccs.demeter.aplib.cd.ClassDef;
import java.io.*;
import java.util.*;
import edu.neu.ccs.demeter.*;
public class Parser implements ParserConstants {
  // oit is uugly.  Why isn't there a Character.valueOf(String)? 
  static char unescapifyChar(String s) {
    char c = s.charAt(0);
    if (c == '\\') {
      switch (s.charAt(1)) {
      case 'n': c = '\n'; break;
      case 't': c = '\t'; break;
      case 'b': c = '\b'; break;
      case 'r': c = '\r'; break;
      case 'f': c = '\f'; break;
      case '\\': c = '\\'; break;
      case '\'': c = '\''; break;
      case '\"': c = '\"'; break;
      default:
       c = (char) Integer.parseInt(s.substring(1, s.length()), 8);
       break;
      }
    }
    return c;
  }
  // Even uglier... 
  static String unescapify(String s) {
    char str[] = new char[s.length()];
    int i = 0, o = 0;
    while (i < s.length()) {
      char c = s.charAt(i++);
      if (c == '\\') {
       int j = i + 1;
       while (j < s.length() &&
              Character.digit(s.charAt(j), 8) != -1) {
         j++;
       }
       c = unescapifyChar(s.substring(i-1, j));
       i = j;
      }
      str[o++] = c;
    }
    return String.valueOf(str, 0, o);
  }

  final public AspectFile _AspectFile() throws ParseException {
  AspectFile it = null;
  Aspects _aspects;
    it=new AspectFile();
    _aspects = _Aspects();
                        it.set_aspects(_aspects);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Aspect _Aspect() throws ParseException {
  Aspect it = null;
  AspectBody _aspectbody;
    it=new Aspect();
    jj_consume_token(1);
    jj_consume_token(2);
    _aspectbody = _AspectBody();
                                             it.set_aspectbody(_aspectbody);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public AspectBody _AspectBody() throws ParseException {
  AspectBody it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 3:
      it = _AspectCD();
      break;
    case 5:
      it = _AspectTV();
      break;
    default:
      jj_la1[0] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_AspectBody(AspectBody it) throws ParseException {

  }

  final public AspectCD _AspectCD() throws ParseException {
  AspectCD it = null;
  AspectName _aspectname;
  CDBody _cdbody;
    it=new AspectCD();
    jj_consume_token(3);
    jj_consume_token(4);
    _aspectname = _AspectName();
                                                      it.set_aspectname(_aspectname);
    _cdbody = _CDBody();
                      it.set_cdbody(_cdbody);
    common_AspectBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public AspectTV _AspectTV() throws ParseException {
  AspectTV it = null;
  AspectName _aspectname;
  TVBody _tvbody;
    it=new AspectTV();
    jj_consume_token(5);
    jj_consume_token(4);
    _aspectname = _AspectName();
                                                it.set_aspectname(_aspectname);
    _tvbody = _TVBody();
                      it.set_tvbody(_tvbody);
    common_AspectBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TVBody _TVBody() throws ParseException {
  TVBody it = null;
  TVDeclarations _tvdeclarations;
    it=new TVBody();
    jj_consume_token(6);
    _tvdeclarations = _TVDeclarations();
                                           it.set_tvdeclarations(_tvdeclarations);
    jj_consume_token(7);
         {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TVDeclaration _TVDeclaration() throws ParseException {
  TVDeclaration it = null;
  TVDeclarationBody _tvdeclarationbody;
    it=new TVDeclaration();
    jj_consume_token(8);
    _tvdeclarationbody = _TVDeclarationBody();
                                                       it.set_tvdeclarationbody(_tvdeclarationbody);
    jj_consume_token(9);
         {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TVDeclarationBody _TVDeclarationBody() throws ParseException {
  TVDeclarationBody it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 15:
      it = _DecStrategy();
      break;
    case 16:
      it = _DecNodeSet();
      break;
    case 10:
      it = _DecChosen();
      break;
    default:
      jj_la1[1] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_TVDeclarationBody(TVDeclarationBody it) throws ParseException {

  }

  final public DecChosen _DecChosen() throws ParseException {
  DecChosen it = null;
  DecChosenBody _decchosenbody;
    it=new DecChosen();
    jj_consume_token(10);
    _decchosenbody = _DecChosenBody();
                                              it.set_decchosenbody(_decchosenbody);
    common_TVDeclarationBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public DecChosenBody _DecChosenBody() throws ParseException {
  DecChosenBody it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 11:
      it = _ChosenSelector();
      break;
    case 13:
      it = _ChosenCD();
      break;
    default:
      jj_la1[2] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_DecChosenBody(DecChosenBody it) throws ParseException {

  }

  final public ChosenSelector _ChosenSelector() throws ParseException {
  ChosenSelector it = null;
  Ident _ident;
    it=new ChosenSelector();
    jj_consume_token(11);
    jj_consume_token(12);
    _ident = _Ident();
                                     it.set_ident(_ident);
    common_DecChosenBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ChosenCD _ChosenCD() throws ParseException {
  ChosenCD it = null;
  Ident _ident;
    it=new ChosenCD();
    jj_consume_token(13);
    jj_consume_token(14);
    jj_consume_token(12);
    _ident = _Ident();
                                                it.set_ident(_ident);
    common_DecChosenBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public DecStrategy _DecStrategy() throws ParseException {
  DecStrategy it = null;
  DecName _decname;
  StrategyExpression _strategyexpression;
    it=new DecStrategy();
    jj_consume_token(15);
    jj_consume_token(12);
    _decname = _DecName();
                                         it.set_decname(_decname);
    jj_consume_token(12);
    _strategyexpression = _StrategyExpression();
                                                   it.set_strategyexpression(_strategyexpression);
    common_TVDeclarationBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public DecNodeSet _DecNodeSet() throws ParseException {
  DecNodeSet it = null;
  NodeSubsetName _nodesubsetname;
  DecNodeSetBody _decnodesetbody;
    it=new DecNodeSet();
    jj_consume_token(16);
    jj_consume_token(17);
    jj_consume_token(12);
    _nodesubsetname = _NodeSubsetName();
                                                          it.set_nodesubsetname(_nodesubsetname);
    jj_consume_token(12);
    _decnodesetbody = _DecNodeSetBody();
                                           it.set_decnodesetbody(_decnodesetbody);
    common_TVDeclarationBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public NodeSubsetName _NodeSubsetName() throws ParseException {
  NodeSubsetName it = null;
  Ident _ident;
    it=new NodeSubsetName();
    _ident = _Ident();
                    it.set_ident(_ident);
    common_Simple(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public DecNodeSetBody _DecNodeSetBody() throws ParseException {
  DecNodeSetBody it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 6:
    case 21:
    case 22:
    case IDENTIFIER:
      it = _Simple();
      break;
    case 18:
    case 19:
      it = _BCompound();
      break;
    case 20:
      it = _UCompound();
      break;
    default:
      jj_la1[3] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_DecNodeSetBody(DecNodeSetBody it) throws ParseException {

  }

  final public Simple _Simple() throws ParseException {
  Simple it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
      it = _NodeSubsetName();
      break;
    case 6:
      it = _ClassNameSet();
      break;
    case 21:
      it = _GraphNodes();
      break;
    case 22:
      it = _GraphNodeRegExp();
      break;
    default:
      jj_la1[4] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_Simple(Simple it) throws ParseException {
    common_DecNodeSetBody(it);

  }

  final public BCompound _BCompound() throws ParseException {
  BCompound it = null;
  BinaryOp _op;
  DecNodeSetBody_PCList _args;
    it=new BCompound();
    _op = _BinaryOp();
                    it.set_op(_op);
    _args = _DecNodeSetBody_PCList();
                                   it.set_args(_args);
    common_DecNodeSetBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public UCompound _UCompound() throws ParseException {
  UCompound it = null;
  UnaryOp _op;
  DecNodeSetBody _arg;
    it=new UCompound();
    _op = _UnaryOp();
                   it.set_op(_op);
    _arg = _DecNodeSetBody();
                           it.set_arg(_arg);
    common_DecNodeSetBody(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Operator _Operator() throws ParseException {
  Operator it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 18:
    case 19:
      it = _BinaryOp();
      break;
    case 20:
      it = _UnaryOp();
      break;
    default:
      jj_la1[5] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_Operator(Operator it) throws ParseException {

  }

  final public BinaryOp _BinaryOp() throws ParseException {
  BinaryOp it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 18:
      it = _Union();
      break;
    case 19:
      it = _Intersection();
      break;
    default:
      jj_la1[6] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_BinaryOp(BinaryOp it) throws ParseException {
    common_Operator(it);

  }

  final public UnaryOp _UnaryOp() throws ParseException {
  UnaryOp it = null;
    it = _Complement();
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_UnaryOp(UnaryOp it) throws ParseException {
    common_Operator(it);

  }

  final public Union _Union() throws ParseException {
  Union it = null;
    it=new Union();
    jj_consume_token(18);
    common_BinaryOp(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Intersection _Intersection() throws ParseException {
  Intersection it = null;
    it=new Intersection();
    jj_consume_token(19);
    common_BinaryOp(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Complement _Complement() throws ParseException {
  Complement it = null;
    it=new Complement();
    jj_consume_token(20);
    common_UnaryOp(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassNameSet _ClassNameSet() throws ParseException {
  ClassNameSet it = null;
  ClassName_BCList _items;
    it=new ClassNameSet();
    _items = _ClassName_BCList();
                               it.set_items(_items);
    common_Simple(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public GraphNodes _GraphNodes() throws ParseException {
  GraphNodes it = null;
  DecName _decname;
    it=new GraphNodes();
    jj_consume_token(21);
    _decname = _DecName();
                                 it.set_decname(_decname);
    common_Simple(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public GraphNodeRegExp _GraphNodeRegExp() throws ParseException {
  GraphNodeRegExp it = null;
  ClassNamePrefix _classnameprefix;
  WildCard _wildcard;
    it=new GraphNodeRegExp();
    jj_consume_token(22);
    _classnameprefix = _ClassNamePrefix();
                                                  it.set_classnameprefix(_classnameprefix);
    _wildcard = _WildCard();
                          it.set_wildcard(_wildcard);
    common_Simple(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public WildCard _WildCard() throws ParseException {
  WildCard it = null;
    it=new WildCard();
    jj_consume_token(23);
         {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public AspectName _AspectName() throws ParseException {
  AspectName it = null;
  Ident _ident;
    it=new AspectName();
    _ident = _Ident();
                    it.set_ident(_ident);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassNamePrefix _ClassNamePrefix() throws ParseException {
  ClassNamePrefix it = null;
  Ident _ident;
    it=new ClassNamePrefix();
    _ident = _Ident();
                    it.set_ident(_ident);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public DecName _DecName() throws ParseException {
  DecName it = null;
  Ident _ident;
    it=new DecName();
    _ident = _Ident();
                    it.set_ident(_ident);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public CDBody _CDBody() throws ParseException {
  CDBody it = null;
  Text _text;
    it=new CDBody();
    _text = _Text();
                  it.set_text(_text);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Regexp _Regexp() throws ParseException {
  Regexp it = null;
    it=new Regexp();
    jj_consume_token(24);
            {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Aspects _Aspects() throws ParseException {
  Aspects it = null;
  Aspect_List _aspect_list;
    it=new Aspects();
    _aspect_list = _Aspect_List();
                                it.set_aspect_list(_aspect_list);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TVDeclarations _TVDeclarations() throws ParseException {
  TVDeclarations it = null;
  TVDeclaration_List _tvdeclaration_list;
    it=new TVDeclarations();
    _tvdeclaration_list = _TVDeclaration_List();
                                              it.set_tvdeclaration_list(_tvdeclaration_list);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Main _Main() throws ParseException {
  Main it = null;
    it=new Main();
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public StrategyExpression _StrategyExpression() throws ParseException {
  StrategyExpression it = null;
  Strategy _strategy;
    it=new StrategyExpression();
    _strategy = _Strategy();
                          it.set_strategy(_strategy);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Strategy _Strategy() throws ParseException {
  Strategy it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 6:
    case 29:
      it = _SimpleStrategy();
      break;
    case 37:
    case 38:
    case 39:
      it = _StrategyCombination();
      break;
    case IDENTIFIER:
      it = _StrategyReference();
      break;
    default:
      jj_la1[7] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_Strategy(Strategy it) throws ParseException {

  }

  final public SimpleStrategy _SimpleStrategy() throws ParseException {
  SimpleStrategy it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 6:
      it = _StrategyGraph();
      break;
    case 29:
      it = _PathDirective();
      break;
    default:
      jj_la1[8] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_SimpleStrategy(SimpleStrategy it) throws ParseException {
  NameMap _parsedNameMap;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 25:
      jj_consume_token(25);
      _parsedNameMap = _NameMap();
                                         it.set_parsedNameMap(_parsedNameMap);
      break;
    default:
      jj_la1[9] = jj_gen;
      ;
    }
    common_Strategy(it);

  }

  final public StrategyGraph _StrategyGraph() throws ParseException {
  StrategyGraph it = null;
  SGEdge_SList _edges;
    it=new StrategyGraph();
    jj_consume_token(6);
    _edges = _SGEdge_SList();
                                it.set_edges(_edges);
    jj_consume_token(7);
    common_SimpleStrategy(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SGEdge _SGEdge() throws ParseException {
  SGEdge it = null;
  SourceMarker _sourcemarker;
  GlobSpec _source;
  TargetMarker _targetmarker;
  GlobSpec _target;
  NegativeConstraint _constraint;
    it=new SGEdge();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 27:
      _sourcemarker = _SourceMarker();
                                     it.set_sourcemarker(_sourcemarker);
      break;
    default:
      jj_la1[10] = jj_gen;
      ;
    }
    _source = _GlobSpec();
                        it.set_source(_source);
    jj_consume_token(26);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 28:
      _targetmarker = _TargetMarker();
                                           it.set_targetmarker(_targetmarker);
      break;
    default:
      jj_la1[11] = jj_gen;
      ;
    }
    _target = _GlobSpec();
                        it.set_target(_target);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 32:
    case 33:
      _constraint = _NegativeConstraint();
                                         it.set_constraint(_constraint);
      break;
    default:
      jj_la1[12] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SourceMarker _SourceMarker() throws ParseException {
  SourceMarker it = null;
    it=new SourceMarker();
    jj_consume_token(27);
               {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TargetMarker _TargetMarker() throws ParseException {
  TargetMarker it = null;
    it=new TargetMarker();
    jj_consume_token(28);
               {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public PathDirective _PathDirective() throws ParseException {
  PathDirective it = null;
  SourceDirective _source;
  NegativeConstraint _constraint;
  PathSegment_List _segments;
  TargetDirective _target;
    it=new PathDirective();
    _source = _SourceDirective();
                               it.set_source(_source);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 32:
    case 33:
      _constraint = _NegativeConstraint();
                                         it.set_constraint(_constraint);
      break;
    default:
      jj_la1[13] = jj_gen;
      ;
    }
    _segments = _PathSegment_List();
                                  it.set_segments(_segments);
    _target = _TargetDirective();
                               it.set_target(_target);
    common_SimpleStrategy(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SourceDirective _SourceDirective() throws ParseException {
  SourceDirective it = null;
    it = _From();
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_SourceDirective(SourceDirective it) throws ParseException {
  ClassGlobSpec _sources;
    _sources = _ClassGlobSpec();
                              it.set_sources(_sources);

  }

  final public From _From() throws ParseException {
  From it = null;
    it=new From();
    jj_consume_token(29);
    common_SourceDirective(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public PathSegment _PathSegment() throws ParseException {
  PathSegment it = null;
  PositiveConstraint _node;
  NegativeConstraint _constraint;
    it=new PathSegment();
    _node = _PositiveConstraint();
                                it.set_node(_node);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 32:
    case 33:
      _constraint = _NegativeConstraint();
                                         it.set_constraint(_constraint);
      break;
    default:
      jj_la1[14] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Constraint _Constraint() throws ParseException {
  Constraint it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 30:
    case 31:
      it = _PositiveConstraint();
      break;
    case 32:
    case 33:
      it = _NegativeConstraint();
      break;
    default:
      jj_la1[15] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_Constraint(Constraint it) throws ParseException {
  GlobSpec _glob;
    _glob = _GlobSpec();
                      it.set_glob(_glob);

  }

  final public PositiveConstraint _PositiveConstraint() throws ParseException {
  PositiveConstraint it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 30:
      it = _Through();
      break;
    case 31:
      it = _Via();
      break;
    default:
      jj_la1[16] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_PositiveConstraint(PositiveConstraint it) throws ParseException {
    common_Constraint(it);

  }

  final public Through _Through() throws ParseException {
  Through it = null;
    it=new Through();
    jj_consume_token(30);
    common_PositiveConstraint(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Via _Via() throws ParseException {
  Via it = null;
    it=new Via();
    jj_consume_token(31);
    common_PositiveConstraint(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public NegativeConstraint _NegativeConstraint() throws ParseException {
  NegativeConstraint it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 32:
      it = _Bypassing();
      break;
    case 33:
      it = _OnlyThrough();
      break;
    default:
      jj_la1[17] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_NegativeConstraint(NegativeConstraint it) throws ParseException {
    common_Constraint(it);

  }

  final public Bypassing _Bypassing() throws ParseException {
  Bypassing it = null;
    it=new Bypassing();
    jj_consume_token(32);
    common_NegativeConstraint(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public OnlyThrough _OnlyThrough() throws ParseException {
  OnlyThrough it = null;
    it=new OnlyThrough();
    jj_consume_token(33);
    common_NegativeConstraint(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TargetDirective _TargetDirective() throws ParseException {
  TargetDirective it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 34:
      it = _To();
      break;
    case 35:
      it = _ToStop();
      break;
    default:
      jj_la1[18] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_TargetDirective(TargetDirective it) throws ParseException {
  ClassGlobSpec _targets;
    _targets = _ClassGlobSpec();
                              it.set_targets(_targets);

  }

  final public To _To() throws ParseException {
  To it = null;
    it=new To();
    jj_consume_token(34);
    common_TargetDirective(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ToStop _ToStop() throws ParseException {
  ToStop it = null;
    it=new ToStop();
    jj_consume_token(35);
    common_TargetDirective(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public StrategyCombination _StrategyCombination() throws ParseException {
  StrategyCombination it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 37:
      it = _Join();
      break;
    case 38:
      it = _Merge();
      break;
    case 39:
      it = _Intersect();
      break;
    default:
      jj_la1[19] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_StrategyCombination(StrategyCombination it) throws ParseException {
  Strategy _first;
  Strategy_Commalist _rest;
    jj_consume_token(2);
    _first = _Strategy();
                            it.set_first(_first);
    jj_consume_token(36);
    _rest = _Strategy_Commalist();
                                     it.set_rest(_rest);
    jj_consume_token(4);
    common_Strategy(it);

  }

  final public Join _Join() throws ParseException {
  Join it = null;
    it=new Join();
    jj_consume_token(37);
    common_StrategyCombination(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Merge _Merge() throws ParseException {
  Merge it = null;
    it=new Merge();
    jj_consume_token(38);
    common_StrategyCombination(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Intersect _Intersect() throws ParseException {
  Intersect it = null;
    it=new Intersect();
    jj_consume_token(39);
    common_StrategyCombination(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public StrategyReference _StrategyReference() throws ParseException {
  StrategyReference it = null;
  Ident _ident;
    it=new StrategyReference();
    _ident = _Ident();
                    it.set_ident(_ident);
    common_Strategy(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SymbolicNameMap _SymbolicNameMap() throws ParseException {
  SymbolicNameMap it = null;
    it = _NameMap();
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_SymbolicNameMap(SymbolicNameMap it) throws ParseException {

  }

  final public NameMap _NameMap() throws ParseException {
  NameMap it = null;
  NameBinding_Commalist _bindings;
    it=new NameMap();
    jj_consume_token(6);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
      _bindings = _NameBinding_Commalist();
                                               it.set_bindings(_bindings);
      break;
    default:
      jj_la1[20] = jj_gen;
      ;
    }
    jj_consume_token(7);
    common_SymbolicNameMap(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public NameBinding _NameBinding() throws ParseException {
  NameBinding it = null;
  Name _sgName;
  ClassGlobSpec _cgNames;
    it=new NameBinding();
    _sgName = _Name();
                    it.set_sgName(_sgName);
    jj_consume_token(40);
    _cgNames = _ClassGlobSpec();
                                   it.set_cgNames(_cgNames);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public GlobSpec _GlobSpec() throws ParseException {
  GlobSpec it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 23:
    case 26:
    case 41:
    case 42:
    case IDENTIFIER:
      it = _OneGlob();
      break;
    case 6:
      it = _GlobSet();
      break;
    default:
      jj_la1[21] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_GlobSpec(GlobSpec it) throws ParseException {

  }

  final public OneGlob _OneGlob() throws ParseException {
  OneGlob it = null;
  Glob _glob;
    it=new OneGlob();
    _glob = _Glob();
                  it.set_glob(_glob);
    common_GlobSpec(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public GlobSet _GlobSet() throws ParseException {
  GlobSet it = null;
  Glob_Commalist _globs;
    it=new GlobSet();
    jj_consume_token(6);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 23:
    case 26:
    case 41:
    case 42:
    case IDENTIFIER:
      _globs = _Glob_Commalist();
                                     it.set_globs(_globs);
      break;
    default:
      jj_la1[22] = jj_gen;
      ;
    }
    jj_consume_token(7);
    common_GlobSpec(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Glob _Glob() throws ParseException {
  Glob it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 23:
    case IDENTIFIER:
      it = _ClassGlob();
      break;
    case 26:
    case 41:
    case 42:
      it = _EdgeGlob();
      break;
    default:
      jj_la1[23] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_Glob(Glob it) throws ParseException {

  }

  final public EdgeGlob _EdgeGlob() throws ParseException {
  EdgeGlob it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 26:
      it = _PartGlob();
      break;
    case 41:
      it = _SubclassGlob();
      break;
    case 42:
      it = _SuperclassGlob();
      break;
    default:
      jj_la1[24] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_EdgeGlob(EdgeGlob it) throws ParseException {
    common_Glob(it);

  }

  final public ClassGlob _ClassGlob() throws ParseException {
  ClassGlob it = null;
  ClassNameGlob _name;
    it=new ClassGlob();
    _name = _ClassNameGlob();
                           it.set_name(_name);
    common_Glob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public PartGlob _PartGlob() throws ParseException {
  PartGlob it = null;
  SourceGlob _source;
  PartNameGlob _name;
  TargetGlob _target;
    it=new PartGlob();
    jj_consume_token(26);
    _source = _SourceGlob();
                                it.set_source(_source);
    jj_consume_token(36);
    _name = _PartNameGlob();
                               it.set_name(_name);
    jj_consume_token(36);
    _target = _TargetGlob();
                               it.set_target(_target);
    common_EdgeGlob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SubclassGlob _SubclassGlob() throws ParseException {
  SubclassGlob it = null;
  SourceGlob _source;
  TargetGlob _target;
    it=new SubclassGlob();
    jj_consume_token(41);
    _source = _SourceGlob();
                                it.set_source(_source);
    jj_consume_token(36);
    _target = _TargetGlob();
                               it.set_target(_target);
    common_EdgeGlob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SuperclassGlob _SuperclassGlob() throws ParseException {
  SuperclassGlob it = null;
  SourceGlob _source;
  TargetGlob _target;
    it=new SuperclassGlob();
    jj_consume_token(42);
    _source = _SourceGlob();
                                it.set_source(_source);
    jj_consume_token(36);
    _target = _TargetGlob();
                               it.set_target(_target);
    common_EdgeGlob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SourceGlob _SourceGlob() throws ParseException {
  SourceGlob it = null;
  ClassNameGlob _name;
    it=new SourceGlob();
    _name = _ClassNameGlob();
                           it.set_name(_name);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TargetGlob _TargetGlob() throws ParseException {
  TargetGlob it = null;
  ClassNameGlob _name;
    it=new TargetGlob();
    _name = _ClassNameGlob();
                           it.set_name(_name);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassNameGlob _ClassNameGlob() throws ParseException {
  ClassNameGlob it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
      it = _ClassNameExact();
      break;
    case 23:
      it = _AnyClass();
      break;
    default:
      jj_la1[25] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_ClassNameGlob(ClassNameGlob it) throws ParseException {

  }

  final public ClassNameExact _ClassNameExact() throws ParseException {
  ClassNameExact it = null;
  ClassName _classname;
    it=new ClassNameExact();
    _classname = _ClassName();
                            it.set_classname(_classname);
    common_ClassNameGlob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public AnyClass _AnyClass() throws ParseException {
  AnyClass it = null;
    it=new AnyClass();
    jj_consume_token(23);
    common_ClassNameGlob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public PartNameGlob _PartNameGlob() throws ParseException {
  PartNameGlob it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
      it = _PartNameExact();
      break;
    case 23:
      it = _AnyPart();
      break;
    default:
      jj_la1[26] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_PartNameGlob(PartNameGlob it) throws ParseException {

  }

  final public PartNameExact _PartNameExact() throws ParseException {
  PartNameExact it = null;
  PartName _partname;
    it=new PartNameExact();
    _partname = _PartName();
                          it.set_partname(_partname);
    common_PartNameGlob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public AnyPart _AnyPart() throws ParseException {
  AnyPart it = null;
    it=new AnyPart();
    jj_consume_token(23);
    common_PartNameGlob(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassGlobSpec _ClassGlobSpec() throws ParseException {
  ClassGlobSpec it = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 23:
    case IDENTIFIER:
      it = _OneClassGlob();
      break;
    case 6:
      it = _ClassGlobSet();
      break;
    default:
      jj_la1[27] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public void common_ClassGlobSpec(ClassGlobSpec it) throws ParseException {

  }

  final public OneClassGlob _OneClassGlob() throws ParseException {
  OneClassGlob it = null;
  ClassGlob _classglob;
    it=new OneClassGlob();
    _classglob = _ClassGlob();
                            it.set_classglob(_classglob);
    common_ClassGlobSpec(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassGlobSet _ClassGlobSet() throws ParseException {
  ClassGlobSet it = null;
  ClassGlob_Commalist _globs;
    it=new ClassGlobSet();
    jj_consume_token(6);
    _globs = _ClassGlob_Commalist();
                                       it.set_globs(_globs);
    jj_consume_token(7);
    common_ClassGlobSpec(it);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassName _ClassName() throws ParseException {
  ClassName it = null;
  Name _name;
    it=new ClassName();
    _name = _Name();
                  it.set_name(_name);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public PartName _PartName() throws ParseException {
  PartName it = null;
  Ident _name;
    it=new PartName();
    _name = _Ident();
                   it.set_name(_name);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Name _Name() throws ParseException {
  Name it = null;
  Nonempty_Name _first;
    it=new Name();
    _first = _Nonempty_Name();
                            it.set_first(_first);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public DecNodeSetBody_PCList _DecNodeSetBody_PCList() throws ParseException {
  DecNodeSetBody_PCList it = null;
  Nonempty_DecNodeSetBody_PCList _first;
    it=new DecNodeSetBody_PCList();
    jj_consume_token(2);
    _first = _Nonempty_DecNodeSetBody_PCList();
                                                  it.set_first(_first);
    jj_consume_token(4);
         {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassName_BCList _ClassName_BCList() throws ParseException {
  ClassName_BCList it = null;
  Nonempty_ClassName_BCList _first;
    it=new ClassName_BCList();
    jj_consume_token(6);
    _first = _Nonempty_ClassName_BCList();
                                             it.set_first(_first);
    jj_consume_token(7);
         {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Aspect_List _Aspect_List() throws ParseException {
  Aspect_List it = null;
  Nonempty_Aspect_List _first;
    it=new Aspect_List();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 1:
      _first = _Nonempty_Aspect_List();
                                      it.set_first(_first);
      break;
    default:
      jj_la1[28] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public TVDeclaration_List _TVDeclaration_List() throws ParseException {
  TVDeclaration_List it = null;
  Nonempty_TVDeclaration_List _first;
    it=new TVDeclaration_List();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 8:
      _first = _Nonempty_TVDeclaration_List();
                                             it.set_first(_first);
      break;
    default:
      jj_la1[29] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public SGEdge_SList _SGEdge_SList() throws ParseException {
  SGEdge_SList it = null;
  Nonempty_SGEdge_SList _first;
    it=new SGEdge_SList();
    _first = _Nonempty_SGEdge_SList();
                                    it.set_first(_first);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public PathSegment_List _PathSegment_List() throws ParseException {
  PathSegment_List it = null;
  Nonempty_PathSegment_List _first;
    it=new PathSegment_List();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 30:
    case 31:
      _first = _Nonempty_PathSegment_List();
                                           it.set_first(_first);
      break;
    default:
      jj_la1[30] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Strategy_Commalist _Strategy_Commalist() throws ParseException {
  Strategy_Commalist it = null;
  Nonempty_Strategy_Commalist _first;
    it=new Strategy_Commalist();
    _first = _Nonempty_Strategy_Commalist();
                                          it.set_first(_first);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public NameBinding_Commalist _NameBinding_Commalist() throws ParseException {
  NameBinding_Commalist it = null;
  Nonempty_NameBinding_Commalist _first;
    it=new NameBinding_Commalist();
    _first = _Nonempty_NameBinding_Commalist();
                                             it.set_first(_first);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Glob_Commalist _Glob_Commalist() throws ParseException {
  Glob_Commalist it = null;
  Nonempty_Glob_Commalist _first;
    it=new Glob_Commalist();
    _first = _Nonempty_Glob_Commalist();
                                      it.set_first(_first);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public ClassGlob_Commalist _ClassGlob_Commalist() throws ParseException {
  ClassGlob_Commalist it = null;
  Nonempty_ClassGlob_Commalist _first;
    it=new ClassGlob_Commalist();
    _first = _Nonempty_ClassGlob_Commalist();
                                           it.set_first(_first);
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_Name _Nonempty_Name() throws ParseException {
  Nonempty_Name it = null;
  Ident _it;
  Nonempty_Name _next;
    it=new Nonempty_Name();
    _it = _Ident();
                 it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 43:
      jj_consume_token(43);
      _next = _Nonempty_Name();
                                   it.set_next(_next);
      break;
    default:
      jj_la1[31] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_DecNodeSetBody_PCList _Nonempty_DecNodeSetBody_PCList() throws ParseException {
  Nonempty_DecNodeSetBody_PCList it = null;
  DecNodeSetBody _it;
  Nonempty_DecNodeSetBody_PCList _next;
    it=new Nonempty_DecNodeSetBody_PCList();
    _it = _DecNodeSetBody();
                          it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 36:
      jj_consume_token(36);
      _next = _Nonempty_DecNodeSetBody_PCList();
                                                    it.set_next(_next);
      break;
    default:
      jj_la1[32] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_ClassName_BCList _Nonempty_ClassName_BCList() throws ParseException {
  Nonempty_ClassName_BCList it = null;
  ClassName _it;
  Nonempty_ClassName_BCList _next;
    it=new Nonempty_ClassName_BCList();
    _it = _ClassName();
                     it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 36:
      jj_consume_token(36);
      _next = _Nonempty_ClassName_BCList();
                                               it.set_next(_next);
      break;
    default:
      jj_la1[33] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_Aspect_List _Nonempty_Aspect_List() throws ParseException {
  Nonempty_Aspect_List it = null;
  Aspect _it;
  Nonempty_Aspect_List _next;
    it=new Nonempty_Aspect_List();
    _it = _Aspect();
                  it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 1:
      _next = _Nonempty_Aspect_List();
                                     it.set_next(_next);
      break;
    default:
      jj_la1[34] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_TVDeclaration_List _Nonempty_TVDeclaration_List() throws ParseException {
  Nonempty_TVDeclaration_List it = null;
  TVDeclaration _it;
  Nonempty_TVDeclaration_List _next;
    it=new Nonempty_TVDeclaration_List();
    _it = _TVDeclaration();
                         it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 8:
      _next = _Nonempty_TVDeclaration_List();
                                            it.set_next(_next);
      break;
    default:
      jj_la1[35] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_SGEdge_SList _Nonempty_SGEdge_SList() throws ParseException {
  Nonempty_SGEdge_SList it = null;
  SGEdge _it;
  Nonempty_SGEdge_SList _next;
    it=new Nonempty_SGEdge_SList();
    _it = _SGEdge();
                  it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 6:
    case 23:
    case 26:
    case 27:
    case 41:
    case 42:
    case IDENTIFIER:
      _next = _Nonempty_SGEdge_SList();
                                      it.set_next(_next);
      break;
    default:
      jj_la1[36] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_PathSegment_List _Nonempty_PathSegment_List() throws ParseException {
  Nonempty_PathSegment_List it = null;
  PathSegment _it;
  Nonempty_PathSegment_List _next;
    it=new Nonempty_PathSegment_List();
    _it = _PathSegment();
                       it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 30:
    case 31:
      _next = _Nonempty_PathSegment_List();
                                          it.set_next(_next);
      break;
    default:
      jj_la1[37] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_Strategy_Commalist _Nonempty_Strategy_Commalist() throws ParseException {
  Nonempty_Strategy_Commalist it = null;
  Strategy _it;
  Nonempty_Strategy_Commalist _next;
    it=new Nonempty_Strategy_Commalist();
    _it = _Strategy();
                    it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 36:
      jj_consume_token(36);
      _next = _Nonempty_Strategy_Commalist();
                                                 it.set_next(_next);
      break;
    default:
      jj_la1[38] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_NameBinding_Commalist _Nonempty_NameBinding_Commalist() throws ParseException {
  Nonempty_NameBinding_Commalist it = null;
  NameBinding _it;
  Nonempty_NameBinding_Commalist _next;
    it=new Nonempty_NameBinding_Commalist();
    _it = _NameBinding();
                       it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 36:
      jj_consume_token(36);
      _next = _Nonempty_NameBinding_Commalist();
                                                    it.set_next(_next);
      break;
    default:
      jj_la1[39] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_Glob_Commalist _Nonempty_Glob_Commalist() throws ParseException {
  Nonempty_Glob_Commalist it = null;
  Glob _it;
  Nonempty_Glob_Commalist _next;
    it=new Nonempty_Glob_Commalist();
    _it = _Glob();
                it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 36:
      jj_consume_token(36);
      _next = _Nonempty_Glob_Commalist();
                                             it.set_next(_next);
      break;
    default:
      jj_la1[40] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public Nonempty_ClassGlob_Commalist _Nonempty_ClassGlob_Commalist() throws ParseException {
  Nonempty_ClassGlob_Commalist it = null;
  ClassGlob _it;
  Nonempty_ClassGlob_Commalist _next;
    it=new Nonempty_ClassGlob_Commalist();
    _it = _ClassGlob();
                     it.set_it(_it);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 36:
      jj_consume_token(36);
      _next = _Nonempty_ClassGlob_Commalist();
                                                  it.set_next(_next);
      break;
    default:
      jj_la1[41] = jj_gen;
      ;
    }
    {if (true) return it;}
    throw new Error("Missing return statement in function");
  }

  final public boolean _boolean() throws ParseException {
                       Token t;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case TRUE:
      t = jj_consume_token(TRUE);
               {if (true) return true;}
      break;
    case FALSE:
      t = jj_consume_token(FALSE);
                {if (true) return false;}
      break;
    default:
      jj_la1[42] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    throw new Error("Missing return statement in function");
  }

  final public char _char() throws ParseException {
                 Token t;
    t = jj_consume_token(CHARACTER_LITERAL);
       String s = t.image;
       {if (true) return unescapifyChar(s.substring(1, s.length()-1));}
    throw new Error("Missing return statement in function");
  }

  final public byte _byte() throws ParseException {
                 int i;
    i = _int();
             {if (true) return (byte) i;}
    throw new Error("Missing return statement in function");
  }

  final public short _short() throws ParseException {
                   int i;
    i = _int();
             {if (true) return (short) i;}
    throw new Error("Missing return statement in function");
  }

  final public int _int() throws ParseException {
               Number num;
    num = _Number();
                  {if (true) return num.intValue();}
    throw new Error("Missing return statement in function");
  }

  final public long _long() throws ParseException {
                 Number num;
    num = _Number();
                  {if (true) return num.longValue();}
    throw new Error("Missing return statement in function");
  }

  final public float _float() throws ParseException {
                   Number num;
    num = _Number();
                  {if (true) return num.floatValue();}
    throw new Error("Missing return statement in function");
  }

  final public double _double() throws ParseException {
                     Number num;
    num = _Number();
                  {if (true) return num.doubleValue();}
    throw new Error("Missing return statement in function");
  }

  final public Boolean _Boolean() throws ParseException {
                       Token t;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case TRUE:
      t = jj_consume_token(TRUE);
               {if (true) return Boolean.TRUE;}
      break;
    case FALSE:
      t = jj_consume_token(FALSE);
                {if (true) return Boolean.FALSE;}
      break;
    default:
      jj_la1[43] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    throw new Error("Missing return statement in function");
  }

  final public Character _Character() throws ParseException {
                           char c;
    c = _char();
              {if (true) return new Character(c);}
    throw new Error("Missing return statement in function");
  }

  final public Integer _Integer() throws ParseException {
                       int i;
    i = _int();
               {if (true) return new Integer(i);}
    throw new Error("Missing return statement in function");
  }

  final public Long _Long() throws ParseException {
                 long l;
    l = _long();
              {if (true) return new Long(l);}
    throw new Error("Missing return statement in function");
  }

  final public Float _Float() throws ParseException {
                   float f;
    f = _float();
               {if (true) return new Float(f);}
    throw new Error("Missing return statement in function");
  }

  final public Double _Double() throws ParseException {
                     double d;
    d = _double();
                {if (true) return new Double(d);}
    throw new Error("Missing return statement in function");
  }

  final public Number _Number() throws ParseException {
    Token t;
    String s = null;
    int radix = 0;
    Number num = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case DECIMAL_LITERAL:
    case HEX_LITERAL:
    case OCTAL_LITERAL:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case DECIMAL_LITERAL:
        t = jj_consume_token(DECIMAL_LITERAL);
       s = t.image;
       radix = 10;
        break;
      case HEX_LITERAL:
        t = jj_consume_token(HEX_LITERAL);
       // Strip off the "0x". 
       s = t.image.substring(2, t.image.length());
       radix = 16;
        break;
      case OCTAL_LITERAL:
        t = jj_consume_token(OCTAL_LITERAL);
       s = t.image;
       radix = 8;
        break;
      default:
        jj_la1[44] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
       switch (s.charAt(s.length()-1)) {
       case 'l': case 'L':
         s = s.substring(0, s.length()-1);
         num = new Long(new java.math.BigInteger(s, radix).longValue());
         break;
       default:
         num = new Integer(new java.math.BigInteger(s, radix).intValue());
         break;
       }
      break;
    case FLOATING_POINT_LITERAL:
      t = jj_consume_token(FLOATING_POINT_LITERAL);
       s = t.image;
       switch (s.charAt(s.length()-1)) {
       case 'd': case 'D':
           num = Double.valueOf(s.substring(0, s.length()-1));
           break;
       case 'f': case 'F':
           num = Float.valueOf(s.substring(0, s.length()-1));
           break;
       default:
           num = Float.valueOf(s);
           break;
       }
      break;
    default:
      jj_la1[45] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
      {if (true) return num;}
    throw new Error("Missing return statement in function");
  }

  final public String _String() throws ParseException {
                     Token t;
    t = jj_consume_token(STRING_LITERAL);
       String s = t.image;
       {if (true) return unescapify(s.substring(1, s.length()-1));}
    throw new Error("Missing return statement in function");
  }

  final public StringBuffer _StringBuffer() throws ParseException {
                                 String s;
    s = _String();
                {if (true) return new StringBuffer(s);}
    throw new Error("Missing return statement in function");
  }

  final public Ident _Ident() throws ParseException {
                   Token t;
    t = jj_consume_token(IDENTIFIER);
       {if (true) return new Ident(t.image);}
    throw new Error("Missing return statement in function");
  }

  final public Text _Text() throws ParseException {
                 Token t;
    t = jj_consume_token(TEXT_LITERAL);
       String s = t.image;
       {if (true) return new Text(s.substring(2, s.length()-2));}
    throw new Error("Missing return statement in function");
  }

  final public Line _Line() throws ParseException {
                 Token t;
      token_source.SwitchTo(1);
    t = jj_consume_token(LINE);
       {if (true) return new Line(t.image);}
    throw new Error("Missing return statement in function");
  }

  final public Word _Word() throws ParseException {
                 Token t;
      token_source.SwitchTo(2);
    t = jj_consume_token(WORD);
       {if (true) return new Word(t.image);}
    throw new Error("Missing return statement in function");
  }

  public ParserTokenManager token_source;
  JavaCharStream jj_input_stream;
  public Token token, jj_nt;
  private int jj_ntk;
  private int jj_gen;
  final private int[] jj_la1 = new int[46];
  static private int[] jj_la1_0;
  static private int[] jj_la1_1;
  static private int[] jj_la1_2;
  static {
      jj_la1_0();
      jj_la1_1();
      jj_la1_2();
   }
   private static void jj_la1_0() {
      jj_la1_0 = new int[] {0x28,0x18400,0x2800,0x7c0040,0x600040,0x1c0000,0xc0000,0x20000040,0x20000040,0x2000000,0x8000000,0x10000000,0x0,0x0,0x0,0xc0000000,0xc0000000,0x0,0x0,0x0,0x0,0x4800040,0x4800000,0x4800000,0x4000000,0x800000,0x800000,0x800040,0x2,0x100,0xc0000000,0x0,0x0,0x0,0x2,0x100,0xc800040,0xc0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
   }
   private static void jj_la1_1() {
      jj_la1_1 = new int[] {0x0,0x0,0x0,0x10000000,0x10000000,0x0,0x0,0x100000e0,0x0,0x0,0x0,0x0,0x3,0x3,0x3,0x3,0x0,0x3,0xc,0xe0,0x10000000,0x10000600,0x10000600,0x10000600,0x600,0x10000000,0x10000000,0x10000000,0x0,0x0,0x0,0x800,0x10,0x10,0x0,0x0,0x10000600,0x0,0x10,0x10,0x10,0x10,0xc000000,0xc000000,0x1c0000,0x3c0000,};
   }
   private static void jj_la1_2() {
      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
   }

  public Parser(java.io.InputStream stream) {
    jj_input_stream = new JavaCharStream(stream, 1, 1);
    token_source = new ParserTokenManager(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 46; i++) jj_la1[i] = -1;
  }

  public void ReInit(java.io.InputStream stream) {
    jj_input_stream.ReInit(stream, 1, 1);
    token_source.ReInit(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 46; i++) jj_la1[i] = -1;
  }

  public Parser(java.io.Reader stream) {
    jj_input_stream = new JavaCharStream(stream, 1, 1);
    token_source = new ParserTokenManager(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 46; i++) jj_la1[i] = -1;
  }

  public void ReInit(java.io.Reader stream) {
    jj_input_stream.ReInit(stream, 1, 1);
    token_source.ReInit(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 46; i++) jj_la1[i] = -1;
  }

  public Parser(ParserTokenManager tm) {
    token_source = tm;
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 46; i++) jj_la1[i] = -1;
  }

  public void ReInit(ParserTokenManager tm) {
    token_source = tm;
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 46; i++) jj_la1[i] = -1;
  }

  final private Token jj_consume_token(int kind) throws ParseException {
    Token oldToken;
    if ((oldToken = token).next != null) token = token.next;
    else token = token.next = token_source.getNextToken();
    jj_ntk = -1;
    if (token.kind == kind) {
      jj_gen++;
      return token;
    }
    token = oldToken;
    jj_kind = kind;
    throw generateParseException();
  }

  final public Token getNextToken() {
    if (token.next != null) token = token.next;
    else token = token.next = token_source.getNextToken();
    jj_ntk = -1;
    jj_gen++;
    return token;
  }

  final public Token getToken(int index) {
    Token t = token;
    for (int i = 0; i < index; i++) {
      if (t.next != null) t = t.next;
      else t = t.next = token_source.getNextToken();
    }
    return t;
  }

  final private int jj_ntk() {
    if ((jj_nt=token.next) == null)
      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
    else
      return (jj_ntk = jj_nt.kind);
  }

  private java.util.Vector jj_expentries = new java.util.Vector();
  private int[] jj_expentry;
  private int jj_kind = -1;

  public ParseException generateParseException() {
    jj_expentries.removeAllElements();
    boolean[] la1tokens = new boolean[69];
    for (int i = 0; i < 69; i++) {
      la1tokens[i] = false;
    }
    if (jj_kind >= 0) {
      la1tokens[jj_kind] = true;
      jj_kind = -1;
    }
    for (int i = 0; i < 46; i++) {
      if (jj_la1[i] == jj_gen) {
        for (int j = 0; j < 32; j++) {
          if ((jj_la1_0[i] & (1<<j)) != 0) {
            la1tokens[j] = true;
          }
          if ((jj_la1_1[i] & (1<<j)) != 0) {
            la1tokens[32+j] = true;
          }
          if ((jj_la1_2[i] & (1<<j)) != 0) {
            la1tokens[64+j] = true;
          }
        }
      }
    }
    for (int i = 0; i < 69; i++) {
      if (la1tokens[i]) {
        jj_expentry = new int[1];
        jj_expentry[0] = i;
        jj_expentries.addElement(jj_expentry);
      }
    }
    int[][] exptokseq = new int[jj_expentries.size()][];
    for (int i = 0; i < jj_expentries.size(); i++) {
      exptokseq[i] = (int[])jj_expentries.elementAt(i);
    }
    return new ParseException(token, exptokseq, tokenImage);
  }

  final public void enable_tracing() {
  }

  final public void disable_tracing() {
  }

}
