Télécharger la présentation
1
IFT313 Introduction aux langages formels
Froduald Kabanza Département d’informatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313 Minimisation d’un AFD
2
Objectifs Savoir minimiser la taille (nombre d’états) d’un AFD. IFT313
© Froduald Kabanza
3
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
4
Rappels Un langage régulier définit un ensemble fini ou infini des chaînes de symboles (caractères). Pour un langage régulier r, il existe un AFD M tel que r = L(M). C’est avec l’AFD que l’on reconnaît les tokens décrits par des expressions régulières. IFT313 © Froduald Kabanza
5
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 L’objectif de la minimisation d’un AFD est d’avoir une plus petite table de transitions, c-à-d., d’avoir un analyseur lexical qui prend peu d’espace en mémoire puisque le pilote d’un analyseur lexical n’est rien d’autre que l’AFD. IFT313 © Froduald Kabanza
6
Exemple : Deux AFD équivalents
2 3 a a 2 3 b a 1 b 1 a a a b 4 5 6 b 4 b 7 a 8 b Expression régulière : b?(ab)+ Expressions régulières : a(ba)*b | ba(ba)*b a(ba)*b | (ba)+b (ab)+ | b (ab)+ b?(ab)+ a(ba)*b | ba(ba)*b a(ba)*b | (ba)+b (ab)+ | b (ab)+ b?(ab)+ IFT313 © Froduald Kabanza
7
Exemple : Deux AFD équivalents
2 3 a a b 2 3 a 1 b a 1 a b 4 5 6 a a b b 4 5 6 a a b b 7 8 b Les états {7,8} sont inaccessibles; On peut les enlever. IFT313 © Froduald Kabanza
8
Exemple : Deux AFD équivalents
2,5 3,6 2 3 a b a b 1 a 1 b a 4 a b 4 5 6 a b 2 3 a b 1 a Les états {2,5} sont équivalents; Ils peuvent être fusionnés. Idem pour les états {3,6} b 4 IFT313 © Froduald Kabanza
9
Étapes pour minimiser un AFD
Enlever les états inaccessibles Regrouper les états équivalents IFT313 © Froduald Kabanza
10
Étapes pour minimiser un AFD
Enlever les états inaccessibles Regrouper les états équivalents IFT313 © Froduald Kabanza
11
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’) Idée: parcourir le graphe de l’automate par une exploration exhaustive, à partir de l’état initial, en reconstruisant le nouvel automate. IFT313 © Froduald Kabanza
12
Étapes pour minimiser un AFD
Enlever les états inaccessibles Regrouper les états équivalents IFT313 © Froduald Kabanza
13
Équivalence des états Les états si et sj sont équivalents
a,b sm b si a,b a sk a a,b sj sn b Les états si et sj sont équivalents Les états sm et sn sont équivalents IFT313 © Froduald Kabanza
14
É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 C.-à.-d: à partir des deux états, l’AFD accepte exactement les mêmes mots. IFT313 © Froduald Kabanza
15
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). Myhill, J. Finite automata and the representation of events. WADD TR , Wright Patterson AFB, Ohio, 1957. Hopcroft, J. (1971) An N Log N Algorithm for Minimizing States in a Finite Automaton. Stanford University. L’algorithme que l’on voit ici est bien plus simple que celui décrit dans le manuel du cours (livre de référence). IFT313 © Froduald Kabanza
16
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. 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. Preuve : (=>). L’implication dans ce sens est facile à prouver. En effet, si M avait des états non distinguables, alors ils pourraient être combinés (c.-à-d., l’un d’entre eux pourrait être éliminé) sans changer le langage accepté. Donc M ne serait pas minimal. (<=): La preuve dans l’autre sens est plus intéressante. Voir IFT313 © Froduald Kabanza
17
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
18
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
19
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 Cet algorithme commence par marquer les paires d’états distinguables. Ensuite, on fusionne les paires d’états non distinguables. Pour marquer les paires, créer un tableau triangulaire (i.e, utiliser seulement le haut ou le bas du tableau étant donnée la symétrie des paires d’états). L’état 0 est unique et est distinguable de tous les aurt IFT313 © Froduald Kabanza
20
Exemple Initialement: marquer les paires (état-final, état-non-final).
Ici, les états 3 et 6 sont finaux et sont donc chacun distinguable de tous les autres états. Les transitions vers 0 ne sont pas dessinées! 1 2 3 x 4 5 6 1 2 3 a b 4 5 6 b IFT313 © Froduald Kabanza
21
Exemple Paire (1, 2) T(1, b) = 4 T(2, b) = 3
La paire (4,3) est marquée, alors (1,2) doit l’être aussi. 1 2 x 3 4 5 6 a 2 3 C’est à dire, (4,3) sont distinguables, alors (1,2) doit l’être aussi. a b 1 a a b 4 5 6 b IFT313 © Froduald Kabanza
22
Exemple Paire (1,5) T(1, b) = 4 T(5, b) = 6
La paire (4,6) est marquée, donc (1,5) doit l’être aussi. 1 2 x 3 4 5 6 1 2 3 a b 4 5 6 IFT313 © Froduald Kabanza
23
Exemple Paire (4,5) T(4, b) = 0 T(5, b) = 6
La paire (0,6) est marquée. Donc (4,5) doit être marqué. 1 2 x 3 4 5 6 1 2 3 a b 4 5 6 Se rappeler qu’à l’initialisation on marque toutes les paires (si,sj) tel que si est accepteur et sj est non accepteur ou vice-versa. En particulier, toute paire (0, si) tel que si est accepteur est marqué puisque 0 n’est jamais accepteur. Ici 6 est accepteur, donc (0,6) est marqué à l’initialisation. IFT313 © Froduald Kabanza
24
Exemple Paire (2,4) T(2, b) = 3 T(4, b) = 0
La paire (3,0) est marquée. Donc (2,4) doit être marquée. 1 2 x 3 4 5 6 1 2 3 a b 4 5 6 IFT313 © Froduald Kabanza
25
Exemple Ainsi de suite … Éventuellement, on arrive à une situation où aucune paire ne peut plus être marquée. À ce moment là, les paires restantes sont indistinguables. C’est le cas des paires (2,5) et (3,6). 1 2 x 3 4 5 6 1 2 3 a b 4 5 6 IFT313 © Froduald Kabanza
26
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
27
Classes d’équivalence
Automate minimal 1 2 3 a b 4 5 6 1 2 x 3 4 5 6 {1} {4} b {2,5} a {3,6} Classes d’équivalence = { {1}, {2,5}, {3,6}, {4} {0} } IFT313 © Froduald Kabanza
28
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
29
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 : 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
30
Prochaine leçon JFLEX : un outil de génération des analyseurs lexicaux. IFT313 © Froduald Kabanza
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.