The parser makes a bit more sense if the per-state data is stored in the state.