sig
  type token = token
  type env
  type production
  type 'a checkpoint = private
      InputNeeded of env
    | Shifting of env * env * bool
    | AboutToReduce of env * production
    | HandlingError of env
    | Accepted of 'a
    | Rejected
  val offer :
    'a checkpoint ->
    token * Lexing.position * Lexing.position -> 'a checkpoint
  val resume : 'a checkpoint -> 'a checkpoint
  type supplier = unit -> token * Lexing.position * Lexing.position
  val lexer_lexbuf_to_supplier :
    (Lexing.lexbuf -> token) -> Lexing.lexbuf -> supplier
  val loop : supplier -> 'a checkpoint -> 'a
  val loop_handle :
    ('-> 'answer) ->
    ('a checkpoint -> 'answer) -> supplier -> 'a checkpoint -> 'answer
  val loop_handle_undo :
    ('-> 'answer) ->
    ('a checkpoint -> 'a checkpoint -> 'answer) ->
    supplier -> 'a checkpoint -> 'answer
  val loop_test : (env -> 'accu -> 'accu) -> 'a checkpoint -> 'accu -> 'accu
  val acceptable : 'a checkpoint -> token -> Lexing.position -> bool
  type 'a lr1state
  val number : 'a lr1state -> int
  type element =
      Element : 'a lr1state * 'a * Lexing.position *
        Lexing.position -> element
  type stack = element MenhirLib.General.stream
  val stack : env -> stack
  val positions : env -> Lexing.position * Lexing.position
  val has_default_reduction : env -> bool
end