factoring our parsers from Engine (to make it more robust with nulls and lazy initialization)