Surface.Parser_state
Our parser crosses the bounds of LR parsing for two features:
for these purposes we maintain a little bit of state and contained side-effects.
Mandatory wrapper around parser calls
val new_heading :
(string * string option * bool * int) ->
(Stdlib.Lexing.position * Stdlib.Lexing.position) ->
Ast.law_heading