// alp-par-suppleance.c

// << Algorithmique du texte >>
// Maxime Crochemore, Christophe Hancart et Thierry Lecroq
// Vuibert, 2001.

#include <stdio.h>
#include "chl.h"
#include "cellule.h"
#include "liste.h"
#include "ensemble.h"
#include "fifo.h"
#include "automate.h"
#include "arbre.h"
#include "cible-par-suppleance.h"

Automate alpParSuppleance(Ensemble X) {
   Automate M;
   Etat p, r, t;
   File F;
   Lettre a;

   M = arbre(X);
   suppleant(initial(M)) = NULL;
   F = fileVide();
   enfiler(F, initial(M));
   while (!fileEstVide(F)) {
      t = (Etat)defilement(F);
      for (a = PREMIERELETTRE; a <= DERNIERELETTRE; ++a)
         if (cible(t, a) != NULL) {
            p = cible(t, a);
            r = cibleParSuppleance(M, suppleant(t), a);
            suppleant(p) = r;
            if (terminal(r))
               terminal(p) = VRAI;
            enfiler(F, p);
         }
   }
   return(M);
}