public final AntlrPilarParser.seqTransformation_return seqTransformation()
      throws RecognitionException {
    AntlrPilarParser.seqTransformation_return retval = new AntlrPilarParser.seqTransformation_return();
    retval.start = input.LT(1);
    int seqTransformation_StartIndex = input.index();
    Object root_0 = null;

    AntlrPilarParser.action_return action238 = null;

    AntlrPilarParser.jump_return jump239 = null;

    RewriteRuleSubtreeStream stream_action = new RewriteRuleSubtreeStream(
        adaptor, "rule action");
    RewriteRuleSubtreeStream stream_jump = new RewriteRuleSubtreeStream(
        adaptor, "rule jump");
    try {
      if (state.backtracking > 0 && alreadyParsedRule(input, 63)) {
        return retval;
      }
      // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:2: ( ( action )* ( jump )? -> ^( LIST ( action )* ) ^( OPTION ( jump )? ) )
      // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:4: ( action )* ( jump )?
      {
        // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:4: ( action )*
        loop77: do {
          int alt77 = 2;
          alt77 = dfa77.predict(input);
          switch (alt77) {
            case 1:
            // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:0:0: action
            {
              pushFollow(FOLLOW_action_in_seqTransformation4448);
              action238 = action();

              state._fsp--;
              if (state.failed) return retval;
              if (state.backtracking == 0)
                stream_action.add(action238.getTree());

            }
              break;

            default:
              break loop77;
          }
        } while (true);

        // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:12: ( jump )?
        int alt78 = 2;
        int LA78_0 = input.LA(1);

        if (((LA78_0 >= 204 && LA78_0 <= 208))) {
          alt78 = 1;
        }
        switch (alt78) {
          case 1:
          // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:0:0: jump
          {
            pushFollow(FOLLOW_jump_in_seqTransformation4451);
            jump239 = jump();

            state._fsp--;
            if (state.failed) return retval;
            if (state.backtracking == 0) stream_jump.add(jump239.getTree());

          }
            break;

        }

        // AST REWRITE
        // elements: action, jump
        // token labels: 
        // rule labels: retval
        // token list labels: 
        // rule list labels: 
        // wildcard labels: 
        if (state.backtracking == 0) {
          retval.tree = root_0;
          RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(
              adaptor, "rule retval", retval != null ? retval.tree : null);

          root_0 = (Object) adaptor.nil();
          // 488:41: -> ^( LIST ( action )* ) ^( OPTION ( jump )? )
          {
            // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:45: ^( LIST ( action )* )
            {
              Object root_1 = (Object) adaptor.nil();
              root_1 = (Object) adaptor.becomeRoot(
                  (Object) adaptor.create(LIST, "LIST"),
                  root_1);

              // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:52: ( action )*
              while (stream_action.hasNext()) {
                adaptor.addChild(root_1, stream_action.nextTree());

              }
              stream_action.reset();

              adaptor.addChild(root_0, root_1);
            }
            // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:61: ^( OPTION ( jump )? )
            {
              Object root_1 = (Object) adaptor.nil();
              root_1 = (Object) adaptor.becomeRoot(
                  (Object) adaptor.create(OPTION, "OPTION"),
                  root_1);

              // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:488:70: ( jump )?
              if (stream_jump.hasNext()) {
                adaptor.addChild(root_1, stream_jump.nextTree());

              }
              stream_jump.reset();

              adaptor.addChild(root_0, root_1);
            }

          }

          retval.tree = root_0;
        }
      }

      retval.stop = input.LT(-1);

      if (state.backtracking == 0) {

        retval.tree = (Object) adaptor.rulePostProcessing(root_0);
        adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
      }
    } catch (RecognitionException re) {
      reportError(re);
      recover(input, re);
      retval.tree = (Object) adaptor.errorNode(
          input,
          retval.start,
          input.LT(-1),
          re);

    } finally {
      if (state.backtracking > 0) {
        memoize(input, 63, seqTransformation_StartIndex);
      }
    }
    return retval;
  }