public Parser sendStatement() {
        if (sendStatementParser == null) {
           FutureParser future = scoped("sendStatement");
           sendStatementParser = future;
           future.setParser(
               sequence(
                   token("SEND"),
                   choice(
                       sequence(
                           dataName(),
                           token("TO"),
                           choice(
                               sequence(
                                   token("LAST"),
                                   token("THREAD")
                               ),
                               sequence(
                                   token("ALL"),
                                   token("THREADS")
                               ),
                               plus(
                                   sequence(
                                       optional(
                                           token("THREAD")
                                       ),
                                       dataName()
                                   )
                               )
                           )
                       ),
                       sequence(
                           cdName(),
                           optional(
                               sequence(
                                   token("FROM"),
                                   identifier()
                               )
                           ),
                           optional(
                               sequence(
                                   optional(
                                       token("WITH")
                                   ),
                                   choice(
                                       token("ESI"),
                                       token("EMI"),
                                       token("EGI"),
                                       identifier()
                                   ),
                                   optional(
                                       sequence(
                                           choice(
                                               token("BEFORE"),
                                               token("AFTER")
                                           ),
                                           optional(
                                               token("ADVANCING")
                                           ),
                                           choice(
                                               token("PAGE"),
                                               sequence(
                                                   choice(
                                                       zero(),
                                                       integer(),
                                                       identifier()
                                                   ),
                                                   optional(
                                                       choice(
                                                           token("LINE"),
                                                           token("LINES")
                                                       )
                                                   )
                                               ),
                                               mnemonicName()
                                           )
                                       )
                                   ),
                                   optional(
                                       sequence(
                                           token("REPLACING"),
                                           optional(
                                               token("LINE")
                                           )
                                       )
                                   )
                               )
                           )
                       )
                   )
               )
           );
        }

        return sendStatementParser;
    }