final public block_AST Block() throws ParseException {
                              /*@bgen(jjtree) block_AST */
  block_AST jjtn000 = new block_AST(JJTBLOCK_AST);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);List<SimpleNode> stmts = new ArrayList<SimpleNode>();
  SimpleNode stmt = null;
    try {
      jj_consume_token(LCB);
    SYMBOL_TABLE.enterScope(false, MODE);
      label_9:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case BREAK:
        case CONTINUE:
        case IF:
        case NEW:
        case RETURN:
        case SUPER:
        case THIS:
        case WHILE:
        case BOOLEAN:
        case CHAR:
        case INT:
        case INTEGER:
        case TRUE:
        case FALSE:
        case CHARLITERAL:
        case STRINGLITERAL:
        case NULL:
        case LP:
        case LCB:
        case SCOLON:
        case NOT:
        case PLUS:
        case MINUS:
        case ID:
          ;
          break;
        default:
          jj_la1[18] = jj_gen;
          break label_9;
        }
        stmt = Statement();
                      stmts.add(stmt);
      }
      jj_consume_token(RCB);
    jjtree.closeNodeScope(jjtn000, true);
    jjtc000 = false;
    jjtn000.setStatements(stmts);
    SYMBOL_TABLE.exitScope(MODE);
    {if (true) return jjtn000;}
    } 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);
    }
    }
    throw new Error("Missing return statement in function");
  }