It seems to me the selection of the Antlr2 or Antlr4 parser could be implemented within a default implementation of ParserPluginFactory instead of introducing ParserVersion with separate get/set on CompilerConfiguration. I don't see the need for static factory methods antlr2() and antlr4() on ParserPluginFactory, their use from CompilerConfiguration and the strange class loading in ParserPluginFactory.
The factory pattern appears to me to be side-stepped in favor of a version constant. Is there still meaning in offering a config option of setting a ParserPluginFactory? Has this been used ever in the past?
Couldn't this suffice for a default in CompilerConfiguration? Then ParserVersion could be dropped.