sig
  type symbol = int
  and state = int
  and rhs = (Mtt.symbol, Mtt.state) RightHandSide.rhs
  and action = Undefined | Det of Mtt.rhs | Non_det of Mtt.rhs list
  and rule = Mtt.symbol -> Mtt.action
  and rule_set = (Mtt.state, Mtt.rule) Hashtbl.t
  and ('a, 'b, 'c) mtt = {
    mutable q : 'SymbolTable.symbol_table;
    mutable sigma : 'SymbolTable.symbol_table;
    mutable delta : 'SymbolTable.symbol_table;
    mutable init : Mtt.symbol;
    mutable rules : Mtt.rule_set;
  }
  val empty :
    ('-> '-> bool) * ('-> string) ->
    ('-> '-> bool) * ('-> string) ->
    ('-> '-> bool) * ('-> string) -> ('a, 'b, 'c) Mtt.mtt
  val add_state : ('a, 'b, 'c) Mtt.mtt -> '-> unit
  val add_sigma : ('a, 'b, 'c) Mtt.mtt -> '-> unit
  val add_delta : ('a, 'b, 'c) Mtt.mtt -> '-> unit
  val add_rule :
    ('a, 'b, 'c) Mtt.mtt -> Mtt.state -> Mtt.symbol -> Mtt.rhs -> unit
  val get_action :
    ('a, 'b, 'c) Mtt.mtt -> Mtt.state -> Mtt.symbol -> Mtt.action
  val ord_of_state : ('a, 'b, 'c) Mtt.mtt -> '-> Mtt.state
  val ord_of_sigma : ('a, 'b, 'c) Mtt.mtt -> '-> Mtt.symbol
  val ord_of_delta : ('a, 'b, 'c) Mtt.mtt -> '-> Mtt.symbol
  val state_of_ord : ('a, 'b, 'c) Mtt.mtt -> Mtt.state -> 'a
  val sigma_of_ord : ('a, 'b, 'c) Mtt.mtt -> Mtt.symbol -> 'b
  val delta_of_ord : ('a, 'b, 'c) Mtt.mtt -> Mtt.symbol -> 'c
  val get_init : ('a, 'b, 'c) Mtt.mtt -> Mtt.state
  val set_init : ('a, 'b, 'c) Mtt.mtt -> Mtt.state -> unit
  val state_to_string : ('a, 'b, 'c) Mtt.mtt -> '-> string
  val sigma_to_string : ('a, 'b, 'c) Mtt.mtt -> '-> string
  val delta_to_string : ('a, 'b, 'c) Mtt.mtt -> '-> string
  val print_states : ('a, 'b, 'c) Mtt.mtt -> unit
  val print_sigma : ('a, 'b, 'c) Mtt.mtt -> unit
  val print_delta : ('a, 'b, 'c) Mtt.mtt -> unit
end