public Parser subject() {
        if (subjectParser == null) {
           FutureParser future = scoped("subject");
           subjectParser = future;
           future.setParser(
               choice(
                   condition(),
                   arithmeticExpression(),
                   identifier(),
                   literal()
               )
           );
        }

        return subjectParser;
    }