public Parser errorDeclarative() {
        if (errorDeclarativeParser == null) {
           FutureParser future = scoped("errorDeclarative");
           errorDeclarativeParser = future;
           future.setParser(
               sequence(
                   optional(
                       token("GLOBAL")
                   ),
                   token("AFTER"),
                   optional(
                       token("STANDARD")
                   ),
                   choice(
                       token("ERROR"),
                       token("EXCEPTION")
                   ),
                   token("PROCEDURE"),
                   optional(
                       token("ON")
                   ),
                   choice(
                       token("INPUT"),
                       token("OUTPUT"),
                       token("I-O"),
                       token("EXTEND"),
                       star(
                           fileName()
                       )
                   ),
                   optional(
                       sequence(
                           token("GIVING"),
                           dataName(),
                           optional(
                               dataName()
                           )
                       )
                   )
               )
           );
        }

        return errorDeclarativeParser;
    }