sig
  module Symbols :
    (T : sig type 'a terminal type 'a nonterminal end->
      sig
        type 'a symbol =
            T : 'T.terminal -> 'a symbol
          | N : 'T.nonterminal -> 'a symbol
        type xsymbol = X : 'a symbol -> xsymbol
      end
  module Make :
    (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 maybe_shift_t : state -> terminal -> state option
            val may_reduce_prod : state -> terminal -> production -> bool
            val goto_nt : state -> nonterminal -> state
            val goto_prod : state -> production -> state
            val maybe_goto_nt : state -> nonterminal -> state option
            val lhs : production -> nonterminal
            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
end