public Parser cicsReadQ() {
        if (cicsReadQParser == null) {
           FutureParser future = scoped("cicsReadQ");
           cicsReadQParser = future;
           future.setParser(
               sequence(
                   token("READQ"),
                   choice(
                       sequence(
                           token("TS"),
                           choice(
                               token("QUEUE"),
                               token("QNAME")
                           ),
                           token("("),
                           queueName(),
                           token(")"),
                           permuted(
                               sequence(
                                   choice(
                                       token("SYSID"),
                                       token("SYS")
                                   ),
                                   token("("),
                                   cicsSysid(),
                                   token(")")
                               ),
                               sequence(
                                   choice(
                                       token("SET"),
                                       token("INTO")
                                   ),
                                   token("("),
                                   dataArea(),
                                   token(")"),
                                   optional(
                                       sequence(
                                           token("LENGTH"),
                                           cicsWaterInBrackets()
                                       )
                                   )
                               ),
                               choice(
                                   sequence(
                                       token("ITEM"),
                                       cicsWaterInBrackets()
                                   ),
                                   token("NEXT")
                               ),
                               sequence(
                                   token("NUMITEMS"),
                                   cicsWaterInBrackets()
                               )
                           )
                       ),
                       sequence(
                           token("TD"),
                           token("QUEUE"),
                           token("("),
                           choice(
                               literal(),
                               identifier()
                           ),
                           token(")")
                       )
                   )
               )
           );
        }

        return cicsReadQParser;
    }