Surface.Parser_stateOur 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