functor (TT : TableFormat.TABLES)
  (IT : sig
          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 'a lr1state = int
          val terminal : int -> xsymbol
          val nonterminal : int -> xsymbol
          val rhs : PackedIntArray.t * PackedIntArray.t
          val lr0_core : PackedIntArray.t
          val lr0_items : PackedIntArray.t * PackedIntArray.t
          val lr0_incoming : PackedIntArray.t
          val nullable : string
          val first : int * string
        end)
  (ET : sig
          type state
          val number : state -> int
          type token
          type terminal = int
          type nonterminal = int
          type semantic_value = Obj.t
          val token2terminal : token -> terminal
          val token2value : token -> semantic_value
          val error_terminal : terminal
          val error_value : semantic_value
          val foreach_terminal : (terminal -> '-> 'a) -> '-> 'a
          type production
          val production_index : production -> int
          val find_production : int -> production
          val default_reduction :
            state ->
            ('env -> production -> 'answer) ->
            ('env -> 'answer) -> 'env -> 'answer
          val action :
            state ->
            terminal ->
            semantic_value ->
            ('env -> bool -> terminal -> semantic_value -> state -> 'answer) ->
            ('env -> production -> 'answer) ->
            ('env -> 'answer) -> 'env -> 'answer
          val goto_nt : state -> nonterminal -> state
          val goto_prod : state -> production -> state
          val maybe_goto_nt : state -> nonterminal -> state option
          val is_start : production -> bool
          exception Error
          type semantic_action =
              (state, semantic_value, token) EngineTypes.env ->
              (state, semantic_value) EngineTypes.stack
          val semantic_action : production -> semantic_action
          val may_reduce : state -> production -> bool
          val log : bool
          module Log :
            sig
              val state : state -> unit
              val shift : terminal -> state -> unit
              val reduce_or_accept : production -> unit
              val lookahead_token :
                terminal -> Lexing.position -> Lexing.position -> unit
              val initiating_error_handling : unit -> unit
              val resuming_error_handling : unit -> unit
              val handling_error : state -> unit
            end
        end)
  (E : sig
         type 'a env =
             (ET.state, ET.semantic_value, ET.token)
             CamlinternalMenhirLib.EngineTypes.env
       end)
  ->
  sig
    type 'a symbol =
        T : 'IT.terminal -> 'a symbol
      | N : 'IT.nonterminal -> 'a symbol
    type xsymbol = X : 'a symbol -> xsymbol
    type item = int * int
    val compare_terminals : 'IT.terminal -> 'IT.terminal -> int
    val compare_nonterminals : 'IT.nonterminal -> 'IT.nonterminal -> int
    val compare_symbols : xsymbol -> xsymbol -> int
    val compare_productions : int -> int -> int
    val compare_items : item -> item -> int
    val incoming_symbol : 'IT.lr1state -> 'a symbol
    val items : 'IT.lr1state -> item list
    val lhs : int -> xsymbol
    val rhs : int -> xsymbol list
    val nullable : 'IT.nonterminal -> bool
    val first : 'IT.nonterminal -> 'IT.terminal -> bool
    val xfirst : xsymbol -> 'IT.terminal -> bool
    val foreach_terminal : (xsymbol -> '-> 'a) -> '-> 'a
    val foreach_terminal_but_error : (xsymbol -> '-> 'a) -> '-> 'a
    val feed :
      'a symbol ->
      IncrementalEngine.position ->
      '-> IncrementalEngine.position -> 'E.env -> 'E.env
  end