1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
Données deux automates à états finis A1, A2.
Résultat un automate produit A.
Variable
A1 : Fichier de texte ; /* représente les états et les transitions de lautomate A1 */
A2 : Fichier de texte ; /* représente les états et les transitions de lautomate A2 */
A : Fichier de texte ; /* représente les états et les transitions de lautomate A */
Variable i : entier ;
Variable E etat-produit : Ensemble : chaîne de caractère ;
/* sauvegarde les états de lautomate produit*/
X alph-produit : Ensemble : chaîne de caractère ;
/* sauvegarde les alphabets de lautomate produit*/
II trans-produit : Ensemble : chaîne de caractère ;
/* sauvegarde les transitions de lautomate produit*/
L_ E_trait : Vector /*sauvegarde des états déjà traités.*/
L_ N_etat: Vector /*sauvegarde des nouveaux états à traités. */
List_trans_prod : Vector /* contient les transitions de lautomate produit A. */
Ens_etatf_prod: Vector /* contient les états finaux de lautomate produit A.*/
Etat :(Si,Sj) /* couple des états tell que Si E1 et Sj E2.*/
Début
Ajouter ((S01, S02), List_Nouv_etat) /* S01 état initial de A1, S02 état initial de A2 */
Tant que List_Nouv_etat <> null Faire /*parcourir la liste des nouveaux états */
Etat ← retirer_premier_element (List_Nouv_etat), Si ← Etat.Si, Sj ←Etat.Sj ;
Vector List_trans1 ← Suivant (Si, A1) ;
Vector List_trans2 ← Suivant (Sj, A2) ;
/* Suivant (e, A) retourne toutes les transitions ayant létat e comme état source dans le fichier A .les transition sont de type (source, alphabet, destination). */
Pour chaque transition trans1= Si>alph1> dst1 ∈ List_trans1 Faire
Si il existe une transition trans2=Sj>alph1>dest2 ∈ List_trans2 alors
/* une transition de List_trans2 ou on peut lire le même alphabet alph1
ajouter ((Si,Sj),alph1 ,(dst1,dst2)), liste_tans_prod) ;
supp_element(List_trans2,tran2)
/* Supprimer la transition trans2 de List_trans2 */
Si (dst1, dst2) nappartient pas (Etat_trait U Nouv_etat) alors
Ajouter ((dst1, dst2), Nouv_etat) ;
FSi
Si (dst1∈ ens_etf1 et dst2∈ ens_etf2) ajouter ((dst1, dst2) ,ens_etf) ; FSi
/* ens_etf1 représente lensemble des états finaux dans A1, ens_etf2 les états finaux dans A2, et ens_etf dans A.*/
Sinon
Ajouter ((Si,Sj),alph1 ,(dst1,Sj)),liste_tans_prod)
Si (dst1, Sj) nappartient pas (Etat_trait U Nouv_etat) alors
Ajouter ((dst1, Sj), Nouv_etat)
Fsi
Si (dst1∈ ens_etf1 et Sj∈ ens_etf2) ajouter ((dst1, Sj) ,ens_etf); FSi
Fsi
Fin Pour |
Partager