parameterizing the interface between the code generator and the parser, just to make it easier to shift backends if we really need to.