public Parser cicsXctl() {
        if (cicsXctlParser == null) {
           FutureParser future = scoped("cicsXctl");
           cicsXctlParser = future;
           future.setParser(
               sequence(
                   token("XCTL"),
                   token("PROGRAM"),
                   token("("),
                   programID(),
                   token(")"),
                   permuted(
                       sequence(
                           token("COMMAREA"),
                           token("("),
                           commareaName(),
                           token(")"),
                           optional(
                               sequence(
                                   token("LENGTH"),
                                   cicsWaterInBrackets()
                               )
                           )
                       ),
                       sequence(
                           token("INPUTMSG"),
                           cicsWaterInBrackets(),
                           optional(
                               sequence(
                                   token("INPUTMSGLEN"),
                                   cicsWaterInBrackets()
                               )
                           )
                       ),
                       sequence(
                           token("CHANNEL"),
                           cicsWaterInBrackets()
                       )
                   )
               )
           );
        }

        return cicsXctlParser;
    }