Introduce `reader` to coordinate parser and grammar