Minimisation d`un AFD - PLANIART

Report
IFT313
Introduction aux langages formels
Froduald Kabanza
Département d’informatique
Université de Sherbrooke
planiart.usherbrooke.ca/kabanza/cours/ift313
Minimisation d’un AFD
Objectifs
• Savoir minimiser la taille (nombre d’états)
d’un AFD.
IFT313
© Froduald Kabanza
2
Références
[1] Sudkamp, T. A.. Languages and Machines. Third Edition Edition.
Addison-Wesley, 2005.
– Section 5.7.
[4] Aho, A., Lam, M., Sethi R., Ullman J. Compilers: Principles, Techniques,
and
Tools, 2nd Edition. Addison Wesley, 2007.
– Sections 3.9.6
IFT313
© Froduald Kabanza
3
Pourquoi minimiser un AFD?
• L’AFD obtenu par la méthode vue dans la leçon
précédente peut ne pas être optimal.
• Deux AFD sont équivalents si et seulement si
elles acceptent le même langage.
• Pour chaque AFD, il existe un AFD équivalent
avec le plus petit nombre d’états:
– Sa table de transitions prend moins d’espace en
mémoire
IFT313
© Froduald Kabanza
5
Exemple : Deux AFD équivalents
a
2
a
3
a
2
b
a
b
1
b
a
4
5
a
6
a
b
a
1
a
b
3
4
b
7
b
8
Expressions régulières :
a(ba)*b | ba(ba)*b
a(ba)*b | (ba)+b
(ab)+ | b (ab)+
b?(ab)+
IFT313
Expression régulière :
b?(ab)+
© Froduald Kabanza
6
Exemple : Deux AFD équivalents
a
2
3
a
a
b
2
a
1
b
3
a
a
4
5
a
1
6
a
b
b
b
7
b
b
a
a
4
5
6
b
8
Les états {7,8} sont inaccessibles;
On peut les enlever.
IFT313
© Froduald Kabanza
7
Exemple : Deux AFD équivalents
a
a
2,5
2
a
3
a
3,6
b
b
a
1
1
b
a
4
b
a
5
4
6
a
b
2
a
b
a
1
Les états {2,5} sont équivalents;
Ils peuvent être fusionnés.
b
3
4
Idem pour les états {3,6}
IFT313
© Froduald Kabanza
8
Étapes pour minimiser un AFD
• Enlever les états inaccessibles
• Regrouper les états équivalents
IFT313
© Froduald Kabanza
9
Étapes pour minimiser un AFD
• Enlever les états inaccessibles
• Regrouper les états équivalents
IFT313
© Froduald Kabanza
10
Algorithme pour enlever les états inaccessibles
Entrée : automate M=(S, A, s0, T, F)
Sortie : automate M’=(S’, A, s0, T’, F’)
RetirerÉtatsInaccessibles()
open = {s0}
tant que open n’est pas vide {
prendre un état s  open
open.remove(s)
S’.add(s)
si s  F alors F’.add(s)
pour tout a  A {
s’ = T(s, a)
T’(s, a) = s’
si s’  S’ alors open.add(s’)
}
}
retourner M’=(S’, A, s0, T’, F’)
IFT313
© Froduald Kabanza
11
Étapes pour minimiser un AFD
• Enlever les états inaccessibles
• Regrouper les états équivalents
IFT313
© Froduald Kabanza
12
Équivalence des états
a,b
sm
b
si
a,b
a
sk
a
a,b
sj
b
sn
• Les états si et sj sont équivalents
• Les états sm et sn sont équivalents
IFT313
© Froduald Kabanza
13
Équivalence des états
• Deux états dans d’un AFD M sont équivalents (indistinguable) si et
seulement si pour chaque mot u, lorsque une exécution de M sur
l’entrée u commence dans l’un ou l’autre des ces états, soit M
accepte le mot dans les deux cas, soit il rejette le mot dans les deux
cas.
• Formellement, étant donné un AFD M=(S,A,T,s0,F) et un mot u,
notons (s,u) l’état dans lequel termine l’exécution de M sur u à partir
de l’état s.
 C.-à.-d.: (s,u)= T(T(s0, u1), …, un)), avec u=u1u2…un
• Deux états si et sj sont équivalents (indistinguables) ssi
pour chaque mot u, (si ,u) ϵ F ssi (sj,u) ϵ F
IFT313
© Froduald Kabanza
14
Propriétés
• Pour tout AFD M, on peut montrer que :
– Le nombre d’états dans un AFD minimal équivalent est le même
que le nombre de classe d’équivalence de M [Myhill, 1957].
– Les transitions entre les états équivalents respectent les
transitions dans M
• Pour minimiser un AFD, il suffit donc de trouver ses
classes d’équivalences.
– Il existe plusieurs algorithmes.
– Un des plus efficace est celui de [Hopcraft, 1971]: O(n log n).
Mais il est compliqué.
– Ici on en voie un plus simple, mais moins efficace : O(n2).
IFT313
© Froduald Kabanza
15
Déterminer les classes
d’équivalence d’un AFD
• Nous avons vu que deux états dans d’un AFN M sont équivalents
(indistinguable) si et seulement si l’exécution de M à partir des deux
états accepte exactement les mêmes mots.
• À l’inverse, deux états sont non équivalents (distinguables) s’il existe
un mot u, tel que l’exécution de M sur u est rejeté à partir d’un des
états (c.à-d., termine dans un état non accepteur ) et est accepté à
partir de l’autre (c.à-d., termine dans un état accepteur).
• On peut montrer que si tous les états d’un AFD M sont atteignables,
alors M est minimal si et seulement si tous les paires d’états dans M
sont distinguable.
IFT313
© Froduald Kabanza
16
Déterminer les classes
d’équivalence d’un AFD
• L’algorithme pour déterminer les classes d’équivalence d’un AFD
– Commence d’abord par déterminer les paires d’états distinguables
de l’AFD
– Les classes d’équivalence de l’AFD sont ensuite obtenus
facilement.
IFT313
© Froduald Kabanza
17
Paire d’états distinguables
• Étant donné un AFD M=(S,A,T,s0,F) et un mot u, notons encore
(s,u) l’état dans lequel termine l’exécution de M sur u à partir de s.
• Deux états si et sj sont distinguables si et seulement si il existe un
mot u, tel que (si ,u) est dans F et (sj,u) ′    F ou tel
que (si ,u) n’est pas est dans F et (sj,u)   F
• De façon inductive, deux états si et sj sont distinguables ssi
– si est dans F et sj n’est pas dans F ou vice versa, ou
– Il existe a dans A tel que T(si, a) et T(sj, a) sont distinguable.
• On peut calculer les états distinguables simplement en appliquant
cette définition inductive.
IFT313
© Froduald Kabanza
18
Algorithme Minimiser AFD
 Entrée : Un AFD M=(S,A,T,s0,F)
 Sortie : Un AFD minimal
 Méthode :
Enlever les états inaccessibles
// Marquer les paires d’états {(si,sj)
Marquer les paires (si , sj ) tel que si est dans F et sj n’est pas dans F
Répéter
Pour toute paire non marquée (si , sj )
Pour chaque symbole a de A
si la paire (T(si ,a) , T(sj,,a)) est marquée
alors marquer la paire (si , sj )
Jusqu’à ce qu’aucune nouvelle paire n’est marquée
// À cet étape, les paires d’états non marquées sont équivalents
Combiner les états équivalents
IFT313
© Froduald Kabanza
19
Exemple
Initialement: marquer les paires
(état-final, état-non-final).
1
Ici, les états 3 et 6 sont finaux et
sont donc chacun distinguable de
tous les autres états.
2
3
x
x
4
x
5
x
Les transitions vers 0 ne sont pas
dessinées!
a
2
3
a
6
x
x
x
b
x
1
0
x
b
1
2
IFT313
3
4
5
6
0
© Froduald Kabanza
a
a
4
5
6
b
20
Exemple
Paire (1, 2)
1
2
x
3
x
T(1, b) = 4
T(2, b) = 3
4
x
5
6
La paire (4,3) est
marquée, alors
(1,2) doit l’être
aussi.
x
x
x
x
0
2
x
2
3
3
a
x
b
1
x
1
a
4
5
6
0
b
a
a
4
5
6
b
IFT313
© Froduald Kabanza
21
Exemple
Paire (1,5)
1
2
x
3
x
T(1, b) = 4
T(5, b) = 6
4
5
La paire (4,6) est marquée,
donc (1,5) doit l’être aussi.
x
x
x
a
x
2
6
x
x
0
x
a
x
2
3
b
1
x
1
3
4
5
6
0
b
a
a
4
5
6
b
IFT313
© Froduald Kabanza
22
Exemple
Paire (4,5)
1
2
3
T(4, b) = 0
T(5, b) = 6
x
x
La paire (0,6) est marquée. Donc
(4,5) doit être marqué.
x
4
x
5
x
6
x
x
x
0
x
x
a
2
x
a
x
1
2
3
3
b
1
4
5
6
0
b
a
a
4
5
6
b
IFT313
© Froduald Kabanza
23
Exemple
Paire (2,4)
1
2
3
T(2, b) = 3
T(4, b) = 0
x
x
4
x
x
5
x
6
x
La paire (3,0) est marquée. Donc
(2,4) doit être marquée.
x
x
x
0
x
x
a
2
x
a
x
1
2
3
3
b
1
4
5
6
0
b
a
a
4
5
6
b
IFT313
© Froduald Kabanza
24
Exemple
Ainsi de suite …
Éventuellement, on arrive à
une situation où aucune paire
ne peut plus être marquée.
1
2
x
3
x
x
4
x
x
5
x
6
x
x
0
x
x
1
2
À ce moment là, les paires
restantes sont indistinguables.
C’est le cas des paires (2,5)
et (3,6).
x
x
x
a
2
x
x
x
x
x
x
3
4
5
6
3
a
b
1
0
b
a
a
4
5
6
b
IFT313
© Froduald Kabanza
25
Combiner les états équivalents
•
À la fin du marquage des états distinguables, chaque paire d’états non
marquée est indistinguable.
•
On obtient les classes d’équivalence comme suit: Pour chaque état s, la
classe de s (notée [s]) est l’ensemble des états s’, tel que la paire (s,s’) n’est
pas marquée.
•
•
Les classes d’équivalences sont les états de l’autonomate minimisé.
L’état initiale [s0] est la classe de s0.
•
L’états finaux sont les classes [s] contenant un état final de l’automate
d’origine.
•
La fonction de transition est définie comme suit: T([s],a)=[T(s,a)]
IFT313
© Froduald Kabanza
26
Automate minimal
a
1
2
2
x
3
x
4
x
5
x
6
x
0
3
a
1
x
x
b
b
x
x
x
a
a
4
5
b
x
x
6
a
x
x
x
x
x
x
x
1
2
3
4
5
6
a
0
{1}
Classes d’équivalence
{2,5}
{3,6}
b
a
b
{4}
= { {1}, {2,5}, {3,6}, {4} {0} }
IFT313
© Froduald Kabanza
27
Résumé
• Pour minimiser un AFD, il faut d’abord enlever les états inaccessibles.
• Ensuite, appliquer la définition inductive d’une paire d’états
distinguables pour marquer toutes les paires indistinguables:
– si et sj sont distinguables ssi
• si est dans F et sj n’est pas dans F ou vice versa, ou
• Il existe a dans A tel que T(si, a) et T(sj, a) sont distinguable
• À la fin du marquage, les paires d’états non marquées sont
indistinguables.
• L’AFD minimal correspond aux classes d’équivalence définies par les
paires indistinguables:
– La classe d’un état s, [s], est l’ensemble des états s’, tel que la
paire (s,s’) est indistinguable de s.
IFT313
© Froduald Kabanza
28
Vous devriez être capable de …
•
Programmer un outil de génération d’analyseurs lexicaux
– Un tel générateur reçoit en entrée des expressions régulières (décrivant des token)
– Il retourne un programme (Java, C++, etc.) capable de reconnaître les token
•
Résumé de l’approche :
1.
2.
3.
4.
Convertir les expressions en un AFN
Convertir l’AFN en AFD
Minimiser l’AFD
Le programme retourné est le simulateur de l’AFD (en mode
reconnaissance de token)
•
Il est possible de combiner les étapes 1 et 2.
•
La technique utilisée pour convertir un AFN en AFD reviendra plus tard
lorsque nous verrons l’analyse syntaxique LR.
IFT313
© Froduald Kabanza
29
Prochaine leçon
 JFLEX : un outil de génération des analyseurs lexicaux.
IFT313
© Froduald Kabanza
30

similar documents