sig
  type token
  type production
  type 'a env
  type 'a checkpoint = private
      InputNeeded of 'a env
    | Shifting of 'a env * 'a env * bool
    | AboutToReduce of 'a env * production
    | HandlingError of 'a env
    | Accepted of 'a
    | Rejected
  val offer : 'a checkpoint -> token * position * position -> 'a checkpoint
  type strategy = [ `Legacy | `Simplified ]
  val resume : ?strategy:strategy -> 'a checkpoint -> 'a checkpoint
  type supplier = unit -> token * position * position
  val lexer_lexbuf_to_supplier :
    (Lexing.lexbuf -> token) -> Lexing.lexbuf -> supplier
  val loop : ?strategy:strategy -> 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 shifts : 'a checkpoint -> 'a env option
  val acceptable : 'a checkpoint -> token -> position -> bool
  type 'a lr1state
  val number : 'a lr1state -> int
  val production_index : production -> int
  val find_production : int -> production
  type element = Element : 'a lr1state * 'a * position * position -> element
  type stack = element General.stream
  val stack : 'a env -> stack
  val top : 'a env -> element option
  val pop_many : int -> 'a env -> 'a env option
  val get : int -> 'a env -> element option
  val current_state_number : 'a env -> int
  val equal : 'a env -> 'a env -> bool
  val positions : 'a env -> position * position
  val env_has_default_reduction : 'a env -> bool
  val state_has_default_reduction : 'a lr1state -> bool
  val pop : 'a env -> 'a env option
  val force_reduction : production -> 'a env -> 'a env
  val input_needed : 'a env -> 'a checkpoint
  type 'a terminal
  type 'a nonterminal
  type 'a symbol =
      T : 'a terminal -> 'a symbol
    | N : 'a nonterminal -> 'a symbol
  type xsymbol = X : 'a symbol -> xsymbol
  type item = production * int
  val compare_terminals : 'a terminal -> 'b terminal -> int
  val compare_nonterminals : 'a nonterminal -> 'b nonterminal -> int
  val compare_symbols : xsymbol -> xsymbol -> int
  val compare_productions : production -> production -> int
  val compare_items : item -> item -> int
  val incoming_symbol : 'a lr1state -> 'a symbol
  val items : 'a lr1state -> item list
  val lhs : production -> xsymbol
  val rhs : production -> xsymbol list
  val nullable : 'a nonterminal -> bool
  val first : 'a nonterminal -> 'b terminal -> bool
  val xfirst : xsymbol -> 'a terminal -> bool
  val foreach_terminal : (xsymbol -> '-> 'a) -> '-> 'a
  val foreach_terminal_but_error : (xsymbol -> '-> 'a) -> '-> 'a
  val feed : 'a symbol -> position -> '-> position -> 'b env -> 'b env
end