public Parser reportDescriptionEntry() {
        if (reportDescriptionEntryParser == null) {
           FutureParser future = scoped("reportDescriptionEntry");
           reportDescriptionEntryParser = future;
           future.setParser(
               sequence(
                   token("RD"),
                   reportName(),
                   optional(
                       sequence(
                           optional(
                               token("IS")
                           ),
                           token("GLOBAL")
                       )
                   ),
                   optional(
                       sequence(
                           optional(
                               token("WITH")
                           ),
                           token("CODE"),
                           choice(
                               literal(),
                               mnemonicName()
                           )
                       )
                   ),
                   optional(
                       sequence(
                           choice(
                               sequence(
                                   token("CONTROL"),
                                   optional(
                                       token("IS")
                                   )
                               ),
                               sequence(
                                   token("CONTROLS"),
                                   optional(
                                       token("ARE")
                                   )
                               )
                           ),
                           choice(
                               sequence(
                                   token("FINAL"),
                                   star(
                                       dataName()
                                   )
                               ),
                               plus(
                                   dataName()
                               )
                           )
                       )
                   ),
                   optional(
                       sequence(
                           token("PAGE"),
                           optional(
                               choice(
                                   token("LIMIT"),
                                   token("LIMITS")
                               )
                           ),
                           optional(
                               choice(
                                   token("IS"),
                                   token("ARE")
                               )
                           ),
                           integer(),
                           optional(
                               choice(
                                   token("LINE"),
                                   token("LINES")
                               )
                           ),
                           optional(
                               sequence(
                                   token("HEADING"),
                                   integer()
                               )
                           ),
                           optional(
                               sequence(
                                   token("FIRST"),
                                   token("DETAIL"),
                                   integer()
                               )
                           ),
                           optional(
                               sequence(
                                   token("LAST"),
                                   token("DETAIL"),
                                   integer()
                               )
                           ),
                           optional(
                               sequence(
                                   token("FOOTING"),
                                   integer()
                               )
                           )
                       )
                   ),
                   token(".")
               )
           );
        }

        return reportDescriptionEntryParser;
    }