AdelanteParser.java

/* AdelanteParser.java */
/* Generated By:JJTree&JavaCC: Do not edit this line. AdelanteParser.java */
package com.github.tom65536.adelante.parser;

/*-
 * #%L
 * adelante-compiler-frontend
 * %%
 * Copyright (C) 2023 Thomas Reiter
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * #L%
 */

/**
 * Parser for the Adelante Programming Language.
 */
public final class AdelanteParser/*@bgen(jjtree)*/implements AdelanteParserTreeConstants, AdelanteParserConstants {/*@bgen(jjtree)*/
  protected JJTAdelanteParserState jjtree = new JJTAdelanteParserState();

// A program is the main compilation unit.
// It may comprise zero or more packets which
// contents are visible by the program
// automatically.
  final public void program() throws ParseException {/*@bgen(jjtree) Program */
  ASTProgram jjtn000 = new ASTProgram(JJTPROGRAM);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case NL:{
        nl();
        break;
        }
      default:
        jj_la1[0] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPL:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_LET:
      case KW_MEASURE:
      case KW_MOD:
      case KW_NOT:
      case KW_OBSOLETE:
      case KW_OP:
      case KW_OR:
      case KW_PACKET:
      case KW_PROC:
      case KW_PROTOCOL:
      case KW_PUBLIC:
      case KW_PURE:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEST:
      case KW_TEXT:
      case KW_TRUE:
      case KW_TYPE:
      case KW_USES:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        packets_or_body();
        break;
        }
      default:
        jj_la1[1] = jj_gen;
        ;
      }
      jj_consume_token(0);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void packets_or_body() throws ParseException {
    if (jj_2_2(2147483647)) {
      packet();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPL:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_LET:
      case KW_MEASURE:
      case KW_MOD:
      case KW_NOT:
      case KW_OBSOLETE:
      case KW_OP:
      case KW_OR:
      case KW_PACKET:
      case KW_PROC:
      case KW_PROTOCOL:
      case KW_PUBLIC:
      case KW_PURE:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEST:
      case KW_TEXT:
      case KW_TRUE:
      case KW_TYPE:
      case KW_USES:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        packets_or_body();
        break;
        }
      default:
        jj_la1[2] = jj_gen;
        ;
      }
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_USES:{
        label_1:
        while (true) {
          uses_clause();
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case KW_USES:{
            ;
            break;
            }
          default:
            jj_la1[3] = jj_gen;
            break label_1;
          }
        }
        if (jj_2_1(2147483647)) {
          bottom_up_part();
        } else {
          ;
        }
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 4:
        case 9:
        case LARR:
        case RARR:
        case LRARR:
        case STARSHIP:
        case BAT:
        case TILDE:
        case SLASH:
        case SLASH_SLASH:
        case AST:
        case CIRCLED_TIMES:
        case CIRCLED_AST:
        case CIRCLED_DOT:
        case CIRCLED_SLASH:
        case AST_AST:
        case AST_SLASH:
        case SLASH_AST:
        case TIMES:
        case PERCENT:
        case BOXED_QUEST:
        case BOXED_COLON:
        case BOXED_QUOTE:
        case BOXED_CARET:
        case BOXED_LARR:
        case BOXED_RARR:
        case BOXED_SLASH:
        case BOXED_PLUS:
        case BOXED_MINUS:
        case BOXED_TIMES:
        case BOXED_DOT:
        case BOXED_AST:
        case PLUS:
        case MINUS:
        case PLUS_PLUS:
        case MINUS_MINUS:
        case PLUS_MINUS:
        case MINUS_PLUS:
        case CIRCLED_PLUS:
        case CIRCLED_MINUS:
        case CARET:
        case LL:
        case GG:
        case LLL:
        case EXCLAM:
        case QUEST:
        case QQ:
        case EE:
        case QEX:
        case EXQ:
        case GGG:
        case BAR:
        case AMP:
        case BAR_BAR:
        case AMP_AMP:
        case CARET_CARET:
        case KW_ACROSS:
        case KW_AND:
        case KW_BOOL:
        case KW_CHECK:
        case KW_CONST:
        case KW_CONCR:
        case KW_CONTINUE:
        case KW_DIV:
        case KW_ENUM:
        case KW_FALSE:
        case KW_IF:
        case KW_IMPLIES:
        case KW_INT:
        case KW_LEAVE:
        case KW_MOD:
        case KW_NOT:
        case KW_OR:
        case KW_REAL:
        case KW_REPEAT:
        case KW_SELECT:
        case KW_STRUCT:
        case KW_TEXT:
        case KW_TRUE:
        case KW_VAR:
        case KW_VOID:
        case KW_WHILE:
        case KW_WITH:
        case KW_XOR:
        case IDENTIFIER:
        case TEXT_LITERAL:
        case TEXT_HEAD:
        case DECIMAL_LITERAL:
        case RADIX_LITERAL:
        case REAL_LITERAL:{
          root_part();
          break;
          }
        default:
          jj_la1[4] = jj_gen;
          ;
        }
        break;
        }
      default:
        jj_la1[6] = jj_gen;
        if (jj_2_3(2147483647)) {
          bottom_up_part();
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 4:
          case 9:
          case LARR:
          case RARR:
          case LRARR:
          case STARSHIP:
          case BAT:
          case TILDE:
          case SLASH:
          case SLASH_SLASH:
          case AST:
          case CIRCLED_TIMES:
          case CIRCLED_AST:
          case CIRCLED_DOT:
          case CIRCLED_SLASH:
          case AST_AST:
          case AST_SLASH:
          case SLASH_AST:
          case TIMES:
          case PERCENT:
          case BOXED_QUEST:
          case BOXED_COLON:
          case BOXED_QUOTE:
          case BOXED_CARET:
          case BOXED_LARR:
          case BOXED_RARR:
          case BOXED_SLASH:
          case BOXED_PLUS:
          case BOXED_MINUS:
          case BOXED_TIMES:
          case BOXED_DOT:
          case BOXED_AST:
          case PLUS:
          case MINUS:
          case PLUS_PLUS:
          case MINUS_MINUS:
          case PLUS_MINUS:
          case MINUS_PLUS:
          case CIRCLED_PLUS:
          case CIRCLED_MINUS:
          case CARET:
          case LL:
          case GG:
          case LLL:
          case EXCLAM:
          case QUEST:
          case QQ:
          case EE:
          case QEX:
          case EXQ:
          case GGG:
          case BAR:
          case AMP:
          case BAR_BAR:
          case AMP_AMP:
          case CARET_CARET:
          case KW_ACROSS:
          case KW_AND:
          case KW_BOOL:
          case KW_CHECK:
          case KW_CONST:
          case KW_CONCR:
          case KW_CONTINUE:
          case KW_DIV:
          case KW_ENUM:
          case KW_FALSE:
          case KW_IF:
          case KW_IMPLIES:
          case KW_INT:
          case KW_LEAVE:
          case KW_MOD:
          case KW_NOT:
          case KW_OR:
          case KW_REAL:
          case KW_REPEAT:
          case KW_SELECT:
          case KW_STRUCT:
          case KW_TEXT:
          case KW_TRUE:
          case KW_VAR:
          case KW_VOID:
          case KW_WHILE:
          case KW_WITH:
          case KW_XOR:
          case IDENTIFIER:
          case TEXT_LITERAL:
          case TEXT_HEAD:
          case DECIMAL_LITERAL:
          case RADIX_LITERAL:
          case REAL_LITERAL:{
            root_part();
            break;
            }
          default:
            jj_la1[5] = jj_gen;
            ;
          }
        } else {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 4:
          case 9:
          case LARR:
          case RARR:
          case LRARR:
          case STARSHIP:
          case BAT:
          case TILDE:
          case SLASH:
          case SLASH_SLASH:
          case AST:
          case CIRCLED_TIMES:
          case CIRCLED_AST:
          case CIRCLED_DOT:
          case CIRCLED_SLASH:
          case AST_AST:
          case AST_SLASH:
          case SLASH_AST:
          case TIMES:
          case PERCENT:
          case BOXED_QUEST:
          case BOXED_COLON:
          case BOXED_QUOTE:
          case BOXED_CARET:
          case BOXED_LARR:
          case BOXED_RARR:
          case BOXED_SLASH:
          case BOXED_PLUS:
          case BOXED_MINUS:
          case BOXED_TIMES:
          case BOXED_DOT:
          case BOXED_AST:
          case PLUS:
          case MINUS:
          case PLUS_PLUS:
          case MINUS_MINUS:
          case PLUS_MINUS:
          case MINUS_PLUS:
          case CIRCLED_PLUS:
          case CIRCLED_MINUS:
          case CARET:
          case LL:
          case GG:
          case LLL:
          case EXCLAM:
          case QUEST:
          case QQ:
          case EE:
          case QEX:
          case EXQ:
          case GGG:
          case BAR:
          case AMP:
          case BAR_BAR:
          case AMP_AMP:
          case CARET_CARET:
          case KW_ACROSS:
          case KW_AND:
          case KW_BOOL:
          case KW_CHECK:
          case KW_CONST:
          case KW_CONCR:
          case KW_CONTINUE:
          case KW_DIV:
          case KW_ENUM:
          case KW_FALSE:
          case KW_IF:
          case KW_IMPLIES:
          case KW_INT:
          case KW_LEAVE:
          case KW_MOD:
          case KW_NOT:
          case KW_OR:
          case KW_REAL:
          case KW_REPEAT:
          case KW_SELECT:
          case KW_STRUCT:
          case KW_TEXT:
          case KW_TRUE:
          case KW_VAR:
          case KW_VOID:
          case KW_WHILE:
          case KW_WITH:
          case KW_XOR:
          case IDENTIFIER:
          case TEXT_LITERAL:
          case TEXT_HEAD:
          case DECIMAL_LITERAL:
          case RADIX_LITERAL:
          case REAL_LITERAL:{
            root_part();
            break;
            }
          default:
            jj_la1[7] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
    }
}

// Packets which are not defined in the program file
// are searched in the search path.
//
// Each packet must reside in a single file of the same name
// (plus a suffix .pkt or .packet).
//
// A packet file must contain a single packet with the same name
// as the file name.
  final public void packet_file() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case NL:{
      nl();
      break;
      }
    default:
      jj_la1[8] = jj_gen;
      ;
    }
    packet();
    jj_consume_token(0);
}

// The bundle file "_bundle.pkt" describes the
// publication record for a bundle of packets.
// The properties are described as named expression synonyms.
  final public void bundle_file() throws ParseException {/*@bgen(jjtree) BundleFile */
  ASTBundleFile jjtn000 = new ASTBundleFile(JJTBUNDLEFILE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case NL:{
        nl();
        break;
        }
      default:
        jj_la1[9] = jj_gen;
        ;
      }
      label_2:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_USES:{
          ;
          break;
          }
        default:
          jj_la1[10] = jj_gen;
          break label_2;
        }
        uses_clause();
      }
      label_3:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_REQUIRES:{
          ;
          break;
          }
        default:
          jj_la1[11] = jj_gen;
          break label_3;
        }
        packet_requires();
      }
      label_4:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_DOC:
        case KW_EXAMPLE:{
          ;
          break;
          }
        default:
          jj_la1[12] = jj_gen;
          break label_4;
        }
        documentation();
      }
      label_5:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_LET:{
          ;
          break;
          }
        default:
          jj_la1[13] = jj_gen;
          break label_5;
        }
        bundle_file_decl();
        nl();
      }
      jj_consume_token(0);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void bundle_file_decl() throws ParseException {
    expression_synonym();
}

// Packets are containers for code intended to be
// reused. Contents of a packet remain private unless
// they are marked PUBLIC.
  final public void packet() throws ParseException {/*@bgen(jjtree) Packet */
  ASTPacket jjtn000 = new ASTPacket(JJTPACKET);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      packet_head();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_IMPL:
      case KW_INT:
      case KW_LET:
      case KW_MEASURE:
      case KW_OBSOLETE:
      case KW_OP:
      case KW_PROC:
      case KW_PROTOCOL:
      case KW_PUBLIC:
      case KW_PURE:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEST:
      case KW_TEXT:
      case KW_TYPE:
      case KW_VOID:
      case IDENTIFIER:{
        packet_body();
        break;
        }
      default:
        jj_la1[14] = jj_gen;
        ;
      }
      packet_tail();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void packet_head() throws ParseException {
    packet_id();
    nl();
    label_6:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_USES:{
        ;
        break;
        }
      default:
        jj_la1[15] = jj_gen;
        break label_6;
      }
      uses_clause();
    }
    label_7:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_REQUIRES:{
        ;
        break;
        }
      default:
        jj_la1[16] = jj_gen;
        break label_7;
      }
      packet_requires();
    }
    label_8:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ENSURES:{
        ;
        break;
        }
      default:
        jj_la1[17] = jj_gen;
        break label_8;
      }
      packet_ensures();
    }
    label_9:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_DOC:
      case KW_EXAMPLE:{
        ;
        break;
        }
      default:
        jj_la1[18] = jj_gen;
        break label_9;
      }
      documentation();
    }
}

// Each packet is given a name by which it
// may be referred in the USES clause of
// another packet or program.
//
// Packets may be marked obsolete, in which
// case their use issues a warning or an error
// depending on the settings.
  final public void packet_id() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_OBSOLETE:{
      obsoletion();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case NL:{
        nl();
        break;
        }
      default:
        jj_la1[19] = jj_gen;
        ;
      }
      break;
      }
    default:
      jj_la1[20] = jj_gen;
      ;
    }
    jj_consume_token(KW_PACKET);
    identifier();
}

  final public void packet_requires() throws ParseException {/*@bgen(jjtree) PacketRequires */
  ASTPacketRequires jjtn000 = new ASTPacketRequires(JJTPACKETREQUIRES);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_REQUIRES);
      protocol_instances();
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void packet_ensures() throws ParseException {/*@bgen(jjtree) PacketEnsures */
  ASTPacketEnsures jjtn000 = new ASTPacketEnsures(JJTPACKETENSURES);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_ENSURES);
      protocol_instances();
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void packet_tail() throws ParseException {/*@bgen(jjtree) BlockTail */
  ASTBlockTail jjtn000 = new ASTBlockTail(JJTBLOCKTAIL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_PACKET);
        break;
        }
      case KW_ENDPACKET:{
        jj_consume_token(KW_ENDPACKET);
        break;
        }
      default:
        jj_la1[21] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        identifier_ref();
        break;
        }
      default:
        jj_la1[22] = jj_gen;
        ;
      }
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void packet_body() throws ParseException {
    bottom_up_part();
}

  final public void root_part() throws ParseException {
    root();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      top_down_part();
      break;
      }
    default:
      jj_la1[23] = jj_gen;
      ;
    }
}

// A USES clause makes the public contents
// of a packet visible to the referring namespace
// without any prefix.
  final public void uses_clause() throws ParseException {
    jj_consume_token(KW_USES);
    packet_usage();
    label_10:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 1:{
        ;
        break;
        }
      default:
        jj_la1[24] = jj_gen;
        break label_10;
      }
      jj_consume_token(1);
      packet_usage();
    }
    nl();
}

  final public void packet_usage() throws ParseException {/*@bgen(jjtree) PacketUsage */
  ASTPacketUsage jjtn000 = new ASTPacketUsage(JJTPACKETUSAGE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      packet_ref();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        use_transforms();
        break;
        }
      default:
        jj_la1[25] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

// A packet reference may be one of the following:
// - Simple Reference: searches the standard library
//     first, then relative to the current packet file,
//     e.g. math/random
// - Relative Reference: starts with a dot or a double dot,
//     searches relative to the packet file only,
//     e.g. ./math or ../utility funtions/text
// - Bundle Reference: bundle name goes before the colon,
//     e.g. tom65536/adelante extras:crypto/aes256
// You can hide files from being treated as packets by
// preceeding the file name with an underscore or dot.
  final public void packet_ref() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      abs_packet_ref();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 2:{
        jj_consume_token(2);
        abs_packet_ref();
        break;
        }
      default:
        jj_la1[26] = jj_gen;
        ;
      }
      break;
      }
    case 3:
    case RANGE:{
      rel_packet_ref();
      break;
      }
    default:
      jj_la1[27] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void abs_packet_ref() throws ParseException {/*@bgen(jjtree) PacketRefPart */
  ASTPacketRefPart jjtn000 = new ASTPacketRefPart(JJTPACKETREFPART);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier();
      label_11:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case SLASH:{
          ;
          break;
          }
        default:
          jj_la1[28] = jj_gen;
          break label_11;
        }
        jj_consume_token(SLASH);
        identifier();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void rel_packet_ref() throws ParseException {/*@bgen(jjtree) PacketRefPart */
  ASTPacketRefPart jjtn000 = new ASTPacketRefPart(JJTPACKETREFPART);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 3:{
        jj_consume_token(3);
        label_12:
        while (true) {
          jj_consume_token(SLASH);
          identifier();
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case SLASH:{
            ;
            break;
            }
          default:
            jj_la1[29] = jj_gen;
            break label_12;
          }
        }
        break;
        }
      case RANGE:{
        label_13:
        while (true) {
ASTDirUp jjtn001 = new ASTDirUp(JJTDIRUP);
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         jjtn001.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(RANGE);
            jj_consume_token(SLASH);
          } finally {
if (jjtc001) {
           jjtree.closeNodeScope(jjtn001, true);
           jjtn001.jjtSetLastToken(getToken(0));
         }
          }
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case RANGE:{
            ;
            break;
            }
          default:
            jj_la1[30] = jj_gen;
            break label_13;
          }
        }
        identifier();
        label_14:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case SLASH:{
            ;
            break;
            }
          default:
            jj_la1[31] = jj_gen;
            break label_14;
          }
          jj_consume_token(SLASH);
          identifier();
        }
        break;
        }
      default:
        jj_la1[32] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void use_transforms() throws ParseException {
    jj_consume_token(4);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case 9:
    case ASSIGN:
    case LARR:
    case RARR:
    case LRARR:
    case LT:
    case GT:
    case LE:
    case GE:
    case NE:
    case EQ:
    case STARSHIP:
    case BAT:
    case TILDE:
    case IN:
    case NOT_IN:
    case SLASH:
    case SLASH_SLASH:
    case AST:
    case CIRCLED_TIMES:
    case CIRCLED_AST:
    case CIRCLED_DOT:
    case CIRCLED_SLASH:
    case AST_AST:
    case AST_SLASH:
    case SLASH_AST:
    case TIMES:
    case PERCENT:
    case BOXED_LT:
    case BOXED_GT:
    case BOXED_LE:
    case BOXED_GE:
    case BOXED_NE:
    case BOXED_EQ:
    case CIRCLED_LT:
    case CIRCLED_GT:
    case CIRCLED_LE:
    case CIRCLED_GE:
    case CIRCLED_NE:
    case CIRCLED_EQ:
    case BOXED_QUEST:
    case BOXED_COLON:
    case BOXED_QUOTE:
    case BOXED_CARET:
    case BOXED_LARR:
    case BOXED_RARR:
    case BOXED_SLASH:
    case BOXED_PLUS:
    case BOXED_MINUS:
    case BOXED_TIMES:
    case BOXED_DOT:
    case BOXED_AST:
    case PLUS:
    case MINUS:
    case PLUS_PLUS:
    case MINUS_MINUS:
    case PLUS_MINUS:
    case MINUS_PLUS:
    case CIRCLED_PLUS:
    case CIRCLED_MINUS:
    case CARET:
    case LL:
    case GG:
    case LLL:
    case EXCLAM:
    case QUEST:
    case QQ:
    case EE:
    case QEX:
    case EXQ:
    case GGG:
    case BAR:
    case AMP:
    case BAR_BAR:
    case AMP_AMP:
    case CARET_CARET:
    case KW_AND:
    case KW_DIV:
    case KW_IMPLIES:
    case KW_IN:
    case KW_MOD:
    case KW_NOT:
    case KW_OR:
    case KW_XOR:
    case IDENTIFIER:{
      use_rename_list();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_WITHOUT:{
        without_clause();
        break;
        }
      default:
        jj_la1[33] = jj_gen;
        ;
      }
      break;
      }
    case KW_ONLY:{
      only_clause();
      break;
      }
    default:
      jj_la1[34] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    jj_consume_token(5);
}

  final public void use_rename_list() throws ParseException {
    use_rename();
    label_15:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 1:{
        ;
        break;
        }
      default:
        jj_la1[35] = jj_gen;
        break label_15;
      }
      jj_consume_token(1);
      use_rename();
    }
}

  final public void use_rename() throws ParseException {/*@bgen(jjtree) UseRename */
  ASTUseRename jjtn000 = new ASTUseRename(JJTUSERENAME);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      import_item();
      jj_consume_token(KW_AS);
      import_item();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void without_clause() throws ParseException {/*@bgen(jjtree) WithoutClause */
  ASTWithoutClause jjtn000 = new ASTWithoutClause(JJTWITHOUTCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_WITHOUT);
      import_item();
      label_16:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[36] = jj_gen;
          break label_16;
        }
        jj_consume_token(1);
        import_item();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void only_clause() throws ParseException {/*@bgen(jjtree) OnlyClause */
  ASTOnlyClause jjtn000 = new ASTOnlyClause(JJTONLYCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_ONLY);
      opt_rename();
      label_17:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[37] = jj_gen;
          break label_17;
        }
        jj_consume_token(1);
        opt_rename();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void opt_rename() throws ParseException {/*@bgen(jjtree) #UseRename(> 1) */
  ASTUseRename jjtn000 = new ASTUseRename(JJTUSERENAME);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      import_item();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_AS:{
        jj_consume_token(KW_AS);
        import_item();
        break;
        }
      default:
        jj_la1[38] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void import_item() throws ParseException {/*@bgen(jjtree) ImportItem */
  ASTImportItem jjtn000 = new ASTImportItem(JJTIMPORTITEM);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        identifier_ref();
        break;
        }
      case 9:
      case ASSIGN:
      case LARR:
      case RARR:
      case LRARR:
      case LT:
      case GT:
      case LE:
      case GE:
      case NE:
      case EQ:
      case STARSHIP:
      case BAT:
      case TILDE:
      case IN:
      case NOT_IN:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_LT:
      case BOXED_GT:
      case BOXED_LE:
      case BOXED_GE:
      case BOXED_NE:
      case BOXED_EQ:
      case CIRCLED_LT:
      case CIRCLED_GT:
      case CIRCLED_LE:
      case CIRCLED_GE:
      case CIRCLED_NE:
      case CIRCLED_EQ:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_AND:
      case KW_DIV:
      case KW_IMPLIES:
      case KW_IN:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_XOR:{
        operator_name();
        break;
        }
      default:
        jj_la1[39] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
          jjtree.clearNodeScope(jjtn000);
          jjtc000 = false;
        } else {
          jjtree.popNode();
        }
        if (jjte000 instanceof RuntimeException) {
          {if (true) throw (RuntimeException)jjte000;}
        }
        if (jjte000 instanceof ParseException) {
          {if (true) throw (ParseException)jjte000;}
        }
        {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
          jjtree.closeNodeScope(jjtn000, true);
          jjtn000.jjtSetLastToken(getToken(0));
        }
    }
}

  final public void bottom_up_part() throws ParseException {
    label_18:
    while (true) {
      bottom_up_decl();
      nl();
      if (jj_2_4(2147483647)) {
        ;
      } else {
        break label_18;
      }
    }
}

  final public void bottom_up_decl() throws ParseException {/*@bgen(jjtree) Decl */
  ASTDecl jjtn000 = new ASTDecl(JJTDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_IMPL:
      case KW_INT:
      case KW_LET:
      case KW_MEASURE:
      case KW_OBSOLETE:
      case KW_OP:
      case KW_PROC:
      case KW_PROTOCOL:
      case KW_PUBLIC:
      case KW_PURE:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TYPE:
      case KW_VOID:
      case IDENTIFIER:{
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_OBSOLETE:
        case KW_PUBLIC:{
          decl_modifiers();
          break;
          }
        default:
          jj_la1[40] = jj_gen;
          ;
        }
        exportable_decl();
        break;
        }
      case KW_TEST:{
        local_decl();
        break;
        }
      default:
        jj_la1[41] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void decl_modifiers() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_PUBLIC:{
      pub_modifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case NL:{
        nl();
        break;
        }
      default:
        jj_la1[42] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_OBSOLETE:{
        obsoletion();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case NL:{
          nl();
          break;
          }
        default:
          jj_la1[43] = jj_gen;
          ;
        }
        break;
        }
      default:
        jj_la1[44] = jj_gen;
        ;
      }
      break;
      }
    case KW_OBSOLETE:{
      obsoletion();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case NL:{
        nl();
        break;
        }
      default:
        jj_la1[45] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_PUBLIC:{
        pub_modifier();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case NL:{
          nl();
          break;
          }
        default:
          jj_la1[46] = jj_gen;
          ;
        }
        break;
        }
      default:
        jj_la1[47] = jj_gen;
        ;
      }
      break;
      }
    default:
      jj_la1[48] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void pub_modifier() throws ParseException {/*@bgen(jjtree) PublicModifier */
  ASTPublicModifier jjtn000 = new ASTPublicModifier(JJTPUBLICMODIFIER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_PUBLIC);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void exportable_decl() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_TYPE:{
      abstract_type_decl();
      break;
      }
    default:
      jj_la1[49] = jj_gen;
      if (jj_2_5(2147483647)) {
        procedure_decl();
      } else if (jj_2_6(2147483647)) {
        operator_decl();
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_MEASURE:{
          measure_decl();
          break;
          }
        case KW_LET:{
          synonym_decl();
          break;
          }
        case KW_PROTOCOL:{
          protocol_decl();
          break;
          }
        case KW_IMPL:{
          automatic_delegation();
          break;
          }
        default:
          jj_la1[50] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
}

  final public void abstract_type_decl() throws ParseException {/*@bgen(jjtree) AbstractTypeDecl */
  ASTAbstractTypeDecl jjtn000 = new ASTAbstractTypeDecl(JJTABSTRACTTYPEDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_TYPE);
      identifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        formal_type_part();
        break;
        }
      default:
        jj_la1[51] = jj_gen;
        ;
      }
      jj_consume_token(EQ);
      abstract_type();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void formal_type_part() throws ParseException {/*@bgen(jjtree) FormalTypePart */
  ASTFormalTypePart jjtn000 = new ASTFormalTypePart(JJTFORMALTYPEPART);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(4);
      formal_type_param();
      label_19:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[52] = jj_gen;
          break label_19;
        }
        jj_consume_token(1);
        formal_type_param();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_HAVING:{
        type_bounds();
        break;
        }
      default:
        jj_la1[53] = jj_gen;
        ;
      }
      jj_consume_token(5);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void formal_type_param() throws ParseException {/*@bgen(jjtree) FormalTypeParam */
  ASTFormalTypeParam jjtn000 = new ASTFormalTypeParam(JJTFORMALTYPEPARAM);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void type_bounds() throws ParseException {/*@bgen(jjtree) TypeBounds */
  ASTTypeBounds jjtn000 = new ASTTypeBounds(JJTTYPEBOUNDS);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_HAVING);
      type_bound_ex();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void type_bound_ex() throws ParseException {
    disjunct_type_bound();
}

  final public void disjunct_type_bound() throws ParseException {/*@bgen(jjtree) #DisjunctTypeBound(> 1) */
  ASTDisjunctTypeBound jjtn000 = new ASTDisjunctTypeBound(JJTDISJUNCTTYPEBOUND);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      conjunct_type_bound();
      label_20:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_OR:{
          ;
          break;
          }
        default:
          jj_la1[54] = jj_gen;
          break label_20;
        }
        jj_consume_token(KW_OR);
        conjunct_type_bound();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void conjunct_type_bound() throws ParseException {/*@bgen(jjtree) #ConjunctTypeBound(> 1) */
  ASTConjunctTypeBound jjtn000 = new ASTConjunctTypeBound(JJTCONJUNCTTYPEBOUND);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      simple_type_bound();
      label_21:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_AND:{
          ;
          break;
          }
        default:
          jj_la1[55] = jj_gen;
          break label_21;
        }
        jj_consume_token(KW_AND);
        simple_type_bound();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void simple_type_bound() throws ParseException {/*@bgen(jjtree) #SimpleTypeBound(> 1) */
  ASTSimpleTypeBound jjtn000 = new ASTSimpleTypeBound(JJTSIMPLETYPEBOUND);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        jj_consume_token(4);
        type_bound_ex();
        jj_consume_token(5);
        break;
        }
      case IDENTIFIER:{
        identifier_ref();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 4:{
          jj_consume_token(4);
          type_declarer();
          label_22:
          while (true) {
            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
            case 1:{
              ;
              break;
              }
            default:
              jj_la1[56] = jj_gen;
              break label_22;
            }
            jj_consume_token(1);
            type_declarer();
          }
          jj_consume_token(5);
          break;
          }
        default:
          jj_la1[57] = jj_gen;
          ;
        }
        break;
        }
      default:
        jj_la1[58] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
       jjtree.clearNodeScope(jjtn000);
       jjtc000 = false;
     } else {
       jjtree.popNode();
     }
     if (jjte000 instanceof RuntimeException) {
       {if (true) throw (RuntimeException)jjte000;}
     }
     if (jjte000 instanceof ParseException) {
       {if (true) throw (ParseException)jjte000;}
     }
     {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
       jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
       jjtn000.jjtSetLastToken(getToken(0));
     }
    }
}

  final public void abstract_type() throws ParseException {/*@bgen(jjtree) AbstractType */
  ASTAbstractType jjtn000 = new ASTAbstractType(JJTABSTRACTTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      type_declarer();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void procedure_decl() throws ParseException {/*@bgen(jjtree) ProcedureDecl */
  ASTProcedureDecl jjtn000 = new ASTProcedureDecl(JJTPROCEDUREDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      procedure_head();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        procedure_body();
        break;
        }
      default:
        jj_la1[59] = jj_gen;
        ;
      }
      procedure_tail();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void pure_modifier() throws ParseException {/*@bgen(jjtree) PureModifier */
  ASTPureModifier jjtn000 = new ASTPureModifier(JJTPUREMODIFIER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_PURE);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void procedure_head() throws ParseException {/*@bgen(jjtree) ProcedureHead */
  ASTProcedureHead jjtn000 = new ASTProcedureHead(JJTPROCEDUREHEAD);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_PURE:{
        pure_modifier();
        break;
        }
      default:
        jj_la1[60] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_INT:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        type_declarer();
        break;
        }
      default:
        jj_la1[61] = jj_gen;
        ;
      }
      jj_consume_token(KW_PROC);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        formal_measure_part();
        break;
        }
      default:
        jj_la1[62] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        formal_type_part();
        break;
        }
      default:
        jj_la1[63] = jj_gen;
        ;
      }
      procedure_naming();
      nl();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ENSURES:
      case KW_INVARIANT:
      case KW_REQUIRES:
      case KW_VARIANT:{
        procedure_contracts();
        break;
        }
      default:
        jj_la1[64] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void procedure_tail() throws ParseException {/*@bgen(jjtree) BlockTail */
  ASTBlockTail jjtn000 = new ASTBlockTail(JJTBLOCKTAIL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_PROC);
        break;
        }
      case KW_ENDPROC:{
        jj_consume_token(KW_ENDPROC);
        break;
        }
      default:
        jj_la1[65] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        identifier_ref();
        break;
        }
      default:
        jj_la1[66] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void formal_measure_part() throws ParseException {/*@bgen(jjtree) FormalMeasurePart */
  ASTFormalMeasurePart jjtn000 = new ASTFormalMeasurePart(JJTFORMALMEASUREPART);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(6);
      identifier();
      label_23:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[67] = jj_gen;
          break label_23;
        }
        jj_consume_token(1);
        identifier();
      }
      jj_consume_token(7);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void procedure_naming() throws ParseException {/*@bgen(jjtree) ProcedureNaming */
  ASTProcedureNaming jjtn000 = new ASTProcedureNaming(JJTPROCEDURENAMING);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        procedure_naming_cont();
        break;
        }
      default:
        jj_la1[68] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void procedure_naming_cont() throws ParseException {
    formal_parameter_pack();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      identifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        procedure_naming_cont();
        break;
        }
      default:
        jj_la1[69] = jj_gen;
        ;
      }
      break;
      }
    default:
      jj_la1[70] = jj_gen;
      ;
    }
}

  final public void formal_parameter_pack() throws ParseException {/*@bgen(jjtree) FormalParameterPack */
  ASTFormalParameterPack jjtn000 = new ASTFormalParameterPack(JJTFORMALPARAMETERPACK);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(4);
      parameter_head();
      parameter_body();
      label_24:
      while (true) {
        if (jj_2_7(3)) {
          ;
        } else {
          break label_24;
        }
        jj_consume_token(1);
        parameter_body();
      }
      label_25:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[71] = jj_gen;
          break label_25;
        }
        jj_consume_token(1);
        parameter_head();
        parameter_body();
        label_26:
        while (true) {
          if (jj_2_8(3)) {
            ;
          } else {
            break label_26;
          }
          jj_consume_token(1);
          parameter_body();
        }
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ELLIPSIS:{
        jj_consume_token(ELLIPSIS);
        break;
        }
      default:
        jj_la1[72] = jj_gen;
        ;
      }
      jj_consume_token(5);
    } catch (Throwable jjte000) {
if (jjtc000) {
       jjtree.clearNodeScope(jjtn000);
       jjtc000 = false;
     } else {
       jjtree.popNode();
     }
     if (jjte000 instanceof RuntimeException) {
       {if (true) throw (RuntimeException)jjte000;}
     }
     if (jjte000 instanceof ParseException) {
       {if (true) throw (ParseException)jjte000;}
     }
     {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
       jjtree.closeNodeScope(jjtn000, true);
       jjtn000.jjtSetLastToken(getToken(0));
     }
    }
}

  final public void access_modifier() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_VAR:{
ASTVarModifier jjtn001 = new ASTVarModifier(JJTVARMODIFIER);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_VAR);
      } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
      }
      break;
      }
    case KW_CONST:{
ASTConstModifier jjtn002 = new ASTConstModifier(JJTCONSTMODIFIER);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_CONST);
      } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    default:
      jj_la1[73] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void parameter_head() throws ParseException {/*@bgen(jjtree) ParameterHead */
  ASTParameterHead jjtn000 = new ASTParameterHead(JJTPARAMETERHEAD);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_INT:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        type_declarer();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_CONST:
        case KW_VAR:{
          access_modifier();
          break;
          }
        case KW_PROC:{
          proc_param();
          break;
          }
        default:
          jj_la1[74] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
        break;
        }
      case KW_PROC:{
        proc_param();
        break;
        }
      case KW_PURE:{
        pure_modifier();
        type_declarer();
        proc_param();
        break;
        }
      default:
        jj_la1[75] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void proc_param() throws ParseException {/*@bgen(jjtree) ProcParam */
  ASTProcParam jjtn000 = new ASTProcParam(JJTPROCPARAM);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_PROC);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        virtual_parameters_pack();
        break;
        }
      default:
        jj_la1[76] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void virtual_parameters_pack() throws ParseException {/*@bgen(jjtree) VirtualParametersPack */
  ASTVirtualParametersPack jjtn000 = new ASTVirtualParametersPack(JJTVIRTUALPARAMETERSPACK);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(4);
      parameter_head();
      label_27:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[77] = jj_gen;
          break label_27;
        }
        jj_consume_token(1);
        parameter_head();
      }
      jj_consume_token(5);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void parameter_body() throws ParseException {/*@bgen(jjtree) ParameterBody */
  ASTParameterBody jjtn000 = new ASTParameterBody(JJTPARAMETERBODY);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void procedure_contracts() throws ParseException {
    label_28:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_REQUIRES:{
        precondition();
        break;
        }
      case KW_ENSURES:{
        postcondition();
        break;
        }
      case KW_INVARIANT:{
        invariant();
        break;
        }
      case KW_VARIANT:{
        variant();
        break;
        }
      default:
        jj_la1[78] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ENSURES:
      case KW_INVARIANT:
      case KW_REQUIRES:
      case KW_VARIANT:{
        ;
        break;
        }
      default:
        jj_la1[79] = jj_gen;
        break label_28;
      }
    }
}

  final public void operator_decl() throws ParseException {/*@bgen(jjtree) OperatorDecl */
  ASTOperatorDecl jjtn000 = new ASTOperatorDecl(JJTOPERATORDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      operator_head();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        procedure_body();
        break;
        }
      default:
        jj_la1[80] = jj_gen;
        ;
      }
      operator_tail();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void operator_head() throws ParseException {/*@bgen(jjtree) OperatorHead */
  ASTOperatorHead jjtn000 = new ASTOperatorHead(JJTOPERATORHEAD);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_PURE:{
        pure_modifier();
        break;
        }
      default:
        jj_la1[81] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_INT:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        type_declarer();
        break;
        }
      default:
        jj_la1[82] = jj_gen;
        ;
      }
      jj_consume_token(KW_OP);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        formal_measure_part();
        break;
        }
      default:
        jj_la1[83] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        formal_type_part();
        break;
        }
      default:
        jj_la1[84] = jj_gen;
        ;
      }
      operator_name();
      formal_parameter_pack();
      nl();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ENSURES:
      case KW_INVARIANT:
      case KW_REQUIRES:
      case KW_VARIANT:{
        procedure_contracts();
        break;
        }
      default:
        jj_la1[85] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void operator_tail() throws ParseException {/*@bgen(jjtree) BlockTail */
  ASTBlockTail jjtn000 = new ASTBlockTail(JJTBLOCKTAIL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_OP);
        break;
        }
      case KW_ENDOP:{
        jj_consume_token(KW_ENDOP);
        break;
        }
      default:
        jj_la1[86] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 9:
      case ASSIGN:
      case LARR:
      case RARR:
      case LRARR:
      case LT:
      case GT:
      case LE:
      case GE:
      case NE:
      case EQ:
      case STARSHIP:
      case BAT:
      case TILDE:
      case IN:
      case NOT_IN:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_LT:
      case BOXED_GT:
      case BOXED_LE:
      case BOXED_GE:
      case BOXED_NE:
      case BOXED_EQ:
      case CIRCLED_LT:
      case CIRCLED_GT:
      case CIRCLED_LE:
      case CIRCLED_GE:
      case CIRCLED_NE:
      case CIRCLED_EQ:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_AND:
      case KW_DIV:
      case KW_IMPLIES:
      case KW_IN:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_XOR:{
        operator_name();
        break;
        }
      default:
        jj_la1[87] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void synonym_decl() throws ParseException {
    if (jj_2_9(2)) {
      expression_synonym();
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_LET:{
        type_synonym();
        break;
        }
      default:
        jj_la1[88] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
}

  final public void expression_synonym() throws ParseException {/*@bgen(jjtree) ExpressionSynonym */
  ASTExpressionSynonym jjtn000 = new ASTExpressionSynonym(JJTEXPRESSIONSYNONYM);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_LET);
      identifier();
      jj_consume_token(EQ);
      expression();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void type_synonym() throws ParseException {/*@bgen(jjtree) TypeSynonym */
  ASTTypeSynonym jjtn000 = new ASTTypeSynonym(JJTTYPESYNONYM);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_LET);
      jj_consume_token(KW_TYPE);
      identifier();
      jj_consume_token(EQ);
      type_declarer();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void protocol_decl() throws ParseException {/*@bgen(jjtree) ProtocolDecl */
  ASTProtocolDecl jjtn000 = new ASTProtocolDecl(JJTPROTOCOLDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      protocol_head();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_HAVING:
      case KW_INT:
      case KW_PROC:
      case KW_PURE:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        protocol_body();
        break;
        }
      default:
        jj_la1[89] = jj_gen;
        ;
      }
      protocol_tail();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void protocol_head() throws ParseException {/*@bgen(jjtree) ProtocolDecl */
  ASTProtocolDecl jjtn000 = new ASTProtocolDecl(JJTPROTOCOLDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_PROTOCOL);
      identifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        formal_measure_part();
        break;
        }
      default:
        jj_la1[90] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        formal_type_part();
        break;
        }
      default:
        jj_la1[91] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void protocol_body() throws ParseException {
    label_29:
    while (true) {
      protocol_assertion();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_HAVING:
      case KW_INT:
      case KW_PROC:
      case KW_PURE:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        ;
        break;
        }
      default:
        jj_la1[92] = jj_gen;
        break label_29;
      }
    }
}

  final public void protocol_assertion() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_HAVING:{
      type_bounds();
      break;
      }
    case KW_BOOL:
    case KW_ENUM:
    case KW_INT:
    case KW_PROC:
    case KW_PURE:
    case KW_REAL:
    case KW_STRUCT:
    case KW_TEXT:
    case KW_VOID:
    case IDENTIFIER:{
      signature();
      break;
      }
    default:
      jj_la1[93] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void signature() throws ParseException {/*@bgen(jjtree) Signature */
  ASTSignature jjtn000 = new ASTSignature(JJTSIGNATURE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_PURE:{
        pure_modifier();
        break;
        }
      default:
        jj_la1[94] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_INT:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        type_declarer();
        break;
        }
      default:
        jj_la1[95] = jj_gen;
        ;
      }
      jj_consume_token(KW_PROC);
      virtual_procedure_naming();
      jj_consume_token(KW_OP);
      operator_name();
      virtual_parameters_pack();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void virtual_procedure_naming() throws ParseException {
    identifier();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case 4:{
      virtual_procedure_naming_cont();
      break;
      }
    default:
      jj_la1[96] = jj_gen;
      ;
    }
}

  final public void virtual_procedure_naming_cont() throws ParseException {
    virtual_parameters_pack();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      identifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        virtual_procedure_naming_cont();
        break;
        }
      default:
        jj_la1[97] = jj_gen;
        ;
      }
      break;
      }
    default:
      jj_la1[98] = jj_gen;
      ;
    }
}

  final public void protocol_tail() throws ParseException {/*@bgen(jjtree) BlockTail */
  ASTBlockTail jjtn000 = new ASTBlockTail(JJTBLOCKTAIL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_PROTOCOL);
        break;
        }
      case KW_ENDPROTOCOL:{
        jj_consume_token(KW_ENDPROTOCOL);
        break;
        }
      default:
        jj_la1[99] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        identifier_ref();
        break;
        }
      default:
        jj_la1[100] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void automatic_delegation() throws ParseException {/*@bgen(jjtree) AutomaticDelegation */
  ASTAutomaticDelegation jjtn000 = new ASTAutomaticDelegation(JJTAUTOMATICDELEGATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_IMPL);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        formal_measure_part();
        break;
        }
      default:
        jj_la1[101] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        formal_type_part();
        break;
        }
      default:
        jj_la1[102] = jj_gen;
        ;
      }
      identifier_ref();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        formal_parameter_pack();
        break;
        }
      default:
        jj_la1[103] = jj_gen;
        ;
      }
      jj_consume_token(KW_BY);
      impl_protocol();
      label_30:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[104] = jj_gen;
          break label_30;
        }
        jj_consume_token(1);
        impl_protocol();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void impl_protocol() throws ParseException {/*@bgen(jjtree) ImplProtocol */
  ASTImplProtocol jjtn000 = new ASTImplProtocol(JJTIMPLPROTOCOL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier_ref();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        actual_parameter_list();
        break;
        }
      default:
        jj_la1[105] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void measure_decl() throws ParseException {/*@bgen(jjtree) MeasureDecl */
  ASTMeasureDecl jjtn000 = new ASTMeasureDecl(JJTMEASUREDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_MEASURE);
      identifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case EQ:{
        jj_consume_token(EQ);
        dim_expression();
        break;
        }
      default:
        jj_la1[106] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void local_decl() throws ParseException {
    unit_test();
}

  final public void unit_test() throws ParseException {/*@bgen(jjtree) UnitTest */
  ASTUnitTest jjtn000 = new ASTUnitTest(JJTUNITTEST);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_TEST);
      identifier();
      nl();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        procedure_body();
        break;
        }
      default:
        jj_la1[107] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_TEST);
        break;
        }
      case KW_ENDTEST:{
        jj_consume_token(KW_ENDTEST);
        break;
        }
      default:
        jj_la1[108] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        identifier_ref();
        break;
        }
      default:
        jj_la1[109] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void procedure_body() throws ParseException {/*@bgen(jjtree) Body */
  ASTBody jjtn000 = new ASTBody(JJTBODY);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      paragraph();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        top_down_part();
        break;
        }
      default:
        jj_la1[110] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void root() throws ParseException {/*@bgen(jjtree) Root */
  ASTRoot jjtn000 = new ASTRoot(JJTROOT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      if (jj_2_10(2)) {
        refinement();
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 4:
        case 9:
        case LARR:
        case RARR:
        case LRARR:
        case STARSHIP:
        case BAT:
        case TILDE:
        case SLASH:
        case SLASH_SLASH:
        case AST:
        case CIRCLED_TIMES:
        case CIRCLED_AST:
        case CIRCLED_DOT:
        case CIRCLED_SLASH:
        case AST_AST:
        case AST_SLASH:
        case SLASH_AST:
        case TIMES:
        case PERCENT:
        case BOXED_QUEST:
        case BOXED_COLON:
        case BOXED_QUOTE:
        case BOXED_CARET:
        case BOXED_LARR:
        case BOXED_RARR:
        case BOXED_SLASH:
        case BOXED_PLUS:
        case BOXED_MINUS:
        case BOXED_TIMES:
        case BOXED_DOT:
        case BOXED_AST:
        case PLUS:
        case MINUS:
        case PLUS_PLUS:
        case MINUS_MINUS:
        case PLUS_MINUS:
        case MINUS_PLUS:
        case CIRCLED_PLUS:
        case CIRCLED_MINUS:
        case CARET:
        case LL:
        case GG:
        case LLL:
        case EXCLAM:
        case QUEST:
        case QQ:
        case EE:
        case QEX:
        case EXQ:
        case GGG:
        case BAR:
        case AMP:
        case BAR_BAR:
        case AMP_AMP:
        case CARET_CARET:
        case KW_ACROSS:
        case KW_AND:
        case KW_BOOL:
        case KW_CHECK:
        case KW_CONST:
        case KW_CONCR:
        case KW_CONTINUE:
        case KW_DIV:
        case KW_ENUM:
        case KW_FALSE:
        case KW_IF:
        case KW_IMPLIES:
        case KW_INT:
        case KW_LEAVE:
        case KW_MOD:
        case KW_NOT:
        case KW_OR:
        case KW_REAL:
        case KW_REPEAT:
        case KW_SELECT:
        case KW_STRUCT:
        case KW_TEXT:
        case KW_TRUE:
        case KW_VAR:
        case KW_VOID:
        case KW_WHILE:
        case KW_WITH:
        case KW_XOR:
        case IDENTIFIER:
        case TEXT_LITERAL:
        case TEXT_HEAD:
        case DECIMAL_LITERAL:
        case RADIX_LITERAL:
        case REAL_LITERAL:{
          paragraph();
          break;
          }
        default:
          jj_la1[111] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
          jjtree.clearNodeScope(jjtn000);
          jjtc000 = false;
        } else {
          jjtree.popNode();
        }
        if (jjte000 instanceof RuntimeException) {
          {if (true) throw (RuntimeException)jjte000;}
        }
        if (jjte000 instanceof ParseException) {
          {if (true) throw (ParseException)jjte000;}
        }
        {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
          jjtree.closeNodeScope(jjtn000, true);
          jjtn000.jjtSetLastToken(getToken(0));
        }
    }
}

  final public void top_down_part() throws ParseException {
    refinement();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      top_down_part();
      break;
      }
    default:
      jj_la1[112] = jj_gen;
      ;
    }
}

  final public void refinement() throws ParseException {/*@bgen(jjtree) Refinement */
  ASTRefinement jjtn000 = new ASTRefinement(JJTREFINEMENT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier();
      jj_consume_token(2);
      nl();
      if (jj_2_11(2)) {
        paragraph();
      } else {
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void paragraph() throws ParseException {/*@bgen(jjtree) Paragraph */
  ASTParagraph jjtn000 = new ASTParagraph(JJTPARAGRAPH);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      label_31:
      while (true) {
        unit();
        nl();
        if (jj_2_12(2)) {
          ;
        } else {
          break label_31;
        }
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void unit() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_CHECK:{
      assertion();
      break;
      }
    default:
      jj_la1[113] = jj_gen;
      if (jj_2_13(2147483647)) {
        object_decl();
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 4:
        case 9:
        case LARR:
        case RARR:
        case LRARR:
        case STARSHIP:
        case BAT:
        case TILDE:
        case SLASH:
        case SLASH_SLASH:
        case AST:
        case CIRCLED_TIMES:
        case CIRCLED_AST:
        case CIRCLED_DOT:
        case CIRCLED_SLASH:
        case AST_AST:
        case AST_SLASH:
        case SLASH_AST:
        case TIMES:
        case PERCENT:
        case BOXED_QUEST:
        case BOXED_COLON:
        case BOXED_QUOTE:
        case BOXED_CARET:
        case BOXED_LARR:
        case BOXED_RARR:
        case BOXED_SLASH:
        case BOXED_PLUS:
        case BOXED_MINUS:
        case BOXED_TIMES:
        case BOXED_DOT:
        case BOXED_AST:
        case PLUS:
        case MINUS:
        case PLUS_PLUS:
        case MINUS_MINUS:
        case PLUS_MINUS:
        case MINUS_PLUS:
        case CIRCLED_PLUS:
        case CIRCLED_MINUS:
        case CARET:
        case LL:
        case GG:
        case LLL:
        case EXCLAM:
        case QUEST:
        case QQ:
        case EE:
        case QEX:
        case EXQ:
        case GGG:
        case BAR:
        case AMP:
        case BAR_BAR:
        case AMP_AMP:
        case CARET_CARET:
        case KW_ACROSS:
        case KW_AND:
        case KW_CONCR:
        case KW_CONTINUE:
        case KW_DIV:
        case KW_FALSE:
        case KW_IF:
        case KW_IMPLIES:
        case KW_LEAVE:
        case KW_MOD:
        case KW_NOT:
        case KW_OR:
        case KW_REPEAT:
        case KW_SELECT:
        case KW_TRUE:
        case KW_WHILE:
        case KW_WITH:
        case KW_XOR:
        case IDENTIFIER:
        case TEXT_LITERAL:
        case TEXT_HEAD:
        case DECIMAL_LITERAL:
        case RADIX_LITERAL:
        case REAL_LITERAL:{
          expression_statement();
          break;
          }
        default:
          jj_la1[114] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
}

  final public void assertion() throws ParseException {/*@bgen(jjtree) Assertion */
  ASTAssertion jjtn000 = new ASTAssertion(JJTASSERTION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_CHECK);
      expression();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BECAUSE:{
        reason();
        break;
        }
      default:
        jj_la1[115] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void precondition() throws ParseException {/*@bgen(jjtree) Precondition */
  ASTPrecondition jjtn000 = new ASTPrecondition(JJTPRECONDITION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_REQUIRES);
      expression();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BECAUSE:{
        reason();
        break;
        }
      default:
        jj_la1[116] = jj_gen;
        ;
      }
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void postcondition() throws ParseException {/*@bgen(jjtree) Postcondition */
  ASTPostcondition jjtn000 = new ASTPostcondition(JJTPOSTCONDITION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_ENSURES);
      expression();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BECAUSE:{
        reason();
        break;
        }
      default:
        jj_la1[117] = jj_gen;
        ;
      }
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void invariant() throws ParseException {/*@bgen(jjtree) Invariant */
  ASTInvariant jjtn000 = new ASTInvariant(JJTINVARIANT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_INVARIANT);
      expression();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BECAUSE:{
        reason();
        break;
        }
      default:
        jj_la1[118] = jj_gen;
        ;
      }
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void variant() throws ParseException {/*@bgen(jjtree) Variant */
  ASTVariant jjtn000 = new ASTVariant(JJTVARIANT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_VARIANT);
      expression();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BECAUSE:{
        reason();
        break;
        }
      default:
        jj_la1[119] = jj_gen;
        ;
      }
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void protocol_instances() throws ParseException {
    protocol_instance();
    label_32:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 1:{
        ;
        break;
        }
      default:
        jj_la1[120] = jj_gen;
        break label_32;
      }
      jj_consume_token(1);
      protocol_instance();
    }
}

  final public void protocol_instance() throws ParseException {/*@bgen(jjtree) ProtocolInstance */
  ASTProtocolInstance jjtn000 = new ASTProtocolInstance(JJTPROTOCOLINSTANCE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier_ref();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        virtual_parameters_pack();
        break;
        }
      default:
        jj_la1[121] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void expression_statement() throws ParseException {/*@bgen(jjtree) ExpressionStatement */
  ASTExpressionStatement jjtn000 = new ASTExpressionStatement(JJTEXPRESSIONSTATEMENT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      expression();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void expression() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case 4:
    case 9:
    case LARR:
    case RARR:
    case LRARR:
    case STARSHIP:
    case BAT:
    case TILDE:
    case SLASH:
    case SLASH_SLASH:
    case AST:
    case CIRCLED_TIMES:
    case CIRCLED_AST:
    case CIRCLED_DOT:
    case CIRCLED_SLASH:
    case AST_AST:
    case AST_SLASH:
    case SLASH_AST:
    case TIMES:
    case PERCENT:
    case BOXED_QUEST:
    case BOXED_COLON:
    case BOXED_QUOTE:
    case BOXED_CARET:
    case BOXED_LARR:
    case BOXED_RARR:
    case BOXED_SLASH:
    case BOXED_PLUS:
    case BOXED_MINUS:
    case BOXED_TIMES:
    case BOXED_DOT:
    case BOXED_AST:
    case PLUS:
    case MINUS:
    case PLUS_PLUS:
    case MINUS_MINUS:
    case PLUS_MINUS:
    case MINUS_PLUS:
    case CIRCLED_PLUS:
    case CIRCLED_MINUS:
    case CARET:
    case LL:
    case GG:
    case LLL:
    case EXCLAM:
    case QUEST:
    case QQ:
    case EE:
    case QEX:
    case EXQ:
    case GGG:
    case BAR:
    case AMP:
    case BAR_BAR:
    case AMP_AMP:
    case CARET_CARET:
    case KW_AND:
    case KW_CONCR:
    case KW_DIV:
    case KW_FALSE:
    case KW_IF:
    case KW_IMPLIES:
    case KW_MOD:
    case KW_NOT:
    case KW_OR:
    case KW_SELECT:
    case KW_TRUE:
    case KW_WITH:
    case KW_XOR:
    case IDENTIFIER:
    case TEXT_LITERAL:
    case TEXT_HEAD:
    case DECIMAL_LITERAL:
    case RADIX_LITERAL:
    case REAL_LITERAL:{
      assignment_ex();
      break;
      }
    case KW_LEAVE:{
      terminator();
      break;
      }
    case KW_CONTINUE:{
      continuator();
      break;
      }
    case KW_ACROSS:
    case KW_REPEAT:
    case KW_WHILE:{
      repetition();
      break;
      }
    default:
      jj_la1[122] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void assignment_ex() throws ParseException {/*@bgen(jjtree) #AssignmentExpression(> 1) */
  ASTAssignmentExpression jjtn000 = new ASTAssignmentExpression(JJTASSIGNMENTEXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      abstract_bin_ex();
      if (jj_2_14(3)) {
        assignment_op();
        expression();
      } else {
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void abstract_bin_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LARR:
      case RARR:
      case LRARR:
      case BOXED_LARR:
      case BOXED_RARR:{
        abstract_bin_op();
        break;
        }
      default:
        jj_la1[123] = jj_gen;
        ;
      }
      disjunct_ex();
      label_33:
      while (true) {
        if (jj_2_15(2)) {
          ;
        } else {
          break label_33;
        }
        abstract_bin_op();
        disjunct_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void disjunct_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_IMPLIES:
      case KW_OR:
      case KW_XOR:{
        disjunct_op();
        break;
        }
      default:
        jj_la1[124] = jj_gen;
        ;
      }
      conjunct_ex();
      label_34:
      while (true) {
        if (jj_2_16(3)) {
          ;
        } else {
          break label_34;
        }
        disjunct_op();
        conjunct_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void conjunct_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_AND:{
        conjunct_op();
        break;
        }
      default:
        jj_la1[125] = jj_gen;
        ;
      }
      comp_ex();
      label_35:
      while (true) {
        if (jj_2_17(3)) {
          ;
        } else {
          break label_35;
        }
        conjunct_op();
        comp_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

// Comparison expressions with more than two operands
// are evaluated as (a op1 b) AND (b op2 c) AND ...
  final public void comp_ex() throws ParseException {/*@bgen(jjtree) #ComparisonExpression(> 1) */
  ASTComparisonExpression jjtn000 = new ASTComparisonExpression(JJTCOMPARISONEXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      numeric_ex();
      label_36:
      while (true) {
        if (jj_2_18(3)) {
          ;
        } else {
          break label_36;
        }
        comp_op();
        numeric_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void numeric_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case STARSHIP:
      case BAT:
      case TILDE:{
        numeric_op();
        break;
        }
      default:
        jj_la1[126] = jj_gen;
        ;
      }
      arith_ex();
      label_37:
      while (true) {
        if (jj_2_19(2)) {
          ;
        } else {
          break label_37;
        }
        numeric_op();
        arith_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void arith_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BOXED_PLUS:
      case BOXED_MINUS:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:{
        arith_op();
        break;
        }
      default:
        jj_la1[127] = jj_gen;
        ;
      }
      prod_ex();
      label_38:
      while (true) {
        if (jj_2_20(2)) {
          ;
        } else {
          break label_38;
        }
        arith_op();
        prod_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void prod_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_COLON:
      case BOXED_SLASH:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case KW_DIV:
      case KW_MOD:{
        prod_op();
        break;
        }
      default:
        jj_la1[128] = jj_gen;
        ;
      }
      pow_ex();
      label_39:
      while (true) {
        if (jj_2_21(2)) {
          ;
        } else {
          break label_39;
        }
        prod_op();
        pow_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void pow_ex() throws ParseException {/*@bgen(jjtree) #PowerExpression(> 1) */
  ASTPowerExpression jjtn000 = new ASTPowerExpression(JJTPOWEREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case BOXED_QUEST:
      case BOXED_QUOTE:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_CONCR:
      case KW_FALSE:
      case KW_IF:
      case KW_NOT:
      case KW_SELECT:
      case KW_TRUE:
      case KW_WITH:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        tight_ex();
        if (jj_2_22(2)) {
          pow_op();
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case PLUS:
          case MINUS:{
            sign();
            break;
            }
          default:
            jj_la1[129] = jj_gen;
            ;
          }
          tight_ex();
        } else {
          ;
        }
        break;
        }
      default:
        jj_la1[130] = jj_gen;
        if (jj_2_23(2)) {
          pow_op();
          tight_ex();
        } else {
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void tight_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BOXED_QUEST:
      case BOXED_QUOTE:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_NOT:{
        tight_op();
        break;
        }
      default:
        jj_la1[131] = jj_gen;
        ;
      }
      primary_ex();
      label_40:
      while (true) {
        if (jj_2_24(2)) {
          ;
        } else {
          break label_40;
        }
        tight_op();
        primary_ex();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void primary_ex() throws ParseException {/*@bgen(jjtree) #OperatorExpression(> 1) */
  ASTOperatorExpression jjtn000 = new ASTOperatorExpression(JJTOPERATOREXPRESSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      atomic_ex();
      label_41:
      while (true) {
        if (jj_2_25(3)) {
          ;
        } else {
          break label_41;
        }
        ex_suffix();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void atomic_ex() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case 4:{
      jj_consume_token(4);
      expression();
      jj_consume_token(5);
      break;
      }
    case KW_FALSE:
    case KW_TRUE:
    case TEXT_LITERAL:
    case TEXT_HEAD:
    case DECIMAL_LITERAL:
    case RADIX_LITERAL:
    case REAL_LITERAL:{
      denoter();
      break;
      }
    case KW_CONCR:{
      concretizer();
      break;
      }
    case KW_IF:{
      conditional_choice();
      break;
      }
    case KW_SELECT:{
      pattern_matching();
      break;
      }
    case KW_WITH:{
      with_statement();
      break;
      }
    case 9:{
      display();
      break;
      }
    default:
      jj_la1[132] = jj_gen;
      if (jj_2_26(3)) {
        abstractor();
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case IDENTIFIER:{
          identifier_ref();
          break;
          }
        default:
          jj_la1[133] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
}

  final public void denoter() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case DECIMAL_LITERAL:
    case RADIX_LITERAL:{
      integer_denotation();
      break;
      }
    case REAL_LITERAL:{
      real_denotation();
      break;
      }
    case TEXT_LITERAL:
    case TEXT_HEAD:{
      text_denotation();
      break;
      }
    case KW_FALSE:
    case KW_TRUE:{
      bool_denotation();
      break;
      }
    default:
      jj_la1[134] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void concretizer() throws ParseException {/*@bgen(jjtree) Concretizer */
  ASTConcretizer jjtn000 = new ASTConcretizer(JJTCONCRETIZER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_CONCR);
      atomic_ex();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void abstractor() throws ParseException {/*@bgen(jjtree) Abstractor */
  ASTAbstractor jjtn000 = new ASTAbstractor(JJTABSTRACTOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier_ref();
      jj_consume_token(2);
      atomic_ex();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void conditional_choice() throws ParseException {/*@bgen(jjtree) ConditionalChoice */
  ASTConditionalChoice jjtn000 = new ASTConditionalChoice(JJTCONDITIONALCHOICE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
ASTConditionalBranch jjtn001 = new ASTConditionalBranch(JJTCONDITIONALBRANCH);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_IF);
        expression();
        jj_consume_token(KW_THEN);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 4:
        case 9:
        case LARR:
        case RARR:
        case LRARR:
        case STARSHIP:
        case BAT:
        case TILDE:
        case SLASH:
        case SLASH_SLASH:
        case AST:
        case CIRCLED_TIMES:
        case CIRCLED_AST:
        case CIRCLED_DOT:
        case CIRCLED_SLASH:
        case AST_AST:
        case AST_SLASH:
        case SLASH_AST:
        case TIMES:
        case PERCENT:
        case BOXED_QUEST:
        case BOXED_COLON:
        case BOXED_QUOTE:
        case BOXED_CARET:
        case BOXED_LARR:
        case BOXED_RARR:
        case BOXED_SLASH:
        case BOXED_PLUS:
        case BOXED_MINUS:
        case BOXED_TIMES:
        case BOXED_DOT:
        case BOXED_AST:
        case PLUS:
        case MINUS:
        case PLUS_PLUS:
        case MINUS_MINUS:
        case PLUS_MINUS:
        case MINUS_PLUS:
        case CIRCLED_PLUS:
        case CIRCLED_MINUS:
        case CARET:
        case LL:
        case GG:
        case LLL:
        case EXCLAM:
        case QUEST:
        case QQ:
        case EE:
        case QEX:
        case EXQ:
        case GGG:
        case BAR:
        case AMP:
        case BAR_BAR:
        case AMP_AMP:
        case CARET_CARET:
        case KW_ACROSS:
        case KW_AND:
        case KW_BOOL:
        case KW_CHECK:
        case KW_CONST:
        case KW_CONCR:
        case KW_CONTINUE:
        case KW_DIV:
        case KW_ENUM:
        case KW_FALSE:
        case KW_IF:
        case KW_IMPLIES:
        case KW_INT:
        case KW_LEAVE:
        case KW_MOD:
        case KW_NOT:
        case KW_OR:
        case KW_REAL:
        case KW_REPEAT:
        case KW_SELECT:
        case KW_STRUCT:
        case KW_TEXT:
        case KW_TRUE:
        case KW_VAR:
        case KW_VOID:
        case KW_WHILE:
        case KW_WITH:
        case KW_XOR:
        case IDENTIFIER:
        case TEXT_LITERAL:
        case TEXT_HEAD:
        case DECIMAL_LITERAL:
        case RADIX_LITERAL:
        case REAL_LITERAL:{
          paragraph();
          break;
          }
        default:
          jj_la1[135] = jj_gen;
          ;
        }
      } catch (Throwable jjte001) {
if (jjtc001) {
        jjtree.clearNodeScope(jjtn001);
        jjtc001 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte001 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte001;}
      }
      if (jjte001 instanceof ParseException) {
        {if (true) throw (ParseException)jjte001;}
      }
      {if (true) throw (Error)jjte001;}
      } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
      }
      label_42:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_ELIF:{
          ;
          break;
          }
        default:
          jj_la1[136] = jj_gen;
          break label_42;
        }
ASTConditionalBranch jjtn002 = new ASTConditionalBranch(JJTCONDITIONALBRANCH);
       boolean jjtc002 = true;
       jjtree.openNodeScope(jjtn002);
       jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(KW_ELIF);
          expression();
          jj_consume_token(KW_THEN);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 4:
          case 9:
          case LARR:
          case RARR:
          case LRARR:
          case STARSHIP:
          case BAT:
          case TILDE:
          case SLASH:
          case SLASH_SLASH:
          case AST:
          case CIRCLED_TIMES:
          case CIRCLED_AST:
          case CIRCLED_DOT:
          case CIRCLED_SLASH:
          case AST_AST:
          case AST_SLASH:
          case SLASH_AST:
          case TIMES:
          case PERCENT:
          case BOXED_QUEST:
          case BOXED_COLON:
          case BOXED_QUOTE:
          case BOXED_CARET:
          case BOXED_LARR:
          case BOXED_RARR:
          case BOXED_SLASH:
          case BOXED_PLUS:
          case BOXED_MINUS:
          case BOXED_TIMES:
          case BOXED_DOT:
          case BOXED_AST:
          case PLUS:
          case MINUS:
          case PLUS_PLUS:
          case MINUS_MINUS:
          case PLUS_MINUS:
          case MINUS_PLUS:
          case CIRCLED_PLUS:
          case CIRCLED_MINUS:
          case CARET:
          case LL:
          case GG:
          case LLL:
          case EXCLAM:
          case QUEST:
          case QQ:
          case EE:
          case QEX:
          case EXQ:
          case GGG:
          case BAR:
          case AMP:
          case BAR_BAR:
          case AMP_AMP:
          case CARET_CARET:
          case KW_ACROSS:
          case KW_AND:
          case KW_BOOL:
          case KW_CHECK:
          case KW_CONST:
          case KW_CONCR:
          case KW_CONTINUE:
          case KW_DIV:
          case KW_ENUM:
          case KW_FALSE:
          case KW_IF:
          case KW_IMPLIES:
          case KW_INT:
          case KW_LEAVE:
          case KW_MOD:
          case KW_NOT:
          case KW_OR:
          case KW_REAL:
          case KW_REPEAT:
          case KW_SELECT:
          case KW_STRUCT:
          case KW_TEXT:
          case KW_TRUE:
          case KW_VAR:
          case KW_VOID:
          case KW_WHILE:
          case KW_WITH:
          case KW_XOR:
          case IDENTIFIER:
          case TEXT_LITERAL:
          case TEXT_HEAD:
          case DECIMAL_LITERAL:
          case RADIX_LITERAL:
          case REAL_LITERAL:{
            paragraph();
            break;
            }
          default:
            jj_la1[137] = jj_gen;
            ;
          }
        } catch (Throwable jjte002) {
if (jjtc002) {
         jjtree.clearNodeScope(jjtn002);
         jjtc002 = false;
       } else {
         jjtree.popNode();
       }
       if (jjte002 instanceof RuntimeException) {
         {if (true) throw (RuntimeException)jjte002;}
       }
       if (jjte002 instanceof ParseException) {
         {if (true) throw (ParseException)jjte002;}
       }
       {if (true) throw (Error)jjte002;}
        } finally {
if (jjtc002) {
         jjtree.closeNodeScope(jjtn002, true);
         jjtn002.jjtSetLastToken(getToken(0));
       }
        }
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ELSE:{
        default_branch();
        break;
        }
      default:
        jj_la1[138] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_IF);
        break;
        }
      case KW_ENDIF:{
        jj_consume_token(KW_ENDIF);
        break;
        }
      default:
        jj_la1[139] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void pattern_matching() throws ParseException {/*@bgen(jjtree) PatternMatching */
  ASTPatternMatching jjtn000 = new ASTPatternMatching(JJTPATTERNMATCHING);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_SELECT);
      expression();
      jj_consume_token(KW_OF);
      label_43:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_CASE:{
          ;
          break;
          }
        default:
          jj_la1[140] = jj_gen;
          break label_43;
        }
        case_branch();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_OTHERWISE:{
ASTDefaultBranch jjtn001 = new ASTDefaultBranch(JJTDEFAULTBRANCH);
          boolean jjtc001 = true;
          jjtree.openNodeScope(jjtn001);
          jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(KW_OTHERWISE);
          paragraph();
        } catch (Throwable jjte001) {
if (jjtc001) {
            jjtree.clearNodeScope(jjtn001);
            jjtc001 = false;
          } else {
            jjtree.popNode();
          }
          if (jjte001 instanceof RuntimeException) {
            {if (true) throw (RuntimeException)jjte001;}
          }
          if (jjte001 instanceof ParseException) {
            {if (true) throw (ParseException)jjte001;}
          }
          {if (true) throw (Error)jjte001;}
        } finally {
if (jjtc001) {
            jjtree.closeNodeScope(jjtn001, true);
            jjtn001.jjtSetLastToken(getToken(0));
          }
        }
        break;
        }
      default:
        jj_la1[141] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_SELECT);
        break;
        }
      case KW_ENDSELECT:{
        jj_consume_token(KW_ENDSELECT);
        break;
        }
      default:
        jj_la1[142] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void case_branch() throws ParseException {/*@bgen(jjtree) CaseBranch */
  ASTCaseBranch jjtn000 = new ASTCaseBranch(JJTCASEBRANCH);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_CASE);
      patterns();
      jj_consume_token(KW_THEN);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        paragraph();
        break;
        }
      default:
        jj_la1[143] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void patterns() throws ParseException {/*@bgen(jjtree) Patterns */
  ASTPatterns jjtn000 = new ASTPatterns(JJTPATTERNS);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case KW_BOOL:
      case KW_ENUM:
      case KW_FALSE:
      case KW_INT:
      case KW_PROC:
      case KW_PURE:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VOID:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        pattern();
        label_44:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 1:{
            ;
            break;
            }
          default:
            jj_la1[144] = jj_gen;
            break label_44;
          }
          jj_consume_token(1);
          pattern();
        }
        break;
        }
      case 3:{
        selector();
        label_45:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 1:{
            ;
            break;
            }
          default:
            jj_la1[145] = jj_gen;
            break label_45;
          }
          jj_consume_token(1);
          selector();
        }
        break;
        }
      default:
        jj_la1[146] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void pattern() throws ParseException {/*@bgen(jjtree) Pattern */
  ASTPattern jjtn000 = new ASTPattern(JJTPATTERN);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      if (jj_2_27(3)) {
        identifier_ref();
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case DECIMAL_LITERAL:
        case RADIX_LITERAL:{
          integer_denotation();
          break;
          }
        case REAL_LITERAL:{
          real_denotation();
          break;
          }
        case TEXT_LITERAL:
        case TEXT_HEAD:{
          text_denotation();
          break;
          }
        case KW_FALSE:
        case KW_TRUE:{
          bool_denotation();
          break;
          }
        case 9:{
          pattern_display();
          break;
          }
        case KW_BOOL:
        case KW_ENUM:
        case KW_INT:
        case KW_PROC:
        case KW_PURE:
        case KW_REAL:
        case KW_STRUCT:
        case KW_TEXT:
        case KW_VOID:
        case IDENTIFIER:{
          pattern_binder();
          break;
          }
        case 4:{
          jj_consume_token(4);
          pattern();
          jj_consume_token(5);
          break;
          }
        default:
          jj_la1[147] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void pattern_binder() throws ParseException {/*@bgen(jjtree) PatternBinder */
  ASTPatternBinder jjtn000 = new ASTPatternBinder(JJTPATTERNBINDER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      parameter_head();
      identifier();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 8:{
        jj_consume_token(8);
        pattern();
        break;
        }
      default:
        jj_la1[148] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void pattern_display() throws ParseException {/*@bgen(jjtree) PatternDisplay */
  ASTPatternDisplay jjtn000 = new ASTPatternDisplay(JJTPATTERNDISPLAY);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(9);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case KW_BOOL:
      case KW_ENUM:
      case KW_FALSE:
      case KW_INT:
      case KW_PROC:
      case KW_PURE:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VOID:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        pattern();
        label_46:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 1:{
            ;
            break;
            }
          default:
            jj_la1[149] = jj_gen;
            break label_46;
          }
          jj_consume_token(1);
          pattern();
        }
        break;
        }
      default:
        jj_la1[150] = jj_gen;
        ;
      }
      jj_consume_token(10);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void actual_parameter_list() throws ParseException {/*@bgen(jjtree) ActualParameterList */
  ASTActualParameterList jjtn000 = new ASTActualParameterList(JJTACTUALPARAMETERLIST);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(4);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_PROC:
      case KW_PURE:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        actual_parameter();
        label_47:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 1:{
            ;
            break;
            }
          default:
            jj_la1[151] = jj_gen;
            break label_47;
          }
          jj_consume_token(1);
          actual_parameter();
        }
        break;
        }
      default:
        jj_la1[152] = jj_gen;
        ;
      }
      jj_consume_token(5);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void actual_parameter() throws ParseException {/*@bgen(jjtree) ActualParameter */
  ASTActualParameter jjtn000 = new ASTActualParameter(JJTACTUALPARAMETER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      if (jj_2_28(2147483647)) {
        actual_proc_parameter();
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 4:
        case 9:
        case LARR:
        case RARR:
        case LRARR:
        case STARSHIP:
        case BAT:
        case TILDE:
        case SLASH:
        case SLASH_SLASH:
        case AST:
        case CIRCLED_TIMES:
        case CIRCLED_AST:
        case CIRCLED_DOT:
        case CIRCLED_SLASH:
        case AST_AST:
        case AST_SLASH:
        case SLASH_AST:
        case TIMES:
        case PERCENT:
        case BOXED_QUEST:
        case BOXED_COLON:
        case BOXED_QUOTE:
        case BOXED_CARET:
        case BOXED_LARR:
        case BOXED_RARR:
        case BOXED_SLASH:
        case BOXED_PLUS:
        case BOXED_MINUS:
        case BOXED_TIMES:
        case BOXED_DOT:
        case BOXED_AST:
        case PLUS:
        case MINUS:
        case PLUS_PLUS:
        case MINUS_MINUS:
        case PLUS_MINUS:
        case MINUS_PLUS:
        case CIRCLED_PLUS:
        case CIRCLED_MINUS:
        case CARET:
        case LL:
        case GG:
        case LLL:
        case EXCLAM:
        case QUEST:
        case QQ:
        case EE:
        case QEX:
        case EXQ:
        case GGG:
        case BAR:
        case AMP:
        case BAR_BAR:
        case AMP_AMP:
        case CARET_CARET:
        case KW_ACROSS:
        case KW_AND:
        case KW_CONCR:
        case KW_CONTINUE:
        case KW_DIV:
        case KW_FALSE:
        case KW_IF:
        case KW_IMPLIES:
        case KW_LEAVE:
        case KW_MOD:
        case KW_NOT:
        case KW_OR:
        case KW_REPEAT:
        case KW_SELECT:
        case KW_TRUE:
        case KW_WHILE:
        case KW_WITH:
        case KW_XOR:
        case IDENTIFIER:
        case TEXT_LITERAL:
        case TEXT_HEAD:
        case DECIMAL_LITERAL:
        case RADIX_LITERAL:
        case REAL_LITERAL:{
          expression();
          break;
          }
        default:
          jj_la1[153] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void actual_proc_parameter() throws ParseException {/*@bgen(jjtree) ActualProcParameter */
  ASTActualProcParameter jjtn000 = new ASTActualProcParameter(JJTACTUALPROCPARAMETER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_INT:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        type_declarer();
        break;
        }
      default:
        jj_la1[154] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_PURE:{
        pure_modifier();
        break;
        }
      default:
        jj_la1[155] = jj_gen;
        ;
      }
      jj_consume_token(KW_PROC);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        virtual_parameters_pack();
        break;
        }
      default:
        jj_la1[156] = jj_gen;
        ;
      }
      identifier_ref();
      jj_consume_token(KW_OP);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        virtual_parameters_pack();
        break;
        }
      default:
        jj_la1[157] = jj_gen;
        ;
      }
      operator_name();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void with_statement() throws ParseException {/*@bgen(jjtree) WithStatement */
  ASTWithStatement jjtn000 = new ASTWithStatement(JJTWITHSTATEMENT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
ASTWithHead jjtn001 = new ASTWithHead(JJTWITHHEAD);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_WITH);
        expression();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_AS:{
          jj_consume_token(KW_AS);
          patterns();
          break;
          }
        default:
          jj_la1[158] = jj_gen;
          ;
        }
      } catch (Throwable jjte001) {
if (jjtc001) {
        jjtree.clearNodeScope(jjtn001);
        jjtc001 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte001 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte001;}
      }
      if (jjte001 instanceof ParseException) {
        {if (true) throw (ParseException)jjte001;}
      }
      {if (true) throw (Error)jjte001;}
      } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
      }
      jj_consume_token(KW_DO);
      paragraph();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ENDWITH:{
        jj_consume_token(KW_ENDWITH);
        break;
        }
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_WITH);
        break;
        }
      default:
        jj_la1[159] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void display() throws ParseException {/*@bgen(jjtree) Display */
  ASTDisplay jjtn000 = new ASTDisplay(JJTDISPLAY);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(9);
      expression();
      label_48:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[160] = jj_gen;
          break label_48;
        }
        jj_consume_token(1);
        expression();
      }
      jj_consume_token(10);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void ex_suffix() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case 3:{
      selector();
      break;
      }
    case 4:{
      invocation();
      break;
      }
    case 9:{
      subscript();
      break;
      }
    default:
      jj_la1[161] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void selector() throws ParseException {/*@bgen(jjtree) Selector */
  ASTSelector jjtn000 = new ASTSelector(JJTSELECTOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(3);
      identifier_ref();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void invocation() throws ParseException {/*@bgen(jjtree) Invocation */
  ASTInvocation jjtn000 = new ASTInvocation(JJTINVOCATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      actual_parameter_list();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        identifier_ref();
        break;
        }
      default:
        jj_la1[162] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void subscript() throws ParseException {/*@bgen(jjtree) Subscript */
  ASTSubscript jjtn000 = new ASTSubscript(JJTSUBSCRIPT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      display();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void terminator() throws ParseException {/*@bgen(jjtree) Terminator */
  ASTTerminator jjtn000 = new ASTTerminator(JJTTERMINATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_LEAVE);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_OP:
      case KW_OUTER:
      case KW_PROC:
      case KW_REPEAT:
      case IDENTIFIER:
      case DECIMAL_LITERAL:{
        unit_ref();
        break;
        }
      default:
        jj_la1[163] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_WITH:{
        jj_consume_token(KW_WITH);
        expression();
        break;
        }
      default:
        jj_la1[164] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void continuator() throws ParseException {/*@bgen(jjtree) Continuator */
  ASTContinuator jjtn000 = new ASTContinuator(JJTCONTINUATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_CONTINUE);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_OUTER:
      case KW_REPEAT:
      case DECIMAL_LITERAL:{
        loop_ref();
        break;
        }
      default:
        jj_la1[165] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void repetition() throws ParseException {/*@bgen(jjtree) Repetition */
  ASTRepetition jjtn000 = new ASTRepetition(JJTREPETITION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ACROSS:{
        across_clause();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_WHILE:{
          while_clause();
          break;
          }
        default:
          jj_la1[166] = jj_gen;
          ;
        }
        repetition_body();
        break;
        }
      case KW_REPEAT:
      case KW_WHILE:{
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_WHILE:{
          while_clause();
          break;
          }
        default:
          jj_la1[167] = jj_gen;
          ;
        }
        repeat_clause();
        break;
        }
      default:
        jj_la1[168] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void across_clause() throws ParseException {/*@bgen(jjtree) AcrossClause */
  ASTAcrossClause jjtn000 = new ASTAcrossClause(JJTACROSSCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_ACROSS);
      abstract_bin_ex();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_AS:{
        jj_consume_token(KW_AS);
        pattern();
        break;
        }
      default:
        jj_la1[169] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void while_clause() throws ParseException {/*@bgen(jjtree) WhileClause */
  ASTWhileClause jjtn000 = new ASTWhileClause(JJTWHILECLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_WHILE);
      abstract_bin_ex();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void repetition_body() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_REPEAT:{
      repeat_clause();
      break;
      }
    case KW_ALL:
    case KW_NO:
    case KW_NOT:
    case KW_SOME:{
      quantifier_clause();
      break;
      }
    default:
      jj_la1[170] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void quantifier_clause() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_SOME:{
      some_clause();
      break;
      }
    case KW_ALL:{
      all_clause();
      break;
      }
    case KW_NO:{
      no_clause();
      break;
      }
    case KW_NOT:{
      not_all_clause();
      break;
      }
    default:
      jj_la1[171] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void repeat_clause() throws ParseException {/*@bgen(jjtree) RepeatClause */
  ASTRepeatClause jjtn000 = new ASTRepeatClause(JJTREPEATCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_REPEAT);
      label_49:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_INVARIANT:{
          ;
          break;
          }
        default:
          jj_la1[172] = jj_gen;
          break label_49;
        }
        loop_invariant();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        paragraph();
        break;
        }
      default:
        jj_la1[173] = jj_gen;
        ;
      }
      label_50:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_VARIANT:{
          ;
          break;
          }
        default:
          jj_la1[174] = jj_gen;
          break label_50;
        }
        loop_variant();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_UNTIL:{
        until_clause();
        break;
        }
      default:
        jj_la1[175] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ELSE:{
        default_branch();
        break;
        }
      default:
        jj_la1[176] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_REPEAT);
        break;
        }
      case KW_ENDREPEAT:{
        jj_consume_token(KW_ENDREPEAT);
        break;
        }
      default:
        jj_la1[177] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void until_clause() throws ParseException {/*@bgen(jjtree) UntilClause */
  ASTUntilClause jjtn000 = new ASTUntilClause(JJTUNTILCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_UNTIL);
      expression();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void default_branch() throws ParseException {/*@bgen(jjtree) DefaultBranch */
  ASTDefaultBranch jjtn000 = new ASTDefaultBranch(JJTDEFAULTBRANCH);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_ELSE);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:
      case 9:
      case LARR:
      case RARR:
      case LRARR:
      case STARSHIP:
      case BAT:
      case TILDE:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_LARR:
      case BOXED_RARR:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_ACROSS:
      case KW_AND:
      case KW_BOOL:
      case KW_CHECK:
      case KW_CONST:
      case KW_CONCR:
      case KW_CONTINUE:
      case KW_DIV:
      case KW_ENUM:
      case KW_FALSE:
      case KW_IF:
      case KW_IMPLIES:
      case KW_INT:
      case KW_LEAVE:
      case KW_MOD:
      case KW_NOT:
      case KW_OR:
      case KW_REAL:
      case KW_REPEAT:
      case KW_SELECT:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_TRUE:
      case KW_VAR:
      case KW_VOID:
      case KW_WHILE:
      case KW_WITH:
      case KW_XOR:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        paragraph();
        break;
        }
      default:
        jj_la1[178] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void some_clause() throws ParseException {/*@bgen(jjtree) SomeClause */
  ASTSomeClause jjtn000 = new ASTSomeClause(JJTSOMECLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_SOME);
      expression();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void all_clause() throws ParseException {/*@bgen(jjtree) AllClause */
  ASTAllClause jjtn000 = new ASTAllClause(JJTALLCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_ALL);
      expression();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void not_all_clause() throws ParseException {/*@bgen(jjtree) NotAllClause */
  ASTNotAllClause jjtn000 = new ASTNotAllClause(JJTNOTALLCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_NOT);
      jj_consume_token(KW_ALL);
      expression();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void no_clause() throws ParseException {/*@bgen(jjtree) NoClause */
  ASTNoClause jjtn000 = new ASTNoClause(JJTNOCLAUSE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_NO);
      expression();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void loop_invariant() throws ParseException {/*@bgen(jjtree) LoopInvariant */
  ASTLoopInvariant jjtn000 = new ASTLoopInvariant(JJTLOOPINVARIANT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      invariant();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void loop_variant() throws ParseException {/*@bgen(jjtree) LoopVariant */
  ASTLoopVariant jjtn000 = new ASTLoopVariant(JJTLOOPVARIANT);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      variant();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void unit_ref() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_OUTER:
    case KW_REPEAT:
    case DECIMAL_LITERAL:{
      loop_ref();
      break;
      }
    case KW_PROC:{
ASTProcRef jjtn001 = new ASTProcRef(JJTPROCREF);
        boolean jjtc001 = true;
        jjtree.openNodeScope(jjtn001);
        jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_PROC);
      } finally {
if (jjtc001) {
          jjtree.closeNodeScope(jjtn001, true);
          jjtn001.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    case KW_OP:{
ASTOpRef jjtn002 = new ASTOpRef(JJTOPREF);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_OP);
      } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    case IDENTIFIER:{
ASTRefinementRef jjtn003 = new ASTRefinementRef(JJTREFINEMENTREF);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
      try {
        identifier_ref();
      } catch (Throwable jjte003) {
if (jjtc003) {
          jjtree.clearNodeScope(jjtn003);
          jjtc003 = false;
        } else {
          jjtree.popNode();
        }
        if (jjte003 instanceof RuntimeException) {
          {if (true) throw (RuntimeException)jjte003;}
        }
        if (jjte003 instanceof ParseException) {
          {if (true) throw (ParseException)jjte003;}
        }
        {if (true) throw (Error)jjte003;}
      } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    default:
      jj_la1[179] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void loop_ref() throws ParseException {/*@bgen(jjtree) LoopRef */
  ASTLoopRef jjtn000 = new ASTLoopRef(JJTLOOPREF);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_OUTER:
      case DECIMAL_LITERAL:{
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case DECIMAL_LITERAL:{
          jj_consume_token(DECIMAL_LITERAL);
          break;
          }
        default:
          jj_la1[180] = jj_gen;
          ;
        }
        jj_consume_token(KW_OUTER);
        break;
        }
      default:
        jj_la1[181] = jj_gen;
        ;
      }
      jj_consume_token(KW_REPEAT);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void object_decl() throws ParseException {/*@bgen(jjtree) ObjectDecl */
  ASTObjectDecl jjtn000 = new ASTObjectDecl(JJTOBJECTDECL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BOOL:
      case KW_ENUM:
      case KW_INT:
      case KW_REAL:
      case KW_STRUCT:
      case KW_TEXT:
      case KW_VOID:
      case IDENTIFIER:{
        type_declarer();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_VAR:{
ASTVarModifier jjtn001 = new ASTVarModifier(JJTVARMODIFIER);
          boolean jjtc001 = true;
          jjtree.openNodeScope(jjtn001);
          jjtn001.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(KW_VAR);
          } finally {
if (jjtc001) {
            jjtree.closeNodeScope(jjtn001, true);
            jjtn001.jjtSetLastToken(getToken(0));
          }
          }
          identifier();
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 8:{
            initializer();
            break;
            }
          default:
            jj_la1[182] = jj_gen;
            ;
          }
          break;
          }
        case KW_CONST:{
ASTConstModifier jjtn002 = new ASTConstModifier(JJTCONSTMODIFIER);
            boolean jjtc002 = true;
            jjtree.openNodeScope(jjtn002);
            jjtn002.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(KW_CONST);
          } finally {
if (jjtc002) {
              jjtree.closeNodeScope(jjtn002, true);
              jjtn002.jjtSetLastToken(getToken(0));
            }
          }
          identifier();
          initializer();
          break;
          }
        default:
          jj_la1[183] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
        break;
        }
      case KW_CONST:
      case KW_VAR:{
        access_modifier();
        identifier();
        initializer();
        break;
        }
      default:
        jj_la1[184] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void initializer() throws ParseException {
    jj_consume_token(8);
    expression();
}

  final public void type_declarer() throws ParseException {/*@bgen(jjtree) TypeDeclarer */
  ASTTypeDeclarer jjtn000 = new ASTTypeDeclarer(JJTTYPEDECLARER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      cell_type_declarer();
      label_51:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 9:{
          ;
          break;
          }
        default:
          jj_la1[185] = jj_gen;
          break label_51;
        }
        jj_consume_token(9);
        index_type();
        label_52:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 1:{
            ;
            break;
            }
          default:
            jj_la1[186] = jj_gen;
            break label_52;
          }
          jj_consume_token(1);
          index_type();
        }
        jj_consume_token(10);
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void index_type() throws ParseException {/*@bgen(jjtree) IndexType */
  ASTIndexType jjtn000 = new ASTIndexType(JJTINDEXTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_OF:{
        jj_consume_token(KW_OF);
        type_declarer();
        break;
        }
      case 4:
      case 9:
      case SLASH:
      case SLASH_SLASH:
      case AST:
      case CIRCLED_TIMES:
      case CIRCLED_AST:
      case CIRCLED_DOT:
      case CIRCLED_SLASH:
      case AST_AST:
      case AST_SLASH:
      case SLASH_AST:
      case TIMES:
      case PERCENT:
      case BOXED_QUEST:
      case BOXED_COLON:
      case BOXED_QUOTE:
      case BOXED_CARET:
      case BOXED_SLASH:
      case BOXED_PLUS:
      case BOXED_MINUS:
      case BOXED_TIMES:
      case BOXED_DOT:
      case BOXED_AST:
      case PLUS:
      case MINUS:
      case PLUS_PLUS:
      case MINUS_MINUS:
      case PLUS_MINUS:
      case MINUS_PLUS:
      case CIRCLED_PLUS:
      case CIRCLED_MINUS:
      case CARET:
      case LL:
      case GG:
      case LLL:
      case EXCLAM:
      case QUEST:
      case QQ:
      case EE:
      case QEX:
      case EXQ:
      case GGG:
      case BAR:
      case AMP:
      case BAR_BAR:
      case AMP_AMP:
      case CARET_CARET:
      case KW_CONCR:
      case KW_DIV:
      case KW_FALSE:
      case KW_IF:
      case KW_MOD:
      case KW_NOT:
      case KW_SELECT:
      case KW_TRUE:
      case KW_WITH:
      case IDENTIFIER:
      case TEXT_LITERAL:
      case TEXT_HEAD:
      case DECIMAL_LITERAL:
      case RADIX_LITERAL:
      case REAL_LITERAL:{
        bounds();
        break;
        }
      default:
        jj_la1[187] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void cell_type_declarer() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_BOOL:
    case KW_INT:
    case KW_REAL:
    case KW_TEXT:
    case KW_VOID:{
      primitive_type();
      break;
      }
    case IDENTIFIER:{
      named_type();
      break;
      }
    case KW_STRUCT:{
      struct_type();
      break;
      }
    case KW_ENUM:{
      enum_type();
      break;
      }
    default:
      jj_la1[188] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void struct_type() throws ParseException {/*@bgen(jjtree) StructType */
  ASTStructType jjtn000 = new ASTStructType(JJTSTRUCTTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_STRUCT);
      jj_consume_token(4);
      fields();
      label_53:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[189] = jj_gen;
          break label_53;
        }
        jj_consume_token(1);
        if (jj_2_29(2)) {
          fields();
        } else {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case IDENTIFIER:{
            identifier();
            break;
            }
          default:
            jj_la1[190] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
      jj_consume_token(5);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void enum_type() throws ParseException {/*@bgen(jjtree) EnumType */
  ASTEnumType jjtn000 = new ASTEnumType(JJTENUMTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_ENUM);
      jj_consume_token(4);
      fields();
      label_54:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 1:{
          ;
          break;
          }
        default:
          jj_la1[191] = jj_gen;
          break label_54;
        }
        jj_consume_token(1);
        if (jj_2_30(2)) {
          fields();
        } else {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case IDENTIFIER:{
            identifier();
            break;
            }
          default:
            jj_la1[192] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
      jj_consume_token(5);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void fields() throws ParseException {
    parameter_head();
    identifier();
}

  final public void primitive_type() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_INT:{
      int_type();
      break;
      }
    case KW_REAL:{
      real_type();
      break;
      }
    case KW_TEXT:{
      text_type();
      break;
      }
    case KW_BOOL:{
      bool_type();
      break;
      }
    case KW_VOID:{
      void_type();
      break;
      }
    default:
      jj_la1[193] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void int_type() throws ParseException {/*@bgen(jjtree) IntType */
  ASTIntType jjtn000 = new ASTIntType(JJTINTTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_INT);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        jj_consume_token(4);
        bounds();
        jj_consume_token(5);
        break;
        }
      default:
        jj_la1[194] = jj_gen;
        ;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        dimension();
        break;
        }
      default:
        jj_la1[195] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void real_type() throws ParseException {/*@bgen(jjtree) RealType */
  ASTRealType jjtn000 = new ASTRealType(JJTREALTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_REAL);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        dimension();
        break;
        }
      default:
        jj_la1[196] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void text_type() throws ParseException {/*@bgen(jjtree) TextType */
  ASTTextType jjtn000 = new ASTTextType(JJTTEXTTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_TEXT);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void bool_type() throws ParseException {/*@bgen(jjtree) BoolType */
  ASTBoolType jjtn000 = new ASTBoolType(JJTBOOLTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_BOOL);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void named_type() throws ParseException {/*@bgen(jjtree) NamedType */
  ASTNamedType jjtn000 = new ASTNamedType(JJTNAMEDTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      identifier_ref();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 4:{
        jj_consume_token(4);
        type_declarer();
        label_55:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 1:{
            ;
            break;
            }
          default:
            jj_la1[197] = jj_gen;
            break label_55;
          }
          jj_consume_token(1);
          type_declarer();
        }
        jj_consume_token(5);
        break;
        }
      default:
        jj_la1[198] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void void_type() throws ParseException {/*@bgen(jjtree) VoidType */
  ASTVoidType jjtn000 = new ASTVoidType(JJTVOIDTYPE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_VOID);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void bounds() throws ParseException {/*@bgen(jjtree) Bounds */
  ASTBounds jjtn000 = new ASTBounds(JJTBOUNDS);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      arith_ex();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case RANGE:{
        jj_consume_token(RANGE);
        arith_ex();
        break;
        }
      default:
        jj_la1[199] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void dimension() throws ParseException {/*@bgen(jjtree) Dimension */
  ASTDimension jjtn000 = new ASTDimension(JJTDIMENSION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(6);
      dim_expression();
      jj_consume_token(7);
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void dim_expression() throws ParseException {/*@bgen(jjtree) #DimOp(> 1) */
  ASTDimOp jjtn000 = new ASTDimOp(JJTDIMOP);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      dim_factor();
      label_56:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case SLASH:
        case AST:{
          ;
          break;
          }
        default:
          jj_la1[200] = jj_gen;
          break label_56;
        }
        dim_op();
        dim_factor();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void dim_op() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case AST:{
ASTAstOp jjtn001 = new ASTAstOp(JJTASTOP);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(AST);
      } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
      }
      break;
      }
    case SLASH:{
ASTSlashOp jjtn002 = new ASTSlashOp(JJTSLASHOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(SLASH);
      } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    default:
      jj_la1[201] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void dim_factor() throws ParseException {/*@bgen(jjtree) #DimFactor(> 1) */
  ASTDimFactor jjtn000 = new ASTDimFactor(JJTDIMFACTOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      dim_atom();
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case CARET:{
        jj_consume_token(CARET);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case PLUS:
        case MINUS:{
          sign();
          break;
          }
        default:
          jj_la1[202] = jj_gen;
          ;
        }
        decimal_literal();
        if (jj_2_31(2)) {
          jj_consume_token(SLASH);
          decimal_literal();
        } else {
          ;
        }
        break;
        }
      default:
        jj_la1[203] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void dim_atom() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      identifier_ref();
      break;
      }
    case 4:{
      jj_consume_token(4);
      dim_expression();
      jj_consume_token(5);
      break;
      }
    default:
      jj_la1[204] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void obsoletion() throws ParseException {/*@bgen(jjtree) Obsoletion */
  ASTObsoletion jjtn000 = new ASTObsoletion(JJTOBSOLETION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_OBSOLETE);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_BECAUSE:{
        reason();
        break;
        }
      default:
        jj_la1[205] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void documentation() throws ParseException {/*@bgen(jjtree) Documentation */
  ASTDocumentation jjtn000 = new ASTDocumentation(JJTDOCUMENTATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_DOC:{
        jj_consume_token(KW_DOC);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case DOCUMENTATION:{
          jj_consume_token(DOCUMENTATION);
          break;
          }
        default:
          jj_la1[206] = jj_gen;
          ;
        }
        nl();
        break;
        }
      case KW_EXAMPLE:{
        example();
        break;
        }
      default:
        jj_la1[207] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void reason() throws ParseException {/*@bgen(jjtree) Reason */
  ASTReason jjtn000 = new ASTReason(JJTREASON);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(KW_BECAUSE);
      jj_consume_token(DOCUMENTATION);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void example() throws ParseException {/*@bgen(jjtree) Example */
  ASTExample jjtn000 = new ASTExample(JJTEXAMPLE);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      example_head();
      packets_or_body();
      example_tail();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void example_head() throws ParseException {
    jj_consume_token(KW_EXAMPLE);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      identifier();
      break;
      }
    default:
      jj_la1[208] = jj_gen;
      ;
    }
    nl();
}

  final public void example_tail() throws ParseException {/*@bgen(jjtree) BlockTail */
  ASTBlockTail jjtn000 = new ASTBlockTail(JJTBLOCKTAIL);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_ENDEXAMPLE:{
        jj_consume_token(KW_ENDEXAMPLE);
        break;
        }
      case KW_END:{
        jj_consume_token(KW_END);
        jj_consume_token(KW_EXAMPLE);
        break;
        }
      default:
        jj_la1[209] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IDENTIFIER:{
        identifier_ref();
        break;
        }
      default:
        jj_la1[210] = jj_gen;
        ;
      }
      nl();
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void operator_name() throws ParseException {/*@bgen(jjtree) OperatorName */
  ASTOperatorName jjtn000 = new ASTOperatorName(JJTOPERATORNAME);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      if (jj_2_32(3)) {
        assignment_op();
      } else if (jj_2_33(2)) {
        simple_operator_name();
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case LT:
        case GT:
        case LE:
        case GE:
        case NE:
        case EQ:
        case IN:
        case NOT_IN:
        case BOXED_LT:
        case BOXED_GT:
        case BOXED_LE:
        case BOXED_GE:
        case BOXED_NE:
        case BOXED_EQ:
        case CIRCLED_LT:
        case CIRCLED_GT:
        case CIRCLED_LE:
        case CIRCLED_GE:
        case CIRCLED_NE:
        case CIRCLED_EQ:
        case KW_IN:
        case KW_NOT:{
          comp_op();
          break;
          }
        default:
          jj_la1[211] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void assignment_op() throws ParseException {/*@bgen(jjtree) AssignmentOp */
  ASTAssignmentOp jjtn000 = new ASTAssignmentOp(JJTASSIGNMENTOP);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      if (jj_2_34(2)) {
        simple_operator_name();
        jj_consume_token(EQ);
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case ASSIGN:{
          jj_consume_token(ASSIGN);
          break;
          }
        default:
          jj_la1[212] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void simple_operator_name() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LARR:
    case RARR:
    case LRARR:
    case BOXED_LARR:
    case BOXED_RARR:{
      abstract_bin_op();
      break;
      }
    case KW_IMPLIES:
    case KW_OR:
    case KW_XOR:{
      disjunct_op();
      break;
      }
    case KW_AND:{
      conjunct_op();
      break;
      }
    case STARSHIP:
    case BAT:
    case TILDE:{
      numeric_op();
      break;
      }
    case BOXED_PLUS:
    case BOXED_MINUS:
    case PLUS:
    case MINUS:
    case PLUS_PLUS:
    case MINUS_MINUS:
    case CIRCLED_PLUS:
    case CIRCLED_MINUS:{
      arith_op();
      break;
      }
    case SLASH:
    case SLASH_SLASH:
    case AST:
    case CIRCLED_TIMES:
    case CIRCLED_AST:
    case CIRCLED_DOT:
    case CIRCLED_SLASH:
    case AST_SLASH:
    case SLASH_AST:
    case TIMES:
    case PERCENT:
    case BOXED_COLON:
    case BOXED_SLASH:
    case BOXED_TIMES:
    case BOXED_DOT:
    case BOXED_AST:
    case KW_DIV:
    case KW_MOD:{
      prod_op();
      break;
      }
    case AST_AST:
    case BOXED_CARET:
    case CARET:{
      pow_op();
      break;
      }
    case BOXED_QUEST:
    case BOXED_QUOTE:
    case PLUS_MINUS:
    case MINUS_PLUS:
    case LL:
    case GG:
    case LLL:
    case EXCLAM:
    case QUEST:
    case QQ:
    case EE:
    case QEX:
    case EXQ:
    case GGG:
    case BAR:
    case AMP:
    case BAR_BAR:
    case AMP_AMP:
    case CARET_CARET:
    case KW_NOT:{
      tight_op();
      break;
      }
    case 9:{
ASTBracketsOp jjtn001 = new ASTBracketsOp(JJTBRACKETSOP);
        boolean jjtc001 = true;
        jjtree.openNodeScope(jjtn001);
        jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(9);
        jj_consume_token(10);
      } finally {
if (jjtc001) {
          jjtree.closeNodeScope(jjtn001, true);
          jjtn001.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    default:
      jj_la1[213] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void abstract_bin_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LARR:{
ASTLeftArrow jjtn001 = new ASTLeftArrow(JJTLEFTARROW);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(LARR);
        } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
        }
        break;
        }
      case BOXED_RARR:{
ASTBoxedRightArrow jjtn002 = new ASTBoxedRightArrow(JJTBOXEDRIGHTARROW);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_RARR);
        } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case RARR:{
ASTRightArrow jjtn003 = new ASTRightArrow(JJTRIGHTARROW);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(RARR);
        } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_LARR:{
ASTBoxedLeftArrow jjtn004 = new ASTBoxedLeftArrow(JJTBOXEDLEFTARROW);
        boolean jjtc004 = true;
        jjtree.openNodeScope(jjtn004);
        jjtn004.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_LARR);
        } finally {
if (jjtc004) {
          jjtree.closeNodeScope(jjtn004, true);
          jjtn004.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case LRARR:{
ASTLeftRightArrow jjtn005 = new ASTLeftRightArrow(JJTLEFTRIGHTARROW);
        boolean jjtc005 = true;
        jjtree.openNodeScope(jjtn005);
        jjtn005.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(LRARR);
        } finally {
if (jjtc005) {
          jjtree.closeNodeScope(jjtn005, true);
          jjtn005.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      default:
        jj_la1[214] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void disjunct_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      if (jj_2_35(2)) {
        jj_consume_token(KW_OR);
ASTOrElseOp jjtn001 = new ASTOrElseOp(JJTORELSEOP);
                           boolean jjtc001 = true;
                           jjtree.openNodeScope(jjtn001);
                           jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(KW_ELSE);
        } finally {
if (jjtc001) {
                             jjtree.closeNodeScope(jjtn001, true);
                             jjtn001.jjtSetLastToken(getToken(0));
                           }
        }
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_OR:{
ASTOrOp jjtn002 = new ASTOrOp(JJTOROP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(KW_OR);
          } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
          }
          break;
          }
        case KW_XOR:{
ASTXorOp jjtn003 = new ASTXorOp(JJTXOROP);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(KW_XOR);
          } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
          }
          break;
          }
        case KW_IMPLIES:{
ASTImpliesOp jjtn004 = new ASTImpliesOp(JJTIMPLIESOP);
        boolean jjtc004 = true;
        jjtree.openNodeScope(jjtn004);
        jjtn004.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(KW_IMPLIES);
          } finally {
if (jjtc004) {
          jjtree.closeNodeScope(jjtn004, true);
          jjtn004.jjtSetLastToken(getToken(0));
        }
          }
          break;
          }
        default:
          jj_la1[215] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void conjunct_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      if (jj_2_36(2)) {
        jj_consume_token(KW_AND);
ASTAndThenOp jjtn001 = new ASTAndThenOp(JJTANDTHENOP);
                            boolean jjtc001 = true;
                            jjtree.openNodeScope(jjtn001);
                            jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(KW_THEN);
        } finally {
if (jjtc001) {
                              jjtree.closeNodeScope(jjtn001, true);
                              jjtn001.jjtSetLastToken(getToken(0));
                            }
        }
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case KW_AND:{
ASTAndOp jjtn002 = new ASTAndOp(JJTANDOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(KW_AND);
          } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
          }
          break;
          }
        default:
          jj_la1[216] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void comp_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LT:{
ASTLessThanOp jjtn001 = new ASTLessThanOp(JJTLESSTHANOP);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(LT);
        } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
        }
        break;
        }
      case GT:{
ASTGreaterThanOp jjtn002 = new ASTGreaterThanOp(JJTGREATERTHANOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(GT);
        } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case LE:{
ASTLessOrEqualOp jjtn003 = new ASTLessOrEqualOp(JJTLESSOREQUALOP);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(LE);
        } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case GE:{
ASTGreaterOrEqualOp jjtn004 = new ASTGreaterOrEqualOp(JJTGREATEROREQUALOP);
        boolean jjtc004 = true;
        jjtree.openNodeScope(jjtn004);
        jjtn004.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(GE);
        } finally {
if (jjtc004) {
          jjtree.closeNodeScope(jjtn004, true);
          jjtn004.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case EQ:{
ASTEqualOp jjtn005 = new ASTEqualOp(JJTEQUALOP);
        boolean jjtc005 = true;
        jjtree.openNodeScope(jjtn005);
        jjtn005.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(EQ);
        } finally {
if (jjtc005) {
          jjtree.closeNodeScope(jjtn005, true);
          jjtn005.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case NE:{
ASTNotEqualOp jjtn006 = new ASTNotEqualOp(JJTNOTEQUALOP);
        boolean jjtc006 = true;
        jjtree.openNodeScope(jjtn006);
        jjtn006.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(NE);
        } finally {
if (jjtc006) {
          jjtree.closeNodeScope(jjtn006, true);
          jjtn006.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      default:
        jj_la1[217] = jj_gen;
        if (jj_2_37(2)) {
          jj_consume_token(KW_NOT);
ASTNotInOp jjtn007 = new ASTNotInOp(JJTNOTINOP);
                              boolean jjtc007 = true;
                              jjtree.openNodeScope(jjtn007);
                              jjtn007.jjtSetFirstToken(getToken(1));
          try {
            jj_consume_token(KW_IN);
          } finally {
if (jjtc007) {
                                jjtree.closeNodeScope(jjtn007, true);
                                jjtn007.jjtSetLastToken(getToken(0));
                              }
          }
        } else {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case KW_IN:{
ASTInOp jjtn008 = new ASTInOp(JJTINOP);
        boolean jjtc008 = true;
        jjtree.openNodeScope(jjtn008);
        jjtn008.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(KW_IN);
            } finally {
if (jjtc008) {
          jjtree.closeNodeScope(jjtn008, true);
          jjtn008.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case IN:{
ASTInOp jjtn009 = new ASTInOp(JJTINOP);
        boolean jjtc009 = true;
        jjtree.openNodeScope(jjtn009);
        jjtn009.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(IN);
            } finally {
if (jjtc009) {
          jjtree.closeNodeScope(jjtn009, true);
          jjtn009.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case NOT_IN:{
ASTNotInOp jjtn010 = new ASTNotInOp(JJTNOTINOP);
        boolean jjtc010 = true;
        jjtree.openNodeScope(jjtn010);
        jjtn010.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(NOT_IN);
            } finally {
if (jjtc010) {
          jjtree.closeNodeScope(jjtn010, true);
          jjtn010.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case BOXED_GT:{
ASTBoxedGreaterThanOp jjtn011 = new ASTBoxedGreaterThanOp(JJTBOXEDGREATERTHANOP);
        boolean jjtc011 = true;
        jjtree.openNodeScope(jjtn011);
        jjtn011.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(BOXED_GT);
            } finally {
if (jjtc011) {
          jjtree.closeNodeScope(jjtn011, true);
          jjtn011.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case BOXED_LT:{
ASTBoxedLessThanOp jjtn012 = new ASTBoxedLessThanOp(JJTBOXEDLESSTHANOP);
        boolean jjtc012 = true;
        jjtree.openNodeScope(jjtn012);
        jjtn012.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(BOXED_LT);
            } finally {
if (jjtc012) {
          jjtree.closeNodeScope(jjtn012, true);
          jjtn012.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case BOXED_LE:{
ASTBoxedLessOrEqualOp jjtn013 = new ASTBoxedLessOrEqualOp(JJTBOXEDLESSOREQUALOP);
        boolean jjtc013 = true;
        jjtree.openNodeScope(jjtn013);
        jjtn013.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(BOXED_LE);
            } finally {
if (jjtc013) {
          jjtree.closeNodeScope(jjtn013, true);
          jjtn013.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case BOXED_GE:{
ASTBoxedGreaterOrEqualOp jjtn014 = new ASTBoxedGreaterOrEqualOp(JJTBOXEDGREATEROREQUALOP);
        boolean jjtc014 = true;
        jjtree.openNodeScope(jjtn014);
        jjtn014.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(BOXED_GE);
            } finally {
if (jjtc014) {
          jjtree.closeNodeScope(jjtn014, true);
          jjtn014.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case BOXED_EQ:{
ASTBoxedEqualOp jjtn015 = new ASTBoxedEqualOp(JJTBOXEDEQUALOP);
        boolean jjtc015 = true;
        jjtree.openNodeScope(jjtn015);
        jjtn015.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(BOXED_EQ);
            } finally {
if (jjtc015) {
          jjtree.closeNodeScope(jjtn015, true);
          jjtn015.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case BOXED_NE:{
ASTBoxedNotEqualOp jjtn016 = new ASTBoxedNotEqualOp(JJTBOXEDNOTEQUALOP);
        boolean jjtc016 = true;
        jjtree.openNodeScope(jjtn016);
        jjtn016.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(BOXED_NE);
            } finally {
if (jjtc016) {
          jjtree.closeNodeScope(jjtn016, true);
          jjtn016.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case CIRCLED_LT:{
ASTCircledLessThanOp jjtn017 = new ASTCircledLessThanOp(JJTCIRCLEDLESSTHANOP);
        boolean jjtc017 = true;
        jjtree.openNodeScope(jjtn017);
        jjtn017.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(CIRCLED_LT);
            } finally {
if (jjtc017) {
          jjtree.closeNodeScope(jjtn017, true);
          jjtn017.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case CIRCLED_GT:{
ASTCircledGreaterThanOp jjtn018 = new ASTCircledGreaterThanOp(JJTCIRCLEDGREATERTHANOP);
        boolean jjtc018 = true;
        jjtree.openNodeScope(jjtn018);
        jjtn018.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(CIRCLED_GT);
            } finally {
if (jjtc018) {
          jjtree.closeNodeScope(jjtn018, true);
          jjtn018.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case CIRCLED_LE:{
ASTCircledLessOrEqualOp jjtn019 = new ASTCircledLessOrEqualOp(JJTCIRCLEDLESSOREQUALOP);
        boolean jjtc019 = true;
        jjtree.openNodeScope(jjtn019);
        jjtn019.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(CIRCLED_LE);
            } finally {
if (jjtc019) {
          jjtree.closeNodeScope(jjtn019, true);
          jjtn019.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case CIRCLED_GE:{
ASTCircledGreaterOrEqualOp jjtn020 = new ASTCircledGreaterOrEqualOp(JJTCIRCLEDGREATEROREQUALOP);
        boolean jjtc020 = true;
        jjtree.openNodeScope(jjtn020);
        jjtn020.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(CIRCLED_GE);
            } finally {
if (jjtc020) {
          jjtree.closeNodeScope(jjtn020, true);
          jjtn020.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case CIRCLED_EQ:{
ASTCircledEqualOp jjtn021 = new ASTCircledEqualOp(JJTCIRCLEDEQUALOP);
        boolean jjtc021 = true;
        jjtree.openNodeScope(jjtn021);
        jjtn021.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(CIRCLED_EQ);
            } finally {
if (jjtc021) {
          jjtree.closeNodeScope(jjtn021, true);
          jjtn021.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          case CIRCLED_NE:{
ASTCircledNotEqualOp jjtn022 = new ASTCircledNotEqualOp(JJTCIRCLEDNOTEQUALOP);
        boolean jjtc022 = true;
        jjtree.openNodeScope(jjtn022);
        jjtn022.jjtSetFirstToken(getToken(1));
            try {
              jj_consume_token(CIRCLED_NE);
            } finally {
if (jjtc022) {
          jjtree.closeNodeScope(jjtn022, true);
          jjtn022.jjtSetLastToken(getToken(0));
        }
            }
            break;
            }
          default:
            jj_la1[218] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void numeric_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case STARSHIP:{
ASTStarshipOp jjtn001 = new ASTStarshipOp(JJTSTARSHIPOP);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(STARSHIP);
        } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
        }
        break;
        }
      case BAT:{
ASTBatOp jjtn002 = new ASTBatOp(JJTBATOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BAT);
        } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case TILDE:{
ASTTildeOp jjtn003 = new ASTTildeOp(JJTTILDEOP);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(TILDE);
        } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      default:
        jj_la1[219] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void arith_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case PLUS:{
ASTPlusOp jjtn001 = new ASTPlusOp(JJTPLUSOP);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(PLUS);
        } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
        }
        break;
        }
      case MINUS:{
ASTMinusOp jjtn002 = new ASTMinusOp(JJTMINUSOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(MINUS);
        } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case PLUS_PLUS:{
ASTDoublePlusOp jjtn003 = new ASTDoublePlusOp(JJTDOUBLEPLUSOP);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(PLUS_PLUS);
        } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case MINUS_MINUS:{
ASTDoubleMinusOp jjtn004 = new ASTDoubleMinusOp(JJTDOUBLEMINUSOP);
        boolean jjtc004 = true;
        jjtree.openNodeScope(jjtn004);
        jjtn004.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(MINUS_MINUS);
        } finally {
if (jjtc004) {
          jjtree.closeNodeScope(jjtn004, true);
          jjtn004.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case CIRCLED_PLUS:{
ASTCircledPlusOp jjtn005 = new ASTCircledPlusOp(JJTCIRCLEDPLUSOP);
        boolean jjtc005 = true;
        jjtree.openNodeScope(jjtn005);
        jjtn005.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CIRCLED_PLUS);
        } finally {
if (jjtc005) {
          jjtree.closeNodeScope(jjtn005, true);
          jjtn005.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case CIRCLED_MINUS:{
ASTCircledMinusOp jjtn006 = new ASTCircledMinusOp(JJTCIRCLEDMINUSOP);
        boolean jjtc006 = true;
        jjtree.openNodeScope(jjtn006);
        jjtn006.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CIRCLED_MINUS);
        } finally {
if (jjtc006) {
          jjtree.closeNodeScope(jjtn006, true);
          jjtn006.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_PLUS:{
ASTBoxedPlusOp jjtn007 = new ASTBoxedPlusOp(JJTBOXEDPLUSOP);
        boolean jjtc007 = true;
        jjtree.openNodeScope(jjtn007);
        jjtn007.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_PLUS);
        } finally {
if (jjtc007) {
          jjtree.closeNodeScope(jjtn007, true);
          jjtn007.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_MINUS:{
ASTBoxedMinusOp jjtn008 = new ASTBoxedMinusOp(JJTBOXEDMINUSOP);
        boolean jjtc008 = true;
        jjtree.openNodeScope(jjtn008);
        jjtn008.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_MINUS);
        } finally {
if (jjtc008) {
          jjtree.closeNodeScope(jjtn008, true);
          jjtn008.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      default:
        jj_la1[220] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void prod_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case AST:{
ASTAsteriskOp jjtn001 = new ASTAsteriskOp(JJTASTERISKOP);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(AST);
        } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
        }
        break;
        }
      case SLASH:{
ASTSlashOp jjtn002 = new ASTSlashOp(JJTSLASHOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(SLASH);
        } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case KW_DIV:{
ASTDivOp jjtn003 = new ASTDivOp(JJTDIVOP);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(KW_DIV);
        } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case KW_MOD:{
ASTModOp jjtn004 = new ASTModOp(JJTMODOP);
        boolean jjtc004 = true;
        jjtree.openNodeScope(jjtn004);
        jjtn004.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(KW_MOD);
        } finally {
if (jjtc004) {
          jjtree.closeNodeScope(jjtn004, true);
          jjtn004.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case TIMES:{
ASTTimesOp jjtn005 = new ASTTimesOp(JJTTIMESOP);
        boolean jjtc005 = true;
        jjtree.openNodeScope(jjtn005);
        jjtn005.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(TIMES);
        } finally {
if (jjtc005) {
          jjtree.closeNodeScope(jjtn005, true);
          jjtn005.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case PERCENT:{
ASTPercentOp jjtn006 = new ASTPercentOp(JJTPERCENTOP);
        boolean jjtc006 = true;
        jjtree.openNodeScope(jjtn006);
        jjtn006.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(PERCENT);
        } finally {
if (jjtc006) {
          jjtree.closeNodeScope(jjtn006, true);
          jjtn006.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case AST_SLASH:{
ASTAsteriskSlashOp jjtn007 = new ASTAsteriskSlashOp(JJTASTERISKSLASHOP);
        boolean jjtc007 = true;
        jjtree.openNodeScope(jjtn007);
        jjtn007.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(AST_SLASH);
        } finally {
if (jjtc007) {
          jjtree.closeNodeScope(jjtn007, true);
          jjtn007.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case SLASH_AST:{
ASTSlashAsteriskOp jjtn008 = new ASTSlashAsteriskOp(JJTSLASHASTERISKOP);
        boolean jjtc008 = true;
        jjtree.openNodeScope(jjtn008);
        jjtn008.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(SLASH_AST);
        } finally {
if (jjtc008) {
          jjtree.closeNodeScope(jjtn008, true);
          jjtn008.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case CIRCLED_AST:{
ASTCircledAateriskOp jjtn009 = new ASTCircledAateriskOp(JJTCIRCLEDAATERISKOP);
        boolean jjtc009 = true;
        jjtree.openNodeScope(jjtn009);
        jjtn009.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CIRCLED_AST);
        } finally {
if (jjtc009) {
          jjtree.closeNodeScope(jjtn009, true);
          jjtn009.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case CIRCLED_SLASH:{
ASTCircledSlashOp jjtn010 = new ASTCircledSlashOp(JJTCIRCLEDSLASHOP);
        boolean jjtc010 = true;
        jjtree.openNodeScope(jjtn010);
        jjtn010.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CIRCLED_SLASH);
        } finally {
if (jjtc010) {
          jjtree.closeNodeScope(jjtn010, true);
          jjtn010.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case CIRCLED_TIMES:{
ASTCircledTimesOp jjtn011 = new ASTCircledTimesOp(JJTCIRCLEDTIMESOP);
        boolean jjtc011 = true;
        jjtree.openNodeScope(jjtn011);
        jjtn011.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CIRCLED_TIMES);
        } finally {
if (jjtc011) {
          jjtree.closeNodeScope(jjtn011, true);
          jjtn011.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case CIRCLED_DOT:{
ASTCircledDotOp jjtn012 = new ASTCircledDotOp(JJTCIRCLEDDOTOP);
        boolean jjtc012 = true;
        jjtree.openNodeScope(jjtn012);
        jjtn012.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CIRCLED_DOT);
        } finally {
if (jjtc012) {
          jjtree.closeNodeScope(jjtn012, true);
          jjtn012.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_AST:{
ASTBoxedAsteriskOp jjtn013 = new ASTBoxedAsteriskOp(JJTBOXEDASTERISKOP);
        boolean jjtc013 = true;
        jjtree.openNodeScope(jjtn013);
        jjtn013.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_AST);
        } finally {
if (jjtc013) {
          jjtree.closeNodeScope(jjtn013, true);
          jjtn013.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_SLASH:{
ASTBoxedSlashOp jjtn014 = new ASTBoxedSlashOp(JJTBOXEDSLASHOP);
        boolean jjtc014 = true;
        jjtree.openNodeScope(jjtn014);
        jjtn014.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_SLASH);
        } finally {
if (jjtc014) {
          jjtree.closeNodeScope(jjtn014, true);
          jjtn014.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_TIMES:{
ASTBoxedTimesOp jjtn015 = new ASTBoxedTimesOp(JJTBOXEDTIMESOP);
        boolean jjtc015 = true;
        jjtree.openNodeScope(jjtn015);
        jjtn015.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_TIMES);
        } finally {
if (jjtc015) {
          jjtree.closeNodeScope(jjtn015, true);
          jjtn015.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_DOT:{
ASTBoxedDotOp jjtn016 = new ASTBoxedDotOp(JJTBOXEDDOTOP);
        boolean jjtc016 = true;
        jjtree.openNodeScope(jjtn016);
        jjtn016.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_DOT);
        } finally {
if (jjtc016) {
          jjtree.closeNodeScope(jjtn016, true);
          jjtn016.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_COLON:{
ASTBoxedColonOp jjtn017 = new ASTBoxedColonOp(JJTBOXEDCOLONOP);
        boolean jjtc017 = true;
        jjtree.openNodeScope(jjtn017);
        jjtn017.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_COLON);
        } finally {
if (jjtc017) {
          jjtree.closeNodeScope(jjtn017, true);
          jjtn017.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case SLASH_SLASH:{
ASTSlashSlashOp jjtn018 = new ASTSlashSlashOp(JJTSLASHSLASHOP);
        boolean jjtc018 = true;
        jjtree.openNodeScope(jjtn018);
        jjtn018.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(SLASH_SLASH);
        } finally {
if (jjtc018) {
          jjtree.closeNodeScope(jjtn018, true);
          jjtn018.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      default:
        jj_la1[221] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void pow_op() throws ParseException {/*@bgen(jjtree) Operator */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case CARET:{
ASTCaretOp jjtn001 = new ASTCaretOp(JJTCARETOP);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CARET);
        } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
        }
        break;
        }
      case AST_AST:{
ASTDoubleAsteriskOp jjtn002 = new ASTDoubleAsteriskOp(JJTDOUBLEASTERISKOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(AST_AST);
        } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_CARET:{
ASTBoxedCaretOp jjtn003 = new ASTBoxedCaretOp(JJTBOXEDCARETOP);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_CARET);
        } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      default:
        jj_la1[222] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void tight_op() throws ParseException {/*@bgen(jjtree) #Operator(true) */
  ASTOperator jjtn000 = new ASTOperator(JJTOPERATOR);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case KW_NOT:{
ASTNotOp jjtn001 = new ASTNotOp(JJTNOTOP);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(KW_NOT);
        } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
        }
        break;
        }
      case LL:{
ASTDoubleLessThanOp jjtn002 = new ASTDoubleLessThanOp(JJTDOUBLELESSTHANOP);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(LL);
        } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case GG:{
ASTDoubleGreaterThanOp jjtn003 = new ASTDoubleGreaterThanOp(JJTDOUBLEGREATERTHANOP);
        boolean jjtc003 = true;
        jjtree.openNodeScope(jjtn003);
        jjtn003.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(GG);
        } finally {
if (jjtc003) {
          jjtree.closeNodeScope(jjtn003, true);
          jjtn003.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case LLL:{
ASTTripleLessThanOp jjtn004 = new ASTTripleLessThanOp(JJTTRIPLELESSTHANOP);
        boolean jjtc004 = true;
        jjtree.openNodeScope(jjtn004);
        jjtn004.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(LLL);
        } finally {
if (jjtc004) {
          jjtree.closeNodeScope(jjtn004, true);
          jjtn004.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case GGG:{
ASTTripleGreaterThanOo jjtn005 = new ASTTripleGreaterThanOo(JJTTRIPLEGREATERTHANOO);
        boolean jjtc005 = true;
        jjtree.openNodeScope(jjtn005);
        jjtn005.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(GGG);
        } finally {
if (jjtc005) {
          jjtree.closeNodeScope(jjtn005, true);
          jjtn005.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case EXCLAM:{
ASTExclamationOp jjtn006 = new ASTExclamationOp(JJTEXCLAMATIONOP);
        boolean jjtc006 = true;
        jjtree.openNodeScope(jjtn006);
        jjtn006.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(EXCLAM);
        } finally {
if (jjtc006) {
          jjtree.closeNodeScope(jjtn006, true);
          jjtn006.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case EE:{
ASTDoubleExclamationOp jjtn007 = new ASTDoubleExclamationOp(JJTDOUBLEEXCLAMATIONOP);
        boolean jjtc007 = true;
        jjtree.openNodeScope(jjtn007);
        jjtn007.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(EE);
        } finally {
if (jjtc007) {
          jjtree.closeNodeScope(jjtn007, true);
          jjtn007.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case QUEST:{
ASTQuestionOp jjtn008 = new ASTQuestionOp(JJTQUESTIONOP);
        boolean jjtc008 = true;
        jjtree.openNodeScope(jjtn008);
        jjtn008.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(QUEST);
        } finally {
if (jjtc008) {
          jjtree.closeNodeScope(jjtn008, true);
          jjtn008.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case QQ:{
ASTDoubleQuestionOp jjtn009 = new ASTDoubleQuestionOp(JJTDOUBLEQUESTIONOP);
        boolean jjtc009 = true;
        jjtree.openNodeScope(jjtn009);
        jjtn009.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(QQ);
        } finally {
if (jjtc009) {
          jjtree.closeNodeScope(jjtn009, true);
          jjtn009.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case QEX:{
ASTQuestionExclamationOp jjtn010 = new ASTQuestionExclamationOp(JJTQUESTIONEXCLAMATIONOP);
        boolean jjtc010 = true;
        jjtree.openNodeScope(jjtn010);
        jjtn010.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(QEX);
        } finally {
if (jjtc010) {
          jjtree.closeNodeScope(jjtn010, true);
          jjtn010.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case EXQ:{
ASTExclamationQuestionOp jjtn011 = new ASTExclamationQuestionOp(JJTEXCLAMATIONQUESTIONOP);
        boolean jjtc011 = true;
        jjtree.openNodeScope(jjtn011);
        jjtn011.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(EXQ);
        } finally {
if (jjtc011) {
          jjtree.closeNodeScope(jjtn011, true);
          jjtn011.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BAR:{
ASTVerticalBarOp jjtn012 = new ASTVerticalBarOp(JJTVERTICALBAROP);
        boolean jjtc012 = true;
        jjtree.openNodeScope(jjtn012);
        jjtn012.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BAR);
        } finally {
if (jjtc012) {
          jjtree.closeNodeScope(jjtn012, true);
          jjtn012.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BAR_BAR:{
ASTDoubleVerticalBarOp jjtn013 = new ASTDoubleVerticalBarOp(JJTDOUBLEVERTICALBAROP);
        boolean jjtc013 = true;
        jjtree.openNodeScope(jjtn013);
        jjtn013.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BAR_BAR);
        } finally {
if (jjtc013) {
          jjtree.closeNodeScope(jjtn013, true);
          jjtn013.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case AMP:{
ASTAmpersandOp jjtn014 = new ASTAmpersandOp(JJTAMPERSANDOP);
        boolean jjtc014 = true;
        jjtree.openNodeScope(jjtn014);
        jjtn014.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(AMP);
        } finally {
if (jjtc014) {
          jjtree.closeNodeScope(jjtn014, true);
          jjtn014.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case AMP_AMP:{
ASTDoubleAmpersandOp jjtn015 = new ASTDoubleAmpersandOp(JJTDOUBLEAMPERSANDOP);
        boolean jjtc015 = true;
        jjtree.openNodeScope(jjtn015);
        jjtn015.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(AMP_AMP);
        } finally {
if (jjtc015) {
          jjtree.closeNodeScope(jjtn015, true);
          jjtn015.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case CARET_CARET:{
ASTDoubleCaretOp jjtn016 = new ASTDoubleCaretOp(JJTDOUBLECARETOP);
        boolean jjtc016 = true;
        jjtree.openNodeScope(jjtn016);
        jjtn016.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(CARET_CARET);
        } finally {
if (jjtc016) {
          jjtree.closeNodeScope(jjtn016, true);
          jjtn016.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_QUEST:{
ASTBoxedQuestionOp jjtn017 = new ASTBoxedQuestionOp(JJTBOXEDQUESTIONOP);
        boolean jjtc017 = true;
        jjtree.openNodeScope(jjtn017);
        jjtn017.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_QUEST);
        } finally {
if (jjtc017) {
          jjtree.closeNodeScope(jjtn017, true);
          jjtn017.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case BOXED_QUOTE:{
ASTBoxedSingleQuoteOp jjtn018 = new ASTBoxedSingleQuoteOp(JJTBOXEDSINGLEQUOTEOP);
        boolean jjtc018 = true;
        jjtree.openNodeScope(jjtn018);
        jjtn018.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(BOXED_QUOTE);
        } finally {
if (jjtc018) {
          jjtree.closeNodeScope(jjtn018, true);
          jjtn018.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case PLUS_MINUS:{
ASTPlusMinusOp jjtn019 = new ASTPlusMinusOp(JJTPLUSMINUSOP);
        boolean jjtc019 = true;
        jjtree.openNodeScope(jjtn019);
        jjtn019.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(PLUS_MINUS);
        } finally {
if (jjtc019) {
          jjtree.closeNodeScope(jjtn019, true);
          jjtn019.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      case MINUS_PLUS:{
ASTMinusPlusOp jjtn020 = new ASTMinusPlusOp(JJTMINUSPLUSOP);
        boolean jjtc020 = true;
        jjtree.openNodeScope(jjtn020);
        jjtn020.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(MINUS_PLUS);
        } finally {
if (jjtc020) {
          jjtree.closeNodeScope(jjtn020, true);
          jjtn020.jjtSetLastToken(getToken(0));
        }
        }
        break;
        }
      default:
        jj_la1[223] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void sign() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case PLUS:{
      jj_consume_token(PLUS);
      break;
      }
    case MINUS:{
ASTMinus jjtn001 = new ASTMinus(JJTMINUS);
        boolean jjtc001 = true;
        jjtree.openNodeScope(jjtn001);
        jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(MINUS);
      } finally {
if (jjtc001) {
          jjtree.closeNodeScope(jjtn001, true);
          jjtn001.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    default:
      jj_la1[224] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void identifier() throws ParseException {/*@bgen(jjtree) Identifier */
  ASTIdentifier jjtn000 = new ASTIdentifier(JJTIDENTIFIER);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(IDENTIFIER);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void identifier_ref() throws ParseException {/*@bgen(jjtree) IdentifierRef */
  ASTIdentifierRef jjtn000 = new ASTIdentifierRef(JJTIDENTIFIERREF);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(IDENTIFIER);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ELLIPSIS:{
ASTEllipsis jjtn001 = new ASTEllipsis(JJTELLIPSIS);
       boolean jjtc001 = true;
       jjtree.openNodeScope(jjtn001);
       jjtn001.jjtSetFirstToken(getToken(1));
        try {
          jj_consume_token(ELLIPSIS);
        } finally {
if (jjtc001) {
         jjtree.closeNodeScope(jjtn001, true);
         jjtn001.jjtSetLastToken(getToken(0));
       }
        }
        break;
        }
      default:
        jj_la1[225] = jj_gen;
        ;
      }
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void nl() throws ParseException {
    label_57:
    while (true) {
      jj_consume_token(NL);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case NL:{
        ;
        break;
        }
      default:
        jj_la1[226] = jj_gen;
        break label_57;
      }
    }
}

  final public void decimal_literal() throws ParseException {/*@bgen(jjtree) IntegerDenotation */
  ASTIntegerDenotation jjtn000 = new ASTIntegerDenotation(JJTINTEGERDENOTATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(DECIMAL_LITERAL);
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void integer_denotation() throws ParseException {/*@bgen(jjtree) IntegerDenotation */
  ASTIntegerDenotation jjtn000 = new ASTIntegerDenotation(JJTINTEGERDENOTATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case DECIMAL_LITERAL:{
        jj_consume_token(DECIMAL_LITERAL);
        break;
        }
      case RADIX_LITERAL:{
        jj_consume_token(RADIX_LITERAL);
        break;
        }
      default:
        jj_la1[227] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        dimension();
        break;
        }
      default:
        jj_la1[228] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void real_denotation() throws ParseException {/*@bgen(jjtree) RealDenotation */
  ASTRealDenotation jjtn000 = new ASTRealDenotation(JJTREALDENOTATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      jj_consume_token(REAL_LITERAL);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 6:{
        dimension();
        break;
        }
      default:
        jj_la1[229] = jj_gen;
        ;
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  final public void bool_denotation() throws ParseException {
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case KW_TRUE:{
ASTTrueDenotation jjtn001 = new ASTTrueDenotation(JJTTRUEDENOTATION);
      boolean jjtc001 = true;
      jjtree.openNodeScope(jjtn001);
      jjtn001.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_TRUE);
      } finally {
if (jjtc001) {
        jjtree.closeNodeScope(jjtn001, true);
        jjtn001.jjtSetLastToken(getToken(0));
      }
      }
      break;
      }
    case KW_FALSE:{
ASTFalseDenotation jjtn002 = new ASTFalseDenotation(JJTFALSEDENOTATION);
        boolean jjtc002 = true;
        jjtree.openNodeScope(jjtn002);
        jjtn002.jjtSetFirstToken(getToken(1));
      try {
        jj_consume_token(KW_FALSE);
      } finally {
if (jjtc002) {
          jjtree.closeNodeScope(jjtn002, true);
          jjtn002.jjtSetLastToken(getToken(0));
        }
      }
      break;
      }
    default:
      jj_la1[230] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
}

  final public void text_denotation() throws ParseException {/*@bgen(jjtree) TextDenotation */
  ASTTextDenotation jjtn000 = new ASTTextDenotation(JJTTEXTDENOTATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);
  jjtn000.jjtSetFirstToken(getToken(1));
    try {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case TEXT_LITERAL:{
        jj_consume_token(TEXT_LITERAL);
        break;
        }
      case TEXT_HEAD:{
        jj_consume_token(TEXT_HEAD);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 4:
        case 9:
        case LARR:
        case RARR:
        case LRARR:
        case STARSHIP:
        case BAT:
        case TILDE:
        case SLASH:
        case SLASH_SLASH:
        case AST:
        case CIRCLED_TIMES:
        case CIRCLED_AST:
        case CIRCLED_DOT:
        case CIRCLED_SLASH:
        case AST_AST:
        case AST_SLASH:
        case SLASH_AST:
        case TIMES:
        case PERCENT:
        case BOXED_QUEST:
        case BOXED_COLON:
        case BOXED_QUOTE:
        case BOXED_CARET:
        case BOXED_LARR:
        case BOXED_RARR:
        case BOXED_SLASH:
        case BOXED_PLUS:
        case BOXED_MINUS:
        case BOXED_TIMES:
        case BOXED_DOT:
        case BOXED_AST:
        case PLUS:
        case MINUS:
        case PLUS_PLUS:
        case MINUS_MINUS:
        case PLUS_MINUS:
        case MINUS_PLUS:
        case CIRCLED_PLUS:
        case CIRCLED_MINUS:
        case CARET:
        case LL:
        case GG:
        case LLL:
        case EXCLAM:
        case QUEST:
        case QQ:
        case EE:
        case QEX:
        case EXQ:
        case GGG:
        case BAR:
        case AMP:
        case BAR_BAR:
        case AMP_AMP:
        case CARET_CARET:
        case KW_ACROSS:
        case KW_AND:
        case KW_CONCR:
        case KW_CONTINUE:
        case KW_DIV:
        case KW_FALSE:
        case KW_IF:
        case KW_IMPLIES:
        case KW_LEAVE:
        case KW_MOD:
        case KW_NOT:
        case KW_OR:
        case KW_REPEAT:
        case KW_SELECT:
        case KW_TRUE:
        case KW_WHILE:
        case KW_WITH:
        case KW_XOR:
        case IDENTIFIER:
        case TEXT_LITERAL:
        case TEXT_HEAD:
        case DECIMAL_LITERAL:
        case RADIX_LITERAL:
        case REAL_LITERAL:{
          expression();
          break;
          }
        default:
          jj_la1[231] = jj_gen;
          ;
        }
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case NL:{
          nl();
          break;
          }
        default:
          jj_la1[232] = jj_gen;
          ;
        }
        label_58:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case TEXT_MID:{
            ;
            break;
            }
          default:
            jj_la1[233] = jj_gen;
            break label_58;
          }
          jj_consume_token(TEXT_MID);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 4:
          case 9:
          case LARR:
          case RARR:
          case LRARR:
          case STARSHIP:
          case BAT:
          case TILDE:
          case SLASH:
          case SLASH_SLASH:
          case AST:
          case CIRCLED_TIMES:
          case CIRCLED_AST:
          case CIRCLED_DOT:
          case CIRCLED_SLASH:
          case AST_AST:
          case AST_SLASH:
          case SLASH_AST:
          case TIMES:
          case PERCENT:
          case BOXED_QUEST:
          case BOXED_COLON:
          case BOXED_QUOTE:
          case BOXED_CARET:
          case BOXED_LARR:
          case BOXED_RARR:
          case BOXED_SLASH:
          case BOXED_PLUS:
          case BOXED_MINUS:
          case BOXED_TIMES:
          case BOXED_DOT:
          case BOXED_AST:
          case PLUS:
          case MINUS:
          case PLUS_PLUS:
          case MINUS_MINUS:
          case PLUS_MINUS:
          case MINUS_PLUS:
          case CIRCLED_PLUS:
          case CIRCLED_MINUS:
          case CARET:
          case LL:
          case GG:
          case LLL:
          case EXCLAM:
          case QUEST:
          case QQ:
          case EE:
          case QEX:
          case EXQ:
          case GGG:
          case BAR:
          case AMP:
          case BAR_BAR:
          case AMP_AMP:
          case CARET_CARET:
          case KW_ACROSS:
          case KW_AND:
          case KW_CONCR:
          case KW_CONTINUE:
          case KW_DIV:
          case KW_FALSE:
          case KW_IF:
          case KW_IMPLIES:
          case KW_LEAVE:
          case KW_MOD:
          case KW_NOT:
          case KW_OR:
          case KW_REPEAT:
          case KW_SELECT:
          case KW_TRUE:
          case KW_WHILE:
          case KW_WITH:
          case KW_XOR:
          case IDENTIFIER:
          case TEXT_LITERAL:
          case TEXT_HEAD:
          case DECIMAL_LITERAL:
          case RADIX_LITERAL:
          case REAL_LITERAL:{
            expression();
            break;
            }
          default:
            jj_la1[234] = jj_gen;
            ;
          }
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case NL:{
            nl();
            break;
            }
          default:
            jj_la1[235] = jj_gen;
            ;
          }
        }
        jj_consume_token(TEXT_TAIL);
        break;
        }
      default:
        jj_la1[236] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    } catch (Throwable jjte000) {
if (jjtc000) {
        jjtree.clearNodeScope(jjtn000);
        jjtc000 = false;
      } else {
        jjtree.popNode();
      }
      if (jjte000 instanceof RuntimeException) {
        {if (true) throw (RuntimeException)jjte000;}
      }
      if (jjte000 instanceof ParseException) {
        {if (true) throw (ParseException)jjte000;}
      }
      {if (true) throw (Error)jjte000;}
    } finally {
if (jjtc000) {
        jjtree.closeNodeScope(jjtn000, true);
        jjtn000.jjtSetLastToken(getToken(0));
      }
    }
}

  private boolean jj_2_1(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_1()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(0, xla); }
  }

  private boolean jj_2_2(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_2()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(1, xla); }
  }

  private boolean jj_2_3(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_3()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(2, xla); }
  }

  private boolean jj_2_4(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_4()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(3, xla); }
  }

  private boolean jj_2_5(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_5()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(4, xla); }
  }

  private boolean jj_2_6(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_6()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(5, xla); }
  }

  private boolean jj_2_7(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_7()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(6, xla); }
  }

  private boolean jj_2_8(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_8()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(7, xla); }
  }

  private boolean jj_2_9(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_9()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(8, xla); }
  }

  private boolean jj_2_10(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_10()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(9, xla); }
  }

  private boolean jj_2_11(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_11()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(10, xla); }
  }

  private boolean jj_2_12(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_12()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(11, xla); }
  }

  private boolean jj_2_13(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_13()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(12, xla); }
  }

  private boolean jj_2_14(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_14()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(13, xla); }
  }

  private boolean jj_2_15(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_15()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(14, xla); }
  }

  private boolean jj_2_16(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_16()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(15, xla); }
  }

  private boolean jj_2_17(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_17()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(16, xla); }
  }

  private boolean jj_2_18(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_18()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(17, xla); }
  }

  private boolean jj_2_19(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_19()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(18, xla); }
  }

  private boolean jj_2_20(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_20()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(19, xla); }
  }

  private boolean jj_2_21(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_21()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(20, xla); }
  }

  private boolean jj_2_22(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_22()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(21, xla); }
  }

  private boolean jj_2_23(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_23()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(22, xla); }
  }

  private boolean jj_2_24(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_24()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(23, xla); }
  }

  private boolean jj_2_25(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_25()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(24, xla); }
  }

  private boolean jj_2_26(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_26()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(25, xla); }
  }

  private boolean jj_2_27(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_27()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(26, xla); }
  }

  private boolean jj_2_28(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_28()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(27, xla); }
  }

  private boolean jj_2_29(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_29()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(28, xla); }
  }

  private boolean jj_2_30(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_30()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(29, xla); }
  }

  private boolean jj_2_31(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_31()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(30, xla); }
  }

  private boolean jj_2_32(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_32()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(31, xla); }
  }

  private boolean jj_2_33(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_33()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(32, xla); }
  }

  private boolean jj_2_34(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_34()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(33, xla); }
  }

  private boolean jj_2_35(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_35()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(34, xla); }
  }

  private boolean jj_2_36(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_36()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(35, xla); }
  }

  private boolean jj_2_37(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_37()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(36, xla); }
  }

  private boolean jj_3R_bool_denotation_1526_7_417()
 {
    if (jj_scan_token(KW_FALSE)) return true;
    return false;
  }

  private boolean jj_3_14()
 {
    if (jj_3R_assignment_op_1328_5_71()) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_assignment_ex_758_5_232()
 {
    if (jj_3R_abstract_bin_ex_765_5_269()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_14()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_bool_denotation_1524_5_416()
 {
    if (jj_scan_token(KW_TRUE)) return true;
    return false;
  }

  private boolean jj_3R_bool_denotation_1524_5_374()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_bool_denotation_1524_5_416()) {
    jj_scanpos = xsp;
    if (jj_3R_bool_denotation_1526_7_417()) return true;
    }
    return false;
  }

  private boolean jj_3R_expression_752_7_113()
 {
    if (jj_3R_repetition_1011_5_235()) return true;
    return false;
  }

  private boolean jj_3R_expression_751_7_112()
 {
    if (jj_3R_continuator_1005_5_234()) return true;
    return false;
  }

  private boolean jj_3R_expression_750_7_111()
 {
    if (jj_3R_terminator_998_5_233()) return true;
    return false;
  }

  private boolean jj_3R_real_denotation_1518_5_372()
 {
    if (jj_scan_token(REAL_LITERAL)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_real_denotation_1518_21_487()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_expression_749_5_110()
 {
    if (jj_3R_assignment_ex_758_5_232()) return true;
    return false;
  }

  private boolean jj_3R_expression_749_5_72()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_expression_749_5_110()) {
    jj_scanpos = xsp;
    if (jj_3R_expression_750_7_111()) {
    jj_scanpos = xsp;
    if (jj_3R_expression_751_7_112()) {
    jj_scanpos = xsp;
    if (jj_3R_expression_752_7_113()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_integer_denotation_1512_6_486()
 {
    if (jj_3R_dimension_1246_5_432()) return true;
    return false;
  }

  private boolean jj_3R_integer_denotation_1511_5_371()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(189)) {
    jj_scanpos = xsp;
    if (jj_scan_token(190)) return true;
    }
    xsp = jj_scanpos;
    if (jj_3R_integer_denotation_1512_6_486()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_expression_statement_743_5_225()
 {
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_decimal_literal_1505_5_97()
 {
    if (jj_scan_token(DECIMAL_LITERAL)) return true;
    return false;
  }

  private boolean jj_3R_nl_1499_5_69()
 {
    Token xsp;
    if (jj_scan_token(11)) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_scan_token(11)) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_identifier_ref_1494_6_208()
 {
    if (jj_scan_token(ELLIPSIS)) return true;
    return false;
  }

  private boolean jj_3R_identifier_ref_1492_5_94()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_identifier_ref_1494_6_208()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_variant_723_6_471()
 {
    if (jj_3R_reason_1293_5_251()) return true;
    return false;
  }

  private boolean jj_3R_variant_722_5_434()
 {
    if (jj_scan_token(KW_VARIANT)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_variant_723_6_471()) jj_scanpos = xsp;
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_identifier_1486_5_104()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_invariant_716_6_470()
 {
    if (jj_3R_reason_1293_5_251()) return true;
    return false;
  }

  private boolean jj_3R_sign_1481_7_236()
 {
    if (jj_scan_token(MINUS)) return true;
    return false;
  }

  private boolean jj_3R_invariant_715_5_433()
 {
    if (jj_scan_token(KW_INVARIANT)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_invariant_716_6_470()) jj_scanpos = xsp;
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_sign_1479_5_182()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(66)) {
    jj_scanpos = xsp;
    if (jj_3R_sign_1481_7_236()) return true;
    }
    return false;
  }

  private boolean jj_3R_postcondition_709_6_469()
 {
    if (jj_3R_reason_1293_5_251()) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1474_7_203()
 {
    if (jj_scan_token(MINUS_PLUS)) return true;
    return false;
  }

  private boolean jj_3R_postcondition_708_5_463()
 {
    if (jj_scan_token(KW_ENSURES)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_postcondition_709_6_469()) jj_scanpos = xsp;
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1473_7_202()
 {
    if (jj_scan_token(PLUS_MINUS)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1472_7_201()
 {
    if (jj_scan_token(BOXED_QUOTE)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1471_7_200()
 {
    if (jj_scan_token(BOXED_QUEST)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1470_7_199()
 {
    if (jj_scan_token(CARET_CARET)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1469_7_198()
 {
    if (jj_scan_token(AMP_AMP)) return true;
    return false;
  }

  private boolean jj_3R_precondition_702_6_468()
 {
    if (jj_3R_reason_1293_5_251()) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1468_7_197()
 {
    if (jj_scan_token(AMP)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1467_7_196()
 {
    if (jj_scan_token(BAR_BAR)) return true;
    return false;
  }

  private boolean jj_3R_precondition_701_5_462()
 {
    if (jj_scan_token(KW_REQUIRES)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_precondition_702_6_468()) jj_scanpos = xsp;
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1466_7_195()
 {
    if (jj_scan_token(BAR)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1465_7_194()
 {
    if (jj_scan_token(EXQ)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1464_7_193()
 {
    if (jj_scan_token(QEX)) return true;
    return false;
  }

  private boolean jj_3_13()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(160)) {
    jj_scanpos = xsp;
    if (jj_scan_token(99)) return true;
    }
    return false;
  }

  private boolean jj_3R_tight_op_1463_7_192()
 {
    if (jj_scan_token(QQ)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1462_7_191()
 {
    if (jj_scan_token(QUEST)) return true;
    return false;
  }

  private boolean jj_3R_assertion_695_6_477()
 {
    if (jj_3R_reason_1293_5_251()) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1461_7_190()
 {
    if (jj_scan_token(EE)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1460_7_189()
 {
    if (jj_scan_token(EXCLAM)) return true;
    return false;
  }

  private boolean jj_3R_assertion_694_5_223()
 {
    if (jj_scan_token(KW_CHECK)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_assertion_695_6_477()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_tight_op_1459_7_188()
 {
    if (jj_scan_token(GGG)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1458_7_187()
 {
    if (jj_scan_token(LLL)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1457_7_186()
 {
    if (jj_scan_token(GG)) return true;
    return false;
  }

  private boolean jj_3R_tight_op_1456_7_185()
 {
    if (jj_scan_token(LL)) return true;
    return false;
  }

  private boolean jj_3R_unit_688_7_107()
 {
    if (jj_3R_expression_statement_743_5_225()) return true;
    return false;
  }

  private boolean jj_3R_unit_686_7_106()
 {
    if (jj_3R_object_decl_1126_5_224()) return true;
    return false;
  }

  private boolean jj_3R_unit_685_7_105()
 {
    if (jj_3R_assertion_694_5_223()) return true;
    return false;
  }

  private boolean jj_3R_unit_685_7_68()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_unit_685_7_105()) {
    jj_scanpos = xsp;
    if (jj_3R_unit_686_7_106()) {
    jj_scanpos = xsp;
    if (jj_3R_unit_688_7_107()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_tight_op_1454_5_90()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_tight_op_1454_5_184()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1456_7_185()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1457_7_186()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1458_7_187()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1459_7_188()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1460_7_189()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1461_7_190()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1462_7_191()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1463_7_192()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1464_7_193()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1465_7_194()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1466_7_195()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1467_7_196()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1468_7_197()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1469_7_198()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1470_7_199()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1471_7_200()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1472_7_201()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1473_7_202()) {
    jj_scanpos = xsp;
    if (jj_3R_tight_op_1474_7_203()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_tight_op_1454_5_184()
 {
    if (jj_scan_token(KW_NOT)) return true;
    return false;
  }

  private boolean jj_3R_pow_op_1449_7_181()
 {
    if (jj_scan_token(BOXED_CARET)) return true;
    return false;
  }

  private boolean jj_3R_pow_op_1448_7_180()
 {
    if (jj_scan_token(AST_AST)) return true;
    return false;
  }

  private boolean jj_3_12()
 {
    if (jj_3R_unit_685_7_68()) return true;
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_paragraph_679_5_67()
 {
    Token xsp;
    if (jj_3_12()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_12()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_pow_op_1446_5_87()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_pow_op_1446_5_179()) {
    jj_scanpos = xsp;
    if (jj_3R_pow_op_1448_7_180()) {
    jj_scanpos = xsp;
    if (jj_3R_pow_op_1449_7_181()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_pow_op_1446_5_179()
 {
    if (jj_scan_token(CARET)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1441_7_177()
 {
    if (jj_scan_token(SLASH_SLASH)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1440_7_176()
 {
    if (jj_scan_token(BOXED_COLON)) return true;
    return false;
  }

  private boolean jj_3_11()
 {
    if (jj_3R_paragraph_679_5_67()) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1439_7_175()
 {
    if (jj_scan_token(BOXED_DOT)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1438_7_174()
 {
    if (jj_scan_token(BOXED_TIMES)) return true;
    return false;
  }

  private boolean jj_3R_refinement_672_5_66()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    if (jj_scan_token(2)) return true;
    if (jj_3R_nl_1499_5_69()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_11()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_prod_op_1437_7_173()
 {
    if (jj_scan_token(BOXED_SLASH)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1436_7_172()
 {
    if (jj_scan_token(BOXED_AST)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1435_7_171()
 {
    if (jj_scan_token(CIRCLED_DOT)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1434_7_170()
 {
    if (jj_scan_token(CIRCLED_TIMES)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1433_7_169()
 {
    if (jj_scan_token(CIRCLED_SLASH)) return true;
    return false;
  }

  private boolean jj_3R_top_down_part_666_6_443()
 {
    if (jj_3R_top_down_part_665_5_431()) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1432_7_168()
 {
    if (jj_scan_token(CIRCLED_AST)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1431_7_167()
 {
    if (jj_scan_token(SLASH_AST)) return true;
    return false;
  }

  private boolean jj_3R_top_down_part_665_5_431()
 {
    if (jj_3R_refinement_672_5_66()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_top_down_part_666_6_443()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_prod_op_1430_7_166()
 {
    if (jj_scan_token(AST_SLASH)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1429_7_165()
 {
    if (jj_scan_token(PERCENT)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1428_7_164()
 {
    if (jj_scan_token(TIMES)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1427_7_163()
 {
    if (jj_scan_token(KW_MOD)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1426_7_162()
 {
    if (jj_scan_token(KW_DIV)) return true;
    return false;
  }

  private boolean jj_3_10()
 {
    if (jj_3R_refinement_672_5_66()) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1425_7_161()
 {
    if (jj_scan_token(SLASH)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1423_5_160()
 {
    if (jj_scan_token(AST)) return true;
    return false;
  }

  private boolean jj_3R_prod_op_1423_5_85()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_prod_op_1423_5_160()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1425_7_161()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1426_7_162()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1427_7_163()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1428_7_164()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1429_7_165()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1430_7_166()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1431_7_167()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1432_7_168()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1433_7_169()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1434_7_170()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1435_7_171()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1436_7_172()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1437_7_173()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1438_7_174()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1439_7_175()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1440_7_176()) {
    jj_scanpos = xsp;
    if (jj_3R_prod_op_1441_7_177()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_procedure_body_652_6_407()
 {
    if (jj_3R_top_down_part_665_5_431()) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1418_7_158()
 {
    if (jj_scan_token(BOXED_MINUS)) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1417_7_157()
 {
    if (jj_scan_token(BOXED_PLUS)) return true;
    return false;
  }

  private boolean jj_3R_procedure_body_651_5_347()
 {
    if (jj_3R_paragraph_679_5_67()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_body_652_6_407()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_arith_op_1416_7_156()
 {
    if (jj_scan_token(CIRCLED_MINUS)) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1415_7_155()
 {
    if (jj_scan_token(CIRCLED_PLUS)) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1414_7_154()
 {
    if (jj_scan_token(MINUS_MINUS)) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1413_7_153()
 {
    if (jj_scan_token(PLUS_PLUS)) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1412_7_152()
 {
    if (jj_scan_token(MINUS)) return true;
    return false;
  }

  private boolean jj_3R_unit_test_645_6_298()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_unit_test_644_6_297()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_TEST)) return true;
    return false;
  }

  private boolean jj_3R_unit_test_643_6_296()
 {
    if (jj_3R_procedure_body_651_5_347()) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1410_5_151()
 {
    if (jj_scan_token(PLUS)) return true;
    return false;
  }

  private boolean jj_3R_arith_op_1410_5_83()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_arith_op_1410_5_151()) {
    jj_scanpos = xsp;
    if (jj_3R_arith_op_1412_7_152()) {
    jj_scanpos = xsp;
    if (jj_3R_arith_op_1413_7_153()) {
    jj_scanpos = xsp;
    if (jj_3R_arith_op_1414_7_154()) {
    jj_scanpos = xsp;
    if (jj_3R_arith_op_1415_7_155()) {
    jj_scanpos = xsp;
    if (jj_3R_arith_op_1416_7_156()) {
    jj_scanpos = xsp;
    if (jj_3R_arith_op_1417_7_157()) {
    jj_scanpos = xsp;
    if (jj_3R_arith_op_1418_7_158()) return true;
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_unit_test_642_5_260()
 {
    if (jj_scan_token(KW_TEST)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    if (jj_3R_nl_1499_5_69()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_unit_test_643_6_296()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_unit_test_644_6_297()) {
    jj_scanpos = xsp;
    if (jj_scan_token(116)) return true;
    }
    xsp = jj_scanpos;
    if (jj_3R_unit_test_645_6_298()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_numeric_op_1405_7_149()
 {
    if (jj_scan_token(TILDE)) return true;
    return false;
  }

  private boolean jj_3R_numeric_op_1404_7_148()
 {
    if (jj_scan_token(BAT)) return true;
    return false;
  }

  private boolean jj_3R_local_decl_636_5_222()
 {
    if (jj_3R_unit_test_642_5_260()) return true;
    return false;
  }

  private boolean jj_3R_numeric_op_1402_5_147()
 {
    if (jj_scan_token(STARSHIP)) return true;
    return false;
  }

  private boolean jj_3R_numeric_op_1402_5_81()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_numeric_op_1402_5_147()) {
    jj_scanpos = xsp;
    if (jj_3R_numeric_op_1404_7_148()) {
    jj_scanpos = xsp;
    if (jj_3R_numeric_op_1405_7_149()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_comp_op_1397_7_145()
 {
    if (jj_scan_token(CIRCLED_NE)) return true;
    return false;
  }

  private boolean jj_3R_measure_decl_630_6_337()
 {
    if (jj_scan_token(EQ)) return true;
    if (jj_3R_dim_expression_1252_5_398()) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1396_7_144()
 {
    if (jj_scan_token(CIRCLED_EQ)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1395_7_143()
 {
    if (jj_scan_token(CIRCLED_GE)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1394_7_142()
 {
    if (jj_scan_token(CIRCLED_LE)) return true;
    return false;
  }

  private boolean jj_3R_measure_decl_628_5_292()
 {
    if (jj_scan_token(KW_MEASURE)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_measure_decl_630_6_337()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_comp_op_1393_7_141()
 {
    if (jj_scan_token(CIRCLED_GT)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1392_7_140()
 {
    if (jj_scan_token(CIRCLED_LT)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1391_7_139()
 {
    if (jj_scan_token(BOXED_NE)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1390_7_138()
 {
    if (jj_scan_token(BOXED_EQ)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1389_7_137()
 {
    if (jj_scan_token(BOXED_GE)) return true;
    return false;
  }

  private boolean jj_3R_impl_protocol_622_6_406()
 {
    if (jj_3R_actual_parameter_list_930_5_281()) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1388_7_136()
 {
    if (jj_scan_token(BOXED_LE)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1387_7_135()
 {
    if (jj_scan_token(BOXED_LT)) return true;
    return false;
  }

  private boolean jj_3R_impl_protocol_621_5_345()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_impl_protocol_622_6_406()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_comp_op_1386_7_134()
 {
    if (jj_scan_token(BOXED_GT)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1385_7_133()
 {
    if (jj_scan_token(NOT_IN)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1384_7_132()
 {
    if (jj_scan_token(IN)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1383_7_131()
 {
    if (jj_scan_token(KW_IN)) return true;
    return false;
  }

  private boolean jj_3R_automatic_delegation_615_6_346()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_impl_protocol_621_5_345()) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1381_7_130()
 {
    if (jj_scan_token(NE)) return true;
    return false;
  }

  private boolean jj_3_37()
 {
    if (jj_scan_token(KW_NOT)) return true;
    if (jj_scan_token(KW_IN)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1380_7_129()
 {
    if (jj_scan_token(EQ)) return true;
    return false;
  }

  private boolean jj_3R_automatic_delegation_613_6_344()
 {
    if (jj_3R_formal_parameter_pack_441_4_394()) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1379_7_128()
 {
    if (jj_scan_token(GE)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1378_7_127()
 {
    if (jj_scan_token(LE)) return true;
    return false;
  }

  private boolean jj_3R_automatic_delegation_611_6_343()
 {
    if (jj_3R_formal_type_part_329_5_380()) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1377_7_126()
 {
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3R_virtual_procedure_naming_cont_596_20_527()
 {
    if (jj_3R_virtual_procedure_naming_cont_595_5_492()) return true;
    return false;
  }

  private boolean jj_3R_automatic_delegation_610_6_342()
 {
    if (jj_3R_formal_measure_part_419_5_405()) return true;
    return false;
  }

  private boolean jj_3R_automatic_delegation_609_5_295()
 {
    if (jj_scan_token(KW_IMPL)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_automatic_delegation_610_6_342()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_automatic_delegation_611_6_343()) jj_scanpos = xsp;
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    xsp = jj_scanpos;
    if (jj_3R_automatic_delegation_613_6_344()) jj_scanpos = xsp;
    if (jj_scan_token(KW_BY)) return true;
    if (jj_3R_impl_protocol_621_5_345()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_automatic_delegation_615_6_346()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_comp_op_1375_5_125()
 {
    if (jj_scan_token(LT)) return true;
    return false;
  }

  private boolean jj_3R_comp_op_1375_5_79()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_comp_op_1375_5_125()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1377_7_126()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1378_7_127()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1379_7_128()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1380_7_129()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1381_7_130()) {
    jj_scanpos = xsp;
    if (jj_3_37()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1383_7_131()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1384_7_132()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1385_7_133()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1386_7_134()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1387_7_135()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1388_7_136()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1389_7_137()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1390_7_138()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1391_7_139()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1392_7_140()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1393_7_141()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1394_7_142()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1395_7_143()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1396_7_144()) {
    jj_scanpos = xsp;
    if (jj_3R_comp_op_1397_7_145()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_conjunct_op_1370_7_124()
 {
    if (jj_scan_token(KW_AND)) return true;
    return false;
  }

  private boolean jj_3R_protocol_tail_603_6_404()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_protocol_tail_602_6_403()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_PROTOCOL)) return true;
    return false;
  }

  private boolean jj_3R_protocol_tail_602_5_341()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_protocol_tail_602_6_403()) {
    jj_scanpos = xsp;
    if (jj_scan_token(113)) return true;
    }
    xsp = jj_scanpos;
    if (jj_3R_protocol_tail_603_6_404()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_36()
 {
    if (jj_scan_token(KW_AND)) return true;
    if (jj_scan_token(KW_THEN)) return true;
    return false;
  }

  private boolean jj_3R_conjunct_op_1368_5_77()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_36()) {
    jj_scanpos = xsp;
    if (jj_3R_conjunct_op_1370_7_124()) return true;
    }
    return false;
  }

  private boolean jj_3R_disjunct_op_1363_7_122()
 {
    if (jj_scan_token(KW_IMPLIES)) return true;
    return false;
  }

  private boolean jj_3R_virtual_procedure_naming_cont_596_6_510()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_virtual_procedure_naming_cont_596_20_527()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_disjunct_op_1362_7_121()
 {
    if (jj_scan_token(KW_XOR)) return true;
    return false;
  }

  private boolean jj_3R_disjunct_op_1361_7_120()
 {
    if (jj_scan_token(KW_OR)) return true;
    return false;
  }

  private boolean jj_3R_virtual_procedure_naming_cont_595_5_492()
 {
    if (jj_3R_virtual_parameters_pack_475_5_377()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_virtual_procedure_naming_cont_596_6_510()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_35()
 {
    if (jj_scan_token(KW_OR)) return true;
    if (jj_scan_token(KW_ELSE)) return true;
    return false;
  }

  private boolean jj_3R_disjunct_op_1359_5_75()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_35()) {
    jj_scanpos = xsp;
    if (jj_3R_disjunct_op_1361_7_120()) {
    jj_scanpos = xsp;
    if (jj_3R_disjunct_op_1362_7_121()) {
    jj_scanpos = xsp;
    if (jj_3R_disjunct_op_1363_7_122()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_virtual_procedure_naming_589_6_483()
 {
    if (jj_3R_virtual_procedure_naming_cont_595_5_492()) return true;
    return false;
  }

  private boolean jj_3R_abstract_bin_op_1354_7_118()
 {
    if (jj_scan_token(LRARR)) return true;
    return false;
  }

  private boolean jj_3R_virtual_procedure_naming_588_5_476()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_virtual_procedure_naming_589_6_483()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_abstract_bin_op_1353_7_117()
 {
    if (jj_scan_token(BOXED_LARR)) return true;
    return false;
  }

  private boolean jj_3R_abstract_bin_op_1352_7_116()
 {
    if (jj_scan_token(RARR)) return true;
    return false;
  }

  private boolean jj_3R_abstract_bin_op_1351_7_115()
 {
    if (jj_scan_token(BOXED_RARR)) return true;
    return false;
  }

  private boolean jj_3R_abstract_bin_op_1349_5_114()
 {
    if (jj_scan_token(LARR)) return true;
    return false;
  }

  private boolean jj_3R_abstract_bin_op_1349_5_73()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_abstract_bin_op_1349_5_114()) {
    jj_scanpos = xsp;
    if (jj_3R_abstract_bin_op_1351_7_115()) {
    jj_scanpos = xsp;
    if (jj_3R_abstract_bin_op_1352_7_116()) {
    jj_scanpos = xsp;
    if (jj_3R_abstract_bin_op_1353_7_117()) {
    jj_scanpos = xsp;
    if (jj_3R_abstract_bin_op_1354_7_118()) return true;
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_signature_578_6_475()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1344_7_218()
 {
    if (jj_scan_token(9)) return true;
    if (jj_scan_token(10)) return true;
    return false;
  }

  private boolean jj_3R_signature_577_6_474()
 {
    if (jj_3R_pure_modifier_393_5_286()) return true;
    return false;
  }

  private boolean jj_3R_signature_577_5_464()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_signature_577_6_474()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_signature_578_6_475()) jj_scanpos = xsp;
    if (jj_scan_token(KW_PROC)) return true;
    if (jj_3R_virtual_procedure_naming_588_5_476()) return true;
    if (jj_scan_token(KW_OP)) return true;
    if (jj_3R_operator_name_1320_5_393()) return true;
    if (jj_3R_virtual_parameters_pack_475_5_377()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1342_7_217()
 {
    if (jj_3R_tight_op_1454_5_90()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1341_7_216()
 {
    if (jj_3R_pow_op_1446_5_87()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1340_7_215()
 {
    if (jj_3R_prod_op_1423_5_85()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1339_7_214()
 {
    if (jj_3R_arith_op_1410_5_83()) return true;
    return false;
  }

  private boolean jj_3R_protocol_assertion_571_7_459()
 {
    if (jj_3R_signature_577_5_464()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1338_7_213()
 {
    if (jj_3R_numeric_op_1402_5_81()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1337_7_212()
 {
    if (jj_3R_conjunct_op_1368_5_77()) return true;
    return false;
  }

  private boolean jj_3R_simple_operator_name_1336_7_211()
 {
    if (jj_3R_disjunct_op_1359_5_75()) return true;
    return false;
  }

  private boolean jj_3R_protocol_assertion_570_5_458()
 {
    if (jj_3R_type_bounds_344_5_436()) return true;
    return false;
  }

  private boolean jj_3R_protocol_assertion_570_5_442()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_protocol_assertion_570_5_458()) {
    jj_scanpos = xsp;
    if (jj_3R_protocol_assertion_571_7_459()) return true;
    }
    return false;
  }

  private boolean jj_3R_simple_operator_name_1335_5_98()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_simple_operator_name_1335_5_210()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1336_7_211()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1337_7_212()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1338_7_213()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1339_7_214()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1340_7_215()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1341_7_216()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1342_7_217()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_operator_name_1344_7_218()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_simple_operator_name_1335_5_210()
 {
    if (jj_3R_abstract_bin_op_1349_5_73()) return true;
    return false;
  }

  private boolean jj_3R_protocol_body_564_6_429()
 {
    if (jj_3R_protocol_assertion_570_5_442()) return true;
    return false;
  }

  private boolean jj_3R_protocol_body_564_5_402()
 {
    Token xsp;
    if (jj_3R_protocol_body_564_6_429()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_protocol_body_564_6_429()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_34()
 {
    if (jj_3R_simple_operator_name_1335_5_98()) return true;
    if (jj_scan_token(EQ)) return true;
    return false;
  }

  private boolean jj_3R_assignment_op_1328_5_71()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_34()) {
    jj_scanpos = xsp;
    if (jj_scan_token(15)) return true;
    }
    return false;
  }

  private boolean jj_3R_protocol_head_558_6_401()
 {
    if (jj_3R_formal_type_part_329_5_380()) return true;
    return false;
  }

  private boolean jj_3R_protocol_head_557_6_400()
 {
    if (jj_3R_formal_measure_part_419_5_405()) return true;
    return false;
  }

  private boolean jj_3R_operator_name_1322_7_425()
 {
    if (jj_3R_comp_op_1375_5_79()) return true;
    return false;
  }

  private boolean jj_3R_protocol_head_556_5_339()
 {
    if (jj_scan_token(KW_PROTOCOL)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_protocol_head_557_6_400()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_protocol_head_558_6_401()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_33()
 {
    if (jj_3R_simple_operator_name_1335_5_98()) return true;
    return false;
  }

  private boolean jj_3R_operator_name_1320_5_393()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_32()) {
    jj_scanpos = xsp;
    if (jj_3_33()) {
    jj_scanpos = xsp;
    if (jj_3R_operator_name_1322_7_425()) return true;
    }
    }
    return false;
  }

  private boolean jj_3_32()
 {
    if (jj_3R_assignment_op_1328_5_71()) return true;
    return false;
  }

  private boolean jj_3R_protocol_decl_549_6_340()
 {
    if (jj_3R_protocol_body_564_5_402()) return true;
    return false;
  }

  private boolean jj_3R_protocol_decl_548_5_294()
 {
    if (jj_3R_protocol_head_556_5_339()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_protocol_decl_549_6_340()) jj_scanpos = xsp;
    if (jj_3R_protocol_tail_602_5_341()) return true;
    return false;
  }

  private boolean jj_3R_type_synonym_542_5_399()
 {
    if (jj_scan_token(KW_LET)) return true;
    if (jj_scan_token(KW_TYPE)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    if (jj_scan_token(EQ)) return true;
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3_31()
 {
    if (jj_scan_token(SLASH)) return true;
    if (jj_3R_decimal_literal_1505_5_97()) return true;
    return false;
  }

  private boolean jj_3R_expression_synonym_536_5_65()
 {
    if (jj_scan_token(KW_LET)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    if (jj_scan_token(EQ)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_synonym_decl_530_7_338()
 {
    if (jj_3R_type_synonym_542_5_399()) return true;
    return false;
  }

  private boolean jj_3_9()
 {
    if (jj_3R_expression_synonym_536_5_65()) return true;
    return false;
  }

  private boolean jj_3R_synonym_decl_528_5_293()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_9()) {
    jj_scanpos = xsp;
    if (jj_3R_synonym_decl_530_7_338()) return true;
    }
    return false;
  }

  private boolean jj_3R_obsoletion_1280_20_219()
 {
    if (jj_3R_reason_1293_5_251()) return true;
    return false;
  }

  private boolean jj_3R_reason_1293_5_251()
 {
    if (jj_scan_token(KW_BECAUSE)) return true;
    if (jj_scan_token(DOCUMENTATION)) return true;
    return false;
  }

  private boolean jj_3R_operator_tail_522_6_397()
 {
    if (jj_3R_operator_name_1320_5_393()) return true;
    return false;
  }

  private boolean jj_3R_operator_tail_521_6_396()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_OP)) return true;
    return false;
  }

  private boolean jj_3R_operator_tail_521_5_336()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_operator_tail_521_6_396()) {
    jj_scanpos = xsp;
    if (jj_scan_token(110)) return true;
    }
    xsp = jj_scanpos;
    if (jj_3R_operator_tail_522_6_397()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_operator_head_515_6_395()
 {
    if (jj_3R_procedure_contracts_488_5_424()) return true;
    return false;
  }

  private boolean jj_3R_obsoletion_1280_5_100()
 {
    if (jj_scan_token(KW_OBSOLETE)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_obsoletion_1280_20_219()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_operator_head_511_6_392()
 {
    if (jj_3R_formal_type_part_329_5_380()) return true;
    return false;
  }

  private boolean jj_3R_operator_head_510_6_391()
 {
    if (jj_3R_formal_measure_part_419_5_405()) return true;
    return false;
  }

  private boolean jj_3R_dim_factor_1267_15_455()
 {
    if (jj_3R_sign_1479_5_182()) return true;
    return false;
  }

  private boolean jj_3R_dim_atom_1274_7_454()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_dim_expression_1252_5_398()) return true;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_operator_head_508_6_390()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_operator_head_507_6_389()
 {
    if (jj_3R_pure_modifier_393_5_286()) return true;
    return false;
  }

  private boolean jj_3R_operator_head_507_5_334()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_operator_head_507_6_389()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_operator_head_508_6_390()) jj_scanpos = xsp;
    if (jj_scan_token(KW_OP)) return true;
    xsp = jj_scanpos;
    if (jj_3R_operator_head_510_6_391()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_operator_head_511_6_392()) jj_scanpos = xsp;
    if (jj_3R_operator_name_1320_5_393()) return true;
    if (jj_3R_formal_parameter_pack_441_4_394()) return true;
    if (jj_3R_nl_1499_5_69()) return true;
    xsp = jj_scanpos;
    if (jj_3R_operator_head_515_6_395()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_dim_atom_1273_5_453()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_dim_atom_1273_5_439()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_dim_atom_1273_5_453()) {
    jj_scanpos = xsp;
    if (jj_3R_dim_atom_1274_7_454()) return true;
    }
    return false;
  }

  private boolean jj_3R_dim_factor_1267_6_440()
 {
    if (jj_scan_token(CARET)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_dim_factor_1267_15_455()) jj_scanpos = xsp;
    if (jj_3R_decimal_literal_1505_5_97()) return true;
    xsp = jj_scanpos;
    if (jj_3_31()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_operator_decl_500_6_335()
 {
    if (jj_3R_procedure_body_651_5_347()) return true;
    return false;
  }

  private boolean jj_3R_dim_factor_1266_5_427()
 {
    if (jj_3R_dim_atom_1273_5_439()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_dim_factor_1267_6_440()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_operator_decl_499_5_291()
 {
    if (jj_3R_operator_head_507_5_334()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_operator_decl_500_6_335()) jj_scanpos = xsp;
    if (jj_3R_operator_tail_521_5_336()) return true;
    return false;
  }

  private boolean jj_3R_procedure_contracts_492_11_452()
 {
    if (jj_3R_variant_722_5_434()) return true;
    return false;
  }

  private boolean jj_3R_procedure_contracts_491_11_451()
 {
    if (jj_3R_invariant_715_5_433()) return true;
    return false;
  }

  private boolean jj_3R_dim_op_1261_7_457()
 {
    if (jj_scan_token(SLASH)) return true;
    return false;
  }

  private boolean jj_3R_procedure_contracts_490_11_450()
 {
    if (jj_3R_postcondition_708_5_463()) return true;
    return false;
  }

  private boolean jj_3R_procedure_contracts_489_9_449()
 {
    if (jj_3R_precondition_701_5_462()) return true;
    return false;
  }

  private boolean jj_3R_procedure_contracts_489_9_438()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_contracts_489_9_449()) {
    jj_scanpos = xsp;
    if (jj_3R_procedure_contracts_490_11_450()) {
    jj_scanpos = xsp;
    if (jj_3R_procedure_contracts_491_11_451()) {
    jj_scanpos = xsp;
    if (jj_3R_procedure_contracts_492_11_452()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_dim_op_1259_5_456()
 {
    if (jj_scan_token(AST)) return true;
    return false;
  }

  private boolean jj_3R_dim_op_1259_5_441()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_dim_op_1259_5_456()) {
    jj_scanpos = xsp;
    if (jj_3R_dim_op_1261_7_457()) return true;
    }
    return false;
  }

  private boolean jj_3R_procedure_contracts_488_5_424()
 {
    Token xsp;
    if (jj_3R_procedure_contracts_489_9_438()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_procedure_contracts_489_9_438()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_dim_expression_1253_6_428()
 {
    if (jj_3R_dim_op_1259_5_441()) return true;
    if (jj_3R_dim_factor_1266_5_427()) return true;
    return false;
  }

  private boolean jj_3R_dim_expression_1252_5_398()
 {
    if (jj_3R_dim_factor_1266_5_427()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_dim_expression_1253_6_428()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_bounds_1240_17_358()
 {
    if (jj_scan_token(RANGE)) return true;
    if (jj_3R_arith_ex_802_5_82()) return true;
    return false;
  }

  private boolean jj_3R_parameter_body_482_5_64()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    return false;
  }

  private boolean jj_3R_parameter_head_461_26_284()
 {
    if (jj_3R_proc_param_469_5_285()) return true;
    return false;
  }

  private boolean jj_3R_proc_param_469_16_323()
 {
    if (jj_3R_virtual_parameters_pack_475_5_377()) return true;
    return false;
  }

  private boolean jj_3R_dimension_1246_5_432()
 {
    if (jj_scan_token(6)) return true;
    if (jj_3R_dim_expression_1252_5_398()) return true;
    if (jj_scan_token(7)) return true;
    return false;
  }

  private boolean jj_3R_virtual_parameters_pack_476_6_465()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_parameter_head_460_5_209()) return true;
    return false;
  }

  private boolean jj_3R_virtual_parameters_pack_475_5_377()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_parameter_head_460_5_209()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_virtual_parameters_pack_476_6_465()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_bounds_1240_5_310()
 {
    if (jj_3R_arith_ex_802_5_82()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_bounds_1240_17_358()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_proc_param_469_5_285()
 {
    if (jj_scan_token(KW_PROC)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_proc_param_469_16_323()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_void_type_1234_5_354()
 {
    if (jj_scan_token(KW_VOID)) return true;
    return false;
  }

  private boolean jj_3R_parameter_head_463_7_250()
 {
    if (jj_3R_pure_modifier_393_5_286()) return true;
    if (jj_3R_type_declarer_1142_5_70()) return true;
    if (jj_3R_proc_param_469_5_285()) return true;
    return false;
  }

  private boolean jj_3R_named_type_1228_8_355()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_parameter_head_462_7_249()
 {
    if (jj_3R_proc_param_469_5_285()) return true;
    return false;
  }

  private boolean jj_3R_parameter_head_461_6_283()
 {
    if (jj_3R_access_modifier_453_5_301()) return true;
    return false;
  }

  private boolean jj_3R_named_type_1227_6_307()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_type_declarer_1142_5_70()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_named_type_1228_8_355()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_parameter_head_460_5_209()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_parameter_head_460_5_248()) {
    jj_scanpos = xsp;
    if (jj_3R_parameter_head_462_7_249()) {
    jj_scanpos = xsp;
    if (jj_3R_parameter_head_463_7_250()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_parameter_head_460_5_248()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_parameter_head_461_6_283()) {
    jj_scanpos = xsp;
    if (jj_3R_parameter_head_461_26_284()) return true;
    }
    return false;
  }

  private boolean jj_3R_named_type_1226_5_264()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_named_type_1227_6_307()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_access_modifier_455_7_349()
 {
    if (jj_scan_token(KW_CONST)) return true;
    return false;
  }

  private boolean jj_3R_bool_type_1220_5_353()
 {
    if (jj_scan_token(KW_BOOL)) return true;
    return false;
  }

  private boolean jj_3R_access_modifier_453_5_348()
 {
    if (jj_scan_token(KW_VAR)) return true;
    return false;
  }

  private boolean jj_3R_access_modifier_453_5_301()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_access_modifier_453_5_348()) {
    jj_scanpos = xsp;
    if (jj_3R_access_modifier_455_7_349()) return true;
    }
    return false;
  }

  private boolean jj_3R_real_type_1208_16_410()
 {
    if (jj_3R_dimension_1246_5_432()) return true;
    return false;
  }

  private boolean jj_3R_procedure_naming_cont_435_20_461()
 {
    if (jj_3R_procedure_naming_cont_434_5_437()) return true;
    return false;
  }

  private boolean jj_3_8()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_parameter_body_482_5_64()) return true;
    return false;
  }

  private boolean jj_3R_text_type_1214_5_352()
 {
    if (jj_scan_token(KW_TEXT)) return true;
    return false;
  }

  private boolean jj_3R_formal_parameter_pack_443_5_426()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_parameter_head_460_5_209()) return true;
    if (jj_3R_parameter_body_482_5_64()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_8()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_enum_type_1176_39_357()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    return false;
  }

  private boolean jj_3_7()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_parameter_body_482_5_64()) return true;
    return false;
  }

  private boolean jj_3R_real_type_1208_5_351()
 {
    if (jj_scan_token(KW_REAL)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_real_type_1208_16_410()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_formal_parameter_pack_441_4_394()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_parameter_head_460_5_209()) return true;
    if (jj_3R_parameter_body_482_5_64()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_7()) { jj_scanpos = xsp; break; }
    }
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_formal_parameter_pack_443_5_426()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_scan_token(13)) jj_scanpos = xsp;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_procedure_naming_cont_435_6_448()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_naming_cont_435_20_461()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_int_type_1202_6_409()
 {
    if (jj_3R_dimension_1246_5_432()) return true;
    return false;
  }

  private boolean jj_3R_int_type_1201_6_408()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_bounds_1240_5_310()) return true;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_procedure_naming_cont_434_5_437()
 {
    if (jj_3R_formal_parameter_pack_441_4_394()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_naming_cont_435_6_448()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_struct_type_1167_39_356()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    return false;
  }

  private boolean jj_3R_int_type_1200_5_350()
 {
    if (jj_scan_token(KW_INT)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_int_type_1201_6_408()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_int_type_1202_6_409()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_procedure_naming_428_6_423()
 {
    if (jj_3R_procedure_naming_cont_434_5_437()) return true;
    return false;
  }

  private boolean jj_3R_primitive_type_1194_7_306()
 {
    if (jj_3R_void_type_1234_5_354()) return true;
    return false;
  }

  private boolean jj_3R_primitive_type_1193_7_305()
 {
    if (jj_3R_bool_type_1220_5_353()) return true;
    return false;
  }

  private boolean jj_3R_procedure_naming_427_5_385()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_naming_428_6_423()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_primitive_type_1192_7_304()
 {
    if (jj_3R_text_type_1214_5_352()) return true;
    return false;
  }

  private boolean jj_3R_primitive_type_1191_7_303()
 {
    if (jj_3R_real_type_1208_5_351()) return true;
    return false;
  }

  private boolean jj_3R_formal_measure_part_420_10_430()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    return false;
  }

  private boolean jj_3R_primitive_type_1190_5_263()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_primitive_type_1190_5_302()) {
    jj_scanpos = xsp;
    if (jj_3R_primitive_type_1191_7_303()) {
    jj_scanpos = xsp;
    if (jj_3R_primitive_type_1192_7_304()) {
    jj_scanpos = xsp;
    if (jj_3R_primitive_type_1193_7_305()) {
    jj_scanpos = xsp;
    if (jj_3R_primitive_type_1194_7_306()) return true;
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_primitive_type_1190_5_302()
 {
    if (jj_3R_int_type_1200_5_350()) return true;
    return false;
  }

  private boolean jj_3R_formal_measure_part_419_5_405()
 {
    if (jj_scan_token(6)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_formal_measure_part_420_10_430()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(7)) return true;
    return false;
  }

  private boolean jj_3_30()
 {
    if (jj_3R_fields_1183_5_96()) return true;
    return false;
  }

  private boolean jj_3R_fields_1183_5_96()
 {
    if (jj_3R_parameter_head_460_5_209()) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    return false;
  }

  private boolean jj_3R_procedure_tail_413_6_388()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_enum_type_1176_10_309()
 {
    if (jj_scan_token(1)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_30()) {
    jj_scanpos = xsp;
    if (jj_3R_enum_type_1176_39_357()) return true;
    }
    return false;
  }

  private boolean jj_3R_procedure_tail_412_6_387()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_PROC)) return true;
    return false;
  }

  private boolean jj_3R_procedure_tail_412_5_333()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_tail_412_6_387()) {
    jj_scanpos = xsp;
    if (jj_scan_token(112)) return true;
    }
    xsp = jj_scanpos;
    if (jj_3R_procedure_tail_413_6_388()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_29()
 {
    if (jj_3R_fields_1183_5_96()) return true;
    return false;
  }

  private boolean jj_3R_procedure_head_406_6_386()
 {
    if (jj_3R_procedure_contracts_488_5_424()) return true;
    return false;
  }

  private boolean jj_3R_enum_type_1174_5_266()
 {
    if (jj_scan_token(KW_ENUM)) return true;
    if (jj_scan_token(4)) return true;
    if (jj_3R_fields_1183_5_96()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_enum_type_1176_10_309()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_struct_type_1167_10_308()
 {
    if (jj_scan_token(1)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_29()) {
    jj_scanpos = xsp;
    if (jj_3R_struct_type_1167_39_356()) return true;
    }
    return false;
  }

  private boolean jj_3R_object_decl_1127_49_493()
 {
    if (jj_3R_initializer_1136_5_485()) return true;
    return false;
  }

  private boolean jj_3R_procedure_head_403_6_384()
 {
    if (jj_3R_formal_type_part_329_5_380()) return true;
    return false;
  }

  private boolean jj_3R_procedure_head_402_6_383()
 {
    if (jj_3R_formal_measure_part_419_5_405()) return true;
    return false;
  }

  private boolean jj_3R_procedure_head_400_6_382()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_procedure_head_399_6_381()
 {
    if (jj_3R_pure_modifier_393_5_286()) return true;
    return false;
  }

  private boolean jj_3R_procedure_head_399_5_331()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_head_399_6_381()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_head_400_6_382()) jj_scanpos = xsp;
    if (jj_scan_token(KW_PROC)) return true;
    xsp = jj_scanpos;
    if (jj_3R_procedure_head_402_6_383()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_head_403_6_384()) jj_scanpos = xsp;
    if (jj_3R_procedure_naming_427_5_385()) return true;
    if (jj_3R_nl_1499_5_69()) return true;
    xsp = jj_scanpos;
    if (jj_3R_procedure_head_406_6_386()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_struct_type_1165_5_265()
 {
    if (jj_scan_token(KW_STRUCT)) return true;
    if (jj_scan_token(4)) return true;
    if (jj_3R_fields_1183_5_96()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_struct_type_1167_10_308()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_type_declarer_1143_24_231()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_index_type_1149_5_230()) return true;
    return false;
  }

  private boolean jj_3R_cell_type_declarer_1159_7_229()
 {
    if (jj_3R_enum_type_1174_5_266()) return true;
    return false;
  }

  private boolean jj_3R_pure_modifier_393_5_286()
 {
    if (jj_scan_token(KW_PURE)) return true;
    return false;
  }

  private boolean jj_3R_cell_type_declarer_1158_7_228()
 {
    if (jj_3R_struct_type_1165_5_265()) return true;
    return false;
  }

  private boolean jj_3R_cell_type_declarer_1157_7_227()
 {
    if (jj_3R_named_type_1226_5_264()) return true;
    return false;
  }

  private boolean jj_3R_cell_type_declarer_1156_5_108()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_cell_type_declarer_1156_5_226()) {
    jj_scanpos = xsp;
    if (jj_3R_cell_type_declarer_1157_7_227()) {
    jj_scanpos = xsp;
    if (jj_3R_cell_type_declarer_1158_7_228()) {
    jj_scanpos = xsp;
    if (jj_3R_cell_type_declarer_1159_7_229()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_cell_type_declarer_1156_5_226()
 {
    if (jj_3R_primitive_type_1190_5_263()) return true;
    return false;
  }

  private boolean jj_3R_procedure_decl_386_6_332()
 {
    if (jj_3R_procedure_body_651_5_347()) return true;
    return false;
  }

  private boolean jj_3R_procedure_decl_385_5_290()
 {
    if (jj_3R_procedure_head_399_5_331()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_procedure_decl_386_6_332()) jj_scanpos = xsp;
    if (jj_3R_procedure_tail_412_5_333()) return true;
    return false;
  }

  private boolean jj_3R_index_type_1150_7_268()
 {
    if (jj_3R_bounds_1240_5_310()) return true;
    return false;
  }

  private boolean jj_3R_index_type_1149_5_230()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_index_type_1149_5_267()) {
    jj_scanpos = xsp;
    if (jj_3R_index_type_1150_7_268()) return true;
    }
    return false;
  }

  private boolean jj_3R_index_type_1149_5_267()
 {
    if (jj_scan_token(KW_OF)) return true;
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_abstract_type_379_5_330()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_type_declarer_1143_6_109()
 {
    if (jj_scan_token(9)) return true;
    if (jj_3R_index_type_1149_5_230()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_type_declarer_1143_24_231()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(10)) return true;
    return false;
  }

  private boolean jj_3R_simple_type_bound_373_7_520()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_type_declarer_1142_5_70()
 {
    if (jj_3R_cell_type_declarer_1156_5_108()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_type_declarer_1143_6_109()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_simple_type_bound_372_7_497()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_type_declarer_1142_5_70()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_simple_type_bound_373_7_520()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_simple_type_bound_371_6_489()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_simple_type_bound_372_7_497()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_simple_type_bound_370_4_488()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_type_bound_ex_350_5_447()) return true;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_initializer_1136_5_485()
 {
    if (jj_scan_token(8)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_simple_type_bound_370_4_478()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_simple_type_bound_370_4_488()) {
    jj_scanpos = xsp;
    if (jj_3R_simple_type_bound_371_6_489()) return true;
    }
    return false;
  }

  private boolean jj_3R_object_decl_1129_11_300()
 {
    if (jj_scan_token(KW_CONST)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    if (jj_3R_initializer_1136_5_485()) return true;
    return false;
  }

  private boolean jj_3R_conjunct_type_bound_364_6_479()
 {
    if (jj_scan_token(KW_AND)) return true;
    if (jj_3R_simple_type_bound_370_4_478()) return true;
    return false;
  }

  private boolean jj_3R_object_decl_1130_7_262()
 {
    if (jj_3R_access_modifier_453_5_301()) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    if (jj_3R_initializer_1136_5_485()) return true;
    return false;
  }

  private boolean jj_3R_object_decl_1127_9_299()
 {
    if (jj_scan_token(KW_VAR)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_object_decl_1127_49_493()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_conjunct_type_bound_363_5_466()
 {
    if (jj_3R_simple_type_bound_370_4_478()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_conjunct_type_bound_364_6_479()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_object_decl_1126_5_224()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_object_decl_1126_5_261()) {
    jj_scanpos = xsp;
    if (jj_3R_object_decl_1130_7_262()) return true;
    }
    return false;
  }

  private boolean jj_3R_object_decl_1126_5_261()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_object_decl_1127_9_299()) {
    jj_scanpos = xsp;
    if (jj_3R_object_decl_1129_11_300()) return true;
    }
    return false;
  }

  private boolean jj_3R_disjunct_type_bound_357_6_467()
 {
    if (jj_scan_token(KW_OR)) return true;
    if (jj_3R_conjunct_type_bound_363_5_466()) return true;
    return false;
  }

  private boolean jj_3R_disjunct_type_bound_356_5_460()
 {
    if (jj_3R_conjunct_type_bound_363_5_466()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_disjunct_type_bound_357_6_467()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_loop_ref_1119_6_363()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(189)) jj_scanpos = xsp;
    if (jj_scan_token(KW_OUTER)) return true;
    return false;
  }

  private boolean jj_3R_loop_ref_1119_5_313()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_loop_ref_1119_6_363()) jj_scanpos = xsp;
    if (jj_scan_token(KW_REPEAT)) return true;
    return false;
  }

  private boolean jj_3R_type_bound_ex_350_5_447()
 {
    if (jj_3R_disjunct_type_bound_356_5_460()) return true;
    return false;
  }

  private boolean jj_3R_unit_ref_1114_7_362()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_unit_ref_1113_7_361()
 {
    if (jj_scan_token(KW_OP)) return true;
    return false;
  }

  private boolean jj_3R_unit_ref_1112_7_360()
 {
    if (jj_scan_token(KW_PROC)) return true;
    return false;
  }

  private boolean jj_3R_type_bounds_344_5_436()
 {
    if (jj_scan_token(KW_HAVING)) return true;
    if (jj_3R_type_bound_ex_350_5_447()) return true;
    return false;
  }

  private boolean jj_3R_unit_ref_1110_5_359()
 {
    if (jj_3R_loop_ref_1119_5_313()) return true;
    return false;
  }

  private boolean jj_3R_unit_ref_1110_5_312()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_unit_ref_1110_5_359()) {
    jj_scanpos = xsp;
    if (jj_3R_unit_ref_1112_7_360()) {
    jj_scanpos = xsp;
    if (jj_3R_unit_ref_1113_7_361()) {
    jj_scanpos = xsp;
    if (jj_3R_unit_ref_1114_7_362()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_formal_type_param_338_5_420()
 {
    if (jj_3R_identifier_1486_5_104()) return true;
    return false;
  }

  private boolean jj_3R_loop_variant_1104_5_412()
 {
    if (jj_3R_variant_722_5_434()) return true;
    return false;
  }

  private boolean jj_3R_formal_type_part_331_6_422()
 {
    if (jj_3R_type_bounds_344_5_436()) return true;
    return false;
  }

  private boolean jj_3R_formal_type_part_330_6_421()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_formal_type_param_338_5_420()) return true;
    return false;
  }

  private boolean jj_3R_loop_invariant_1098_5_411()
 {
    if (jj_3R_invariant_715_5_433()) return true;
    return false;
  }

  private boolean jj_3R_formal_type_part_329_5_380()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_formal_type_param_338_5_420()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_formal_type_part_330_6_421()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_3R_formal_type_part_331_6_422()) jj_scanpos = xsp;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_decl_modifiers_289_44_379()
 {
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_no_clause_1092_5_525()
 {
    if (jj_scan_token(KW_NO)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_decl_modifiers_288_42_378()
 {
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_abstract_type_decl_322_6_329()
 {
    if (jj_3R_formal_type_part_329_5_380()) return true;
    return false;
  }

  private boolean jj_3R_abstract_type_decl_321_5_289()
 {
    if (jj_scan_token(KW_TYPE)) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_abstract_type_decl_322_6_329()) jj_scanpos = xsp;
    if (jj_scan_token(EQ)) return true;
    if (jj_3R_abstract_type_379_5_330()) return true;
    return false;
  }

  private boolean jj_3R_not_all_clause_1086_5_526()
 {
    if (jj_scan_token(KW_NOT)) return true;
    if (jj_scan_token(KW_ALL)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_exportable_decl_315_6_259()
 {
    if (jj_3R_automatic_delegation_609_5_295()) return true;
    return false;
  }

  private boolean jj_3R_exportable_decl_314_6_258()
 {
    if (jj_3R_protocol_decl_548_5_294()) return true;
    return false;
  }

  private boolean jj_3R_exportable_decl_313_6_257()
 {
    if (jj_3R_synonym_decl_528_5_293()) return true;
    return false;
  }

  private boolean jj_3R_all_clause_1080_5_524()
 {
    if (jj_scan_token(KW_ALL)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_null_309_9_63()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_exportable_decl_312_6_256()
 {
    if (jj_3R_measure_decl_628_5_292()) return true;
    return false;
  }

  private boolean jj_3R_default_branch_1068_16_509()
 {
    if (jj_3R_paragraph_679_5_67()) return true;
    return false;
  }

  private boolean jj_3R_decl_modifiers_289_28_328()
 {
    if (jj_3R_pub_modifier_295_5_324()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_decl_modifiers_289_44_379()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_decl_modifiers_288_28_326()
 {
    if (jj_3R_obsoletion_1280_5_100()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_decl_modifiers_288_42_378()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_6()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(146)) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_null_309_9_63()) jj_scanpos = xsp;
    if (jj_scan_token(KW_OP)) return true;
    return false;
  }

  private boolean jj_3R_null_304_9_62()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_exportable_decl_307_6_255()
 {
    if (jj_3R_operator_decl_499_5_291()) return true;
    return false;
  }

  private boolean jj_3R_some_clause_1074_5_523()
 {
    if (jj_scan_token(KW_SOME)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3_5()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(146)) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_null_304_9_62()) jj_scanpos = xsp;
    if (jj_scan_token(KW_PROC)) return true;
    return false;
  }

  private boolean jj_3R_decl_modifiers_289_21_327()
 {
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_decl_modifiers_288_21_325()
 {
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_exportable_decl_302_6_254()
 {
    if (jj_3R_procedure_decl_385_5_290()) return true;
    return false;
  }

  private boolean jj_3R_default_branch_1068_5_414()
 {
    if (jj_scan_token(KW_ELSE)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_default_branch_1068_16_509()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_exportable_decl_301_4_221()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_exportable_decl_301_4_253()) {
    jj_scanpos = xsp;
    if (jj_3R_exportable_decl_302_6_254()) {
    jj_scanpos = xsp;
    if (jj_3R_exportable_decl_307_6_255()) {
    jj_scanpos = xsp;
    if (jj_3R_exportable_decl_312_6_256()) {
    jj_scanpos = xsp;
    if (jj_3R_exportable_decl_313_6_257()) {
    jj_scanpos = xsp;
    if (jj_3R_exportable_decl_314_6_258()) {
    jj_scanpos = xsp;
    if (jj_3R_exportable_decl_315_6_259()) return true;
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_exportable_decl_301_4_253()
 {
    if (jj_3R_abstract_type_decl_321_5_289()) return true;
    return false;
  }

  private boolean jj_3R_until_clause_1062_5_413()
 {
    if (jj_scan_token(KW_UNTIL)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_pub_modifier_295_5_324()
 {
    if (jj_scan_token(KW_PUBLIC)) return true;
    return false;
  }

  private boolean jj_3R_decl_modifiers_289_7_288()
 {
    if (jj_3R_obsoletion_1280_5_100()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_decl_modifiers_289_21_327()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_decl_modifiers_289_28_328()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_repeat_clause_1056_6_370()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_REPEAT)) return true;
    return false;
  }

  private boolean jj_3R_repeat_clause_1055_6_369()
 {
    if (jj_3R_default_branch_1068_5_414()) return true;
    return false;
  }

  private boolean jj_3R_repeat_clause_1054_6_368()
 {
    if (jj_3R_until_clause_1062_5_413()) return true;
    return false;
  }

  private boolean jj_3R_decl_modifiers_288_5_252()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_decl_modifiers_288_5_287()) {
    jj_scanpos = xsp;
    if (jj_3R_decl_modifiers_289_7_288()) return true;
    }
    return false;
  }

  private boolean jj_3R_decl_modifiers_288_5_287()
 {
    if (jj_3R_pub_modifier_295_5_324()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_decl_modifiers_288_21_325()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_decl_modifiers_288_28_326()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_repeat_clause_1053_6_367()
 {
    if (jj_3R_loop_variant_1104_5_412()) return true;
    return false;
  }

  private boolean jj_3R_repeat_clause_1052_6_366()
 {
    if (jj_3R_paragraph_679_5_67()) return true;
    return false;
  }

  private boolean jj_3R_repeat_clause_1051_6_365()
 {
    if (jj_3R_loop_invariant_1098_5_411()) return true;
    return false;
  }

  private boolean jj_3R_bottom_up_decl_282_7_103()
 {
    if (jj_3R_local_decl_636_5_222()) return true;
    return false;
  }

  private boolean jj_3_4()
 {
    if (jj_3R_bottom_up_decl_280_5_61()) return true;
    return false;
  }

  private boolean jj_3R_repeat_clause_1050_5_316()
 {
    if (jj_scan_token(KW_REPEAT)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_repeat_clause_1051_6_365()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_3R_repeat_clause_1052_6_366()) jj_scanpos = xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_repeat_clause_1053_6_367()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_3R_repeat_clause_1054_6_368()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_repeat_clause_1055_6_369()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_repeat_clause_1056_6_370()) {
    jj_scanpos = xsp;
    if (jj_scan_token(114)) return true;
    }
    return false;
  }

  private boolean jj_3R_bottom_up_decl_280_6_220()
 {
    if (jj_3R_decl_modifiers_288_5_252()) return true;
    return false;
  }

  private boolean jj_3R_bottom_up_decl_280_5_102()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_bottom_up_decl_280_6_220()) jj_scanpos = xsp;
    if (jj_3R_exportable_decl_301_4_221()) return true;
    return false;
  }

  private boolean jj_3R_bottom_up_decl_280_5_61()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_bottom_up_decl_280_5_102()) {
    jj_scanpos = xsp;
    if (jj_3R_bottom_up_decl_282_7_103()) return true;
    }
    return false;
  }

  private boolean jj_3R_quantifier_clause_1044_7_508()
 {
    if (jj_3R_not_all_clause_1086_5_526()) return true;
    return false;
  }

  private boolean jj_3R_quantifier_clause_1043_7_507()
 {
    if (jj_3R_no_clause_1092_5_525()) return true;
    return false;
  }

  private boolean jj_3R_quantifier_clause_1042_7_506()
 {
    if (jj_3R_all_clause_1080_5_524()) return true;
    return false;
  }

  private boolean jj_3R_quantifier_clause_1041_5_505()
 {
    if (jj_3R_some_clause_1074_5_523()) return true;
    return false;
  }

  private boolean jj_3R_quantifier_clause_1041_5_491()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_quantifier_clause_1041_5_505()) {
    jj_scanpos = xsp;
    if (jj_3R_quantifier_clause_1042_7_506()) {
    jj_scanpos = xsp;
    if (jj_3R_quantifier_clause_1043_7_507()) {
    jj_scanpos = xsp;
    if (jj_3R_quantifier_clause_1044_7_508()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_bottom_up_part_273_6_99()
 {
    if (jj_3R_bottom_up_decl_280_5_61()) return true;
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_bottom_up_part_273_5_59()
 {
    Token xsp;
    if (jj_3R_bottom_up_part_273_6_99()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_bottom_up_part_273_6_99()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_repetition_body_1035_7_482()
 {
    if (jj_3R_quantifier_clause_1041_5_491()) return true;
    return false;
  }

  private boolean jj_3R_repetition_body_1034_5_481()
 {
    if (jj_3R_repeat_clause_1050_5_316()) return true;
    return false;
  }

  private boolean jj_3R_repetition_body_1034_5_473()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_repetition_body_1034_5_481()) {
    jj_scanpos = xsp;
    if (jj_3R_repetition_body_1035_7_482()) return true;
    }
    return false;
  }

  private boolean jj_3R_while_clause_1028_5_364()
 {
    if (jj_scan_token(KW_WHILE)) return true;
    if (jj_3R_abstract_bin_ex_765_5_269()) return true;
    return false;
  }

  private boolean jj_3R_across_clause_1022_6_480()
 {
    if (jj_scan_token(KW_AS)) return true;
    if (jj_3R_pattern_904_5_490()) return true;
    return false;
  }

  private boolean jj_3R_across_clause_1021_5_314()
 {
    if (jj_scan_token(KW_ACROSS)) return true;
    if (jj_3R_abstract_bin_ex_765_5_269()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_across_clause_1022_6_480()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_continuator_1005_20_272()
 {
    if (jj_3R_loop_ref_1119_5_313()) return true;
    return false;
  }

  private boolean jj_3R_repetition_1014_8_315()
 {
    if (jj_3R_while_clause_1028_5_364()) return true;
    return false;
  }

  private boolean jj_3R_repetition_1014_7_274()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_repetition_1014_8_315()) jj_scanpos = xsp;
    if (jj_3R_repeat_clause_1050_5_316()) return true;
    return false;
  }

  private boolean jj_3R_repetition_1012_6_472()
 {
    if (jj_3R_while_clause_1028_5_364()) return true;
    return false;
  }

  private boolean jj_3R_repetition_1011_5_235()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_repetition_1011_5_273()) {
    jj_scanpos = xsp;
    if (jj_3R_repetition_1014_7_274()) return true;
    }
    return false;
  }

  private boolean jj_3R_repetition_1011_5_273()
 {
    if (jj_3R_across_clause_1021_5_314()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_repetition_1012_6_472()) jj_scanpos = xsp;
    if (jj_3R_repetition_body_1034_5_473()) return true;
    return false;
  }

  private boolean jj_3R_terminator_998_17_270()
 {
    if (jj_3R_unit_ref_1110_5_312()) return true;
    return false;
  }

  private boolean jj_3R_continuator_1005_5_234()
 {
    if (jj_scan_token(KW_CONTINUE)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_continuator_1005_20_272()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_terminator_999_6_271()
 {
    if (jj_scan_token(KW_WITH)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_terminator_998_5_233()
 {
    if (jj_scan_token(KW_LEAVE)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_terminator_998_17_270()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_terminator_999_6_271()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_subscript_992_5_247()
 {
    if (jj_3R_display_964_5_280()) return true;
    return false;
  }

  private boolean jj_3R_invocation_986_6_282()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_invocation_985_5_246()
 {
    if (jj_3R_actual_parameter_list_930_5_281()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_invocation_986_6_282()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_with_statement_956_30_518()
 {
    if (jj_scan_token(KW_AS)) return true;
    if (jj_3R_patterns_897_5_530()) return true;
    return false;
  }

  private boolean jj_3R_selector_979_5_245()
 {
    if (jj_scan_token(3)) return true;
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_ex_suffix_973_7_207()
 {
    if (jj_3R_subscript_992_5_247()) return true;
    return false;
  }

  private boolean jj_3R_with_statement_958_21_519()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_WITH)) return true;
    return false;
  }

  private boolean jj_3R_ex_suffix_972_7_206()
 {
    if (jj_3R_invocation_985_5_246()) return true;
    return false;
  }

  private boolean jj_3R_ex_suffix_971_5_92()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ex_suffix_971_5_205()) {
    jj_scanpos = xsp;
    if (jj_3R_ex_suffix_972_7_206()) {
    jj_scanpos = xsp;
    if (jj_3R_ex_suffix_973_7_207()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_ex_suffix_971_5_205()
 {
    if (jj_3R_selector_979_5_245()) return true;
    return false;
  }

  private boolean jj_3R_display_965_6_322()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_display_964_5_280()
 {
    if (jj_scan_token(9)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_display_965_6_322()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(10)) return true;
    return false;
  }

  private boolean jj_3R_actual_proc_parameter_948_20_446()
 {
    if (jj_3R_virtual_parameters_pack_475_5_377()) return true;
    return false;
  }

  private boolean jj_3R_actual_proc_parameter_949_18_484()
 {
    if (jj_3R_virtual_parameters_pack_475_5_377()) return true;
    return false;
  }

  private boolean jj_3R_with_statement_956_5_279()
 {
    if (jj_scan_token(KW_WITH)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_with_statement_956_30_518()) jj_scanpos = xsp;
    if (jj_scan_token(KW_DO)) return true;
    if (jj_3R_paragraph_679_5_67()) return true;
    xsp = jj_scanpos;
    if (jj_scan_token(117)) {
    jj_scanpos = xsp;
    if (jj_3R_with_statement_958_21_519()) return true;
    }
    return false;
  }

  private boolean jj_3R_null_937_16_95()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_actual_proc_parameter_946_6_445()
 {
    if (jj_3R_pure_modifier_393_5_286()) return true;
    return false;
  }

  private boolean jj_3_28()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_null_937_16_95()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(146)) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(143)) {
    jj_scanpos = xsp;
    if (jj_scan_token(138)) return true;
    }
    return false;
  }

  private boolean jj_3R_actual_proc_parameter_945_6_444()
 {
    if (jj_3R_type_declarer_1142_5_70()) return true;
    return false;
  }

  private boolean jj_3R_actual_proc_parameter_945_5_435()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_actual_proc_parameter_945_6_444()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_actual_proc_parameter_946_6_445()) jj_scanpos = xsp;
    if (jj_scan_token(KW_PROC)) return true;
    xsp = jj_scanpos;
    if (jj_3R_actual_proc_parameter_948_20_446()) jj_scanpos = xsp;
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    if (jj_scan_token(KW_OP)) return true;
    xsp = jj_scanpos;
    if (jj_3R_actual_proc_parameter_949_18_484()) jj_scanpos = xsp;
    if (jj_3R_operator_name_1320_5_393()) return true;
    return false;
  }

  private boolean jj_3R_actual_parameter_939_7_419()
 {
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_pattern_display_924_21_536()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_pattern_904_5_490()) return true;
    return false;
  }

  private boolean jj_3R_actual_parameter_937_5_418()
 {
    if (jj_3R_actual_proc_parameter_945_5_435()) return true;
    return false;
  }

  private boolean jj_3R_actual_parameter_937_5_375()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_actual_parameter_937_5_418()) {
    jj_scanpos = xsp;
    if (jj_3R_actual_parameter_939_7_419()) return true;
    }
    return false;
  }

  private boolean jj_3R_actual_parameter_list_930_10_321()
 {
    if (jj_3R_actual_parameter_937_5_375()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_actual_parameter_list_931_6_376()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_actual_parameter_list_931_6_376()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_actual_parameter_937_5_375()) return true;
    return false;
  }

  private boolean jj_3R_actual_parameter_list_930_5_281()
 {
    if (jj_scan_token(4)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_actual_parameter_list_930_10_321()) jj_scanpos = xsp;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_pattern_display_924_10_531()
 {
    if (jj_3R_pattern_904_5_490()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_pattern_display_924_21_536()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_pattern_display_924_5_521()
 {
    if (jj_scan_token(9)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_pattern_display_924_10_531()) jj_scanpos = xsp;
    if (jj_scan_token(10)) return true;
    return false;
  }

  private boolean jj_3R_pattern_binder_918_6_532()
 {
    if (jj_scan_token(8)) return true;
    if (jj_3R_pattern_904_5_490()) return true;
    return false;
  }

  private boolean jj_3R_pattern_binder_917_5_522()
 {
    if (jj_3R_parameter_head_460_5_209()) return true;
    if (jj_3R_identifier_1486_5_104()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_pattern_binder_918_6_532()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_pattern_911_7_504()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_pattern_904_5_490()) return true;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_patterns_898_19_538()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_selector_979_5_245()) return true;
    return false;
  }

  private boolean jj_3R_pattern_910_7_503()
 {
    if (jj_3R_pattern_binder_917_5_522()) return true;
    return false;
  }

  private boolean jj_3R_pattern_909_7_502()
 {
    if (jj_3R_pattern_display_924_5_521()) return true;
    return false;
  }

  private boolean jj_3R_pattern_908_7_501()
 {
    if (jj_3R_bool_denotation_1524_5_374()) return true;
    return false;
  }

  private boolean jj_3R_conditional_choice_873_41_528()
 {
    if (jj_3R_paragraph_679_5_67()) return true;
    return false;
  }

  private boolean jj_3R_pattern_907_7_500()
 {
    if (jj_3R_text_denotation_1531_5_373()) return true;
    return false;
  }

  private boolean jj_3R_patterns_897_16_537()
 {
    if (jj_scan_token(1)) return true;
    if (jj_3R_pattern_904_5_490()) return true;
    return false;
  }

  private boolean jj_3R_pattern_906_7_499()
 {
    if (jj_3R_real_denotation_1518_5_372()) return true;
    return false;
  }

  private boolean jj_3R_pattern_905_7_498()
 {
    if (jj_3R_integer_denotation_1511_5_371()) return true;
    return false;
  }

  private boolean jj_3R_pattern_904_5_490()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_27()) {
    jj_scanpos = xsp;
    if (jj_3R_pattern_905_7_498()) {
    jj_scanpos = xsp;
    if (jj_3R_pattern_906_7_499()) {
    jj_scanpos = xsp;
    if (jj_3R_pattern_907_7_500()) {
    jj_scanpos = xsp;
    if (jj_3R_pattern_908_7_501()) {
    jj_scanpos = xsp;
    if (jj_3R_pattern_909_7_502()) {
    jj_scanpos = xsp;
    if (jj_3R_pattern_910_7_503()) {
    jj_scanpos = xsp;
    if (jj_3R_pattern_911_7_504()) return true;
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3_27()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3R_patterns_898_7_535()
 {
    if (jj_3R_selector_979_5_245()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_patterns_898_19_538()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_patterns_897_5_534()
 {
    if (jj_3R_pattern_904_5_490()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_patterns_897_16_537()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_patterns_897_5_530()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_patterns_897_5_534()) {
    jj_scanpos = xsp;
    if (jj_3R_patterns_898_7_535()) return true;
    }
    return false;
  }

  private boolean jj_3R_case_branch_891_6_533()
 {
    if (jj_3R_paragraph_679_5_67()) return true;
    return false;
  }

  private boolean jj_3R_case_branch_890_5_529()
 {
    if (jj_scan_token(KW_CASE)) return true;
    if (jj_3R_patterns_897_5_530()) return true;
    if (jj_scan_token(KW_THEN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_case_branch_891_6_533()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_pattern_matching_884_9_516()
 {
    if (jj_scan_token(KW_OTHERWISE)) return true;
    if (jj_3R_paragraph_679_5_67()) return true;
    return false;
  }

  private boolean jj_3R_pattern_matching_882_9_515()
 {
    if (jj_3R_case_branch_890_5_529()) return true;
    return false;
  }

  private boolean jj_3R_pattern_matching_884_6_517()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_SELECT)) return true;
    return false;
  }

  private boolean jj_3R_pattern_matching_881_5_278()
 {
    if (jj_scan_token(KW_SELECT)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    if (jj_scan_token(KW_OF)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_pattern_matching_882_9_515()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_3R_pattern_matching_884_9_516()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_pattern_matching_884_6_517()) {
    jj_scanpos = xsp;
    if (jj_scan_token(115)) return true;
    }
    return false;
  }

  private boolean jj_3R_conditional_choice_875_6_514()
 {
    if (jj_scan_token(KW_END)) return true;
    if (jj_scan_token(KW_IF)) return true;
    return false;
  }

  private boolean jj_3R_conditional_choice_874_6_513()
 {
    if (jj_3R_default_branch_1068_5_414()) return true;
    return false;
  }

  private boolean jj_3R_conditional_choice_874_6_512()
 {
    if (jj_scan_token(KW_ELIF)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    if (jj_scan_token(KW_THEN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_conditional_choice_873_41_528()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_conditional_choice_872_6_511()
 {
    if (jj_3R_paragraph_679_5_67()) return true;
    return false;
  }

  private boolean jj_3R_conditional_choice_871_5_277()
 {
    if (jj_scan_token(KW_IF)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    if (jj_scan_token(KW_THEN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_conditional_choice_872_6_511()) jj_scanpos = xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_conditional_choice_874_6_512()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_3R_conditional_choice_874_6_513()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_conditional_choice_875_6_514()) {
    jj_scanpos = xsp;
    if (jj_scan_token(109)) return true;
    }
    return false;
  }

  private boolean jj_3R_abstractor_865_5_93()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    if (jj_scan_token(2)) return true;
    if (jj_3R_atomic_ex_836_5_204()) return true;
    return false;
  }

  private boolean jj_3R_concretizer_859_5_276()
 {
    if (jj_scan_token(KW_CONCR)) return true;
    if (jj_3R_atomic_ex_836_5_204()) return true;
    return false;
  }

  private boolean jj_3R_denoter_853_7_320()
 {
    if (jj_3R_bool_denotation_1524_5_374()) return true;
    return false;
  }

  private boolean jj_3R_denoter_852_7_319()
 {
    if (jj_3R_text_denotation_1531_5_373()) return true;
    return false;
  }

  private boolean jj_3R_null_62_30_101()
 {
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_denoter_851_7_318()
 {
    if (jj_3R_real_denotation_1518_5_372()) return true;
    return false;
  }

  private boolean jj_3R_pow_ex_816_40_88()
 {
    if (jj_3R_sign_1479_5_182()) return true;
    return false;
  }

  private boolean jj_3R_denoter_850_5_317()
 {
    if (jj_3R_integer_denotation_1511_5_371()) return true;
    return false;
  }

  private boolean jj_3R_denoter_850_5_275()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_denoter_850_5_317()) {
    jj_scanpos = xsp;
    if (jj_3R_denoter_851_7_318()) {
    jj_scanpos = xsp;
    if (jj_3R_denoter_852_7_319()) {
    jj_scanpos = xsp;
    if (jj_3R_denoter_853_7_320()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3_3()
 {
    if (jj_3R_bottom_up_part_273_5_59()) return true;
    return false;
  }

  private boolean jj_3R_atomic_ex_844_7_244()
 {
    if (jj_3R_identifier_ref_1492_5_94()) return true;
    return false;
  }

  private boolean jj_3_1()
 {
    if (jj_3R_bottom_up_part_273_5_59()) return true;
    return false;
  }

  private boolean jj_3_26()
 {
    if (jj_3R_abstractor_865_5_93()) return true;
    return false;
  }

  private boolean jj_3R_atomic_ex_842_7_243()
 {
    if (jj_3R_display_964_5_280()) return true;
    return false;
  }

  private boolean jj_3_25()
 {
    if (jj_3R_ex_suffix_971_5_92()) return true;
    return false;
  }

  private boolean jj_3R_atomic_ex_841_7_242()
 {
    if (jj_3R_with_statement_956_5_279()) return true;
    return false;
  }

  private boolean jj_3R_atomic_ex_840_7_241()
 {
    if (jj_3R_pattern_matching_881_5_278()) return true;
    return false;
  }

  private boolean jj_3R_atomic_ex_839_7_240()
 {
    if (jj_3R_conditional_choice_871_5_277()) return true;
    return false;
  }

  private boolean jj_3R_null_62_16_60()
 {
    if (jj_3R_obsoletion_1280_5_100()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_null_62_30_101()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_atomic_ex_838_7_239()
 {
    if (jj_3R_concretizer_859_5_276()) return true;
    return false;
  }

  private boolean jj_3_2()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_null_62_16_60()) jj_scanpos = xsp;
    if (jj_scan_token(KW_PACKET)) return true;
    return false;
  }

  private boolean jj_3R_atomic_ex_837_7_238()
 {
    if (jj_3R_denoter_850_5_275()) return true;
    return false;
  }

  private boolean jj_3R_atomic_ex_836_5_204()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_atomic_ex_836_5_237()) {
    jj_scanpos = xsp;
    if (jj_3R_atomic_ex_837_7_238()) {
    jj_scanpos = xsp;
    if (jj_3R_atomic_ex_838_7_239()) {
    jj_scanpos = xsp;
    if (jj_3R_atomic_ex_839_7_240()) {
    jj_scanpos = xsp;
    if (jj_3R_atomic_ex_840_7_241()) {
    jj_scanpos = xsp;
    if (jj_3R_atomic_ex_841_7_242()) {
    jj_scanpos = xsp;
    if (jj_3R_atomic_ex_842_7_243()) {
    jj_scanpos = xsp;
    if (jj_3_26()) {
    jj_scanpos = xsp;
    if (jj_3R_atomic_ex_844_7_244()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_atomic_ex_836_5_237()
 {
    if (jj_scan_token(4)) return true;
    if (jj_3R_expression_749_5_72()) return true;
    if (jj_scan_token(5)) return true;
    return false;
  }

  private boolean jj_3R_primary_ex_830_5_91()
 {
    if (jj_3R_atomic_ex_836_5_204()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_25()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_22()
 {
    if (jj_3R_pow_op_1446_5_87()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_pow_ex_816_40_88()) jj_scanpos = xsp;
    if (jj_3R_tight_ex_823_5_89()) return true;
    return false;
  }

  private boolean jj_3_24()
 {
    if (jj_3R_tight_op_1454_5_90()) return true;
    if (jj_3R_primary_ex_830_5_91()) return true;
    return false;
  }

  private boolean jj_3R_tight_ex_823_6_183()
 {
    if (jj_3R_tight_op_1454_5_90()) return true;
    return false;
  }

  private boolean jj_3R_tight_ex_823_5_89()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_tight_ex_823_6_183()) jj_scanpos = xsp;
    if (jj_3R_primary_ex_830_5_91()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_24()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_23()
 {
    if (jj_3R_pow_op_1446_5_87()) return true;
    if (jj_3R_tight_ex_823_5_89()) return true;
    return false;
  }

  private boolean jj_3R_pow_ex_816_5_86()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_pow_ex_816_5_178()) {
    jj_scanpos = xsp;
    if (jj_3_23()) return true;
    }
    return false;
  }

  private boolean jj_3R_pow_ex_816_5_178()
 {
    if (jj_3R_tight_ex_823_5_89()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_22()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_21()
 {
    if (jj_3R_prod_op_1423_5_85()) return true;
    if (jj_3R_pow_ex_816_5_86()) return true;
    return false;
  }

  private boolean jj_3R_prod_ex_809_6_159()
 {
    if (jj_3R_prod_op_1423_5_85()) return true;
    return false;
  }

  private boolean jj_3R_prod_ex_809_5_84()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_prod_ex_809_6_159()) jj_scanpos = xsp;
    if (jj_3R_pow_ex_816_5_86()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_21()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_20()
 {
    if (jj_3R_arith_op_1410_5_83()) return true;
    if (jj_3R_prod_ex_809_5_84()) return true;
    return false;
  }

  private boolean jj_3R_arith_ex_802_6_150()
 {
    if (jj_3R_arith_op_1410_5_83()) return true;
    return false;
  }

  private boolean jj_3R_arith_ex_802_5_82()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_arith_ex_802_6_150()) jj_scanpos = xsp;
    if (jj_3R_prod_ex_809_5_84()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_20()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_19()
 {
    if (jj_3R_numeric_op_1402_5_81()) return true;
    if (jj_3R_arith_ex_802_5_82()) return true;
    return false;
  }

  private boolean jj_3R_text_denotation_1533_35_540()
 {
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_numeric_ex_795_6_146()
 {
    if (jj_3R_numeric_op_1402_5_81()) return true;
    return false;
  }

  private boolean jj_3R_text_denotation_1532_35_495()
 {
    if (jj_3R_nl_1499_5_69()) return true;
    return false;
  }

  private boolean jj_3R_numeric_ex_795_5_80()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_numeric_ex_795_6_146()) jj_scanpos = xsp;
    if (jj_3R_arith_ex_802_5_82()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_19()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_18()
 {
    if (jj_3R_comp_op_1375_5_79()) return true;
    if (jj_3R_numeric_ex_795_5_80()) return true;
    return false;
  }

  private boolean jj_3R_comp_ex_788_5_78()
 {
    if (jj_3R_numeric_ex_795_5_80()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_18()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_text_denotation_1533_20_539()
 {
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3_17()
 {
    if (jj_3R_conjunct_op_1368_5_77()) return true;
    if (jj_3R_comp_ex_788_5_78()) return true;
    return false;
  }

  private boolean jj_3R_text_denotation_1532_20_494()
 {
    if (jj_3R_expression_749_5_72()) return true;
    return false;
  }

  private boolean jj_3R_conjunct_ex_779_6_123()
 {
    if (jj_3R_conjunct_op_1368_5_77()) return true;
    return false;
  }

  private boolean jj_3R_conjunct_ex_779_5_76()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_conjunct_ex_779_6_123()) jj_scanpos = xsp;
    if (jj_3R_comp_ex_788_5_78()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_17()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_16()
 {
    if (jj_3R_disjunct_op_1359_5_75()) return true;
    if (jj_3R_conjunct_ex_779_5_76()) return true;
    return false;
  }

  private boolean jj_3R_disjunct_ex_772_6_119()
 {
    if (jj_3R_disjunct_op_1359_5_75()) return true;
    return false;
  }

  private boolean jj_3R_disjunct_ex_772_5_74()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_disjunct_ex_772_6_119()) jj_scanpos = xsp;
    if (jj_3R_conjunct_ex_779_5_76()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_16()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_text_denotation_1533_8_496()
 {
    if (jj_scan_token(TEXT_MID)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_text_denotation_1533_20_539()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_text_denotation_1533_35_540()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_real_denotation_1518_21_487()
 {
    if (jj_3R_dimension_1246_5_432()) return true;
    return false;
  }

  private boolean jj_3R_text_denotation_1532_7_415()
 {
    if (jj_scan_token(TEXT_HEAD)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_text_denotation_1532_20_494()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_text_denotation_1532_35_495()) jj_scanpos = xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_text_denotation_1533_8_496()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(TEXT_TAIL)) return true;
    return false;
  }

  private boolean jj_3_15()
 {
    if (jj_3R_abstract_bin_op_1349_5_73()) return true;
    if (jj_3R_disjunct_ex_772_5_74()) return true;
    return false;
  }

  private boolean jj_3R_abstract_bin_ex_765_6_311()
 {
    if (jj_3R_abstract_bin_op_1349_5_73()) return true;
    return false;
  }

  private boolean jj_3R_abstract_bin_ex_765_5_269()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_abstract_bin_ex_765_6_311()) jj_scanpos = xsp;
    if (jj_3R_disjunct_ex_772_5_74()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_15()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_text_denotation_1531_5_373()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_scan_token(185)) {
    jj_scanpos = xsp;
    if (jj_3R_text_denotation_1532_7_415()) return true;
    }
    return false;
  }

  /** Generated Token Manager. */
  public AdelanteParserTokenManager token_source;
  SimpleCharStream jj_input_stream;
  /** Current token. */
  public Token token;
  /** Next token. */
  public Token jj_nt;
  private int jj_ntk;
  private Token jj_scanpos, jj_lastpos;
  private int jj_la;
  private int jj_gen;
  final private int[] jj_la1 = new int[237];
  static private int[] jj_la1_0;
  static private int[] jj_la1_1;
  static private int[] jj_la1_2;
  static private int[] jj_la1_3;
  static private int[] jj_la1_4;
  static private int[] jj_la1_5;
  static {
	   jj_la1_init_0();
	   jj_la1_init_1();
	   jj_la1_init_2();
	   jj_la1_init_3();
	   jj_la1_init_4();
	   jj_la1_init_5();
	}
	private static void jj_la1_init_0() {
	   jj_la1_0 = new int[] {0x800,0xce070210,0xce070210,0x0,0xce070210,0xce070210,0x0,0xce070210,0x800,0x800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x2,0x10,0x4,0x4008,0x40000000,0x40000000,0x4000,0x40000000,0x4008,0x0,0xffff8200,0x2,0x2,0x2,0x0,0xffff8200,0x0,0x0,0x800,0x800,0x0,0x800,0x800,0x0,0x0,0x0,0x0,0x10,0x2,0x0,0x0,0x0,0x2,0x10,0x10,0xce070210,0x0,0x0,0x40,0x10,0x0,0x0,0x0,0x2,0x10,0x10,0x0,0x2,0x2000,0x0,0x0,0x0,0x10,0x2,0x0,0x0,0xce070210,0x0,0x0,0x40,0x10,0x0,0x0,0xffff8200,0x0,0x0,0x40,0x10,0x0,0x0,0x0,0x0,0x10,0x10,0x0,0x0,0x0,0x40,0x10,0x10,0x2,0x10,0x1000000,0xce070210,0x0,0x0,0x0,0xce070210,0x0,0x0,0xce070210,0x0,0x0,0x0,0x0,0x0,0x2,0x10,0xce070210,0x70000,0x0,0x0,0xe000000,0x0,0xc0000000,0x0,0x210,0x0,0x210,0x0,0x0,0xce070210,0x0,0xce070210,0x0,0x0,0x0,0x0,0x0,0xce070210,0x2,0x2,0x218,0x210,0x100,0x2,0x210,0x2,0xce070210,0xce070210,0x0,0x0,0x10,0x10,0x0,0x0,0x2,0x218,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xce070210,0x0,0x0,0x0,0x0,0xce070210,0x0,0x0,0x0,0x100,0x0,0x0,0x200,0x2,0xc0000210,0x0,0x2,0x0,0x2,0x0,0x0,0x10,0x40,0x40,0x2,0x10,0x4000,0x40000000,0x40000000,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x31f80000,0x8000,0xce070200,0x70000,0x0,0x0,0x1f80000,0x30000000,0xe000000,0x0,0xc0000000,0x0,0x0,0x0,0x2000,0x800,0x0,0x40,0x40,0x0,0xce070210,0x800,0x0,0xce070210,0x800,0x0,};
	}
	private static void jj_la1_init_1() {
	   jj_la1_1 = new int[] {0x0,0xffc003ff,0xffc003ff,0x0,0xffc003ff,0xffc003ff,0x0,0xffc003ff,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,0xffffffff,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0xffc003ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0xc000000,0x0,0x0,0x0,0x60000000,0x908003df,0x0,0x1400000,0x1400000,0x0,0x0,0x0,0xffc003ff,0x0,0xffc003ff,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0xffc003ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf3c003ff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffc00,0x0,0xffc003ff,0xc000000,0x0,0x0,0x0,0x3ffc00,0x0,0x60000000,0x908003df,0x2000020,0x1400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffc003ff,0x0,0x0,0xffc003ff,0x0,0x0,};
	}
	private static void jj_la1_init_2() {
	   jj_la1_2 = new int[] {0x0,0x17ffffff,0x17ffffff,0x0,0x17ffffff,0x17ffffff,0x0,0x17ffffff,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,0x13ffffff,0x0,0x0,0x0,0x20000000,0x13ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x13ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17ffffff,0x0,0x0,0x0,0x17ffffff,0x0,0x0,0x17ffffff,0x40000000,0x40000000,0x40000000,0x40000000,0x40000000,0x0,0x0,0x17ffffff,0x0,0x0,0x10000000,0x0,0x33c,0x3,0xc,0x3fff8c0,0x3fff8c0,0x0,0x0,0x0,0x17ffffff,0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17ffffff,0x17ffffff,0x0,0x0,0x0,0x0,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x20000000,0x8000000,0x8000000,0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x400,0x0,0x40000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x13ffffff,0x0,0x0,0x10000000,0x0,0x0,0x0,0x33c,0x3,0x400,0x3fff8c0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x17ffffff,0x0,0x0,0x17ffffff,0x0,0x0,};
	}
	private static void jj_la1_init_3() {
	   jj_la1_3 = new int[] {0x0,0x3a80007d,0x3a80007d,0x0,0x2a80007d,0x2a80007d,0x0,0x2a80007d,0x0,0x0,0x0,0x0,0x1000100,0x0,0x10800001,0x0,0x0,0x400000,0x1000100,0x0,0x0,0x8800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000040,0x0,0x0,0x0,0x0,0x60000040,0x0,0x10800001,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x4000000,0x0,0x0,0x0,0x0,0x0,0x2a80007d,0x0,0x800001,0x0,0x0,0x80400000,0x10800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x800001,0x0,0x0,0x80400000,0x80400000,0x2a80007d,0x0,0x800001,0x0,0x0,0x80400000,0x4800,0x60000040,0x0,0x4800001,0x0,0x0,0x4800001,0x4800001,0x0,0x800001,0x0,0x0,0x0,0x20800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2a80007d,0x100800,0x0,0x0,0x2a80007d,0x0,0x4,0x2a000070,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2a000070,0x0,0x20000000,0x0,0x0,0x0,0x40,0x0,0xa000010,0x0,0xa000010,0x0,0x2000000,0x2a80007d,0x200,0x2a80007d,0x400,0x2800,0x2,0x0,0x80800,0x2a80007d,0x0,0x0,0x2800001,0x2800001,0x0,0x0,0x2800001,0x0,0x2a800071,0x2a000070,0x800001,0x0,0x0,0x0,0x0,0x200800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000000,0x2a80007d,0x0,0x0,0x400,0x40800,0x2a80007d,0x0,0x0,0x0,0x0,0x8,0x800009,0x0,0x0,0xa000050,0x800001,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000100,0x0,0x1800,0x0,0x40000000,0x0,0x20000040,0x0,0x20000000,0x0,0x0,0x40000000,0x0,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x2a000070,0x0,0x0,0x2a000070,0x0,0x0,};
	}
	private static void jj_la1_init_4() {
	   jj_la1_4 = new int[] {0x0,0xb75fccdf,0xb75fccdf,0x80000000,0x15580853,0x15580853,0x80000000,0x15580853,0x0,0x0,0x80000000,0x200000,0x0,0x4,0x270f848d,0x80000000,0x200000,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa50,0x0,0x0,0x0,0x0,0x850,0x20080,0x270f848d,0x0,0x0,0x80,0x0,0x0,0x20000,0x20080,0x20000000,0x1000c,0x0,0x0,0x0,0x800,0x0,0x0,0x0,0x0,0x15580853,0x40000,0x5080001,0x0,0x0,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x50c8001,0x0,0x0,0x200000,0x200000,0x15580853,0x40000,0x5080001,0x0,0x0,0x200000,0x0,0x850,0x4,0x50c8001,0x0,0x0,0x50c8001,0x50c8001,0x40000,0x5080001,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x15580853,0x0,0x0,0x0,0x15580853,0x0,0x0,0x10500852,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10500852,0x0,0x800,0x0,0x0,0x0,0x10,0x0,0x10400040,0x40,0x10400000,0x0,0x10000000,0x15580853,0x0,0x15580853,0x0,0x0,0x0,0x1000,0x0,0x15580853,0x0,0x0,0x150c8001,0x150c8001,0x0,0x0,0x150c8001,0x0,0x155c8853,0x10500852,0x5080001,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10a400,0x0,0x102000,0x0,0x0,0x100000,0x0,0x900060,0x800060,0x0,0x15580853,0x0,0x40000000,0x0,0x0,0x15580853,0x10a400,0x0,0x2000,0x0,0x0,0x5080001,0x0,0x0,0x10400150,0x5080001,0x0,0x0,0x0,0x0,0x4080001,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,0x850,0x0,0x800,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x10500852,0x0,0x0,0x10500852,0x0,0x0,};
	}
	private static void jj_la1_init_5() {
	   jj_la1_5 = new int[] {0x0,0xe600205d,0xe600205d,0x0,0xe600205d,0xe600205d,0x0,0xe600205d,0x0,0x0,0x0,0x0,0x0,0x0,0x2004,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0x2000,0x0,0x0,0x0,0x2000,0x0,0x0,0x0,0x0,0x0,0x20,0x2040,0x0,0x0,0x0,0x0,0x2040,0x0,0x2004,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0xe600205d,0x0,0x2004,0x0,0x0,0x2,0x0,0x2000,0x0,0x0,0x0,0x2000,0x0,0x0,0x1,0x1,0x2004,0x0,0x0,0x2,0x2,0xe600205d,0x0,0x2004,0x0,0x0,0x2,0x0,0x40,0x0,0x2004,0x0,0x0,0x2004,0x2004,0x0,0x2004,0x0,0x0,0x2000,0x0,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0xe600205d,0x0,0x2000,0x2000,0xe600205d,0x2000,0x0,0xe6002058,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe6002058,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0xe6002010,0x0,0xe6000010,0x2000,0xe6000000,0xe600205d,0x0,0xe600205d,0x0,0x0,0x0,0x0,0x0,0xe600205d,0x0,0x0,0xe6002004,0xe6002004,0x0,0x0,0xe6002004,0x0,0xe600205c,0xe6002058,0x2004,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0x20002000,0x10,0x20000000,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0xe600205d,0x2,0x0,0x0,0x0,0xe600205d,0x20002000,0x20000000,0x20000000,0x0,0x1,0x2005,0x0,0x0,0xe6002010,0x2004,0x0,0x2000,0x0,0x2000,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000,0x0,0x40000,0x0,0x2000,0x0,0x2000,0x0,0x0,0x40,0x0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000000,0x0,0x0,0x0,0xe6002058,0x0,0x8000000,0xe6002058,0x0,0x6000000,};
	}
  final private JJCalls[] jj_2_rtns = new JJCalls[37];
  private boolean jj_rescan = false;
  private int jj_gc = 0;

  /** Constructor with InputStream. */
  public AdelanteParser(java.io.InputStream stream) {
	  this(stream, null);
  }
  /** Constructor with InputStream and supplied encoding */
  public AdelanteParser(java.io.InputStream stream, String encoding) {
	 try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
	 token_source = new AdelanteParserTokenManager(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 237; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Reinitialise. */
  public void ReInit(java.io.InputStream stream) {
	  ReInit(stream, null);
  }
  /** Reinitialise. */
  public void ReInit(java.io.InputStream stream, String encoding) {
	 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
	 token_source.ReInit(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jjtree.reset();
	 jj_gen = 0;
	 for (int i = 0; i < 237; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Constructor. */
  public AdelanteParser(java.io.Reader stream) {
	 jj_input_stream = new SimpleCharStream(stream, 1, 1);
	 token_source = new AdelanteParserTokenManager(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 237; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Reinitialise. */
  public void ReInit(java.io.Reader stream) {
	if (jj_input_stream == null) {
	   jj_input_stream = new SimpleCharStream(stream, 1, 1);
	} else {
	   jj_input_stream.ReInit(stream, 1, 1);
	}
	if (token_source == null) {
 token_source = new AdelanteParserTokenManager(jj_input_stream);
	}

	 token_source.ReInit(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jjtree.reset();
	 jj_gen = 0;
	 for (int i = 0; i < 237; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Constructor with generated Token Manager. */
  public AdelanteParser(AdelanteParserTokenManager tm) {
	 token_source = tm;
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 237; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Reinitialise. */
  public void ReInit(AdelanteParserTokenManager tm) {
	 token_source = tm;
	 token = new Token();
	 jj_ntk = -1;
	 jjtree.reset();
	 jj_gen = 0;
	 for (int i = 0; i < 237; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  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();
  }

  @SuppressWarnings("serial")
  static private final class LookaheadSuccess extends java.lang.Error {
    @Override
    public Throwable fillInStackTrace() {
      return this;
    }
  }
  static private final LookaheadSuccess jj_ls = new LookaheadSuccess();
  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);
	 }
	 if (jj_scanpos.kind != kind) return true;
	 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
	 return false;
  }


/** Get the next Token. */
  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;
  }

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

  private int jj_ntk_f() {
	 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.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
  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];
	   }

	   for (int[] oldentry : jj_expentries) {
		 if (oldentry.length == jj_expentry.length) {
		   boolean isMatched = true;

		   for (int i = 0; i < jj_expentry.length; i++) {
			 if (oldentry[i] != jj_expentry[i]) {
			   isMatched = false;
			   break;
			 }

		   }
		   if (isMatched) {
			 jj_expentries.add(jj_expentry);
			 break;
		   }
		 }
	   }

	   if (pos != 0) {
		 jj_lasttokens[(jj_endpos = pos) - 1] = kind;
	   }
	 }
  }

  /** Generate ParseException. */
  public ParseException generateParseException() {
	 jj_expentries.clear();
	 boolean[] la1tokens = new boolean[192];
	 if (jj_kind >= 0) {
	   la1tokens[jj_kind] = true;
	   jj_kind = -1;
	 }
	 for (int i = 0; i < 237; 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;
		   }
		   if ((jj_la1_4[i] & (1<<j)) != 0) {
			 la1tokens[128+j] = true;
		   }
		   if ((jj_la1_5[i] & (1<<j)) != 0) {
			 la1tokens[160+j] = true;
		   }
		 }
	   }
	 }
	 for (int i = 0; i < 192; i++) {
	   if (la1tokens[i]) {
		 jj_expentry = new int[1];
		 jj_expentry[0] = i;
		 jj_expentries.add(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] = jj_expentries.get(i);
	 }
	 return new ParseException(token, exptokseq, tokenImage);
  }

  private boolean trace_enabled;

/** Trace enabled. */
  final public boolean trace_enabled() {
	 return trace_enabled;
  }

  /** Enable tracing. */
  final public void enable_tracing() {
  }

  /** Disable tracing. */
  final public void disable_tracing() {
  }

  private void jj_rescan_token() {
	 jj_rescan = true;
	 for (int i = 0; i < 37; i++) {
	   try {
		 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;
			   case 27: jj_3_28(); break;
			   case 28: jj_3_29(); break;
			   case 29: jj_3_30(); break;
			   case 30: jj_3_31(); break;
			   case 31: jj_3_32(); break;
			   case 32: jj_3_33(); break;
			   case 33: jj_3_34(); break;
			   case 34: jj_3_35(); break;
			   case 35: jj_3_36(); break;
			   case 36: jj_3_37(); break;
			 }
		   }
		   p = p.next;
		 } while (p != null);

		 } catch(LookaheadSuccess ls) { }
	 }
	 jj_rescan = false;
  }

  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;
  }

}