public Parser compilerIfStatement() {
        if (compilerIfStatementParser == null) {
           FutureParser future = scoped("compilerIfStatement");
           compilerIfStatementParser = future;
           future.setParser(
               sequence(
                   token("\u0024"),
                   token("IF"),
                   operand(),
                   optional(
                       choice(
                           token("SET"),
                           sequence(
                               optional(
                                   token("NOT")
                               ),
                               token("DEFINED")
                           ),
                           sequence(
                               optional(
                                   token("NOT")
                               ),
                               choice(
                                   token("<"),
                                   token(">"),
                                   token("=")
                               ),
                               operand()
                           )
                       )
                   ),
                   choice(
                       compilerStatement(),
                       nestedStatements()
                   ),
                   optional(
                       sequence(
                           token("\u0024"),
                           token("ELSE"),
                           choice(
                               compilerStatement(),
                               nestedStatements()
                           )
                       )
                   ),
                   token("\u0024"),
                   token("END")
               )
           );
        }

        return compilerIfStatementParser;
    }