I think it would be a bit simpler to track a single `extent` (as 2-tuple) than two separate values in the `ParseNode`s.