public Parser numeric() {
        if (numericParser == null) {
           FutureParser future = scoped("numeric");
           numericParser = future;
           future.setParser(
               choice(
                   integer(),
                   decimal(),
                   booleanLiteral(),
                   hexadecimal(),
                   zero(),
                   sequence(
                       choice(
                           token("LENGTH"),
                           token("BYTE-LENGTH")
                       ),
                       optional(
                           token("OF")
                       ),
                       identifier()
                   )
               )
           );
        }

        return numericParser;
    }