let normalize_nfa (nfa : nfa)
(base : int) : nfa =
let curq = ref base in
let qmap = Hashtbl.create (size nfa.q) in
let convert q = try Hashtbl.find qmap q with Not_found ->
Hashtbl.replace qmap q !curq;
incr curq;
(!curq - 1) in
let q = create (size nfa.q) in
let delta = Hashtbl.create (Hashtbl.length nfa.delta) in
let epsilon = Hashtbl.create (Hashtbl.length nfa.epsilon) in
iter (fun s -> add q (convert s)) nfa.q;
copy_table nfa.delta delta convert;
copy_table nfa.epsilon epsilon convert;
{ s = convert nfa.s;
f = convert nfa.f;
delta = delta;
epsilon = epsilon;
q = q;
next_q = !curq}