public Parser timePhrase() {
        if (timePhraseParser == null) {
           FutureParser future = scoped("timePhrase");
           timePhraseParser = future;
           future.setParser(
               sequence(
                   optional(
                       token("BEFORE")
                   ),
                   token("TIME"),
                   choice(
                       identifier(),
                       literal()
                   )
               )
           );
        }

        return timePhraseParser;
    }