let rec epsilon_trans lstate maq =
(** res = todos os estados atingíveis por uma transição epsilon a partir dos estados de lstate *) |
let res =
(normalize (flatten (map (fun x -> epsilon_trans_aux x maq) lstate))) in
(** junta-se estes estados ao lstate*) |
let resultado = (union res lstate) in
(** se esta união não traz nada de novo... ponto fixo. Devolve se
então resultado *) |
if (equal lstate resultado)
then resultado
(** senão, tenta-se mais uma volta*) |
else (epsilon_trans resultado maq)