sig
  module MakeEngineTable :
    functor (T : TableFormat.TABLES->
      sig
        type state = int
        val number : state -> int
        type token = T.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 = int
        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
end