public Parser condition() {
        if (conditionParser == null) {
           FutureParser future = scoped("condition");
           conditionParser = future;
           future.setParser(
               sequence(
                   choice(
                       primaryCondition(),
                       sequence(
                           optional(
                               negationOp()
                           ),
                           token("("),
                           condition(),
                           token(")")
                       )
                   ),
                   star(
                       sequence(
                           conditionalRelationOP(),
                           choice(
                               primaryCondition(),
                               sequence(
                                   optional(
                                       negationOp()
                                   ),
                                   token("("),
                                   condition(),
                                   token(")")
                               )
                           )
                       )
                   )
               )
           );
        }

        return conditionParser;
    }