Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parachraf mathbz Modifié depuis plus de 7 années
1
IFT313 IFT313 Introduction aux langages formels Froduald Kabanza Département d’informatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313 Convertir un AFN en un AFD
2
IFT313© Froduald Kabanza2 Rappel
3
IFT313© Froduald Kabanza3 Sujet couvert Convertir un automate fini non-déterministe en un automate fini. déterministe. Simuler un AFN
4
IFT313© Froduald Kabanza4 Références [1] Sudkamp, T. A.. Languages and Machines. Third Edition Edition. Addison-Wesley, 2005. – Sections 5.6. [2] Appel, A. and Palsberg. J. Modern Compiler Implementation in Java. Second Edition. Cambridge, 2004. – Section 2.4 [3] Wolper, P. Introduction à la calculabilité, 3è édition. Dunod, 2006 –Section 2.6 [4] Aho, A., Lam, M., Sethi R., Ullman J. Compilers: Principles, Techniques, and Tools, 2 nd Edition. Addison Wesley, 2007. – Sections 3.7.1 à 3.7.3
5
IFT313© Froduald Kabanza5 Rappel Il est facile de décrire un lexique par les expressions régulières parce qu’elles sont déclaratives. Par contre, les AFD sont plus faciles à coder comme programme, parce qu’elles sont opérationnelles. Nous avons vu en effet comment implanter un AFD et l’utiliser pour analyser un lexique. Nous avons vu aussi une méthode pour convertir des expressions régulières en AFN. La partie manquante pour savoir comment implémenter un générateur d’analyseurs lexicaux à partir d’une expression régulière, est la conversion d’un AFN en un AFD équivalent.
6
IFT313© Froduald Kabanza6 Élimination du non-déterminisme La méthode pour convertir un AFN en AFD est appelée « subset construction method » en anglais. La méthode consiste à grouper des ensembles d’états de l’AFN en un seul état de l’AFD : L’idée est de simuler l’exécution parallèle de l’AFN sur une entrée donnée. À chaque étape, nous avons un ensemble d’états dans lequel l’AFN pourrait se trouver si on considérait toutes ses exécutions non- déterministes. Ces états représentent un état de l’AFD. Nous allons encore utiliser cette technique plus tard pour l’analyse syntaxique LR.
7
IFT313© Froduald Kabanza7 Idée de base Il y a deux différences fondamentales entre un AFN et un AFD : Transitions sur des chaînes de plus d’un caractère. Non-déterminisme: plusieurs transitions partant d’un même état, sur le même symbole. transitions sur la chaîne vide (‘’, aussi notée ε). Pour obtenir un AFD à partir d’un AFN: Nous commençons par remplacer des transitions sur des chaînes de plus d’un caractère. Nous éliminons ensuite les transitions non déterministes.
8
IFT313© Froduald Kabanza8 Idée de base : transitions sur des chaînes L’exemple suivant illustre la procédure pour éliminer les transitions avec des chaînes de caractères: 12 abc 1342 abc
9
IFT313© Froduald Kabanza9 Idée de base : éliminer le non-déterminisme L’idée pour éliminer le non-déterminisme est de construire un AFD qui à chaque étape de son exécution mémorise les états dans lesquels l’AFD se trouverait potentiellement avec le même input. Donc un état de l’AFD est un sous-ensemble des états de l’AFN tel qu’illustré par les exemples suivants. 1 3 a 2 a b (a) (b) 1 2 3 4 a a ε a b [ab] a b b {1,3} [ab] {4} {1,2,3} a {1} {3} a {1,2} b a b
10
IFT313© Froduald Kabanza10 Fermeture-ε (ε-closure) Pour définir l’algorithme d’élimination du non-déterminisme plus formellement, la notion de ε-closure est nécessaire. Étant donné un ensemble S d’états de l’AFN, ε-closure(S) est l’ensemble des états atteignables dans l’automate, à partir d’un état dans S, et sans consommer un symbole d’entrée; c-à-d., en suivant seulement des transitions ε. Il va de soi que S est dans ε-closure(S). Par extension, pour un état z, ε-closure(z) = ε-closure({z})
11
IFT313© Froduald Kabanza11 Définitions préliminaires Soit succ(s,c) les états successeurs de s sous la transition c Par définition : ε -closure(S) = S {s | s dans succ(s ’, ε ) avec s ’ dans S} On peut maintenant définir l’algorithme epsilon-closure
12
IFT313© Froduald Kabanza12 Algorithme epsilonClosure Entrée : S : un sous-ensemble des états de l’AFN succ : la relation des transitions de l’AFN Sortie : ε-closure(S) Méthode : S1 = S do { S2= S1 ; // S2 devient S1 au début de l’itération S3 = {}; // S3 est l’ensemble des états atteignable à partir de S2 for (s in S2) S3 = union(S3, succ(s, ε)); S1 = union(S2,S3); } while (! S1.equals (S2)); // jusqu’à plus de nouvel état atteignable
13
IFT313© Froduald Kabanza13 Algorithme replaceStringTransitions Entrée : Un AFN X1 =(N1,A,R1,n0,F) Sortie : Un AFN X2=(N2,A,R2,n0,F) avec transitions à un caractère ou ε Méthode : N2=N1; R2=R1 ; Pour toute transition (s, u,t) dans R2 telle que u =a 1 …a k (k>1) supprimer (s, u,t) de R2 ajouter des nouveaux états s 1,s 2,…,s k-1 dans N2 ajouter de nouvelles transitions (s, a 1, s 1 ),…,(s k-1,a k,t) à R2
14
IFT313© Froduald Kabanza14 Algorithme removeNondeterminism Entrée : Un AFN X =(N,A,R,n0,F) avec transitions à un caractère ou ε Sortie : Un AFD Y=(D,A,T,d0,P) Méthode : D = 2 N // L’ensemble des sous-ensembles de N d0 = ε-closure(n 0 ) P = {d dans D | l’interesction de d et F est non vide} // c-à-d., ensembles des états d ayant un état accepteur T est définie comme suit: Pour chaque a dans A et d dans D T[d][a] = ε-closure ( {n’|(n,a,n’) R}) // c-à-d.: T[d][a] est la fermeture-epsilon des états atteignable dans // l’automate X à partir d’un état dans d, le long d’une transition // étiquetée a. ndnd
15
IFT313© Froduald Kabanza15 Algorithm removeNondeterminism Pour donner une description plus algorithmique : Dtrans(d,a) = epsilonClosure ( trans(n,a)) Où trans est la relation de transition de l’AFN X. Autrement dit, il y a une transition de d i à d j, étiquetée a, si et seulement si d j =Dtrans(d i,a) ndnd
16
IFT313© Froduald Kabanza16 Algorithm removeNondeterminism Entrée : AFN (N,A,R,n0,F) Sortie : AFD (D,A,T,d0,P) Méthode : P {d dans D | l’interesction de d et F est non vide} //défini comme avant; d0 = ε -closure(n 0 ) D={d0} et d0 est non marqué while (il y a un état non marqué d in D) { marquer d; for (chaque symbole a dans A) { d ’ = Dtrans(d,a); if (d ’ D) {ajouter d ’ comme état non marqué dans D;} T[d][a] = d ’ ; }}
17
IFT313© Froduald Kabanza17 Récapitulation constructDFAFromNFA(NFA) removeNondeterminism(replaceStringTransitions(NFA)). À la fin de la construction, les états de l’AFD sont remplacés par des nombres. D’autres simplifications sont effectuées sur l’AFD : minimisation.
18
IFT313© Froduald Kabanza18 Exemple (AFN) 1 4 2 9 14 3 5 10 15 876 131211 i f IF ε ε ε a...... z 0...... 9 ERROR any character ε ε ε ε 0...... 9 ε ε [a-z] [0-9] ID NUM......
19
IFT313© Froduald Kabanza19 Exemple (AFD correspondant) {1,4,9,14} {2,5,6,8,15}{3,6,7,8} {6,7,8}{5,6,8,15} {10,11,13,15} {15} {11,12,13} i f [a-z0-9] [a-hj-z] other [0-9] ERROR ID IF [a-z0-9] ID NUM
20
IFT313© Froduald Kabanza20 Récapitulation : produire un scanner à partir d’une liste d’expression régulières Approche : (1) Convertir les expressions régulières en AFNs. (2) Combiner les AFNs. (3) Convertir L’AFN global en AFD équivalent. (4) Appliquer le DFADriver à l’AFD pour reconnaître les tokens. L’étape 4 fait l’objet du devoir 1. Les étapes (1)-(3) sont laissés comme exercices de programmation.
21
IFT313© Froduald Kabanza21 Algorithme NFASimulator La procédure de déterminisation d’un AFN est la composante principale d’un simulateur d’AFN. Entrée : Un AFN N (avec seulement des transitions sur un caractère ou sur ε) Une chaîne de caractères x terminée par le symbole EOF. Sortie : True si N accepte x. False sinon. Méthode : Faire la déterminization (subset construction) à la volée (on the fly), au fur et à mesure qu’on lit x, un caractère à la fois.
22
IFT313© Froduald Kabanza22 Algorithme : NFA Simulator currentState = epsilonClosure({initialStateOfTheNFA}); currentChar = nextchar(); while ((currentChar!=EOF) && (currentState != NULL)){ currentState = Dtrans(currentState, currentChar); currentChar = nextChar(); } if (isFinalState(currentState)) && (currentChar == EOF) return True else return False
23
IFT313© Froduald Kabanza23 Exercice Comment modifieriez-vous l’algorithme précédent pour reconnaître des tokens (c-à-d., trouver la plus longue sous-chaîne acceptée)? Laissé comme exercice.
24
IFT313© Froduald Kabanza24 Vous devriez être capable de Écrire un automate fini déterministe correspondant à un automate fini non déterministe. Simuler un AFN.
25
IFT313© Froduald Kabanza25 Prochaine leçon Minimiser un AFD
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.