public Parser subStatementMarker() {
        if (subStatementMarkerParser == null) {
           FutureParser future = scoped("subStatementMarker");
           subStatementMarkerParser = future;
           future.setParser(
               choice(
                   token("ELSE"),
                   token("WHEN"),
                   sequence(
                       token("NOT"),
                       token("INVALID")
                   ),
                   token("INVALID"),
                   sequence(
                       token("NOT"),
                       optional(
                           token("ON")
                       ),
                       token("SIZE")
                   ),
                   sequence(
                       optional(
                           token("ON")
                       ),
                       token("SIZE")
                   ),
                   sequence(
                       token("NOT"),
                       optional(
                           token("ON")
                       ),
                       token("OVERFLOW")
                   ),
                   sequence(
                       optional(
                           token("ON")
                       ),
                       token("OVERFLOW")
                   ),
                   sequence(
                       token("NOT"),
                       optional(
                           token("ON")
                       ),
                       token("EXCEPTION")
                   ),
                   sequence(
                       optional(
                           token("ON")
                       ),
                       token("EXCEPTION")
                   ),
                   sequence(
                       token("NOT"),
                       optional(
                           token("AT")
                       ),
                       token("END")
                   ),
                   sequence(
                       optional(
                           token("AT")
                       ),
                       token("END")
                   ),
                   sequence(
                       token("NOT"),
                       optional(
                           token("AT")
                       ),
                       token("END-OF-PAGE")
                   ),
                   sequence(
                       token("NOT"),
                       optional(
                           token("AT")
                       ),
                       token("EOP")
                   ),
                   sequence(
                       optional(
                           token("AT")
                       ),
                       token("END-OF-PAGE")
                   ),
                   sequence(
                       optional(
                           token("AT")
                       ),
                       token("EOP")
                   )
               )
           );
        }

        return subStatementMarkerParser;
    }