it doesn't make sense to pass a factory into a constructor, apply the factory, then just use the object it creates. (it's not good style for constructors to do too much work.)

create a static 'create' method that does this work, then pass only the SqlAbstractParserImpl to the constructor.

4 constructors is too many. ideal would be 1 private constructor and 2 'create' methods.