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) -> '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