public final AntlrPilarParser.packageDeclarationFile_return packageDeclarationFile()
      throws RecognitionException {
    AntlrPilarParser.packageDeclarationFile_return retval = new AntlrPilarParser.packageDeclarationFile_return();
    retval.start = input.LT(1);
    int packageDeclarationFile_StartIndex = input.index();
    Object root_0 = null;

    Token EOF6 = null;
    AntlrPilarParser.packageDeclaration_return packageDeclaration5 = null;

    Object EOF6_tree = null;
    RewriteRuleTokenStream stream_EOF = new RewriteRuleTokenStream(adaptor,
        "token EOF");
    RewriteRuleSubtreeStream stream_packageDeclaration = new RewriteRuleSubtreeStream(
        adaptor, "rule packageDeclaration");
    try {
      if (state.backtracking > 0 && alreadyParsedRule(input, 3)) {
        return retval;
      }
      // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:174:2: ( packageDeclaration EOF -> packageDeclaration )
      // /Users/robby/Repositories/sireum-parser/sireum-parser/src/main/java/org/sireum/pilar/parser/AntlrPilar.g:174:4: packageDeclaration EOF
      {
        pushFollow(FOLLOW_packageDeclaration_in_packageDeclarationFile755);
        packageDeclaration5 = packageDeclaration();

        state._fsp--;
        if (state.failed) return retval;
        if (state.backtracking == 0)
          stream_packageDeclaration.add(packageDeclaration5.getTree());
        EOF6 = (Token) match(
            input,
            EOF,
            FOLLOW_EOF_in_packageDeclarationFile757);
        if (state.failed) return retval;
        if (state.backtracking == 0) stream_EOF.add(EOF6);

        // AST REWRITE
        // elements: packageDeclaration
        // 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();
          // 174:41: -> packageDeclaration
          {
            adaptor.addChild(root_0, stream_packageDeclaration.nextTree());

          }

          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, 3, packageDeclarationFile_StartIndex);
      }
    }
    return retval;
  }