public Parser occurs() {
        if (occursParser == null) {
           FutureParser future = scoped("occurs");
           occursParser = future;
           future.setParser(
               sequence(
                   token("OCCURS"),
                   plus(
                       choice(
                           sequence(
                               optional(
                                   sequence(
                                       integer(),
                                       token("TO")
                                   )
                               ),
                               integer(),
                               optional(
                                   token("TIMES")
                               ),
                               optional(
                                   sequence(
                                       token("DEPENDING"),
                                       optional(
                                           token("ON")
                                       ),
                                       qualifiedDataName()
                                   )
                               ),
                               star(
                                   sequence(
                                       choice(
                                           token("ASCENDING"),
                                           token("DESCENDING")
                                       ),
                                       optional(
                                           token("KEY")
                                       ),
                                       optional(
                                           token("IS")
                                       ),
                                       plus(
                                           qualifiedDataName()
                                       )
                                   )
                               ),
                               star(
                                   sequence(
                                       token("INDEXED"),
                                       optional(
                                           token("BY")
                                       ),
                                       plus(
                                           indexName()
                                       )
                                   )
                               )
                           ),
                           token("ANY")
                       )
                   )
               )
           );
        }

        return occursParser;
    }