sig
  exception Memory_overflow
  type automata =
      Perform of int * Inria_lexgen.tag_action list
    | Shift of Inria_lexgen.automata_trans *
        (Inria_lexgen.automata_move * Inria_lexgen.memory_action list) array
  and automata_trans =
      No_remember
    | Remember of int * Inria_lexgen.tag_action list
  and automata_move = Backtrack | Goto of int
  and memory_action = Copy of int * int | Set of int
  and tag_action = SetTag of int * int | EraseTag of int
  type tag_base = Start | End | Mem of int
  type tag_addr = Sum of (Inria_lexgen.tag_base * int)
  type ident_info =
      Ident_string of bool * Inria_lexgen.tag_addr * Inria_lexgen.tag_addr
    | Ident_char of bool * Inria_lexgen.tag_addr
  type t_env = (string * Inria_lexgen.ident_info) list
  type ('a, 'b) automata_entry = {
    auto_name : string;
    auto_args : 'a;
    auto_mem_size : int;
    auto_initial_state : int * Inria_lexgen.memory_action list;
    auto_actions : (int * Inria_lexgen.t_env * 'b) list;
  }
  val make_dfa :
    ('a, 'b) Inria_syntax.entry list ->
    ('a, 'b) Inria_lexgen.automata_entry list * Inria_lexgen.automata array
end