#ifndef AUTOMATE_H
#  define AUTOMATE_H

#  include <string>
#  include <iostream>
#  include <vector>
#  include <algorithm>
#  include <cstdlib>
#  include <fstream>
#  include <string>

#  include "Beloeil-Charbonnel-Dinh-utils.h"
#  include "Beloeil-Charbonnel-Dinh-state.h"
#  include "Beloeil-Charbonnel-Dinh-transition.h"


class Automate {
public:
  bool readFile(std::string mon_fichier);

  void isAFS();                 // standardisation
  bool isAFD();                 // deterministe ??
  void AFD();                   //determinisation;
  bool isAFDC();                // detect si l'automate deterministe est complet
  bool AFDC(bool Comp);         // Completion
  void AFDCM();                 // Minimisation


  void printAutomate(int statut);       // Affichage de la table de transition de l'automate
  void readWord();              // Lecture d'un mot

private:
   std::vector < int >ei;       // etat initiaux 
   std::vector < int >ef;       // etat finaux
   std::vector < std::string > alphabet;        // Alphabet lu
   std::vector < transition > a_trans;  // tableau de structure des transition de l'automate complet.
   std::vector < State > Etat;

  void printMinimal(std::vector < std::vector < int > >state);

};
#endif                          // AUTOMATE_H
