Package anvil.script.parser

Source Code of anvil.script.parser.ParserBase$JJCalls

/*
* $Id: ParserBase.java,v 1.95 2002/09/16 08:05:05 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.script.parser;

  import anvil.core.Any;
  import anvil.core.AnyPattern;
  import anvil.core.ObjectPool;
  import anvil.core.LangModule;
  import anvil.ErrorListener;
  import anvil.Location;
  import anvil.script.ClassType;
  import anvil.script.ClassRef;
  import anvil.script.ConstantVariableType;
  import anvil.script.Context;
  import anvil.script.CompilableFunction;
  import anvil.script.Name;
  import anvil.script.Type;
  import anvil.script.expression.AdditionAssignmentNode;
  import anvil.script.expression.AdditionNode;
  import anvil.script.expression.AndNode;
  import anvil.script.expression.ArrayNode;
  import anvil.script.expression.ArrayComprehensionNode;
  import anvil.script.expression.ComprehensionNode;
  import anvil.script.expression.ListComprehensionNode;
  import anvil.script.expression.AssignmentNode;
  import anvil.script.expression.AttributeNode;
  import anvil.script.expression.BooleanCastNode;
  import anvil.script.expression.CallNode;
  import anvil.script.expression.ChainedComparisonNode;
  import anvil.script.expression.ClassOfNode;
  import anvil.script.expression.CompareNode;
  import anvil.script.expression.ConcatenationAssignmentNode;
  import anvil.script.expression.ConcatenationNode;
  import anvil.script.expression.ConditionalNode;
  import anvil.script.expression.ConstantNode;
  import anvil.script.expression.ConstructorInvokeNode;
  import anvil.script.expression.CopyNode;
  import anvil.script.expression.CloneNode;
  import anvil.script.expression.DefinedNode;
  import anvil.script.expression.DeleteNode;
  import anvil.script.expression.TypeNode;
  import anvil.script.expression.DivisionAssignmentNode;
  import anvil.script.expression.DivisionNode;
  import anvil.script.expression.DynamicCallNode;
  import anvil.script.expression.DynamicInvokeNode;
  import anvil.script.expression.DynamicHasNode;
  import anvil.script.expression.EmptyReferenceNode;
  import anvil.script.expression.EnumerationNode;
  import anvil.script.expression.EqualToNode;
  import anvil.script.expression.ExactCompareNode;
  import anvil.script.expression.ExactEqualToNode;
  import anvil.script.expression.ExactNotEqualToNode;
  import anvil.script.expression.Expression;
  import anvil.script.expression.ExpressionList;
  import anvil.script.expression.MutableExpressionList;
  import anvil.script.expression.FloatCastNode;
  import anvil.script.expression.GreaterThanNode;
  import anvil.script.expression.GreaterThanOrEqualToNode;
  import anvil.script.expression.HasNode;
  import anvil.script.expression.ImportNode;
  import anvil.script.expression.InNode;
  import anvil.script.expression.InitAssignmentNode;
  import anvil.script.expression.IntCastNode;
  import anvil.script.expression.InvokeNode;
  import anvil.script.expression.InlinedFunctionNode;
  import anvil.script.expression.InstanceOfNode;
  import anvil.script.expression.IsNode;
  import anvil.script.expression.LessThanNode;
  import anvil.script.expression.LessThanOrEqualToNode;
  import anvil.script.expression.MappingNode;
  import anvil.script.expression.MatchNode;
  import anvil.script.expression.ModuloAssignmentNode;
  import anvil.script.expression.ModuloNode;
  import anvil.script.expression.MultiplicationAssignmentNode;
  import anvil.script.expression.MultiplicationNode;
  import anvil.script.expression.NamedNode;
  import anvil.script.expression.NewNode;
  import anvil.script.expression.Node;
  import anvil.script.expression.NoMatchNode;
  import anvil.script.expression.NotEqualToNode;
  import anvil.script.expression.OrNode;
  import anvil.script.expression.Parent;
  import anvil.script.expression.PipeNode;
  import anvil.script.expression.PostfixDecrementNode;
  import anvil.script.expression.PostfixIncrementNode;
  import anvil.script.expression.PrefixDecrementNode;
  import anvil.script.expression.PrefixIncrementNode;
  import anvil.script.expression.RangeNode;
  import anvil.script.expression.RefNode;
  import anvil.script.expression.ReferenceNode;
  import anvil.script.expression.SelectNode;
  import anvil.script.expression.SizeOfNode;
  import anvil.script.expression.SpliceNode;
  import anvil.script.expression.StringCastNode;
  import anvil.script.expression.SubtractionAssignmentNode;
  import anvil.script.expression.SubtractionNode;
  import anvil.script.expression.SuperInvokeNode;
  import anvil.script.expression.SymbolNode;
  import anvil.script.expression.ThisNode;
  import anvil.script.expression.TypeOfNode;
  import anvil.script.expression.UnaryMinusNode;
  import anvil.script.expression.UnaryNegateNode;
  import anvil.script.expression.UnaryPlusNode;
  import anvil.script.expression.LinkNode;
  import anvil.script.expression.VariableNode;
  import anvil.script.expression.XorNode;
  import anvil.script.expression.ThunkNode;
  import anvil.script.expression.ForeachNode;
  import anvil.script.InterfaceRef;
  import anvil.script.LocalVariableType;
  import anvil.script.ParameterListDeclaration;
  import anvil.script.Scope;
  import anvil.script.ModuleEnvelope;
  import anvil.script.statements.AssertStatement;
  import anvil.script.statements.BreakStatement;
  import anvil.script.statements.BlockStatement;
  import anvil.script.statements.ImplicitBlockStatement;
  import anvil.script.statements.ExplicitBlockStatement;
  import anvil.script.statements.CatchStatement;
  import anvil.script.statements.ContinueStatement;
  import anvil.script.statements.DoStatement;
  import anvil.script.statements.Case;
  import anvil.script.statements.ClassStatement;
  import anvil.script.statements.ConstructorStatement;
  import anvil.script.statements.DefinitionStatement;
  import anvil.script.statements.FunctionStatement;
  import anvil.script.statements.InterfaceStatement;
  import anvil.script.statements.InterfaceMethodStatement;
  import anvil.script.statements.MethodStatement;
  import anvil.script.statements.ModuleStatement;
  import anvil.script.statements.EvalStatement;
  import anvil.script.statements.ExitStatement;
  import anvil.script.statements.FinallyStatement;
  import anvil.script.statements.ForeachStatement;
  import anvil.script.statements.ForStatement;
  import anvil.script.statements.IfStatement;
  import anvil.script.statements.PrintStatement;
  import anvil.script.statements.ReturnStatement;
  import anvil.script.statements.Statement;
  import anvil.script.statements.SwitchStatement;
  import anvil.script.statements.SynchronizedStatement;
  import anvil.script.statements.ThrowStatement;
  import anvil.script.statements.TryStatement;
  import anvil.script.statements.WhileStatement;
  import anvil.script.statements.YieldStatement;
  import anvil.script.statements.VariableStatement;
  import anvil.script.statements.LocalVariableStatement;
  import anvil.script.statements.ConstantVariableStatement;
  import anvil.script.statements.NamespaceStatement;
  import anvil.script.Grammar;
  import anvil.util.Conversions;
  import java.util.Enumeration;
  import java.util.Stack;
  import java.util.ArrayList;
  import java.util.List;
  import org.apache.oro.text.regex.MalformedPatternException;
  import org.apache.oro.text.regex.Pattern;

  /**
   * class ParserBase
   *
   * @author: Jani Lehtim�ki
   */
  public abstract class ParserBase implements ErrorListener, ParserBaseConstants {

    protected Statement _current = null;
    protected NodeStack _nodes   = new NodeStack();

    public abstract ModuleEnvelope getEnvelope();

    public abstract Location toLocation(Token t);

    public abstract Location toLocation(int line, int column);

    public abstract void error(Location location, Throwable throwable);

    public abstract void error(Location location, String message);

    public abstract int errors();

    public abstract Enumeration getEvents();

    public abstract void merge(ErrorListener listener);


    public void flowPushChild(Statement stmt)
    {
      //System.out.println("||pushchild:"+_current+" --> "+stmt);
      if (_current != null) {
        _current.setChildStatement(stmt);
      }
      _current = stmt;
    }


    public void flowPush(Statement stmt)
    {
      //System.out.println("||push:"+_current+" --> "+stmt);
      _current = stmt;
    }


    public Statement flowPop()
    {
      Statement stmt = _current;
      if (stmt != null) {
        _current = stmt.getParentStatement();
      }
      //System.out.println("||pop:"+stmt+" --> "+_current);
      return stmt;
    }


    public Statement flowPeek()
    {
      return _current;
    }


    protected void push(Node node)
    {
      _nodes.push(node);
    }


    protected Node pop() throws ParseException
    {
      if (!_nodes.empty()) {
        return _nodes.pop();
      } else {
        throw new ParseException("Parser stack empty");
      }
    }


    protected Node peek() throws ParseException
    {
      if (!_nodes.empty()) {
        return _nodes.peek();
      } else {
        throw new ParseException("Parser stack empty");
      }
    }


    public Location getCurrentLocation()
    {
      return toLocation(getToken(1));
    }


    protected TryStatement getEnclosingTryBlock()
    {
      Statement stmt = flowPeek();
      switch(stmt.typeOf()) {
      case Statement.ST_BLOCK:
      case Statement.ST_IMPLICIT_BLOCK:
        {
          TryStatement trystmt;
          BlockStatement block = (BlockStatement)stmt;
          stmt = block.getTail();
          if (stmt != null && stmt.typeOf() == Statement.ST_TRY) {
            trystmt = (TryStatement)stmt;
            if (trystmt.hasFinally()) {
              trystmt = block.replaceWithTry();
            }
          } else {
            trystmt = block.replaceWithTry();
          }
          return trystmt;
        }

      default:
        {
          TryStatement trystmt = new TryStatement(stmt, stmt.getLocation());
          stmt.setChildStatement(trystmt);
          return trystmt;
        }
      }
    }


    protected void onErrorSkip()
    {
      _nodes.clear();
      ParseException e = generateParseException();
      error(toLocation(e.currentToken), e.getMessage());
      Token t;
      do {
        t = getNextToken();
      } while ((t.kind != SEMICOLON) && (t.kind != END) && (t.kind != EOF));
    }

/*
* Module starts here
*/
  final public void Definitions() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IMPORT:
      Import();
      break;
    case NAMESPACE:
      Namespace();
      break;
    case CONST:
      ConstantVariable();
      break;
    case FUNCTION:
    case SYNCHRONIZED:
      Function();
      break;
    case INTERFACE:
      Interface();
      break;
    case CLASS:
      Class();
      break;
    case STATIC:
    case VAR:
      Variable();
      break;
    default:
      jj_la1[0] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
  }

  final public void Module() throws ParseException {
  Token t;
  Token n = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
      t = jj_consume_token(MODULE);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case SYMBOL:
        n = jj_consume_token(SYMBOL);
        break;
      default:
        jj_la1[1] = jj_gen;
        ;
      }
      String name = (n == null) ? "module" : n.image;
      flowPush(new ModuleStatement(getEnvelope(), toLocation(t), name, t.document));
      jj_consume_token(BEGIN);
      label_1:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case NAMESPACE:
        case IMPORT:
        case FUNCTION:
        case SYNCHRONIZED:
        case STATIC:
        case INTERFACE:
        case CLASS:
        case VAR:
        case CONST:
          ;
          break;
        default:
          jj_la1[2] = jj_gen;
          break label_1;
        }
        Definitions();
      }
      jj_consume_token(END);
      break;
    default:
      jj_la1[4] = jj_gen;
      flowPush(new ModuleStatement(getEnvelope(), null, "module", null));
      label_2:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case NAMESPACE:
        case IMPORT:
        case FUNCTION:
        case SYNCHRONIZED:
        case STATIC:
        case INTERFACE:
        case CLASS:
        case VAR:
        case CONST:
          ;
          break;
        default:
          jj_la1[3] = jj_gen;
          break label_2;
        }
        Definitions();
      }
    }
    jj_consume_token(0);
  }

  final public NamespaceStatement NamespacePart(Location location, DefinitionStatement scope) throws ParseException {
  Token t;
    t = jj_consume_token(SYMBOL);
      NamespaceStatement namespace;
      String name = t.image;
      Type declared = scope.lookupDeclaration(name);
      if (declared == null) {
        namespace = new NamespaceStatement(location, scope, t.image, t.document);
        scope.declare(namespace);
      } else if (declared.getType() == Type.NAMESPACE) {
        namespace = (NamespaceStatement)declared;
      } else {
        error(location, "Entity '"+name+"' already declared");
        namespace = new NamespaceStatement(location, scope, t.image, t.document);
      }
      {if (true) return namespace;}
    throw new Error("Missing return statement in function");
  }

  final public void Namespace() throws ParseException {
  Token t;
  Statement stmt = flowPeek();
  DefinitionStatement scope = stmt.getScopeStatement();
    try {
      t = jj_consume_token(NAMESPACE);
        Location location = toLocation(t);
      scope = NamespacePart(location, scope);
      label_3:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case DOT:
          ;
          break;
        default:
          jj_la1[5] = jj_gen;
          break label_3;
        }
        jj_consume_token(DOT);
        scope = NamespacePart(location, scope);
      }
        flowPush(scope);
      jj_consume_token(BEGIN);
      label_4:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case NAMESPACE:
        case IMPORT:
        case FUNCTION:
        case SYNCHRONIZED:
        case STATIC:
        case INTERFACE:
        case CLASS:
        case VAR:
        case CONST:
          ;
          break;
        default:
          jj_la1[6] = jj_gen;
          break label_4;
        }
        Definitions();
      }
      jj_consume_token(END);
    } finally {
    _current = stmt;
    }
  }

  final public Name Name(Name name) throws ParseException {
  Token t;
    if (name == null) {
      name = new Name();
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case SYMBOL:
      t = jj_consume_token(SYMBOL);
      break;
    case MODULE:
      t = jj_consume_token(MODULE);
      break;
    default:
      jj_la1[7] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
      name.add(t);
    label_5:
    while (true) {
      if (jj_2_1(2)) {
        ;
      } else {
        break label_5;
      }
      jj_consume_token(DOT);
      t = jj_consume_token(SYMBOL);
      name.add(t);
    }
    {if (true) return name;}
    throw new Error("Missing return statement in function");
  }

  final public Name[] RequestedDeclarations() throws ParseException {
  Name name;
  Token as = null;
  ArrayList decls = new ArrayList();
    name = Name(null);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case DOT:
    case AS:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case AS:
        jj_consume_token(AS);
        as = jj_consume_token(SYMBOL);
        break;
      case DOT:
        jj_consume_token(DOT);
        jj_consume_token(STAR);
                     name.enableStar();
        break;
      default:
        jj_la1[8] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      break;
    default:
      jj_la1[9] = jj_gen;
      ;
    }
      decls.add(name);
      if (as != null) {
        name.setAs(as.image);
        as = null;
      }
    label_6:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        ;
        break;
      default:
        jj_la1[10] = jj_gen;
        break label_6;
      }
      jj_consume_token(COMMA);
      name = Name(null);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case DOT:
      case AS:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case AS:
          jj_consume_token(AS);
          as = jj_consume_token(SYMBOL);
          break;
        case DOT:
          jj_consume_token(DOT);
          jj_consume_token(STAR);
                       name.enableStar();
          break;
        default:
          jj_la1[11] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
        break;
      default:
        jj_la1[12] = jj_gen;
        ;
      }
      decls.add(name);
      if (as != null) {
        name.setAs(as.image);
        as = null;
      }
    }
    {if (true) return (Name[])decls.toArray(new Name[decls.size()]);}
    throw new Error("Missing return statement in function");
  }

  final public void Import() throws ParseException {
  Token t;
  Token href;
  Token as = null;
  Name entity = null;
  Name[] decls;
  boolean added = false;
    DefinitionStatement scope = flowPeek().getDefinitionStatement();
    try {
      t = jj_consume_token(IMPORT);
      Location location = toLocation(t);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case STRING_LITERAL:
        href = jj_consume_token(STRING_LITERAL);
        String pathinfo = Conversions.unescape(href.image, true);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case AS:
        case COLON:
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case AS:
            jj_consume_token(AS);
            as = jj_consume_token(SYMBOL);
            scope.addHrefImport(this, location, pathinfo, as.image, null, false);
            added = true;
            break;
          case COLON:
            jj_consume_token(COLON);
            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
            case MODULE:
            case SYMBOL:
              decls = RequestedDeclarations();
              scope.addHrefImport(this, location, pathinfo, null, decls, false);
              added = true;
              break;
            case STAR:
              jj_consume_token(STAR);
              scope.addHrefImport(this, location, pathinfo, null, null, true);
              added = true;
              break;
            default:
              jj_la1[13] = jj_gen;
              jj_consume_token(-1);
              throw new ParseException();
            }
            break;
          default:
            jj_la1[14] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
          break;
        default:
          jj_la1[15] = jj_gen;
          ;
        }
        if (!added) {
          scope.addHrefImport(this, location, pathinfo, null, null, false);
        }
        break;
      case MODULE:
      case SYMBOL:
        entity = Name(null);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case DOT:
        case AS:
        case COLON:
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case DOT:
            jj_consume_token(DOT);
            jj_consume_token(STAR);
            scope.addEntityImport(this, location, entity, null, true);
            added = true;
            break;
          case AS:
            jj_consume_token(AS);
            as = jj_consume_token(SYMBOL);
            entity.setAs(as.image);
            scope.addEntityImport(this, location, entity, null, false);
            added = true;
            break;
          case COLON:
            jj_consume_token(COLON);
            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
            case MODULE:
            case SYMBOL:
              decls = RequestedDeclarations();
              scope.addEntityImport(this, location, entity, decls, false);
              added = true;
              break;
            case STAR:
              jj_consume_token(STAR);
              scope.addEntityImport(this, location, entity, null, true);
              added = true;
              break;
            default:
              jj_la1[16] = jj_gen;
              jj_consume_token(-1);
              throw new ParseException();
            }
            break;
          default:
            jj_la1[17] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
          break;
        default:
          jj_la1[18] = jj_gen;
          ;
        }
        if (!added) {
          scope.addEntityImport(this, location, entity, null, false);
        }
        break;
      default:
        jj_la1[19] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      jj_consume_token(SEMICOLON);
    } catch (ParseException e) {
    onErrorSkip();
    }
  }

  final public void FunctionParameterPart(ParameterListDeclaration parameters) throws ParseException {
  Token t = null;
  Token param;
    param = jj_consume_token(SYMBOL);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case ASSIGN:
      t = jj_consume_token(ASSIGN);
      ExpressionStart();
      break;
    default:
      jj_la1[20] = jj_gen;
      ;
    }
      String symbol = param.image;
      Expression defaultexpr = null;
      if (t != null) {
        defaultexpr = new Expression(pop(), toLocation(t));
      } else {
        if (parameters.hasDefaultValues()) {
          error(toLocation(param), "Parameters with default values must appear last");
          defaultexpr = null;
        }
      }
      if (parameters.isDeclared(symbol)) {
        error(toLocation(param), "Entity '"+symbol+"' is already declared");
      }
      parameters.add(symbol, defaultexpr);
  }

  final public void FunctionParameterRest(ParameterListDeclaration parameters) throws ParseException {
  Token param;
    param = jj_consume_token(SYMBOL);
    String symbol = param.image;
    if (parameters.isDeclared(symbol)) {
      error(toLocation(param), "Entity '"+symbol+"' is already declared");
    } else {
      parameters.add(CompilableFunction.PARAMETER_REST, symbol, Any.EMPTY_TUPLE, null);
    }
  }

  final public void TerminalFunctionParameterList(ParameterListDeclaration parameters) throws ParseException {
    FunctionParameterList(parameters);
    jj_consume_token(0);
  }

  final public void FunctionParameterList(ParameterListDeclaration parameters) throws ParseException {
    parameters.open();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case SYMBOL:
    case RANGE:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case SYMBOL:
        FunctionParameterPart(parameters);
        label_7:
        while (true) {
          if (jj_2_2(2)) {
            ;
          } else {
            break label_7;
          }
          jj_consume_token(COMMA);
          FunctionParameterPart(parameters);
        }
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case COMMA:
          jj_consume_token(COMMA);
          jj_consume_token(RANGE);
          FunctionParameterRest(parameters);
          break;
        default:
          jj_la1[21] = jj_gen;
          ;
        }
        break;
      case RANGE:
        jj_consume_token(RANGE);
        FunctionParameterRest(parameters);
        break;
      default:
        jj_la1[22] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      break;
    default:
      jj_la1[23] = jj_gen;
      ;
    }
    parameters.close();
  }

  final public void InterfaceMethod() throws ParseException {
  Token t, s;
  ParameterListDeclaration parameters = new ParameterListDeclaration();
    t = jj_consume_token(FUNCTION);
    s = jj_consume_token(SYMBOL);
    jj_consume_token(OPEN);
    FunctionParameterList(parameters);
    jj_consume_token(CLOSE);
    jj_consume_token(SEMICOLON);
        Location location = toLocation(t);
        String name = s.image;
        InterfaceStatement intrface = flowPeek().getInterfaceStatement();
        InterfaceMethodStatement method = new InterfaceMethodStatement(location, intrface, name, t.document, parameters);
        if (intrface.lookupDeclaration(name) == null) {
          intrface.declare(method);
        } else {
          error(location, "Entity '" + name + "' is already declared");
        }
  }

  final public void ConstructorInvoke() throws ParseException {
  Token t;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case SUPER:
      t = jj_consume_token(SUPER);
      jj_consume_token(OPEN);
      ArgumentList();
      jj_consume_token(CLOSE);
      jj_consume_token(SEMICOLON);
      Location location = toLocation(t);
      flowPushChild(new EvalStatement(flowPeek(), location, new Expression(
          new LinkNode(flowPeek(), location, new Name().add(t), (Parent)pop(),
          LinkNode.SUPER), location)));
      flowPop();
      break;
    default:
      jj_la1[24] = jj_gen;
      ;
    }
  }

  final public void Function() throws ParseException {
  Token r = null;
  Token t;
  Token s;
  ParameterListDeclaration parameters = new ParameterListDeclaration();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case SYNCHRONIZED:
      r = jj_consume_token(SYNCHRONIZED);
      break;
    default:
      jj_la1[25] = jj_gen;
      ;
    }
    t = jj_consume_token(FUNCTION);
    s = jj_consume_token(SYMBOL);
    jj_consume_token(OPEN);
    FunctionParameterList(parameters);
    jj_consume_token(CLOSE);
      boolean is_synchronized = (r != null);
      String name = s.image;
      String document = (r!=null) ? r.document : t.document;

      DefinitionStatement target = flowPeek().getDefinitionStatement();
      DefinitionStatement parent = flowPeek().getScopeStatement();
      FunctionStatement  context = flowPeek().getFunctionStatement();

      FunctionStatement function = new FunctionStatement(toLocation(t), parent, context, is_synchronized, name, document, parameters);
      function.setParentStatement(flowPeek());
      if (target.lookupDeclaration(name) == null) {
        parent.declare(function);
        if (context != null) {
          context.declare(name, function);
        }
      } else {
        error(toLocation(t), "Entity '" + name + "' is already declared");
      }
      flowPush(function);
      flowPush(function.getChildStatement());
    jj_consume_token(BEGIN);
    label_8:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case SEMICOLON:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case SYNCHRONIZED:
      case STATIC:
      case CLASS:
      case VAR:
      case IF:
      case WHILE:
      case TRY:
      case CATCH:
      case FINALLY:
      case THROW:
      case PRINT:
      case HOOK:
      case PRINTLN:
      case PRINTBR:
      case SWITCH:
      case FOR:
      case DO:
      case FOREACH:
      case BREAK:
      case CONTINUE:
      case EXIT:
      case RETURN:
      case YIELD:
      case ASSERT:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ;
        break;
      default:
        jj_la1[26] = jj_gen;
        break label_8;
      }
      if (jj_2_3(2)) {
        Statement();
      } else {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case FUNCTION:
        case SYNCHRONIZED:
          Function();
          break;
        case IMPORT:
          Import();
          break;
        default:
          jj_la1[27] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
    jj_consume_token(END);
      flowPop();
      flowPop();
  }

  final public void Method() throws ParseException {
  boolean is_synchronized = false;
  boolean is_static = false;
  Token t;
  Token s;
  ParameterListDeclaration parameters = new ParameterListDeclaration();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case SYNCHRONIZED:
      t = jj_consume_token(SYNCHRONIZED);
                       is_synchronized = true;
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case STATIC:
        jj_consume_token(STATIC);
                       is_static = true;
        break;
      default:
        jj_la1[28] = jj_gen;
        ;
      }
      jj_consume_token(FUNCTION);
      break;
    case STATIC:
      t = jj_consume_token(STATIC);
                       is_static = true;
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case SYNCHRONIZED:
        jj_consume_token(SYNCHRONIZED);
                       is_synchronized = true;
        break;
      default:
        jj_la1[29] = jj_gen;
        ;
      }
      jj_consume_token(FUNCTION);
      break;
    case FUNCTION:
      t = jj_consume_token(FUNCTION);
      break;
    default:
      jj_la1[30] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    s = jj_consume_token(SYMBOL);
    jj_consume_token(OPEN);
    FunctionParameterList(parameters);
    jj_consume_token(CLOSE);
      boolean is_constructor = false;
      Location location = toLocation(t);
      String document = t.document;
      String name = s.image;

      DefinitionStatement target = flowPeek().getDefinitionStatement();
      ClassStatement      parent = flowPeek().getClassStatement();
      FunctionStatement  context = flowPeek().getFunctionStatement();

      if (context != null) {
        if (context.getType() == Type.FUNCTION) {
          is_static = true;
        }
      }
      if (is_static) {
        if (name.equals(parent.getName())) {
          error(location, "Static methods may not used as constructors");
        }
        FunctionStatement function = new FunctionStatement(location, parent, context, is_synchronized, name, document, parameters);
        function.setParentStatement(flowPeek());
        if (target.lookupDeclaration(name) == null) {
          parent.declare(function);
          if (context != null) {
            context.declare(name, function);
          }
        } else {
          error(location, "Entity '" + name + "' is already declared");
        }
        flowPush(function);
        flowPush(function.getChildStatement());

      } else {
        MethodStatement method;
        if ((context == null) && name.equals(parent.getName())) {
          is_constructor = true;
          method = new ConstructorStatement(location, parent, is_synchronized, name, document, parameters);
          if (parent.getConstructor() != null) {
            error(location, "Constructor is already declared for class '"+parent+"'");
          }
        } else {
          method = new MethodStatement(location, parent, context, is_synchronized, name, document, parameters);
        }
        method.setParentStatement(flowPeek());
        if (target.lookupLocalDeclaration(name) == null) {
          parent.declare(method);
          if (context != null) {
            context.declare(name, method);
          }
        } else {
          error(location, "Entity '" + name + "' is already declared");
        }
        flowPush(method);
        flowPush(method.getChildStatement());

      }
    jj_consume_token(BEGIN);
      if (is_constructor) {
        ConstructorInvoke();
      }
    label_9:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case SEMICOLON:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case SYNCHRONIZED:
      case STATIC:
      case CLASS:
      case VAR:
      case IF:
      case WHILE:
      case TRY:
      case CATCH:
      case FINALLY:
      case THROW:
      case PRINT:
      case HOOK:
      case PRINTLN:
      case PRINTBR:
      case SWITCH:
      case FOR:
      case DO:
      case FOREACH:
      case BREAK:
      case CONTINUE:
      case EXIT:
      case RETURN:
      case YIELD:
      case ASSERT:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ;
        break;
      default:
        jj_la1[31] = jj_gen;
        break label_9;
      }
      if (jj_2_4(2)) {
        Statement();
      } else {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case FUNCTION:
        case SYNCHRONIZED:
        case STATIC:
          Method();
          break;
        case IMPORT:
          Import();
          break;
        default:
          jj_la1[32] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
    jj_consume_token(END);
      flowPop();
      flowPop();
  }

  final public void InlineFunction() throws ParseException {
  Token t;
  ParameterListDeclaration parameters = new ParameterListDeclaration();
    jj_consume_token(BEGIN);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case PIPE:
      t = jj_consume_token(PIPE);
      FunctionParameterList(parameters);
      jj_consume_token(PIPE);
      break;
    case BOOLEAN_OR:
      t = jj_consume_token(BOOLEAN_OR);
        parameters.open();
        parameters.close();
      break;
    default:
      jj_la1[33] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
      Statement stmt = flowPeek();
      DefinitionStatement parent = stmt.getScopeStatement();
      FunctionStatement context  = stmt.getFunctionStatement();
      FunctionStatement function;
      String name = "inline$" + parent.getNextInlined();
      if (parent.typeOf() == Statement.ST_CLASS) {
        function = new MethodStatement(toLocation(t), parent, context, false, name, null, parameters);
      } else {
        function = new FunctionStatement(toLocation(t), parent, context, false, name, null, parameters);
      }
      function.setParentStatement(flowPeek());
      parent.declare(function);
      flowPush(function);
      flowPush(function.getChildStatement());
      push(new InlinedFunctionNode(context, function));
    label_10:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case SEMICOLON:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case SYNCHRONIZED:
      case STATIC:
      case CLASS:
      case VAR:
      case IF:
      case WHILE:
      case TRY:
      case CATCH:
      case FINALLY:
      case THROW:
      case PRINT:
      case HOOK:
      case PRINTLN:
      case PRINTBR:
      case SWITCH:
      case FOR:
      case DO:
      case FOREACH:
      case BREAK:
      case CONTINUE:
      case EXIT:
      case RETURN:
      case YIELD:
      case ASSERT:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ;
        break;
      default:
        jj_la1[34] = jj_gen;
        break label_10;
      }
      Statement();
    }
    jj_consume_token(END);
      flowPop();
      flowPop();
  }

  final public LinkNode EntityReference(Location location) throws ParseException {
  Name name;
    name = Name(null);
    {if (true) return new LinkNode(flowPeek(), location, name);}
    throw new Error("Missing return statement in function");
  }

  final public void InterfaceReference(Location location, List interfaces) throws ParseException {
  LinkNode link;
    link = EntityReference(location);
      interfaces.add(new InterfaceRef(link));
  }

  final public InterfaceRef[] Interfaces(Location location) throws ParseException {
  ArrayList interfaces = new ArrayList();
    InterfaceReference(location, interfaces);
    label_11:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        ;
        break;
      default:
        jj_la1[35] = jj_gen;
        break label_11;
      }
      jj_consume_token(COMMA);
      InterfaceReference(location, interfaces);
    }
      {if (true) return (InterfaceRef [])interfaces.toArray(new InterfaceRef[interfaces.size()]);}
    throw new Error("Missing return statement in function");
  }

  final public void Interface() throws ParseException {
  Token t;
  Token s;
  InterfaceRef[] interfaces = new InterfaceRef[0];
    t = jj_consume_token(INTERFACE);
      Location location = toLocation(t);
    s = jj_consume_token(SYMBOL);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case EXTENDS:
      jj_consume_token(EXTENDS);
      interfaces = Interfaces(location);
      break;
    default:
      jj_la1[36] = jj_gen;
      ;
    }
    jj_consume_token(BEGIN);
      String name = s.image;
      DefinitionStatement parent = flowPeek().getScopeStatement();
      InterfaceStatement decl = new InterfaceStatement(location, parent, name, t.document, interfaces);
      if (parent.lookupDeclaration(name) == null) {
        parent.declare(decl);
      } else {
        error(location, "Entity '"+name+"' is already declared");
      }
      flowPush(decl);
    label_12:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IMPORT:
      case FUNCTION:
      case STATIC:
      case INTERFACE:
      case CONST:
        ;
        break;
      default:
        jj_la1[37] = jj_gen;
        break label_12;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IMPORT:
        Import();
        break;
      case CONST:
        ConstantVariable();
        break;
      case FUNCTION:
        InterfaceMethod();
        break;
      case STATIC:
        jj_consume_token(STATIC);
        Function();
        break;
      case INTERFACE:
        Interface();
        break;
      default:
        jj_la1[38] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
    jj_consume_token(END);
      flowPop();
  }

  final public void Class() throws ParseException {
  Token t;
  Token s;
  ClassRef base = null;
  InterfaceRef[] interfaces = new InterfaceRef[0];
  LinkNode link;
    t = jj_consume_token(CLASS);
    s = jj_consume_token(SYMBOL);
    Location location = toLocation(t);
    String name = s.image;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case EXTENDS:
      jj_consume_token(EXTENDS);
      link = EntityReference(location);
                                               base = new ClassRef(link);
      break;
    default:
      jj_la1[39] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IMPLEMENTS:
      jj_consume_token(IMPLEMENTS);
      interfaces = Interfaces(location);
      break;
    default:
      jj_la1[40] = jj_gen;
      ;
    }
    jj_consume_token(BEGIN);
      DefinitionStatement parent = flowPeek().getDefinitionStatement();
      ClassStatement classtype = new ClassStatement(location, parent, name, t.document, base, interfaces);
      if (parent.lookupDeclaration(name) == null && !parent.isEntityReserved(name)) {
        parent.declare(classtype);
      } else {
        error(location, "Entity '"+name+"' is already declared");
      }
      flowPush(classtype);
    label_13:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IMPORT:
      case FUNCTION:
      case SYNCHRONIZED:
      case STATIC:
      case CLASS:
      case VAR:
      case CONST:
        ;
        break;
      default:
        jj_la1[41] = jj_gen;
        break label_13;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IMPORT:
        Import();
        break;
      case CONST:
        ConstantVariable();
        break;
      case CLASS:
        Class();
        break;
      default:
        jj_la1[42] = jj_gen;
        if (jj_2_5(2)) {
          Variable();
        } else {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case FUNCTION:
          case SYNCHRONIZED:
          case STATIC:
            Method();
            break;
          default:
            jj_la1[43] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
    }
    jj_consume_token(END);
      classtype.finish();
      flowPop();
  }

  final public void Variable() throws ParseException {
  Token t;
  String document = null;
  boolean statik = false;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case STATIC:
      t = jj_consume_token(STATIC);
      document = t.document;
      statik = true;
      break;
    default:
      jj_la1[44] = jj_gen;
      ;
    }
    t = jj_consume_token(VAR);
      if (document == null) {
        document = t.document;
      }
    VariableTypePart(statik, document);
    label_14:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        ;
        break;
      default:
        jj_la1[45] = jj_gen;
        break label_14;
      }
      jj_consume_token(COMMA);
      VariableTypePart(statik, document);
    }
    jj_consume_token(SEMICOLON);
  }

  final public void VariableTypePart(boolean statik, String document) throws ParseException {
  Token symbol;
  Expression expr = null;
    symbol = jj_consume_token(SYMBOL);
      Location location = toLocation(symbol);
      String name = symbol.image;
      DefinitionStatement target = flowPeek().getDefinitionStatement();
      VariableStatement var = null;
      if (target.lookupDeclaration(name) == null && !target.isEntityReserved(name)) {
        var = target.declare(location, name, expr, document, statik);
      } else {
        error(location, "Entity '" + name + "' is already declared");
      }
      if (var != null) {
        flowPush(var);
      }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case ASSIGN:
      jj_consume_token(ASSIGN);
      ValueExpression();
                                 expr = (Expression)pop();
      break;
    default:
      jj_la1[46] = jj_gen;
      ;
    }
      if (var != null) {
        var.setExpression(expr);
        flowPop();
      }
  }

  final public void ConstantVariable() throws ParseException {
  Token keyword;
    keyword = jj_consume_token(CONST);
    ConstantVariablePart(keyword);
    label_15:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        ;
        break;
      default:
        jj_la1[47] = jj_gen;
        break label_15;
      }
      jj_consume_token(COMMA);
      ConstantVariablePart(keyword);
    }
    jj_consume_token(SEMICOLON);
  }

  final public void ConstantVariablePart(Token keyword) throws ParseException {
  Token symbol;
    symbol = jj_consume_token(SYMBOL);
    jj_consume_token(ASSIGN);
      Location location = toLocation(symbol);
      String name = symbol.image;
      DefinitionStatement target = flowPeek().getDefinitionStatement();
      ConstantVariableStatement constant = new ConstantVariableStatement(location, target, name, null, keyword.document);
      if (target.lookupDeclaration(name) == null && !target.isEntityReserved(name)) {
        target.declare(constant);
      } else {
        error(location, "Entity '" + name + "' is already declared");
      }
      flowPush(constant);
    ValueExpression();
      constant.setExpression((Expression)pop());
      flowPop();
  }

/*
* Statement syntax follows.
*/
  final public void StandaloneStatements() throws ParseException {
    label_16:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case SEMICOLON:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case SYNCHRONIZED:
      case STATIC:
      case CLASS:
      case VAR:
      case IF:
      case WHILE:
      case TRY:
      case CATCH:
      case FINALLY:
      case THROW:
      case PRINT:
      case HOOK:
      case PRINTLN:
      case PRINTBR:
      case SWITCH:
      case FOR:
      case DO:
      case FOREACH:
      case BREAK:
      case CONTINUE:
      case EXIT:
      case RETURN:
      case YIELD:
      case ASSERT:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ;
        break;
      default:
        jj_la1[48] = jj_gen;
        break label_16;
      }
      Statement();
    }
    jj_consume_token(0);
  }

  final public void Statement() throws ParseException {
  String label = null;
    Statement current = _current;
    try {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case SEMICOLON:
        EmptyStatement();
        break;
      case PRINT:
      case HOOK:
      case PRINTLN:
      case PRINTBR:
        PrintStatement();
        break;
      case BREAK:
        BreakStatement();
        break;
      case CONTINUE:
        ContinueStatement();
        break;
      case RETURN:
        ReturnStatement();
        break;
      case YIELD:
        YieldStatement();
        break;
      case EXIT:
        ExitStatement();
        break;
      case ASSERT:
        AssertStatement();
        break;
      case TRY:
        TryStatement();
        break;
      case THROW:
        ThrowStatement();
        break;
      case CATCH:
        CatchStatement(null);
        break;
      case FINALLY:
        FinallyStatement(null);
        break;
      case SYNCHRONIZED:
        SynchronizedStatement();
        break;
      case IF:
        IfStatement();
        break;
      case WHILE:
        WhileStatement(null);
        break;
      case FOR:
        ForStatement(null);
        break;
      case DO:
        DoStatement(null);
        break;
      case FOREACH:
        ForeachStatement(null);
        break;
      case SWITCH:
        SwitchStatement(null);
        break;
      default:
        jj_la1[50] = jj_gen;
        if (jj_2_6(2)) {
          label = StatementLabel();
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case WHILE:
            WhileStatement(label);
            break;
          case FOR:
            ForStatement(label);
            break;
          case DO:
            DoStatement(label);
            break;
          case FOREACH:
            ForeachStatement(label);
            break;
          case SWITCH:
            SwitchStatement(label);
            break;
          case BEGIN:
            BlockStatement(label);
            break;
          default:
            jj_la1[49] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        } else if (jj_2_7(2)) {
          BlockStatement(null);
        } else {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case MODULE:
          case SYMBOL:
          case BEGIN:
          case DOT:
          case STAR:
          case IMPORT:
          case STRING_LITERAL:
          case RANGE:
          case FUNCTION:
          case OPEN:
          case SUPER:
          case STATIC:
          case CLASS:
          case VAR:
          case ET:
          case NEGATION:
          case PLUS:
          case MINUS:
          case MINUSMINUS:
          case PLUSPLUS:
          case COPYOF:
          case CLONEOF:
          case TYPEOF:
          case SIZEOF:
          case CLASSOF:
          case BOOLEAN:
          case INT:
          case FLOAT:
          case STRING:
          case DEFINED:
          case UNDEFINED:
          case NULL:
          case OPEN_BRACKET:
          case CARET:
          case DELETE:
          case BEGIN_LIST:
          case NEW:
          case THIS:
          case INTEGER_LITERAL:
          case FLOATING_POINT_LITERAL:
          case INF:
          case FALSE:
          case TRUE:
          case PATTERN:
            ExpressionStatement();
            break;
          default:
            jj_la1[51] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
    } catch (ParseException e) {
    onErrorSkip();
    _current = current;
    }
  }

  final public void StatementModifier(Statement stmt) throws ParseException {
  Token t;
  Expression expr;
  IfStatement ifStmt;
    Statement context = flowPeek();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IF:
      t = jj_consume_token(IF);
      Expression();
      jj_consume_token(SEMICOLON);
      ifStmt = new IfStatement(context, toLocation(t), (Expression)pop());
      ifStmt.setChildStatement(stmt);
      stmt.setParentStatement(ifStmt);
      context.setChildStatement(ifStmt);
      break;
    case WHILE:
      t = jj_consume_token(WHILE);
      Expression();
      jj_consume_token(SEMICOLON);
      WhileStatement whileStmt = new WhileStatement(context, toLocation(t), (Expression)pop(), null);
      whileStmt.setChildStatement(stmt);
      stmt.setParentStatement(whileStmt);
      context.setChildStatement(whileStmt);
      break;
    case SEMICOLON:
      t = jj_consume_token(SEMICOLON);
      context.setChildStatement(stmt);
      break;
    default:
      jj_la1[52] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
  }

  final public void BlockStatement(String label) throws ParseException {
  Token t;
    t = jj_consume_token(BEGIN);
      Statement context = flowPeek();
      if (label != null) {
        flowPushChild(new ExplicitBlockStatement(context, toLocation(t), label));
      } else {
        flowPushChild(new ImplicitBlockStatement(context, toLocation(t)));
      }
    label_17:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case SEMICOLON:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case SYNCHRONIZED:
      case STATIC:
      case CLASS:
      case VAR:
      case IF:
      case WHILE:
      case TRY:
      case CATCH:
      case FINALLY:
      case THROW:
      case PRINT:
      case HOOK:
      case PRINTLN:
      case PRINTBR:
      case SWITCH:
      case FOR:
      case DO:
      case FOREACH:
      case BREAK:
      case CONTINUE:
      case EXIT:
      case RETURN:
      case YIELD:
      case ASSERT:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ;
        break;
      default:
        jj_la1[53] = jj_gen;
        break label_17;
      }
      Statement();
    }
    jj_consume_token(END);
      flowPop();
  }

  final public void TryStatement() throws ParseException {
  Token t;
    t = jj_consume_token(TRY);
      TryStatement trystmt = new TryStatement(flowPeek(), toLocation(t));
      flowPushChild(trystmt);
    Statement();
    label_18:
    while (true) {
      if (jj_2_8(2147483647)) {
        ;
      } else {
        break label_18;
      }
      CatchStatement(trystmt);
    }
    if (jj_2_9(2147483647)) {
      FinallyStatement(trystmt);
    } else {
      ;
    }
      flowPop();
  }

  final public void ThrowStatement() throws ParseException {
  Token t;
  Statement stmt;
    t = jj_consume_token(THROW);
    ListExpression();
    stmt = new ThrowStatement(flowPeek(), toLocation(t), (Expression)pop());
    StatementModifier(stmt);
  }

  final public void CatchStatement(TryStatement trystmt) throws ParseException {
  Token t;
  Token param;
  int count = 0;
    t = jj_consume_token(CATCH);
    jj_consume_token(OPEN);
    AssignableExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case COLON:
      jj_consume_token(COLON);
      Expression();
                               count++;
      label_19:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case COMMA:
          ;
          break;
        default:
          jj_la1[54] = jj_gen;
          break label_19;
        }
        jj_consume_token(COMMA);
        Expression();
                               count++;
      }
      break;
    default:
      jj_la1[55] = jj_gen;
      ;
    }
    jj_consume_token(CLOSE);
      ExpressionList types = null;
      if (count > 0) {
        types = new ExpressionList(count);
        for(count--; count>=0; count--) {
          types.setChild(count, ((Expression)pop()).getChild(0));
        }
      }
      Location location = toLocation(t);
      Expression assignment = (Expression)pop();
      Statement context = (trystmt != null) ? trystmt : flowPeek();
      if (trystmt == null) {
        trystmt = getEnclosingTryBlock();
      }
      CatchStatement catchstmt = new CatchStatement(trystmt, location, assignment, types);
      trystmt.addCatch(catchstmt);
      flowPush(catchstmt);
    Statement();
      flowPush(context);
  }

  final public void FinallyStatement(TryStatement trystmt) throws ParseException {
  Token t;
  Token param;
    t = jj_consume_token(FINALLY);
      Location location = toLocation(t);
      Statement context = (trystmt != null) ? trystmt : flowPeek();
      if (trystmt == null) {
        trystmt = getEnclosingTryBlock();
      }
      FinallyStatement finallystmt = new FinallyStatement(trystmt, toLocation(t));
      trystmt.setFinally(finallystmt);
      flowPush(finallystmt);
    Statement();
      flowPush(context);
  }

  final public void SynchronizedStatement() throws ParseException {
  Token t;
    t = jj_consume_token(SYNCHRONIZED);
    jj_consume_token(OPEN);
    Expression();
    jj_consume_token(CLOSE);
      flowPushChild(new SynchronizedStatement(
        flowPeek(), toLocation(t), (Expression)pop()));
    Statement();
      flowPop();
  }

  final public void ExpressionStatement() throws ParseException {
  Statement stmt;
    Expression();
    Expression expr = (Expression)pop();
    stmt = new EvalStatement(flowPeek(), expr.getLocation(), expr);
    StatementModifier(stmt);
  }

  final public void EmptyStatement() throws ParseException {
    jj_consume_token(SEMICOLON);
  }

  final public Expression[] PrintValueList(Expression suffix) throws ParseException {
  ArrayList list = new ArrayList();
  Token t;
    ValueExpression();
      list.add((Expression)pop());
    label_20:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        ;
        break;
      default:
        jj_la1[56] = jj_gen;
        break label_20;
      }
      t = jj_consume_token(COMMA);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        jj_consume_token(COMMA);
          StringBuffer spaces = new StringBuffer(" ");
        label_21:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case COMMA:
            ;
            break;
          default:
            jj_la1[57] = jj_gen;
            break label_21;
          }
          jj_consume_token(COMMA);
            spaces.append(' ');
        }
          list.add(new Expression(new ConstantNode(spaces.toString()), toLocation(t)));
        break;
      default:
        jj_la1[58] = jj_gen;
        ;
      }
      ValueExpression();
        list.add((Expression)pop());
    }
    if (suffix != null) {
      list.add(suffix);
    }
    {if (true) return (Expression[]) list.toArray(new Expression[list.size()]);}
    throw new Error("Missing return statement in function");
  }

  final public void PrintStatement() throws ParseException {
  Token t;
  Expression[] list = null;
  Statement stmt;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case PRINT:
      t = jj_consume_token(PRINT);
      list = PrintValueList(null);
      stmt = new PrintStatement(flowPeek(), toLocation(t), list, false);
      break;
    case HOOK:
      t = jj_consume_token(HOOK);
      list = PrintValueList(null);
      stmt = new PrintStatement(flowPeek(), toLocation(t), list, false);
      break;
    case PRINTLN:
      t = jj_consume_token(PRINTLN);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        list = PrintValueList(null);
        break;
      default:
        jj_la1[59] = jj_gen;
        ;
      }
      if (list == null) {
        list = new Expression[0];
      }
      stmt = new PrintStatement(flowPeek(), toLocation(t), list, true);
      break;
    case PRINTBR:
      t = jj_consume_token(PRINTBR);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        list = PrintValueList(new Expression(new ConstantNode("<br>\n"), null));
        break;
      default:
        jj_la1[60] = jj_gen;
        ;
      }
      if (list == null) {
        list = new Expression[0];
      }
      stmt = new PrintStatement(flowPeek(), toLocation(t), list, false);
      break;
    default:
      jj_la1[61] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    StatementModifier(stmt);
  }

  final public void IfStatement() throws ParseException {
  Token t;
  IfStatement stmt;
    t = jj_consume_token(IF);
    jj_consume_token(OPEN);
    Expression();
    jj_consume_token(CLOSE);
      stmt = new IfStatement(flowPeek(), toLocation(t), (Expression)pop());
      flowPushChild(stmt);
    Statement();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case ELSE:
      jj_consume_token(ELSE);
      stmt.onElse();
      Statement();
      break;
    default:
      jj_la1[62] = jj_gen;
      ;
    }
    flowPop();
  }

  final public String StatementLabel() throws ParseException {
  Token t;
    t = jj_consume_token(SYMBOL);
    jj_consume_token(COLON);
      String label = t.image;
      if (flowPeek().allowLabel(label)) {
        error(toLocation(t), "Label '" + label + "' is already declared");
        label = null;
      }
      {if (true) return label;}
    throw new Error("Missing return statement in function");
  }

  final public void SwitchStatement(String label) throws ParseException {
  Token t;
  Case caze;
  SwitchStatement stmt;
    t = jj_consume_token(SWITCH);
    jj_consume_token(OPEN);
    Expression();
    jj_consume_token(CLOSE);
    jj_consume_token(BEGIN);
      stmt = new SwitchStatement(flowPeek(), toLocation(t), (Expression)pop(), label);
      flowPushChild(stmt);
    label_22:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case CASE:
      case _DEFAULT:
        ;
        break;
      default:
        jj_la1[63] = jj_gen;
        break label_22;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case CASE:
        t = jj_consume_token(CASE);
        ValueExpression();
          caze = stmt.onCase(this, (Expression)pop());
        label_23:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case COMMA:
            ;
            break;
          default:
            jj_la1[64] = jj_gen;
            break label_23;
          }
          jj_consume_token(COMMA);
          ValueExpression();
          caze = stmt.onCase(this, (Expression)pop());
        }
        flowPush(caze.getBlock());
        jj_consume_token(COLON);
        label_24:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case MODULE:
          case SYMBOL:
          case BEGIN:
          case DOT:
          case STAR:
          case IMPORT:
          case STRING_LITERAL:
          case SEMICOLON:
          case RANGE:
          case FUNCTION:
          case OPEN:
          case SUPER:
          case SYNCHRONIZED:
          case STATIC:
          case CLASS:
          case VAR:
          case IF:
          case WHILE:
          case TRY:
          case CATCH:
          case FINALLY:
          case THROW:
          case PRINT:
          case HOOK:
          case PRINTLN:
          case PRINTBR:
          case SWITCH:
          case FOR:
          case DO:
          case FOREACH:
          case BREAK:
          case CONTINUE:
          case EXIT:
          case RETURN:
          case YIELD:
          case ASSERT:
          case ET:
          case NEGATION:
          case PLUS:
          case MINUS:
          case MINUSMINUS:
          case PLUSPLUS:
          case COPYOF:
          case CLONEOF:
          case TYPEOF:
          case SIZEOF:
          case CLASSOF:
          case BOOLEAN:
          case INT:
          case FLOAT:
          case STRING:
          case DEFINED:
          case UNDEFINED:
          case NULL:
          case OPEN_BRACKET:
          case CARET:
          case DELETE:
          case BEGIN_LIST:
          case NEW:
          case THIS:
          case INTEGER_LITERAL:
          case FLOATING_POINT_LITERAL:
          case INF:
          case FALSE:
          case TRUE:
          case PATTERN:
            ;
            break;
          default:
            jj_la1[65] = jj_gen;
            break label_24;
          }
          Statement();
        }
        flowPop();
        break;
      case _DEFAULT:
        t = jj_consume_token(_DEFAULT);
        jj_consume_token(COLON);
        caze = stmt.onDefault(this, toLocation(t));
        flowPush(caze.getBlock());
        label_25:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case MODULE:
          case SYMBOL:
          case BEGIN:
          case DOT:
          case STAR:
          case IMPORT:
          case STRING_LITERAL:
          case SEMICOLON:
          case RANGE:
          case FUNCTION:
          case OPEN:
          case SUPER:
          case SYNCHRONIZED:
          case STATIC:
          case CLASS:
          case VAR:
          case IF:
          case WHILE:
          case TRY:
          case CATCH:
          case FINALLY:
          case THROW:
          case PRINT:
          case HOOK:
          case PRINTLN:
          case PRINTBR:
          case SWITCH:
          case FOR:
          case DO:
          case FOREACH:
          case BREAK:
          case CONTINUE:
          case EXIT:
          case RETURN:
          case YIELD:
          case ASSERT:
          case ET:
          case NEGATION:
          case PLUS:
          case MINUS:
          case MINUSMINUS:
          case PLUSPLUS:
          case COPYOF:
          case CLONEOF:
          case TYPEOF:
          case SIZEOF:
          case CLASSOF:
          case BOOLEAN:
          case INT:
          case FLOAT:
          case STRING:
          case DEFINED:
          case UNDEFINED:
          case NULL:
          case OPEN_BRACKET:
          case CARET:
          case DELETE:
          case BEGIN_LIST:
          case NEW:
          case THIS:
          case INTEGER_LITERAL:
          case FLOATING_POINT_LITERAL:
          case INF:
          case FALSE:
          case TRUE:
          case PATTERN:
            ;
            break;
          default:
            jj_la1[66] = jj_gen;
            break label_25;
          }
          Statement();
        }
        flowPop();
        break;
      default:
        jj_la1[67] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
    jj_consume_token(END);
      flowPop();
  }

  final public void WhileStatement(String label) throws ParseException {
  Token t;
    t = jj_consume_token(WHILE);
    jj_consume_token(OPEN);
    Expression();
    jj_consume_token(CLOSE);
      flowPushChild(new WhileStatement(flowPeek(), toLocation(t), (Expression)pop(), label));
    Statement();
      flowPop();
  }

  final public void ForAssignmentExpression(Token t) throws ParseException {
    Expression();
  }

  final public Object[] TerminalForExpressionList() throws ParseException {
  Object[] list;
    list = ForExpressionList(null);
    jj_consume_token(0);
    {if (true) return list;}
    throw new Error("Missing return statement in function");
  }

  final public Object[] ForExpressionList(Token t) throws ParseException {
  Expression[] init = null;
  Expression condition = null;
  Expression[] action = null;
  int n;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      n = 0;
      ForAssignmentExpression(t);
                                            n++;
      label_26:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case COMMA:
          ;
          break;
        default:
          jj_la1[68] = jj_gen;
          break label_26;
        }
        t = jj_consume_token(COMMA);
        ForAssignmentExpression(t);
                                             n++;
      }
      init = new Expression[n];
      for(int i = n-1; i>=0; i--) {
        init[i] = (Expression)pop();
      }
      break;
    default:
      jj_la1[69] = jj_gen;
      ;
    }
    jj_consume_token(SEMICOLON);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      Expression();
                   condition = (Expression)pop();
      break;
    default:
      jj_la1[70] = jj_gen;
      ;
    }
    t = jj_consume_token(SEMICOLON);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      n = 0;
      ForAssignmentExpression(t);
                                            n++;
      label_27:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case COMMA:
          ;
          break;
        default:
          jj_la1[71] = jj_gen;
          break label_27;
        }
        t = jj_consume_token(COMMA);
        ForAssignmentExpression(t);
                                             n++;
      }
      action = new Expression[n];
      for(int i = n-1; i>=0; i--) {
        action[i] = (Expression)pop();
      }
      break;
    default:
      jj_la1[72] = jj_gen;
      ;
    }
    {if (true) return new Object[] { init, condition, action };}
    throw new Error("Missing return statement in function");
  }

  final public void ForStatement(String label) throws ParseException {
  Token t;
  Object[] list;
    t = jj_consume_token(FOR);
    jj_consume_token(OPEN);
    list = ForExpressionList(t);
    jj_consume_token(CLOSE);
      flowPushChild(new ForStatement(
        flowPeek(),
        toLocation(t),
        (Expression[])list[0],
        (Expression  )list[1],
        (Expression[])list[2],
        label));
    Statement();
      flowPop();
  }

  final public void DoStatement(String label) throws ParseException {
  Token t;
  DoStatement stmt;
    t = jj_consume_token(DO);
      stmt = new DoStatement(flowPeek(), toLocation(t), label);
      flowPushChild(stmt);
    Statement();
    jj_consume_token(WHILE);
    jj_consume_token(OPEN);
    Expression();
    jj_consume_token(CLOSE);
    jj_consume_token(SEMICOLON);
      stmt.onWhile((Expression)pop());
    flowPop();
  }

  final public void ForeachStatement(String label) throws ParseException {
  ForeachStatement foreach = null;
    foreach = ForeachStatementHeader(flowPeek(), label);
    flowPushChild(foreach);
    Statement();
    flowPop();
  }

  final public Expression[] ForeachExpressions() throws ParseException {
  int count = 0;
    AssignableExpression();
                           count++;
    label_28:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        ;
        break;
      default:
        jj_la1[73] = jj_gen;
        break label_28;
      }
      jj_consume_token(COMMA);
      AssignableExpression();
                                     count++;
    }
    Expression[] list = new Expression[count];
    for(int i=count-1; i>=0; i--) {
      list[i] = (Expression)pop();
    }
    {if (true) return list;}
    throw new Error("Missing return statement in function");
  }

  final public ForeachStatement ForeachStatementHeader(Statement parent, String label) throws ParseException {
  Token t;
  int count = 0;
  boolean third = false;
  Expression[] index = null;
  Expression[] key = null;
  Expression[] value = null;
    t = jj_consume_token(FOREACH);
    jj_consume_token(OPEN);
    if (jj_2_10(2147483647)) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case DOT:
      case FUNCTION:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case THIS:
        index = ForeachExpressions();
        break;
      default:
        jj_la1[74] = jj_gen;
        ;
      }
      jj_consume_token(SEMICOLON);
                                                   count ++;
    } else {
      ;
    }
    if (jj_2_11(2147483647)) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case DOT:
      case FUNCTION:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case THIS:
        key = ForeachExpressions();
        break;
      default:
        jj_la1[75] = jj_gen;
        ;
      }
      jj_consume_token(SEMICOLON);
                                                 count ++;
    } else {
      ;
    }
    if (jj_2_12(2147483647)) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case DOT:
      case FUNCTION:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case THIS:
        value = ForeachExpressions();
        break;
      default:
        jj_la1[76] = jj_gen;
        ;
      }
      jj_consume_token(SEMICOLON);
                                                   count ++;
    } else {
      ;
    }
    Expression();
    jj_consume_token(CLOSE);
      Expression expr = (Expression)pop();
      switch(count) {
      case 1:
        value = index;
        key   = null;
        index = null;
        break;
      case 2:
        if (key != null) {
          value = key;
          key = null;
        }
        if (index != null) {
          key = index;
          index = null;
        }
        break;
      case 3:
      }
      {if (true) return new ForeachStatement(parent, toLocation(t), index, key, value, expr, label);}
    throw new Error("Missing return statement in function");
  }

  final public void BreakStatement() throws ParseException {
  Token t;
  Token s = null;
  Statement stmt;
    t = jj_consume_token(BREAK);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case SYMBOL:
      s = jj_consume_token(SYMBOL);
      break;
    default:
      jj_la1[77] = jj_gen;
      ;
    }
    int depth = 0;
    String label = ((s != null) ? s.image : null);
    if (flowPeek().allowBreak()) {
      if (label != null) {
        if (flowPeek().allowLabel(label)) {
          depth = flowPeek().getLabelDepth(label);
        } else {
          error(toLocation(t), "Label '"+label+"' is not declared");
        }
      }
    } else {
      error(toLocation(t), "Superfluous break, no valid enclosing statements open");
    }
    stmt = new BreakStatement(flowPeek(), toLocation(t), label, depth);
    StatementModifier(stmt);
  }

  final public void ContinueStatement() throws ParseException {
  Token t;
  Token s = null;
  String label = null;
  int target = 0;
  Expression expr = null;
  Statement stmt;
    t = jj_consume_token(CONTINUE);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case SYMBOL:
      s = jj_consume_token(SYMBOL);
                             label = s.image;
      break;
    default:
      jj_la1[78] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case CASE:
    case _DEFAULT:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case CASE:
        jj_consume_token(CASE);
        ValueExpression();
        target = Statement.ST_CASE;
        expr = (Expression)pop();
        break;
      case _DEFAULT:
        jj_consume_token(_DEFAULT);
        target = Statement.ST_DEFAULT;
        break;
      default:
        jj_la1[79] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      break;
    default:
      jj_la1[80] = jj_gen;
      ;
    }
    stmt = flowPeek();
    int depth = 0;
    if ((target == 0) ? stmt.allowContinue() : stmt.allowBreak()) {
      if (label != null) {
        if (stmt.allowLabel(label)) {
          depth = stmt.getLabelDepth(label);
        } else {
          error(toLocation(t), "Label '"+label+"' is not declared");
        }
      }
    } else {
      error(toLocation(t), "Superfluous continue, no valid enclosing statements open");
    }
    stmt = new ContinueStatement(flowPeek(), toLocation(t), label, depth, target, expr);
    StatementModifier(stmt);
  }

  final public void ExitStatement() throws ParseException {
  Token t;
  Expression expr = null;
    t = jj_consume_token(EXIT);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      ListExpression();
      expr = (Expression)pop();
      break;
    default:
      jj_la1[81] = jj_gen;
      ;
    }
    StatementModifier(new ExitStatement(flowPeek(), toLocation(t), expr));
  }

  final public void ReturnStatement() throws ParseException {
  Token t;
  Expression expression = null;
  Statement stmt;
    t = jj_consume_token(RETURN);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      ListExpression();
      expression = (Expression)pop();
      break;
    default:
      jj_la1[82] = jj_gen;
      ;
    }
    if (flowPeek().getFunctionStatement().getType() == Type.CONSTRUCTOR) {
      if (expression != null) {
        error(toLocation(t), "Constructors cannot have return values");
        expression = null;
      }
    } else {
      if (expression == null) {
        expression = Expression.UNDEFINED;
      }
    }
    stmt = new ReturnStatement(flowPeek(), toLocation(t), expression);
    StatementModifier(stmt);
  }

  final public void YieldStatement() throws ParseException {
  Token t;
  Expression expression = null;
  Statement stmt;
    t = jj_consume_token(YIELD);
    ListExpression();
      expression = (Expression)pop();
    if (flowPeek().getFunctionStatement().getType() == Type.CONSTRUCTOR) {
      if (expression != null) {
        error(toLocation(t), "Constructors cannot be generators");
      }
    }
    stmt = new YieldStatement(flowPeek(), toLocation(t), expression);
    StatementModifier(stmt);
  }

  final public void AssertStatement() throws ParseException {
  Token start;
  Token end;
    start = jj_consume_token(ASSERT);
    Expression();
    end = jj_consume_token(SEMICOLON);
    StringBuffer buf = new StringBuffer();
    Token p = start.next;
    while(p != end && p != null) {
      buf.append(p.image);
      p = p.next;
    }
    AssertStatement stmt = new AssertStatement(flowPeek(), toLocation(start), (Expression)pop(), buf.toString());
    flowPushChild(stmt);
    flowPop();
  }

/*
* Expression(s) starts here
*/
  final public void TerminalArgumentList() throws ParseException {
    ArgumentList();
    jj_consume_token(0);
  }

  final public void TerminalValueExpression() throws ParseException {
    ValueExpression();
    jj_consume_token(0);
  }

  final public void TerminalAssignableExpression() throws ParseException {
    AssignableExpression();
    jj_consume_token(0);
  }

  final public void TerminalExpression() throws ParseException {
    Expression();
    jj_consume_token(0);
  }

  final public void TerminalList() throws ParseException {
    List(true, false);
    jj_consume_token(0);
  }

  final public void TerminalAssignmentExpression() throws ParseException {
    AssignmentExpression();
    jj_consume_token(0);
  }

  final public Expression[] TerminalForeachAssignmentExpression() throws ParseException {
  Expression[] exprs;
    exprs = ForeachExpressions();
    jj_consume_token(0);
    {if (true) return exprs;}
    throw new Error("Missing return statement in function");
  }

  final public void Expression() throws ParseException {
    if (jj_2_13(2147483647)) {
      AssignmentExpression();
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ValueExpression();
        break;
      default:
        jj_la1[83] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
  }

  final public void ListExpression() throws ParseException {
  Location loc = getCurrentLocation();
    List(false, false);
    push(new Expression(pop(), loc));
  }

  final public void ValueExpression() throws ParseException {
  Location loc = getCurrentLocation();
    ExpressionStart();
    push(new Expression(pop(), loc));
  }

  final public void AssignmentExpression() throws ParseException {
  int count = 0;
  Token op;
  Token et = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case ET:
      et = jj_consume_token(ET);
      break;
    default:
      jj_la1[84] = jj_gen;
      ;
    }
    Symbol(LinkNode.ASSIGN);
      if (et != null) {
        push(new RefNode(toLocation(et), pop(), true));
      }
      count++;
    label_29:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case COMMA:
        ;
        break;
      default:
        jj_la1[85] = jj_gen;
        break label_29;
      }
      jj_consume_token(COMMA);
      et=null;
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case ET:
        et = jj_consume_token(ET);
        break;
      default:
        jj_la1[86] = jj_gen;
        ;
      }
      Symbol(LinkNode.ASSIGN);
        if (et != null) {
          push(new RefNode(toLocation(et), pop(), true));
        }
        count++;
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case ASSIGN:
      op = jj_consume_token(ASSIGN);
      break;
    case ASSIGN_ADD:
      op = jj_consume_token(ASSIGN_ADD);
      break;
    case ASSIGN_SUBSTRACT:
      op = jj_consume_token(ASSIGN_SUBSTRACT);
      break;
    case ASSIGN_MULTIPLY:
      op = jj_consume_token(ASSIGN_MULTIPLY);
      break;
    case ASSIGN_DIVIDE:
      op = jj_consume_token(ASSIGN_DIVIDE);
      break;
    case ASSIGN_REMAINDER:
      op = jj_consume_token(ASSIGN_REMAINDER);
      break;
    case ASSIGN_CONCAT:
      op = jj_consume_token(ASSIGN_CONCAT);
      break;
    case ASSIGN_INIT:
      op = jj_consume_token(ASSIGN_INIT);
      break;
    default:
      jj_la1[87] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    List(false, false);
    Location location = toLocation(op);
    Parent assignment = null;
    switch(op.kind) {
    case ASSIGN:
      assignment = new AssignmentNode(location, count + 1);
      break;
    case ASSIGN_ADD:
      assignment = new AdditionAssignmentNode(location, count + 1);
      break;
    case ASSIGN_SUBSTRACT:
      assignment = new SubtractionAssignmentNode(location, count + 1);
      break;
    case ASSIGN_MULTIPLY:
      assignment = new MultiplicationAssignmentNode(location, count + 1);
      break;
    case ASSIGN_DIVIDE:
      assignment = new DivisionAssignmentNode(location, count + 1);
      break;
    case ASSIGN_REMAINDER:
      assignment = new ModuloAssignmentNode(location, count + 1);
      break;
    case ASSIGN_CONCAT:
      assignment = new ConcatenationAssignmentNode(location, count + 1);
      break;
    case ASSIGN_INIT:
      assignment = new InitAssignmentNode(location, count + 1);
      break;
    }
    assignment.setChild(count, pop());
    while(count-- > 0) {
      assignment.setChild(count, pop());
    }
    push(new Expression(assignment, location));
  }

  final public void AssignableExpression() throws ParseException {
  Location loc = getCurrentLocation();
    Symbol(LinkNode.ASSIGN);
    push(new Expression(pop(), loc));
  }

  final public void List(boolean forcelist, boolean mutable) throws ParseException {
  int argc = 1;
    Expression();
    label_30:
    while (true) {
      if (jj_2_14(2)) {
        ;
      } else {
        break label_30;
      }
      jj_consume_token(COMMA);
      ExpressionStart();
                                             argc++;
    }
    if (jj_2_15(2)) {
      jj_consume_token(COMMA);
                           forcelist = true;
    } else {
      ;
    }
      if (forcelist || (argc > 1)) {
        if (mutable) {
          MutableExpressionList list = new MutableExpressionList(argc);
          while(argc-- > 0) {
            list.setChild(argc, pop());
          }
          push(list);
        } else {
          ExpressionList list = new ExpressionList(argc);
          while(argc-- > 0) {
            list.setChild(argc, pop());
          }
          push(list);
        }
      }
  }

  final public void ExpressionStart() throws ParseException {
    ForeachExpression();
  }

  final public void ForeachExpression() throws ParseException {
    PipeExpression();
    label_31:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case FOREACH:
        ;
        break;
      default:
        jj_la1[88] = jj_gen;
        break label_31;
      }
      jj_consume_token(FOREACH);
      InlineFunction();
      Node block = pop();
      Node self = pop();
      push(new ForeachNode(self, block));
    }
  }

  final public void PipeExpression() throws ParseException {
    MappingExpression();
    label_32:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case ARROW:
        ;
        break;
      default:
        jj_la1[89] = jj_gen;
        break label_32;
      }
      jj_consume_token(ARROW);
      MappingExpression();
      Node right = pop();
      Node left = pop();
      push(new PipeNode(left, right));
    }
  }

  final public void MappingExpression() throws ParseException {
    ConditionalExpression();
    label_33:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MAP:
        ;
        break;
      default:
        jj_la1[90] = jj_gen;
        break label_33;
      }
      jj_consume_token(MAP);
      ConditionalExpression();
      Node right = pop();
      Node left = pop();
      push(new MappingNode(left, right));
    }
  }

  final public void ConditionalExpression() throws ParseException {
  Node right = ConstantNode.UNDEFINED;
  Node left;
  Node middle;
    RangeExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case HOOK:
    case HOOKHOOK:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case HOOKHOOK:
        jj_consume_token(HOOKHOOK);
        ConditionalExpression();
        right = pop();
        left = pop();
        push(new SelectNode(left, right));
        break;
      case HOOK:
        jj_consume_token(HOOK);
        ConditionalExpression();
        jj_consume_token(COLON);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case MODULE:
        case SYMBOL:
        case BEGIN:
        case DOT:
        case STAR:
        case IMPORT:
        case STRING_LITERAL:
        case RANGE:
        case FUNCTION:
        case OPEN:
        case SUPER:
        case STATIC:
        case CLASS:
        case VAR:
        case ET:
        case NEGATION:
        case PLUS:
        case MINUS:
        case MINUSMINUS:
        case PLUSPLUS:
        case COPYOF:
        case CLONEOF:
        case TYPEOF:
        case SIZEOF:
        case CLASSOF:
        case BOOLEAN:
        case INT:
        case FLOAT:
        case STRING:
        case DEFINED:
        case UNDEFINED:
        case NULL:
        case OPEN_BRACKET:
        case CARET:
        case DELETE:
        case BEGIN_LIST:
        case NEW:
        case THIS:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case INF:
        case FALSE:
        case TRUE:
        case PATTERN:
          ConditionalExpression();
                                  right = pop();
          break;
        default:
          jj_la1[91] = jj_gen;
          ;
        }
        middle  = pop();
        left = pop();
        push(new ConditionalNode(left, middle, right));
        break;
      default:
        jj_la1[92] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      break;
    default:
      jj_la1[93] = jj_gen;
      ;
    }
  }

  final public void RangeExpression() throws ParseException {
  Node right = ConstantNode.INF;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case RANGE:
      jj_consume_token(RANGE);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        LogicalORExpression();
                                     right = pop();
        break;
      default:
        jj_la1[94] = jj_gen;
        ;
      }
     push(new RangeNode(ConstantNode.NEG_INF, right));
      break;
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      LogicalORExpression();
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case RANGE:
        jj_consume_token(RANGE);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case MODULE:
        case SYMBOL:
        case BEGIN:
        case DOT:
        case STAR:
        case IMPORT:
        case STRING_LITERAL:
        case FUNCTION:
        case OPEN:
        case SUPER:
        case STATIC:
        case CLASS:
        case VAR:
        case ET:
        case NEGATION:
        case PLUS:
        case MINUS:
        case MINUSMINUS:
        case PLUSPLUS:
        case COPYOF:
        case CLONEOF:
        case TYPEOF:
        case SIZEOF:
        case CLASSOF:
        case BOOLEAN:
        case INT:
        case FLOAT:
        case STRING:
        case DEFINED:
        case UNDEFINED:
        case NULL:
        case OPEN_BRACKET:
        case CARET:
        case DELETE:
        case BEGIN_LIST:
        case NEW:
        case THIS:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case INF:
        case FALSE:
        case TRUE:
        case PATTERN:
          LogicalORExpression();
                               right = pop();
          break;
        default:
          jj_la1[95] = jj_gen;
          ;
        }
       push(new RangeNode(pop(), right));
        break;
      default:
        jj_la1[96] = jj_gen;
        ;
      }
      break;
    default:
      jj_la1[97] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
  }

  final public void LogicalORExpression() throws ParseException {
    LogicalXORExpression();
    label_34:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case BOOLEAN_OR:
        ;
        break;
      default:
        jj_la1[98] = jj_gen;
        break label_34;
      }
      jj_consume_token(BOOLEAN_OR);
      LogicalXORExpression();
      Node right = pop();
      Node left = pop();
      push(new OrNode(left, right));
    }
  }

  final public void LogicalXORExpression() throws ParseException {
    LogicalANDExpression();
    label_35:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case BOOLEAN_XOR:
        ;
        break;
      default:
        jj_la1[99] = jj_gen;
        break label_35;
      }
      jj_consume_token(BOOLEAN_XOR);
      LogicalANDExpression();
      Node right = pop();
      Node left = pop();
      push(new XorNode(left, right));
    }
  }

  final public void LogicalANDExpression() throws ParseException {
    EqualityExpression();
    label_36:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case BOOLEAN_AND:
        ;
        break;
      default:
        jj_la1[100] = jj_gen;
        break label_36;
      }
      jj_consume_token(BOOLEAN_AND);
      EqualityExpression();
      Node right = pop();
      Node left = pop();
      push(new AndNode(left, right));
    }
  }

  final public void EqualityExpression() throws ParseException {
  Token op;
    RelationalExpression();
    label_37:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case EQUAL:
      case NOT_EQUAL:
      case EXACT_EQUAL:
      case EXACT_NOT_EQUAL:
      case COMPARE:
      case EXACT_COMPARE:
        ;
        break;
      default:
        jj_la1[101] = jj_gen;
        break label_37;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case EQUAL:
        op = jj_consume_token(EQUAL);
        break;
      case NOT_EQUAL:
        op = jj_consume_token(NOT_EQUAL);
        break;
      case EXACT_EQUAL:
        op = jj_consume_token(EXACT_EQUAL);
        break;
      case EXACT_NOT_EQUAL:
        op = jj_consume_token(EXACT_NOT_EQUAL);
        break;
      case COMPARE:
        op = jj_consume_token(COMPARE);
        break;
      case EXACT_COMPARE:
        op = jj_consume_token(EXACT_COMPARE);
        break;
      default:
        jj_la1[102] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      RelationalExpression();
      Node right = pop();
      Node left = pop();
      switch(op.kind) {
      case EQUAL:
        push(new EqualToNode(left, right));
        break;
      case NOT_EQUAL:
        push(new NotEqualToNode(left, right));
        break;
      case EXACT_EQUAL:
        push(new ExactEqualToNode(left, right));
        break;
      case EXACT_NOT_EQUAL:
        push(new ExactNotEqualToNode(left, right));
        break;
      case COMPARE:
        push(new CompareNode(left, right));
        break;
      case EXACT_COMPARE:
        push(new ExactCompareNode(left, right));
        break;
      }
    }
  }

  final public void RelationalExpression() throws ParseException {
  ArrayList ops = null;
  Token op;
    InExpression();
    label_38:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case LESS:
      case GREATER:
      case LESS_OR_EQUAL:
      case GREATER_OR_EQUAL:
        ;
        break;
      default:
        jj_la1[103] = jj_gen;
        break label_38;
      }
      if (ops == null) {
        ops = new ArrayList();
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case LESS:
        op = jj_consume_token(LESS);
        break;
      case GREATER:
        op = jj_consume_token(GREATER);
        break;
      case LESS_OR_EQUAL:
        op = jj_consume_token(LESS_OR_EQUAL);
        break;
      case GREATER_OR_EQUAL:
        op = jj_consume_token(GREATER_OR_EQUAL);
        break;
      default:
        jj_la1[104] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      ops.add(op);
      InExpression();
    }
    if (ops != null) {
      int n = ops.size() + 1;
      if (n > 2) {
        Node[] childs = new Node[n];
        int[] operators = new int[n-1];
        for(int i=n-1; i>=0; i--) {
          childs[i] = pop();
        }
        for(int i=0; i<n-1; i++) {
          operators[i] = ((Token)ops.get(i)).kind;
        }
        push(new ChainedComparisonNode(childs, operators));

      } else {
        Node right = pop();
        Node left = pop();
        switch(((Token)ops.get(0)).kind) {
        case LESS:
          push(new LessThanNode(left, right));
          break;
        case GREATER:
          push(new GreaterThanNode(left, right));
          break;
        case LESS_OR_EQUAL:
          push(new LessThanOrEqualToNode(left, right));
          break;
        case GREATER_OR_EQUAL:
          push(new GreaterThanOrEqualToNode(left, right));
          break;
        }
      }
    }
  }

  final public void InExpression() throws ParseException {
  Token op;
  Token neg = null;
    AdditiveExpression();
    label_39:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case NEGATION:
      case IN:
        ;
        break;
      default:
        jj_la1[105] = jj_gen;
        break label_39;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case NEGATION:
        neg = jj_consume_token(NEGATION);
        break;
      default:
        jj_la1[106] = jj_gen;
        ;
      }
      op = jj_consume_token(IN);
      AdditiveExpression();
      Node right = pop();
      Node left = pop();
      if (neg != null) {
        push(new UnaryNegateNode(new InNode(left, right)));
      } else {
        push(new InNode(left, right));
      }
    }
  }

  final public void AdditiveExpression() throws ParseException {
  Token op;
    MultiplicativeExpression();
    label_40:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case ET:
      case PLUS:
      case MINUS:
        ;
        break;
      default:
        jj_la1[107] = jj_gen;
        break label_40;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case PLUS:
        op = jj_consume_token(PLUS);
        break;
      case MINUS:
        op = jj_consume_token(MINUS);
        break;
      case ET:
        op = jj_consume_token(ET);
        break;
      default:
        jj_la1[108] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      MultiplicativeExpression();
      Node right = pop();
      Node left = pop();
      switch(op.kind) {
      case PLUS:
        push(new AdditionNode(left, right));
        break;
      case MINUS:
        push(new SubtractionNode(left, right));
        break;
      case ET:
        push(new ConcatenationNode(left, right));
        break;
      }
    }
  }

  final public void MultiplicativeExpression() throws ParseException {
  Token op;
    MatchExpression();
    label_41:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case STAR:
      case SLASH:
      case REMAINDER:
        ;
        break;
      default:
        jj_la1[109] = jj_gen;
        break label_41;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case STAR:
        op = jj_consume_token(STAR);
        break;
      case SLASH:
        op = jj_consume_token(SLASH);
        break;
      case REMAINDER:
        op = jj_consume_token(REMAINDER);
        break;
      default:
        jj_la1[110] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      MatchExpression();
      Node right = pop();
      Node left = pop();
      switch(op.kind) {
      case STAR:
        push(new MultiplicationNode(left, right));
        break;
      case SLASH:
        push(new DivisionNode(left, right));
        break;
      case REMAINDER:
        push(new ModuloNode(left, right));
        break;
      }
    }
  }

  final public void MatchExpression() throws ParseException {
  Token op;
    UnaryExpression();
    label_42:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MATCH:
      case NO_MATCH:
        ;
        break;
      default:
        jj_la1[111] = jj_gen;
        break label_42;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MATCH:
        op = jj_consume_token(MATCH);
        break;
      case NO_MATCH:
        op = jj_consume_token(NO_MATCH);
        break;
      default:
        jj_la1[112] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      UnaryExpression();
      Node right = pop();
      Node left = pop();
      switch(op.kind) {
      case MATCH:
        push(new MatchNode(left, right));
        break;
      case NO_MATCH:
        push(new NoMatchNode(left, right));
        break;
      }
    }
  }

  final public void UnaryExpression() throws ParseException {
  Token op;
  Token t;
  Node child;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case NEGATION:
      jj_consume_token(NEGATION);
      UnaryExpression();
      push(new UnaryNegateNode(pop()));
      break;
    case PLUS:
      jj_consume_token(PLUS);
      UnaryExpression();
      push(new UnaryPlusNode(pop()));
      break;
    case MINUS:
      jj_consume_token(MINUS);
      UnaryExpression();
      String image = null;
      child = pop();
      if (child.typeOf() == Node.EXPR_CONSTANT) {
        image = ((ConstantNode)child).getImage();
      }
      if (image == null) {
        push(new UnaryMinusNode(child));
      } else {
        image = "-" + image;
        push(new ConstantNode(image, Conversions.parseNumber(image)));
      }
      break;
    case STAR:
      op = jj_consume_token(STAR);
      UnaryExpression();
      push(new EnumerationNode(pop()));
      break;
    case MINUSMINUS:
      op = jj_consume_token(MINUSMINUS);
      UnaryExpression();
      push(new PrefixDecrementNode(toLocation(op), pop()));
      break;
    case PLUSPLUS:
      op = jj_consume_token(PLUSPLUS);
      UnaryExpression();
      push(new PrefixIncrementNode(toLocation(op), pop()));
      break;
    case COPYOF:
      jj_consume_token(COPYOF);
      UnaryExpression();
      push(new CopyNode(pop()));
      break;
    case CLONEOF:
      jj_consume_token(CLONEOF);
      UnaryExpression();
      push(new CloneNode(pop()));
      break;
    case TYPEOF:
      jj_consume_token(TYPEOF);
      UnaryExpression();
      push(new TypeOfNode(pop()));
      break;
    case SIZEOF:
      jj_consume_token(SIZEOF);
      UnaryExpression();
      push(new SizeOfNode(pop()));
      break;
    case CLASSOF:
      jj_consume_token(CLASSOF);
      UnaryExpression();
      push(new ClassOfNode(pop()));
      break;
    default:
      jj_la1[114] = jj_gen;
      if (jj_2_16(2)) {
        jj_consume_token(OPEN);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case BOOLEAN:
          op = jj_consume_token(BOOLEAN);
          break;
        case INT:
          op = jj_consume_token(INT);
          break;
        case FLOAT:
          op = jj_consume_token(FLOAT);
          break;
        case STRING:
          op = jj_consume_token(STRING);
          break;
        default:
          jj_la1[113] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
        jj_consume_token(CLOSE);
        UnaryExpression();
      switch(op.kind) {
      case BOOLEAN:
        push(new BooleanCastNode(pop()));
        break;
      case INT:
        push(new IntCastNode(pop()));
        break;
      case FLOAT:
        push(new FloatCastNode(pop()));
        break;
      case STRING:
        push(new StringCastNode(pop()));
        break;
      }
      } else {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case MODULE:
        case SYMBOL:
        case BEGIN:
        case DOT:
        case IMPORT:
        case STRING_LITERAL:
        case FUNCTION:
        case OPEN:
        case SUPER:
        case STATIC:
        case CLASS:
        case VAR:
        case ET:
        case BOOLEAN:
        case INT:
        case FLOAT:
        case STRING:
        case DEFINED:
        case UNDEFINED:
        case NULL:
        case OPEN_BRACKET:
        case CARET:
        case DELETE:
        case BEGIN_LIST:
        case NEW:
        case THIS:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case INF:
        case FALSE:
        case TRUE:
        case PATTERN:
          UnaryPostfixExpression();
          break;
        default:
          jj_la1[115] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
  }

  final public void UnaryPostfixExpression() throws ParseException {
  Token op;
  Node child;
    IsExpression();
    label_43:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MINUSMINUS:
      case PLUSPLUS:
        ;
        break;
      default:
        jj_la1[116] = jj_gen;
        break label_43;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case PLUSPLUS:
        op = jj_consume_token(PLUSPLUS);
      push(new PostfixIncrementNode(toLocation(op), pop()));
        break;
      case MINUSMINUS:
        op = jj_consume_token(MINUSMINUS);
      push(new PostfixDecrementNode(toLocation(op), pop()));
        break;
      default:
        jj_la1[117] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
  }

  final public void IsExpression() throws ParseException {
  Token t;
  Name name;
  boolean not = false;
    LazyExpression();
    label_44:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IS:
      case HAS:
        ;
        break;
      default:
        jj_la1[118] = jj_gen;
        break label_44;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IS:
        t = jj_consume_token(IS);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case NEGATION:
          jj_consume_token(NEGATION);
                   not = true;
          break;
        default:
          jj_la1[119] = jj_gen;
          ;
        }
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case DEFINED:
          jj_consume_token(DEFINED);
        push(new IsNode(pop(), IsNode.IS_DEFINED));
          break;
        case UNDEFINED:
          jj_consume_token(UNDEFINED);
        push(new IsNode(pop(), IsNode.IS_UNDEFINED));
          break;
        case NULL:
          jj_consume_token(NULL);
        push(new IsNode(pop(), Any.IS_NULL));
          break;
        case BOOLEAN:
          jj_consume_token(BOOLEAN);
        push(new IsNode(pop(), Any.IS_BOOLEAN));
          break;
        case INT:
          jj_consume_token(INT);
        push(new IsNode(pop(), Any.IS_INT));
          break;
        case FLOAT:
          jj_consume_token(FLOAT);
        push(new IsNode(pop(), Any.IS_DOUBLE));
          break;
        case STRING:
          jj_consume_token(STRING);
        push(new IsNode(pop(), Any.IS_STRING));
          break;
        case RANGE:
          jj_consume_token(RANGE);
        push(new IsNode(pop(), Any.IS_RANGE));
          break;
        case MAP:
          jj_consume_token(MAP);
        push(new IsNode(pop(), Any.IS_MAP));
          break;
        case OPEN:
          jj_consume_token(OPEN);
          jj_consume_token(CLOSE);
        push(new IsNode(pop(), Any.IS_TUPLE));
          break;
        case BEGIN:
          jj_consume_token(BEGIN);
          jj_consume_token(END);
        push(new IsNode(pop(), Any.IS_LIST));
          break;
        case OPEN_BRACKET:
          jj_consume_token(OPEN_BRACKET);
          jj_consume_token(CLOSE_BRACKET);
        push(new IsNode(pop(), Any.IS_ARRAY));
          break;
        case CLASS:
          jj_consume_token(CLASS);
        push(new IsNode(pop(), Any.IS_CLASS));
          break;
        case ET:
          jj_consume_token(ET);
        push(new IsNode(pop(), Any.IS_REF));
          break;
        case MODULE:
        case SYMBOL:
          name = Name(null);
        Location location = toLocation(t);
        LinkNode link = new LinkNode(flowPeek(), location, name, null, LinkNode.GET);
        push(new InstanceOfNode(pop(), link, location));
          break;
        default:
          jj_la1[120] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      if (not) {
        push(new UnaryNegateNode(pop()));
        not = false;
      }
        break;
      case HAS:
        jj_consume_token(HAS);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case NEGATION:
          jj_consume_token(NEGATION);
                   not = true;
          break;
        default:
          jj_la1[121] = jj_gen;
          ;
        }
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case SYMBOL:
          t = jj_consume_token(SYMBOL);
        push(new HasNode(pop(), t.image));
          break;
        case OPEN:
          jj_consume_token(OPEN);
          ExpressionStart();
          jj_consume_token(CLOSE);
        Node right = pop();
        Node left = pop();
        push(new DynamicHasNode(left, right));
          break;
        default:
          jj_la1[122] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      if (not) {
        push(new UnaryNegateNode(pop()));
        not = false;
      }
        break;
      default:
        jj_la1[123] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
  }

  final public void LazyExpression() throws ParseException {
  Token op = null;
  Location location = null;
  FunctionStatement thunk = null;
  FunctionStatement context = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case CARET:
      op = jj_consume_token(CARET);
      location = toLocation(op);
      Statement stmt = flowPeek();
      DefinitionStatement parent = stmt.getScopeStatement();
      context = stmt.getFunctionStatement();
      String name = "thunk$" + parent.getNextInlined();
      if (parent.typeOf() == Statement.ST_CLASS) {
        thunk = new MethodStatement(location, parent, context, false, name, null, ParameterListDeclaration.EMPTY);
      } else {
        thunk = new FunctionStatement(location, parent, context, false, name, null, ParameterListDeclaration.EMPTY);
      }
      thunk.setParentStatement(flowPeek());
      parent.declare(thunk);
      flowPush(thunk);
      flowPush(thunk.getChildStatement());
      break;
    default:
      jj_la1[124] = jj_gen;
      ;
    }
    PrimaryExpression();
    if (op != null) {
      Expression expr = new Expression(pop(), location);
      EvalStatement evalstmt = new EvalStatement(thunk, location, expr);
      thunk.addChild(evalstmt);
      push(new ThunkNode(context, thunk));
      flowPop();
      flowPop();
    }
  }

  final public void PrimaryExpression() throws ParseException {
  Token op;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case STRING_LITERAL:
    case UNDEFINED:
    case NULL:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      Constant();
      ObjectConstruct(LinkNode.GET);
      break;
    case IMPORT:
      jj_consume_token(IMPORT);
      jj_consume_token(OPEN);
      ExpressionStart();
      jj_consume_token(CLOSE);
      push(new ImportNode(pop()));
      ObjectConstruct(LinkNode.GET);
      break;
    case DEFINED:
      jj_consume_token(DEFINED);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case OPEN:
        jj_consume_token(OPEN);
        Symbol(LinkNode.GET);
        jj_consume_token(CLOSE);
        break;
      case MODULE:
      case SYMBOL:
      case DOT:
      case FUNCTION:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case THIS:
        Symbol(LinkNode.GET);
        break;
      default:
        jj_la1[125] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      push(new DefinedNode(pop()));
      break;
    case DELETE:
      op = jj_consume_token(DELETE);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case OPEN:
        jj_consume_token(OPEN);
        Symbol(LinkNode.GET);
        jj_consume_token(CLOSE);
        break;
      case MODULE:
      case SYMBOL:
      case DOT:
      case FUNCTION:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case THIS:
        Symbol(LinkNode.GET);
        break;
      default:
        jj_la1[126] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      Node child = pop();
      switch (child.typeOf()) {
      case Node.EXPR_VARIABLE:
        error(toLocation(op), "Cannot delete variables");
        break;
      case Node.EXPR_INVOKE:
        error(toLocation(op), "Cannot delete methods");
        break;
      case Node.EXPR_CALL:
        error(toLocation(op), "Cannot delete functions");
        break;
      }
      push(new DeleteNode(child));
      break;
    default:
      jj_la1[128] = jj_gen;
      if (jj_2_17(2)) {
        jj_consume_token(OPEN);
        jj_consume_token(CLOSE);
      push(new ExpressionList(0));
        ObjectConstruct(LinkNode.GET);
      } else {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case OPEN:
          jj_consume_token(OPEN);
          List(false, false);
          jj_consume_token(CLOSE);
          ObjectConstruct(LinkNode.GET);
          break;
        default:
          jj_la1[129] = jj_gen;
          if (jj_2_18(2)) {
            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
            case BEGIN_LIST:
              jj_consume_token(BEGIN_LIST);
              break;
            case BEGIN:
              jj_consume_token(BEGIN);
              break;
            default:
              jj_la1[127] = jj_gen;
              jj_consume_token(-1);
              throw new ParseException();
            }
            jj_consume_token(END);
      push(new MutableExpressionList(0));
            ObjectConstruct(LinkNode.GET);
          } else {
            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
            case OPEN_BRACKET:
              ArrayExpression();
              ObjectConstruct(LinkNode.GET);
              break;
            case NEW:
              NewConstruct();
              ObjectConstruct(LinkNode.GET);
              break;
            default:
              jj_la1[130] = jj_gen;
              if (jj_2_19(2147483647)) {
                InlineFunction();
                ObjectConstruct(LinkNode.GET);
              } else {
                switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
                case BEGIN:
                case BEGIN_LIST:
                  ListConstruct();
                  ObjectConstruct(LinkNode.GET);
                  break;
                case BOOLEAN:
                  jj_consume_token(BOOLEAN);
      push(new TypeNode(anvil.core.AnyBoolean.__class__));
                  ObjectConstruct(LinkNode.GET);
                  break;
                case INT:
                  jj_consume_token(INT);
      push(new TypeNode(anvil.core.AnyInt.__class__));
                  ObjectConstruct(LinkNode.GET);
                  break;
                case FLOAT:
                  jj_consume_token(FLOAT);
      push(new TypeNode(anvil.core.AnyDouble.__class__));
                  ObjectConstruct(LinkNode.GET);
                  break;
                case STRING:
                  jj_consume_token(STRING);
      push(new TypeNode(anvil.core.AnyString.__class__));
                  ObjectConstruct(LinkNode.GET);
                  break;
                case ET:
                  op = jj_consume_token(ET);
                  Symbol(LinkNode.GET);
      push(new RefNode(toLocation(op), pop(), false));
                  break;
                case MODULE:
                case SYMBOL:
                case DOT:
                case FUNCTION:
                case SUPER:
                case STATIC:
                case CLASS:
                case VAR:
                case THIS:
                  Symbol(LinkNode.GET);
                  break;
                default:
                  jj_la1[131] = jj_gen;
                  jj_consume_token(-1);
                  throw new ParseException();
                }
              }
            }
          }
        }
      }
    }
  }

  final public void NewConstruct() throws ParseException {
  Token t;
  Location location;
  Name name = new Name();
    t = jj_consume_token(NEW);
      location = toLocation(t);
      name.add(t);
    Name(name);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case OPEN:
      jj_consume_token(OPEN);
      ArgumentList();
      jj_consume_token(CLOSE);
      break;
    case BEGIN:
      InlineFunction();
                       push(new ExpressionList(pop()));
      break;
    default:
      jj_la1[132] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
      push(new LinkNode(flowPeek(), location, name, (Parent)pop(), LinkNode.NEW));
  }

  final public Token DotAndThisOrSymbol() throws ParseException {
  Token t;
    jj_consume_token(DOT);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case THIS:
      t = jj_consume_token(THIS);
      break;
    case SYMBOL:
      t = jj_consume_token(SYMBOL);
      break;
    default:
      jj_la1[133] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    {if (true) return t;}
    throw new Error("Missing return statement in function");
  }

  final public void Symbol(int role) throws ParseException {
  Token t;
  Token var = null;
  Location location;
  Parent args = null;
  Name name = new Name();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case FUNCTION:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case THIS:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case SYMBOL:
      case VAR:
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case VAR:
          var = jj_consume_token(VAR);
          break;
        default:
          jj_la1[134] = jj_gen;
          ;
        }
        t = jj_consume_token(SYMBOL);
        break;
      case MODULE:
        t = jj_consume_token(MODULE);
        break;
      case CLASS:
        t = jj_consume_token(CLASS);
        break;
      case STATIC:
        t = jj_consume_token(STATIC);
        break;
      case THIS:
        t = jj_consume_token(THIS);
        break;
      case SUPER:
        t = jj_consume_token(SUPER);
        break;
      case FUNCTION:
        t = jj_consume_token(FUNCTION);
        break;
      default:
        jj_la1[135] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        location = toLocation(var != null ? var : t);

        if (var != null) {
          Statement stmt = flowPeek();
          if (stmt.isStaticRegion() && stmt.getFunctionStatement() == null) {
            error(location, "Explicit variable declaration modifier 'var' cannot be used in static initialization");
          } else {
            switch(role) {
            case LinkNode.ASSIGN:
            case LinkNode.GET:
            case LinkNode.DECLARE:
              role = LinkNode.DECLARE;
              break;
            default:
              error(location, "Invalid use of explicit variable declaration modifier 'var'");
            }
          }
        }

        name.add(t);
      label_45:
      while (true) {
        if (jj_2_20(2147483647)) {
          ;
        } else {
          break label_45;
        }
        t = DotAndThisOrSymbol();
           name.add(t);
      }
      break;
    case DOT:
      t = jj_consume_token(DOT);
        location = toLocation(t);
        name.add(t);
      t = jj_consume_token(SYMBOL);
        name.add(t);
      label_46:
      while (true) {
        if (jj_2_21(2147483647)) {
          ;
        } else {
          break label_46;
        }
        t = DotAndThisOrSymbol();
        name.add(t);
      }
      break;
    default:
      jj_la1[136] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    if (jj_2_22(2147483647)) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case OPEN:
        jj_consume_token(OPEN);
        ArgumentList();
        jj_consume_token(CLOSE);
        args = (Parent)pop();
        break;
      case BEGIN:
        InlineFunction();
        args = new ExpressionList(pop());
        break;
      default:
        jj_la1[137] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } else {
      ;
    }
    push(new LinkNode(flowPeek(), location, name, args, role));
    ObjectConstruct(role);
  }

  final public void ObjectConstruct(int role) throws ParseException {
  Token t;
  boolean terminated = false;
  boolean isMethod;
  Parent parameters;
    label_47:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case BEGIN:
      case DOT:
      case OPEN:
      case OPEN_BRACKET:
        ;
        break;
      default:
        jj_la1[138] = jj_gen;
        break label_47;
      }
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case OPEN:
        t = jj_consume_token(OPEN);
        ArgumentList();
        jj_consume_token(CLOSE);
        parameters = (Parent)pop();
        if (parameters.hasNamedParameters()) {
          error(toLocation(t), "Named parameters are ignored in anonymous calls");
        }
        push(new DynamicCallNode(pop(), parameters));
        break;
      case BEGIN:
        InlineFunction();
        parameters = new ExpressionList(pop());
        push(new DynamicCallNode(pop(), parameters));
        break;
      case DOT:
        jj_consume_token(DOT);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case OPEN:
          t = jj_consume_token(OPEN);
          ExpressionStart();
          jj_consume_token(CLOSE);
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case OPEN:
            jj_consume_token(OPEN);
            ArgumentList();
            jj_consume_token(CLOSE);
            break;
          case BEGIN:
            InlineFunction();
                           push(new ExpressionList(pop()));
            break;
          default:
            jj_la1[139] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        if (terminated) {
          error(toLocation(t), "Empty brackets terminate variable expression");
        }
        parameters = (Parent)pop();
        if (parameters.hasNamedParameters()) {
          error(toLocation(t), "Named parameters are ignored in anonymous invokes");
        }
        Node method = pop();
        Node self = pop();
        push(new DynamicInvokeNode(self, method, parameters));
          break;
        case SYMBOL:
          t = jj_consume_token(SYMBOL);
                   isMethod = false;
          if (jj_2_23(2)) {
            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
            case OPEN:
              jj_consume_token(OPEN);
              ArgumentList();
              jj_consume_token(CLOSE);
              break;
            case BEGIN:
              InlineFunction();
                             push(new ExpressionList(pop()));
              break;
            default:
              jj_la1[140] = jj_gen;
              jj_consume_token(-1);
              throw new ParseException();
            }
          isMethod = true;
          } else {
            ;
          }
        if (terminated) {
          error(toLocation(t), "Empty brackets terminate variable expression");
        }
        if (isMethod) {
          parameters = (Parent)pop();
          if (parameters.hasNamedParameters()) {
            error(toLocation(t), "Named parameters are ignored in anonymous invokes");
          }
          push(new InvokeNode(pop(), t.image, parameters));
        } else {
          push(new AttributeNode(pop(), t.image));
        }
          break;
        case CLASS:
          jj_consume_token(CLASS);
        push(new ClassOfNode(pop()));
          break;
        case SIZEOF:
          jj_consume_token(SIZEOF);
        push(new SizeOfNode(pop()));
          break;
        case TYPEOF:
          jj_consume_token(TYPEOF);
        push(new TypeOfNode(pop()));
          break;
        case CLONEOF:
          jj_consume_token(CLONEOF);
        push(new CloneNode(pop()));
          break;
        case COPYOF:
          jj_consume_token(COPYOF);
        push(new CopyNode(pop()));
          break;
        default:
          jj_la1[141] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
        break;
      default:
        jj_la1[142] = jj_gen;
        if (jj_2_24(2)) {
          t = jj_consume_token(OPEN_BRACKET);
          List(false, false);
          jj_consume_token(CLOSE_BRACKET);
      if (terminated) {
        error(toLocation(t), "Empty brackets terminate variable expression");
      }
      Node expression = pop();
      Node self = pop();
      push(new ReferenceNode(self, expression));
        } else {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case OPEN_BRACKET:
            t = jj_consume_token(OPEN_BRACKET);
            jj_consume_token(CLOSE_BRACKET);
      if (role != LinkNode.ASSIGN) {
        error(toLocation(t), "Empty brackets may only be used on assignments");
      }
      terminated = true;
      push(new EmptyReferenceNode(pop()));
            break;
          default:
            jj_la1[143] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
    }
  }

  final public void Comprehension(ComprehensionNode compr, Statement root, Statement parent) throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IF:
      ComprehensionIf(compr, root, parent);
      break;
    case FOREACH:
      ComprehensionForeach(compr, root, parent);
      break;
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      ArrayArgument();
      FunctionStatement function = flowPeek().getFunctionStatement();
      VariableNode var = new VariableNode(function.declare("array$"+root.hashCode()));
      Location location = parent.getLocation();
      AssignmentNode assign = new AssignmentNode(location, 2);
      assign.setChild(0, new EmptyReferenceNode(var));
      assign.setChild(1, pop());
      parent.setChildStatement(new EvalStatement(parent, location,
        new Expression(assign, location)));
      compr.init(root, var);
      break;
    default:
      jj_la1[144] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
  }

  final public void ComprehensionForeach(ComprehensionNode compr, Statement root, Statement parent) throws ParseException {
  Statement stmt = null;
    stmt = ForeachStatementHeader(parent, null);
    parent.setChildStatement(stmt);
    if (root == null) {
      root = stmt;
    }
    Comprehension(compr, root, stmt);
  }

  final public void ComprehensionIf(ComprehensionNode compr, Statement root, Statement parent) throws ParseException {
  Token t;
  Statement stmt = null;
    t = jj_consume_token(IF);
    jj_consume_token(OPEN);
    Expression();
    jj_consume_token(CLOSE);
    stmt = new IfStatement(parent, toLocation(t), (Expression)pop());
    parent.setChildStatement(stmt);
    Comprehension(compr, root, stmt);
  }

  final public void ListConstruct() throws ParseException {
  ComprehensionNode node = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case BEGIN:
      jj_consume_token(BEGIN);
      break;
    case BEGIN_LIST:
      jj_consume_token(BEGIN_LIST);
      break;
    default:
      jj_la1[145] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case FOREACH:
       node = new ListComprehensionNode();
      ComprehensionForeach(node, null, flowPeek());
       push(node);
      break;
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      List(true, true);
      break;
    default:
      jj_la1[146] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    jj_consume_token(END);
  }

  final public void ArrayExpression() throws ParseException {
  Token t;
  int argc = 0;
  ComprehensionNode node = null;
    t = jj_consume_token(OPEN_BRACKET);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case FOREACH:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case FOREACH:
          node = new ArrayComprehensionNode();
        ComprehensionForeach(node, null, flowPeek());
        break;
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ArrayArgument();
                          argc++;
        label_48:
        while (true) {
          if (jj_2_25(2)) {
            ;
          } else {
            break label_48;
          }
          jj_consume_token(COMMA);
          ArrayArgument();
                                                 argc++;
        }
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case COMMA:
          jj_consume_token(COMMA);
          break;
        default:
          jj_la1[147] = jj_gen;
          ;
        }
        break;
      default:
        jj_la1[148] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      break;
    default:
      jj_la1[149] = jj_gen;
      ;
    }
    jj_consume_token(CLOSE_BRACKET);
      if (node != null) {
        push(node);
      } else {
        Parent argv = new ExpressionList(argc);
        for(--argc; argc>=0; argc--) {
          argv.setChild(argc, pop());
        }
        push(new ArrayNode(argv));
      }
  }

  final public void ArrayArgument() throws ParseException {
  Token symbol = null;
    if (jj_2_26(2)) {
      symbol = jj_consume_token(SYMBOL);
      jj_consume_token(ASSIGN);
      ExpressionStart();
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case MODULE:
      case SYMBOL:
      case BEGIN:
      case DOT:
      case STAR:
      case IMPORT:
      case STRING_LITERAL:
      case RANGE:
      case FUNCTION:
      case OPEN:
      case SUPER:
      case STATIC:
      case CLASS:
      case VAR:
      case ET:
      case NEGATION:
      case PLUS:
      case MINUS:
      case MINUSMINUS:
      case PLUSPLUS:
      case COPYOF:
      case CLONEOF:
      case TYPEOF:
      case SIZEOF:
      case CLASSOF:
      case BOOLEAN:
      case INT:
      case FLOAT:
      case STRING:
      case DEFINED:
      case UNDEFINED:
      case NULL:
      case OPEN_BRACKET:
      case CARET:
      case DELETE:
      case BEGIN_LIST:
      case NEW:
      case THIS:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case INF:
      case FALSE:
      case TRUE:
      case PATTERN:
        ExpressionStart();
        break;
      default:
        jj_la1[150] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
    if (symbol != null) {
      push(new MappingNode(new SymbolNode(symbol.image), pop()));
    }
  }

  final public void OneArgument() throws ParseException {
  Token named = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case AT:
      jj_consume_token(AT);
      ExpressionStart();
      push(new SpliceNode(pop()));
      break;
    default:
      jj_la1[151] = jj_gen;
      if (jj_2_27(2)) {
        named = jj_consume_token(SYMBOL);
        jj_consume_token(ASSIGN);
        ExpressionStart();
      push(new NamedNode(pop(), named.image));
      } else {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case MODULE:
        case SYMBOL:
        case BEGIN:
        case DOT:
        case STAR:
        case IMPORT:
        case STRING_LITERAL:
        case RANGE:
        case FUNCTION:
        case OPEN:
        case SUPER:
        case STATIC:
        case CLASS:
        case VAR:
        case ET:
        case NEGATION:
        case PLUS:
        case MINUS:
        case MINUSMINUS:
        case PLUSPLUS:
        case COPYOF:
        case CLONEOF:
        case TYPEOF:
        case SIZEOF:
        case CLASSOF:
        case BOOLEAN:
        case INT:
        case FLOAT:
        case STRING:
        case DEFINED:
        case UNDEFINED:
        case NULL:
        case OPEN_BRACKET:
        case CARET:
        case DELETE:
        case BEGIN_LIST:
        case NEW:
        case THIS:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case INF:
        case FALSE:
        case TRUE:
        case PATTERN:
          ExpressionStart();

          break;
        default:
          jj_la1[152] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
  }

  final public void ArgumentList() throws ParseException {
  int argc = 0;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case MODULE:
    case SYMBOL:
    case BEGIN:
    case DOT:
    case STAR:
    case IMPORT:
    case STRING_LITERAL:
    case RANGE:
    case FUNCTION:
    case OPEN:
    case SUPER:
    case STATIC:
    case CLASS:
    case VAR:
    case ET:
    case NEGATION:
    case PLUS:
    case MINUS:
    case MINUSMINUS:
    case PLUSPLUS:
    case COPYOF:
    case CLONEOF:
    case TYPEOF:
    case SIZEOF:
    case CLASSOF:
    case BOOLEAN:
    case INT:
    case FLOAT:
    case STRING:
    case DEFINED:
    case UNDEFINED:
    case NULL:
    case OPEN_BRACKET:
    case CARET:
    case DELETE:
    case BEGIN_LIST:
    case NEW:
    case THIS:
    case AT:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case INF:
    case FALSE:
    case TRUE:
    case PATTERN:
      OneArgument();
                          argc++;
      label_49:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case COMMA:
          ;
          break;
        default:
          jj_la1[153] = jj_gen;
          break label_49;
        }
        jj_consume_token(COMMA);
        OneArgument();
                              argc++;
      }
      break;
    default:
      jj_la1[154] = jj_gen;
      ;
    }
    Parent argv = new ExpressionList(argc);
    for(int i=argc-1; i>=0; i--) {
      argv.setChild(i, pop());
    }
    push(argv);
  }

  final public void Constant() throws ParseException {
  Token t;
  Token s = null;
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case INTEGER_LITERAL:
      t = jj_consume_token(INTEGER_LITERAL);
     push(new ConstantNode(t.image, Conversions.parseNumber(t.image)));
      break;
    case FLOATING_POINT_LITERAL:
      t = jj_consume_token(FLOATING_POINT_LITERAL);
     push(new ConstantNode(Any.create(Any.IS_DOUBLE, t.image)));
      break;
    case STRING_LITERAL:
      StringBuffer buffer = new StringBuffer();
      label_50:
      while (true) {
        t = jj_consume_token(STRING_LITERAL);
       if (t.image.length()>1) {
         buffer.append(t.image.substring(1, t.image.length() - 1));
       }
       if (s == null) {
         s = t;
       }
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case STRING_LITERAL:
          ;
          break;
        default:
          jj_la1[155] = jj_gen;
          break label_50;
        }
      }
     push(Grammar.parseString(this, toLocation(s), buffer.toString()));
      break;
    case INF:
      t = jj_consume_token(INF);
     push(ConstantNode.INF);
      break;
    case FALSE:
      t = jj_consume_token(FALSE);
     push(ConstantNode.FALSE);
      break;
    case TRUE:
      t = jj_consume_token(TRUE);
     push(ConstantNode.TRUE);
      break;
    case NULL:
      t = jj_consume_token(NULL);
     push(ConstantNode.NULL);
      break;
    case UNDEFINED:
      t = jj_consume_token(UNDEFINED);
     push(ConstantNode.UNDEFINED);
      break;
    case PATTERN:
      t = jj_consume_token(PATTERN);
      int i = t.image.lastIndexOf('/');
      String image;
      String flags;
      if (i>0) {
        image = t.image.substring(1, i);
        flags = t.image.substring(i+1);
      } else {
        image = t.image;
        flags = "";
      }
      Pattern pattern = null;
      try {
        pattern = ObjectPool.createPattern(image, flags);
        push(new ConstantNode(new AnyPattern(pattern)));
      } catch (MalformedPatternException e) {
        error(toLocation(t), "Invalid regular expression: " + e.getMessage());
        push(ConstantNode.UNDEFINED);
      }
      break;
    default:
      jj_la1[156] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
  }

  final private boolean jj_2_1(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_1();
    jj_save(0, xla);
    return retval;
  }

  final private boolean jj_2_2(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_2();
    jj_save(1, xla);
    return retval;
  }

  final private boolean jj_2_3(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_3();
    jj_save(2, xla);
    return retval;
  }

  final private boolean jj_2_4(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_4();
    jj_save(3, xla);
    return retval;
  }

  final private boolean jj_2_5(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_5();
    jj_save(4, xla);
    return retval;
  }

  final private boolean jj_2_6(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_6();
    jj_save(5, xla);
    return retval;
  }

  final private boolean jj_2_7(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_7();
    jj_save(6, xla);
    return retval;
  }

  final private boolean jj_2_8(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_8();
    jj_save(7, xla);
    return retval;
  }

  final private boolean jj_2_9(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_9();
    jj_save(8, xla);
    return retval;
  }

  final private boolean jj_2_10(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_10();
    jj_save(9, xla);
    return retval;
  }

  final private boolean jj_2_11(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_11();
    jj_save(10, xla);
    return retval;
  }

  final private boolean jj_2_12(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_12();
    jj_save(11, xla);
    return retval;
  }

  final private boolean jj_2_13(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_13();
    jj_save(12, xla);
    return retval;
  }

  final private boolean jj_2_14(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_14();
    jj_save(13, xla);
    return retval;
  }

  final private boolean jj_2_15(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_15();
    jj_save(14, xla);
    return retval;
  }

  final private boolean jj_2_16(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_16();
    jj_save(15, xla);
    return retval;
  }

  final private boolean jj_2_17(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_17();
    jj_save(16, xla);
    return retval;
  }

  final private boolean jj_2_18(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_18();
    jj_save(17, xla);
    return retval;
  }

  final private boolean jj_2_19(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_19();
    jj_save(18, xla);
    return retval;
  }

  final private boolean jj_2_20(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_20();
    jj_save(19, xla);
    return retval;
  }

  final private boolean jj_2_21(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_21();
    jj_save(20, xla);
    return retval;
  }

  final private boolean jj_2_22(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_22();
    jj_save(21, xla);
    return retval;
  }

  final private boolean jj_2_23(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_23();
    jj_save(22, xla);
    return retval;
  }

  final private boolean jj_2_24(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_24();
    jj_save(23, xla);
    return retval;
  }

  final private boolean jj_2_25(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_25();
    jj_save(24, xla);
    return retval;
  }

  final private boolean jj_2_26(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_26();
    jj_save(25, xla);
    return retval;
  }

  final private boolean jj_2_27(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_27();
    jj_save(26, xla);
    return retval;
  }

  final private boolean jj_3R_279() {
    if (jj_scan_token(LESS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_261() {
    if (jj_3R_264()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_270()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_389() {
    if (jj_scan_token(IF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_385()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_270() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_279()) {
    jj_scanpos = xsp;
    if (jj_3R_280()) {
    jj_scanpos = xsp;
    if (jj_3R_281()) {
    jj_scanpos = xsp;
    if (jj_3R_282()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_264()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_250() {
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_383() {
    if (jj_3R_162()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_385()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_132() {
    if (jj_scan_token(WHILE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_258() {
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_266() {
    if (jj_scan_token(BOOLEAN_AND)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_248()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_388() {
    if (jj_3R_75()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_387() {
    if (jj_3R_383()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_386() {
    if (jj_3R_389()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_244() {
    if (jj_scan_token(_DEFAULT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(COLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_258()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_276() {
    if (jj_scan_token(EXACT_COMPARE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_385() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_386()) {
    jj_scanpos = xsp;
    if (jj_3R_387()) {
    jj_scanpos = xsp;
    if (jj_3R_388()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_275() {
    if (jj_scan_token(COMPARE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_257() {
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_248() {
    if (jj_3R_261()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_268()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_274() {
    if (jj_scan_token(EXACT_NOT_EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_3() {
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_273() {
    if (jj_scan_token(EXACT_EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_272() {
    if (jj_scan_token(NOT_EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_271() {
    if (jj_scan_token(EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_263() {
    if (jj_scan_token(BOOLEAN_XOR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_234()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_268() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_271()) {
    jj_scanpos = xsp;
    if (jj_3R_272()) {
    jj_scanpos = xsp;
    if (jj_3R_273()) {
    jj_scanpos = xsp;
    if (jj_3R_274()) {
    jj_scanpos = xsp;
    if (jj_3R_275()) {
    jj_scanpos = xsp;
    if (jj_3R_276()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_261()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_256() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_177()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_231() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_243()) {
    jj_scanpos = xsp;
    if (jj_3R_244()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_243() {
    if (jj_scan_token(CASE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_177()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_256()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    if (jj_scan_token(COLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_257()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_234() {
    if (jj_3R_248()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_266()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_190() {
    if (jj_scan_token(OPEN_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_259() {
    if (jj_scan_token(BOOLEAN_OR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_223()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_136() {
    if (jj_scan_token(SWITCH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_231()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    if (jj_scan_token(END)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_24() {
    if (jj_scan_token(OPEN_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_74()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_223() {
    if (jj_3R_234()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_263()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_201() {
    if (jj_scan_token(COPYOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_200() {
    if (jj_scan_token(CLONEOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_199() {
    if (jj_scan_token(TYPEOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_246() {
    if (jj_scan_token(RANGE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_260()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_198() {
    if (jj_scan_token(SIZEOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_213() {
    if (jj_3R_223()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_259()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_54() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(COLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_197() {
    if (jj_scan_token(CLASS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_245() {
    if (jj_3R_213()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_260() {
    if (jj_3R_213()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_229() {
    if (jj_scan_token(ELSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_73() {
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_72() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_114()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_210() {
    if (jj_3R_213()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_246()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_23() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_72()) {
    jj_scanpos = xsp;
    if (jj_3R_73()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_196() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_23()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_131() {
    if (jj_scan_token(IF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_229()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_209() {
    if (jj_scan_token(RANGE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_245()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_180() {
    if (jj_3R_178()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_203() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_209()) {
    jj_scanpos = xsp;
    if (jj_3R_210()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_179() {
    if (jj_3R_178()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_207() {
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_206() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_114()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_212() {
    if (jj_scan_token(MAP)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_191()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_224() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(RANGE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_225()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_247() {
    if (jj_3R_191()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_2() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_51()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_215() {
    if (jj_scan_token(RANGE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_225()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_195() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_206()) {
    jj_scanpos = xsp;
    if (jj_3R_207()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_154() {
    if (jj_scan_token(PRINTBR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_180()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_233() {
    if (jj_scan_token(HOOK)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_191()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(COLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_247()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_214() {
    if (jj_3R_51()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_2()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    xsp = jj_scanpos;
    if (jj_3R_224()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_189() {
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_195()) {
    jj_scanpos = xsp;
    if (jj_3R_196()) {
    jj_scanpos = xsp;
    if (jj_3R_197()) {
    jj_scanpos = xsp;
    if (jj_3R_198()) {
    jj_scanpos = xsp;
    if (jj_3R_199()) {
    jj_scanpos = xsp;
    if (jj_3R_200()) {
    jj_scanpos = xsp;
    if (jj_3R_201()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_211() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_214()) {
    jj_scanpos = xsp;
    if (jj_3R_215()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_191() {
    if (jj_3R_203()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_222()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_232() {
    if (jj_scan_token(HOOKHOOK)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_191()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_153() {
    if (jj_scan_token(PRINTLN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_179()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_188() {
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_205() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_211()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_222() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_232()) {
    jj_scanpos = xsp;
    if (jj_3R_233()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_152() {
    if (jj_scan_token(HOOK)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_178()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_208() {
    if (jj_scan_token(ARROW)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_175()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_174() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_187()) {
    jj_scanpos = xsp;
    if (jj_3R_188()) {
    jj_scanpos = xsp;
    if (jj_3R_189()) {
    jj_scanpos = xsp;
    if (jj_3_24()) {
    jj_scanpos = xsp;
    if (jj_3R_190()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_187() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_114()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_151() {
    if (jj_scan_token(PRINT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_178()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_119() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_151()) {
    jj_scanpos = xsp;
    if (jj_3R_152()) {
    jj_scanpos = xsp;
    if (jj_3R_153()) {
    jj_scanpos = xsp;
    if (jj_3R_154()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_143() {
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_174()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_175() {
    if (jj_3R_191()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_212()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_71() {
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_202() {
    if (jj_scan_token(FOREACH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_22() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_70()) {
    jj_scanpos = xsp;
    if (jj_3R_71()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_70() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_225() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_145() {
    if (jj_3R_175()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_208()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_173() {
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_21() {
    if (jj_3R_69()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_172() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_114()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_235() {
    if (jj_scan_token(ASSIGN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_142() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_172()) {
    jj_scanpos = xsp;
    if (jj_3R_173()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_265() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_111() {
    if (jj_3R_145()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_202()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_171() {
    if (jj_3R_69()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_262() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_265()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_249() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_262()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_177()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_20() {
    if (jj_3R_69()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_51() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_235()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_178() {
    if (jj_3R_177()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_249()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_141() {
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_171()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_60() {
    if (jj_3R_111()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_170() {
    if (jj_3R_69()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_118() {
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_137() {
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_15() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_14() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_74() {
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_14()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    xsp = jj_scanpos;
    if (jj_3_15()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_169() {
    if (jj_scan_token(FUNCTION)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_168() {
    if (jj_scan_token(SUPER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_167() {
    if (jj_scan_token(THIS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_166() {
    if (jj_scan_token(STATIC)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_165() {
    if (jj_scan_token(CLASS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_164() {
    if (jj_scan_token(MODULE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_186() {
    if (jj_scan_token(VAR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_163() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_186()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_140() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_163()) {
    jj_scanpos = xsp;
    if (jj_3R_164()) {
    jj_scanpos = xsp;
    if (jj_3R_165()) {
    jj_scanpos = xsp;
    if (jj_3R_166()) {
    jj_scanpos = xsp;
    if (jj_3R_167()) {
    jj_scanpos = xsp;
    if (jj_3R_168()) {
    jj_scanpos = xsp;
    if (jj_3R_169()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_170()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_113() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_130() {
    if (jj_scan_token(SYNCHRONIZED)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_101() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_140()) {
    jj_scanpos = xsp;
    if (jj_3R_141()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_142()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_138() {
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_112() {
    if (jj_scan_token(THIS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_69() {
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_112()) {
    jj_scanpos = xsp;
    if (jj_3R_113()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_129() {
    if (jj_scan_token(FINALLY)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_376() {
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_375() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_114()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_334() {
    if (jj_scan_token(NEW)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_373()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_375()) {
    jj_scanpos = xsp;
    if (jj_3R_376()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_110() {
    if (jj_scan_token(ASSIGN_INIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_109() {
    if (jj_scan_token(ASSIGN_CONCAT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_108() {
    if (jj_scan_token(ASSIGN_REMAINDER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_107() {
    if (jj_scan_token(ASSIGN_DIVIDE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_328() {
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_106() {
    if (jj_scan_token(ASSIGN_MULTIPLY)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_105() {
    if (jj_scan_token(ASSIGN_SUBSTRACT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_104() {
    if (jj_scan_token(ASSIGN_ADD)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_103() {
    if (jj_scan_token(ASSIGN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_236() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_327() {
    if (jj_scan_token(ET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_228() {
    if (jj_scan_token(COLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_236()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_68() {
    if (jj_scan_token(BOOLEAN_OR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_144() {
    if (jj_scan_token(ET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_326() {
    if (jj_scan_token(STRING)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_128() {
    if (jj_scan_token(CATCH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_138()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_228()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_102() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_144()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_66() {
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_372() {
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_67() {
    if (jj_scan_token(PIPE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_325() {
    if (jj_scan_token(FLOAT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_100() {
    if (jj_scan_token(ET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_59() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_100()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_102()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    xsp = jj_scanpos;
    if (jj_3R_103()) {
    jj_scanpos = xsp;
    if (jj_3R_104()) {
    jj_scanpos = xsp;
    if (jj_3R_105()) {
    jj_scanpos = xsp;
    if (jj_3R_106()) {
    jj_scanpos = xsp;
    if (jj_3R_107()) {
    jj_scanpos = xsp;
    if (jj_3R_108()) {
    jj_scanpos = xsp;
    if (jj_3R_109()) {
    jj_scanpos = xsp;
    if (jj_3R_110()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_74()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_324() {
    if (jj_scan_token(INT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_19() {
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_67()) {
    jj_scanpos = xsp;
    if (jj_3R_68()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_322() {
    if (jj_3R_335()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_65() {
    if (jj_scan_token(BEGIN_LIST)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_370() {
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_323() {
    if (jj_scan_token(BOOLEAN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_127() {
    if (jj_scan_token(THROW)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_160()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_9() {
    if (jj_scan_token(FINALLY)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_8() {
    if (jj_scan_token(CATCH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_321() {
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_319() {
    if (jj_3R_333()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_177() {
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_320() {
    if (jj_3R_334()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_18() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_65()) {
    jj_scanpos = xsp;
    if (jj_3R_66()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(END)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_227() {
    if (jj_3R_129()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_226() {
    if (jj_3R_128()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_318() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_74()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_160() {
    if (jj_3R_74()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_13() {
    if (jj_3R_59()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_17() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_126() {
    if (jj_scan_token(TRY)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_226()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    xsp = jj_scanpos;
    if (jj_3R_227()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_380() {
    if (jj_scan_token(MODULE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_371() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_150() {
    if (jj_3R_177()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_149() {
    if (jj_3R_59()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_1() {
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_98() {
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_116() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_149()) {
    jj_scanpos = xsp;
    if (jj_3R_150()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_379() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_369() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_101()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_317() {
    if (jj_scan_token(DELETE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_371()) {
    jj_scanpos = xsp;
    if (jj_3R_372()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_373() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_379()) {
    jj_scanpos = xsp;
    if (jj_3R_380()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_1()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_55() {
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_98()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    if (jj_scan_token(END)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_316() {
    if (jj_scan_token(DEFINED)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_369()) {
    jj_scanpos = xsp;
    if (jj_3R_370()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_315() {
    if (jj_scan_token(IMPORT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_183() {
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_314() {
    if (jj_3R_332()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_143()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_312() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_314()) {
    jj_scanpos = xsp;
    if (jj_3R_315()) {
    jj_scanpos = xsp;
    if (jj_3R_316()) {
    jj_scanpos = xsp;
    if (jj_3R_317()) {
    jj_scanpos = xsp;
    if (jj_3_17()) {
    jj_scanpos = xsp;
    if (jj_3R_318()) {
    jj_scanpos = xsp;
    if (jj_3_18()) {
    jj_scanpos = xsp;
    if (jj_3R_319()) {
    jj_scanpos = xsp;
    if (jj_3R_320()) {
    jj_scanpos = xsp;
    if (jj_3R_321()) {
    jj_scanpos = xsp;
    if (jj_3R_322()) {
    jj_scanpos = xsp;
    if (jj_3R_323()) {
    jj_scanpos = xsp;
    if (jj_3R_324()) {
    jj_scanpos = xsp;
    if (jj_3R_325()) {
    jj_scanpos = xsp;
    if (jj_3R_326()) {
    jj_scanpos = xsp;
    if (jj_3R_327()) {
    jj_scanpos = xsp;
    if (jj_3R_328()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_182() {
    if (jj_scan_token(WHILE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_181() {
    if (jj_scan_token(IF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_155() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_181()) {
    jj_scanpos = xsp;
    if (jj_3R_182()) {
    jj_scanpos = xsp;
    if (jj_3R_183()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_95() {
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_7() {
    if (jj_3R_55()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_221() {
    if (jj_3R_55()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_220() {
    if (jj_3R_136()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_219() {
    if (jj_3R_135()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_218() {
    if (jj_3R_134()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_217() {
    if (jj_3R_133()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_311() {
    if (jj_scan_token(CARET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_216() {
    if (jj_3R_132()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_310() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_311()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_312()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_6() {
    if (jj_3R_54()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_216()) {
    jj_scanpos = xsp;
    if (jj_3R_217()) {
    jj_scanpos = xsp;
    if (jj_3R_218()) {
    jj_scanpos = xsp;
    if (jj_3R_219()) {
    jj_scanpos = xsp;
    if (jj_3R_220()) {
    jj_scanpos = xsp;
    if (jj_3R_221()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_94() {
    if (jj_3R_136()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_93() {
    if (jj_3R_135()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_92() {
    if (jj_3R_134()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_91() {
    if (jj_3R_133()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_90() {
    if (jj_3R_132()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_89() {
    if (jj_3R_131()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_88() {
    if (jj_3R_130()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_87() {
    if (jj_3R_129()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_86() {
    if (jj_3R_128()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_85() {
    if (jj_3R_127()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_84() {
    if (jj_3R_126()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_83() {
    if (jj_3R_125()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_82() {
    if (jj_3R_124()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_81() {
    if (jj_3R_123()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_80() {
    if (jj_3R_122()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_79() {
    if (jj_3R_121()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_78() {
    if (jj_3R_120()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_77() {
    if (jj_3R_119()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_367() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_76() {
    if (jj_3R_118()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_366() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_365() {
    if (jj_scan_token(NEGATION)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_337() {
    if (jj_scan_token(HAS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_365()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_366()) {
    jj_scanpos = xsp;
    if (jj_3R_367()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_52() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_76()) {
    jj_scanpos = xsp;
    if (jj_3R_77()) {
    jj_scanpos = xsp;
    if (jj_3R_78()) {
    jj_scanpos = xsp;
    if (jj_3R_79()) {
    jj_scanpos = xsp;
    if (jj_3R_80()) {
    jj_scanpos = xsp;
    if (jj_3R_81()) {
    jj_scanpos = xsp;
    if (jj_3R_82()) {
    jj_scanpos = xsp;
    if (jj_3R_83()) {
    jj_scanpos = xsp;
    if (jj_3R_84()) {
    jj_scanpos = xsp;
    if (jj_3R_85()) {
    jj_scanpos = xsp;
    if (jj_3R_86()) {
    jj_scanpos = xsp;
    if (jj_3R_87()) {
    jj_scanpos = xsp;
    if (jj_3R_88()) {
    jj_scanpos = xsp;
    if (jj_3R_89()) {
    jj_scanpos = xsp;
    if (jj_3R_90()) {
    jj_scanpos = xsp;
    if (jj_3R_91()) {
    jj_scanpos = xsp;
    if (jj_3R_92()) {
    jj_scanpos = xsp;
    if (jj_3R_93()) {
    jj_scanpos = xsp;
    if (jj_3R_94()) {
    jj_scanpos = xsp;
    if (jj_3_6()) {
    jj_scanpos = xsp;
    if (jj_3_7()) {
    jj_scanpos = xsp;
    if (jj_3R_95()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_125() {
    if (jj_scan_token(ASSERT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_364() {
    if (jj_3R_373()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_363() {
    if (jj_scan_token(ET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_362() {
    if (jj_scan_token(CLASS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_123() {
    if (jj_scan_token(YIELD)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_160()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_361() {
    if (jj_scan_token(OPEN_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_360() {
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(END)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_359() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_358() {
    if (jj_scan_token(MAP)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_357() {
    if (jj_scan_token(RANGE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_356() {
    if (jj_scan_token(STRING)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_355() {
    if (jj_scan_token(FLOAT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_159() {
    if (jj_3R_160()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_354() {
    if (jj_scan_token(INT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_122() {
    if (jj_scan_token(RETURN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_159()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_353() {
    if (jj_scan_token(BOOLEAN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_161() {
    if (jj_3R_160()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_352() {
    if (jj_scan_token(NULL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_351() {
    if (jj_scan_token(UNDEFINED)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_64() {
    if (jj_scan_token(STRING)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_350() {
    if (jj_scan_token(DEFINED)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_349() {
    if (jj_scan_token(NEGATION)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_124() {
    if (jj_scan_token(EXIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_161()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_307() {
    if (jj_3R_310()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_329()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_336() {
    if (jj_scan_token(IS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_349()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_350()) {
    jj_scanpos = xsp;
    if (jj_3R_351()) {
    jj_scanpos = xsp;
    if (jj_3R_352()) {
    jj_scanpos = xsp;
    if (jj_3R_353()) {
    jj_scanpos = xsp;
    if (jj_3R_354()) {
    jj_scanpos = xsp;
    if (jj_3R_355()) {
    jj_scanpos = xsp;
    if (jj_3R_356()) {
    jj_scanpos = xsp;
    if (jj_3R_357()) {
    jj_scanpos = xsp;
    if (jj_3R_358()) {
    jj_scanpos = xsp;
    if (jj_3R_359()) {
    jj_scanpos = xsp;
    if (jj_3R_360()) {
    jj_scanpos = xsp;
    if (jj_3R_361()) {
    jj_scanpos = xsp;
    if (jj_3R_362()) {
    jj_scanpos = xsp;
    if (jj_3R_363()) {
    jj_scanpos = xsp;
    if (jj_3R_364()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_329() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_336()) {
    jj_scanpos = xsp;
    if (jj_3R_337()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_63() {
    if (jj_scan_token(FLOAT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_97() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_330() {
    if (jj_scan_token(PLUSPLUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_313() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_330()) {
    jj_scanpos = xsp;
    if (jj_3R_331()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_62() {
    if (jj_scan_token(INT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_331() {
    if (jj_scan_token(MINUSMINUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_157() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_302() {
    if (jj_3R_307()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_313()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_185() {
    if (jj_scan_token(_DEFAULT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_61() {
    if (jj_scan_token(BOOLEAN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_96() {
    if (jj_scan_token(STATIC)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_184() {
    if (jj_scan_token(CASE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_177()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_297() {
    if (jj_3R_302()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_53() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_96()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(VAR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_97()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_158() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_184()) {
    jj_scanpos = xsp;
    if (jj_3R_185()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_121() {
    if (jj_scan_token(CONTINUE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_157()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_158()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_5() {
    if (jj_3R_53()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_16() {
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_61()) {
    jj_scanpos = xsp;
    if (jj_3R_62()) {
    jj_scanpos = xsp;
    if (jj_3R_63()) {
    jj_scanpos = xsp;
    if (jj_3R_64()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_296() {
    if (jj_scan_token(CLASSOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_156() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_295() {
    if (jj_scan_token(SIZEOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_294() {
    if (jj_scan_token(TYPEOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_120() {
    if (jj_scan_token(BREAK)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_156()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_293() {
    if (jj_scan_token(CLONEOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_291() {
    if (jj_scan_token(PLUSPLUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_292() {
    if (jj_scan_token(COPYOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_290() {
    if (jj_scan_token(MINUSMINUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_289() {
    if (jj_scan_token(STAR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_58() {
    if (jj_3R_99()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_12() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_58()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_346() {
    if (jj_scan_token(PATTERN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_57() {
    if (jj_3R_99()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_345() {
    if (jj_scan_token(UNDEFINED)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_11() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_57()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_56() {
    if (jj_3R_99()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_255() {
    if (jj_3R_99()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_288() {
    if (jj_scan_token(MINUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_344() {
    if (jj_scan_token(NULL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_10() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_56()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_309() {
    if (jj_scan_token(NO_MATCH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_242() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_255()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_254() {
    if (jj_3R_99()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_343() {
    if (jj_scan_token(TRUE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_241() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_254()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_253() {
    if (jj_3R_99()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_342() {
    if (jj_scan_token(FALSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_286() {
    if (jj_scan_token(NEGATION)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_240() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_253()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_287() {
    if (jj_scan_token(PLUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_283() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_286()) {
    jj_scanpos = xsp;
    if (jj_3R_287()) {
    jj_scanpos = xsp;
    if (jj_3R_288()) {
    jj_scanpos = xsp;
    if (jj_3R_289()) {
    jj_scanpos = xsp;
    if (jj_3R_290()) {
    jj_scanpos = xsp;
    if (jj_3R_291()) {
    jj_scanpos = xsp;
    if (jj_3R_292()) {
    jj_scanpos = xsp;
    if (jj_3R_293()) {
    jj_scanpos = xsp;
    if (jj_3R_294()) {
    jj_scanpos = xsp;
    if (jj_3R_295()) {
    jj_scanpos = xsp;
    if (jj_3R_296()) {
    jj_scanpos = xsp;
    if (jj_3_16()) {
    jj_scanpos = xsp;
    if (jj_3R_297()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_341() {
    if (jj_scan_token(INF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_308() {
    if (jj_scan_token(MATCH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_303() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_308()) {
    jj_scanpos = xsp;
    if (jj_3R_309()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_162() {
    if (jj_scan_token(FOREACH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_240()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_241()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_242()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_306() {
    if (jj_scan_token(REMAINDER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_368() {
    if (jj_scan_token(STRING_LITERAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_340() {
    Token xsp;
    if (jj_3R_368()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_368()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_301() {
    if (jj_scan_token(ET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_305() {
    if (jj_scan_token(SLASH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_339() {
    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_139() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_138()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_277() {
    if (jj_3R_283()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_303()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_338() {
    if (jj_scan_token(INTEGER_LITERAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_99() {
    if (jj_3R_138()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_139()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_332() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_338()) {
    jj_scanpos = xsp;
    if (jj_3R_339()) {
    jj_scanpos = xsp;
    if (jj_3R_340()) {
    jj_scanpos = xsp;
    if (jj_3R_341()) {
    jj_scanpos = xsp;
    if (jj_3R_342()) {
    jj_scanpos = xsp;
    if (jj_3R_343()) {
    jj_scanpos = xsp;
    if (jj_3R_344()) {
    jj_scanpos = xsp;
    if (jj_3R_345()) {
    jj_scanpos = xsp;
    if (jj_3R_346()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_304() {
    if (jj_scan_token(STAR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_298() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_304()) {
    jj_scanpos = xsp;
    if (jj_3R_305()) {
    jj_scanpos = xsp;
    if (jj_3R_306()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_277()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_300() {
    if (jj_scan_token(MINUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_146() {
    if (jj_3R_176()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_204()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_114() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_146()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_204() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_176()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_135() {
    if (jj_3R_162()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_299() {
    if (jj_scan_token(PLUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_284() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_299()) {
    jj_scanpos = xsp;
    if (jj_3R_300()) {
    jj_scanpos = xsp;
    if (jj_3R_301()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_269()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_384() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_194() {
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_269() {
    if (jj_3R_277()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_298()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_193() {
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_27() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(ASSIGN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_134() {
    if (jj_scan_token(DO)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(WHILE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_192() {
    if (jj_scan_token(AT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_176() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_192()) {
    jj_scanpos = xsp;
    if (jj_3_27()) {
    jj_scanpos = xsp;
    if (jj_3R_193()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_285() {
    if (jj_scan_token(NEGATION)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_278() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_285()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(IN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_267()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_148() {
    if (jj_scan_token(BOOLEAN_OR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_147() {
    if (jj_scan_token(PIPE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_205()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(PIPE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_267() {
    if (jj_3R_269()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_284()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_115() {
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_147()) {
    jj_scanpos = xsp;
    if (jj_3R_148()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_194()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    if (jj_scan_token(END)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_117() {
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_26() {
    if (jj_scan_token(SYMBOL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(ASSIGN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_60()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_75() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_26()) {
    jj_scanpos = xsp;
    if (jj_3R_117()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_133() {
    if (jj_scan_token(FOR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(OPEN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_230()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3_4() {
    if (jj_3R_52()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_264() {
    if (jj_3R_267()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_278()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3_25() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_75()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_382() {
    if (jj_3R_75()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_25()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    xsp = jj_scanpos;
    if (jj_3R_384()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_252() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_250()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_282() {
    if (jj_scan_token(GREATER_OR_EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_381() {
    if (jj_3R_383()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_239() {
    if (jj_3R_250()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_252()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_374() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_381()) {
    jj_scanpos = xsp;
    if (jj_3R_382()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_238() {
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_333() {
    if (jj_scan_token(OPEN_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_374()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(CLOSE_BRACKET)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_251() {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_250()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_237() {
    if (jj_3R_250()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_251()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  final private boolean jj_3R_281() {
    if (jj_scan_token(LESS_OR_EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_378() {
    if (jj_3R_74()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_348() {
    if (jj_scan_token(BEGIN_LIST)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_230() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_237()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_238()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(SEMICOLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_239()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_377() {
    if (jj_3R_383()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_347() {
    if (jj_scan_token(BEGIN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_280() {
    if (jj_scan_token(GREATER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  final private boolean jj_3R_335() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_347()) {
    jj_scanpos = xsp;
    if (jj_3R_348()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_377()) {
    jj_scanpos = xsp;
    if (jj_3R_378()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(END)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  public TokenManager token_source;
  public Token token, jj_nt;
  private int jj_ntk;
  private Token jj_scanpos, jj_lastpos;
  private int jj_la;
  public boolean lookingAhead = false;
  private boolean jj_semLA;
  private int jj_gen;
  final private int[] jj_la1 = new int[157];
  final private int[] jj_la1_0 = {0x35310420,0x4,0x35310420,0x35310420,0x2,0x40,0x35310420,0x6,0xc0,0xc0,0x200,0xc0,0xc0,0x106,0x1080,0x1080,0x106,0x10c0,0x10c0,0x806,0x4000,0x200,0x8004,0x8004,0x80000,0x100000,0xd43bad4e,0x110400,0x200000,0x100000,0x310000,0xd43bad4e,0x310400,0xc00000,0xd43bad4e,0x200,0x2000000,0x21210400,0x21210400,0x2000000,0x8000000,0x34310400,0x24000400,0x310000,0x200000,0x200,0x4000,0x200,0xd43bad4e,0x80000008,0xc0102000,0x142b8d4e,0xc0002000,0xd43bad4e,0x200,0x1000,0x200,0x200,0x200,0x142b8d4e,0x142b8d4e,0x0,0x0,0x0,0x200,0xd43bad4e,0xd43bad4e,0x0,0x200,0x142b8d4e,0x142b8d4e,0x200,0x142b8d4e,0x200,0x14290046,0x14290046,0x14290046,0x4,0x4,0x0,0x0,0x142b8d4e,0x142b8d4e,0x142b8d4e,0x0,0x200,0x0,0x4000,0x0,0x0,0x0,0x142b8d4e,0x0,0x0,0x142b0d4e,0x142b0d4e,0x8000,0x142b8d4e,0x800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x100,0x100,0x0,0x0,0x0,0x100,0x142b0c4e,0x0,0x0,0x0,0x0,0x402800e,0x0,0x20004,0x0,0x0,0x142b0046,0x142b0046,0x8,0xc00,0x20000,0x0,0x1429004e,0x20008,0x4,0x10000000,0x14290006,0x14290046,0x20008,0x20048,0x20008,0x20008,0x4020004,0x20048,0x0,0x542b8d4e,0x8,0x142b8d4e,0x200,0x142b8d4e,0x142b8d4e,0x142b8d4e,0x0,0x142b8d4e,0x200,0x142b8d4e,0x800,0x800,};
  final private int[] jj_la1_1 = {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,0x3ff2ff,0x0,0x0,0x0,0x0,0x3ff2ff,0x0,0x0,0x3ff2ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ff2ff,0x7200,0x1ff2ff,0x200000,0x0,0x3ff2ff,0x0,0x0,0x0,0x0,0x0,0x200000,0x200000,0xf0,0x100,0xc00,0x0,0x3ff2ff,0x3ff2ff,0xc00,0x0,0x200000,0x200000,0x0,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0xc00,0xc00,0x200000,0x200000,0x200000,0x200000,0x0,0x200000,0x1fc00000,0x4000,0x20000000,0x40000000,0x200000,0x80000020,0x80000020,0x200000,0x200000,0x0,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x0,0x0,0x0,0x40200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x204000,0x0,0x204000,0x0,0x204000,0x204000,0x200000,0x0,0x200000,0x0,0x200000,0x0,0x0,};
  final private int[] jj_la1_2 = {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,0x7ff0d000,0x0,0x0,0x0,0x0,0x7ff0d000,0x0,0x0,0x7ff0d000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7ff0d000,0x0,0x0,0x7ff0d000,0x0,0x7ff0d000,0x0,0x0,0x0,0x0,0x0,0x7ff0d000,0x7ff0d000,0x0,0x0,0x0,0x0,0x7ff0d000,0x7ff0d000,0x0,0x0,0x7ff0d000,0x7ff0d000,0x0,0x7ff0d000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7ff0d000,0x7ff0d000,0x7ff0d000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7ff0d000,0x0,0x0,0x7ff0d000,0x7ff0d000,0x0,0x7ff0d000,0x0,0x1,0x2,0xfc,0xfc,0xf00,0xf00,0x3000,0x1000,0xc000,0xc000,0x30000,0x30000,0xc0000,0xc0000,0x78000000,0x7f0d000,0x78000000,0x300000,0x300000,0x80000000,0x1000,0x78000000,0x1000,0x0,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c00000,0x0,0x0,0x7ff0d000,0x0,0x7ff0d000,0x0,0x7ff0d000,0x7ff0d000,0x7ff0d000,0x0,0x7ff0d000,0x0,0x7ff0d000,0x0,0x0,};
  final private int[] jj_la1_3 = {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,0x3f7cf,0x0,0x0,0x0,0x0,0x3f7cf,0x0,0x0,0x3f7cf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f7cf,0x0,0x0,0x3f7cf,0x0,0x3f7cf,0x0,0x0,0x0,0x0,0x0,0x3f7cf,0x3f7cf,0x0,0x0,0x0,0x0,0x3f7cf,0x3f7cf,0x0,0x0,0x3f7cf,0x3f7cf,0x0,0x3f7cf,0x0,0x400,0x400,0x400,0x0,0x0,0x0,0x0,0x3f7cf,0x3f7cf,0x3f7cf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f7cf,0x0,0x0,0x3f7cf,0x3f7cf,0x0,0x3f7cf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f7cf,0x0,0x0,0x20,0x0,0xf,0x0,0x0,0x20,0x40,0x400,0x400,0x100,0x3f087,0x0,0x208,0x500,0x0,0x400,0x0,0x400,0x400,0x0,0x8,0x0,0x0,0x0,0x0,0x8,0x3f7cf,0x100,0x3f7cf,0x0,0x3f7cf,0x3f7cf,0x3f7cf,0x800,0x3f7cf,0x0,0x3ffcf,0x0,0x3f006,};
  final private JJCalls[] jj_2_rtns = new JJCalls[27];
  private boolean jj_rescan = false;
  private int jj_gc = 0;


  public ParserBase(TokenManager tm) {
    token_source = tm;
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 157; i++) jj_la1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  public void ReInit(TokenManager tm) {
    token_source = tm;
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 157; i++) jj_la1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  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++;
      if (++jj_gc > 100) {
        jj_gc = 0;
        for (int i = 0; i < jj_2_rtns.length; i++) {
          JJCalls c = jj_2_rtns[i];
          while (c != null) {
            if (c.gen < jj_gen) c.first = null;
            c = c.next;
          }
        }
      }
      return token;
    }
    token = oldToken;
    jj_kind = kind;
    throw generateParseException();
  }

  final private boolean jj_scan_token(int kind) {
    if (jj_scanpos == jj_lastpos) {
      jj_la--;
      if (jj_scanpos.next == null) {
        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
      } else {
        jj_lastpos = jj_scanpos = jj_scanpos.next;
      }
    } else {
      jj_scanpos = jj_scanpos.next;
    }
    if (jj_rescan) {
      int i = 0; Token tok = token;
      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
      if (tok != null) jj_add_error_token(kind, i);
    }
    return (jj_scanpos.kind != kind);
  }

  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 = lookingAhead ? jj_scanpos : 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;
  private int[] jj_lasttokens = new int[100];
  private int jj_endpos;

  private void jj_add_error_token(int kind, int pos) {
    if (pos >= 100) return;
    if (pos == jj_endpos + 1) {
      jj_lasttokens[jj_endpos++] = kind;
    } else if (jj_endpos != 0) {
      jj_expentry = new int[jj_endpos];
      for (int i = 0; i < jj_endpos; i++) {
        jj_expentry[i] = jj_lasttokens[i];
      }
      boolean exists = false;
      for (java.util.Enumeration enum = jj_expentries.elements(); enum.hasMoreElements();) {
        int[] oldentry = (int[])(enum.nextElement());
        if (oldentry.length == jj_expentry.length) {
          exists = true;
          for (int i = 0; i < jj_expentry.length; i++) {
            if (oldentry[i] != jj_expentry[i]) {
              exists = false;
              break;
            }
          }
          if (exists) break;
        }
      }
      if (!exists) jj_expentries.addElement(jj_expentry);
      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
    }
  }

  final public ParseException generateParseException() {
    jj_expentries.removeAllElements();
    boolean[] la1tokens = new boolean[114];
    for (int i = 0; i < 114; i++) {
      la1tokens[i] = false;
    }
    if (jj_kind >= 0) {
      la1tokens[jj_kind] = true;
      jj_kind = -1;
    }
    for (int i = 0; i < 157; 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;
          }
          if ((jj_la1_3[i] & (1<<j)) != 0) {
            la1tokens[96+j] = true;
          }
        }
      }
    }
    for (int i = 0; i < 114; i++) {
      if (la1tokens[i]) {
        jj_expentry = new int[1];
        jj_expentry[0] = i;
        jj_expentries.addElement(jj_expentry);
      }
    }
    jj_endpos = 0;
    jj_rescan_token();
    jj_add_error_token(0, 0);
    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() {
  }

  final private void jj_rescan_token() {
    jj_rescan = true;
    for (int i = 0; i < 27; i++) {
      JJCalls p = jj_2_rtns[i];
      do {
        if (p.gen > jj_gen) {
          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
          switch (i) {
            case 0: jj_3_1(); break;
            case 1: jj_3_2(); break;
            case 2: jj_3_3(); break;
            case 3: jj_3_4(); break;
            case 4: jj_3_5(); break;
            case 5: jj_3_6(); break;
            case 6: jj_3_7(); break;
            case 7: jj_3_8(); break;
            case 8: jj_3_9(); break;
            case 9: jj_3_10(); break;
            case 10: jj_3_11(); break;
            case 11: jj_3_12(); break;
            case 12: jj_3_13(); break;
            case 13: jj_3_14(); break;
            case 14: jj_3_15(); break;
            case 15: jj_3_16(); break;
            case 16: jj_3_17(); break;
            case 17: jj_3_18(); break;
            case 18: jj_3_19(); break;
            case 19: jj_3_20(); break;
            case 20: jj_3_21(); break;
            case 21: jj_3_22(); break;
            case 22: jj_3_23(); break;
            case 23: jj_3_24(); break;
            case 24: jj_3_25(); break;
            case 25: jj_3_26(); break;
            case 26: jj_3_27(); break;
          }
        }
        p = p.next;
      } while (p != null);
    }
    jj_rescan = false;
  }

  final private void jj_save(int index, int xla) {
    JJCalls p = jj_2_rtns[index];
    while (p.gen > jj_gen) {
      if (p.next == null) { p = p.next = new JJCalls(); break; }
      p = p.next;
    }
    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
  }

  static final class JJCalls {
    int gen;
    Token first;
    int arg;
    JJCalls next;
  }

  }
TOP

Related Classes of anvil.script.parser.ParserBase$JJCalls

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.