Précédent Remonter Suivant

3  Construction d'un automate déterministe à partir d'un arbre de syntaxe abstraite

3.1  Construction d'ensembles d'états associés à chaque noeud

Pour construire un automate déterministe à partir de cet arbre, il faut calculer pour chaque noeud n les 5 ensembles alphabet(n), initial(n), final(n), suivant(n) et isnul(n) définis à la figure 3. Ces ensembles peuvent se calculer en réalisant un parcours de l'arbre en profondeur d'abord.

Remarques
L'opération ∪ de réunion des ensembles vérifie la relation {i,j} ∪{i,k}={i,j,k}. Les autres opérations sur les ensembles (intersection, complément...) ne sont pas utiles pour ce projet).

Vous êtes libres de choisir votre représentation des ensembles et des états (pour ces derniers, il peut être intéressant de leurs associer une étiquette unique pouvant être en relation avec l'adresse d'un noeud de l'arbre de syntaxe abstraite).

Noeud n initial(n) final(n) isnul(n)
n est une feuille {end} {end} True
étiquetée end (=#)      
n est une feuille {i} {i} False
étiquetée i      
initial(c1) ∪ initial(c2) final(c1) ∪ final(c2) isnul(c1) ou isnul(c2)
si isnul(c1) alors
initial(c1) ∪ initial(c2)
sinon initial(c1)
si isnul(c2) alors
final(c1) ∪ final(c2)
sinon final(c2)
isnul(c1) and isnul(c2)
initial(c1) final(c1) True
Soit n un noeud de l'arbre,
Figure 3 : Définition des ensembles alphabet, initial, final, isnul et suivant.


3.2  Construction de l'automate déterministe

Pour obtenir l'automate déterministe à partir de ces ensembles, il reste à appliquer l'algorithme présenté ci-dessous. Cet algorithme construit un ensemble d'états Detat, chaque état représentant un ensemble de noeuds de l'arbre, et une table de transition Dtran, représentant les transitions de l'automate. Ainsi, si Dtran[T, a] = U, alors il y a une transition dans l'automate de l'état T à l'état U étiquetée par la lettre a. Les états de Detat sont marqués pour pouvoir indiquer s'ils ont été examinés ou pas. L'état initial de l'automate est initial(root), les états finaux sont tous les états associé au noeud représentant le symbole de fin.

Algorithme de construction de l'automate déterministe

InitialementDetat contient un seul état non marqué constitué des éléments de initial(root).
Tant qu'il reste un état T non marqué dans Detat faire

3.3  Minimisation de l'automate

Veillez à terminer une implantation du filtre mgrep avant d'implanter cette minimisation.

La minimisation d'un automate déterministe M s'effectue en partitionnant l'ensemble de ses états. Le calcul de cette partition Πfinale se fait en appliquant itérativement l'algorithme ci-dessous sur la partition courante Π. Chaque application de cet algorithme à Π calcule une nouvelle partition Πnew, et, lorsque Πnew = Π, on a trouvé la partition finale Πfinale = Πnew. Si Πnew ≢ Π, on réitère l'algorithme en prenant Π = Πnew. Initialement, la partition Π comporte deux groupes, le groupe des états acceptants (finaux), et les états non-acceptants.

Algorithme de partitionnement d'une partition Π

Pour chaque groupe G de Π faire Chaque groupe d'états de Πfinale représente en fait un état de l'automate minimal M'. Pour calculer les transitions de l'automate minimal, on choisit pour chaque groupe de Πfinale un état représentant. Les états de l'automate minimal seront les états représentants. Soit s un état représentant, et supposons qu'il y a une transition par la lettre a dans l'automate non minimal de s vers t. Soit r le représentant du groupe de t, alors on a une transition dans l'automate minimal de s vers r par la lettre a. L'état initial de M' sera le représentant du groupe contenant l'état initial de M, ses états finaux seront les représentants des groupes qui contiennent un état final de M. Il reste à supprimer les états morts (bouclant sur eux-mêmes pour toute lettre) non finaux, et les états non-atteignables depuis l'état initial.


Précédent Remonter Suivant