IFT313 IFT313 Introduction aux langages formels Froduald Kabanza Département d’informatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.

Slides:



Advertisements
Présentations similaires
IFT313 Introduction aux langages formels
Advertisements

IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
Analyse lexicale Généralités Expressions rationnelles Automates finis
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT451 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Révision de mi-session.
IFT313 Révision finale Département d’informatique
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Grammaires attribuées.
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Analyseurs récursifs LL (1)
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Automates à pile LR Notion de poignée.
Rappel Modèle analyse-synthèse de la compilation
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
Vaguener ǀ Willis Towers Watson 1 Alac Luxembourg 12│05│2016 Duration Vectorielle et ALM Mobile :
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Coloration de graphe, backtracking, branch and bound
Initiation aux bases de données et à la programmation événementielle
IFT313 Introduction aux langages formels
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Information, Calcul, Communication
Techniques de décomposition
Semaine #1 INF130 par Frédérick Henri.
Javadoc et débogueur Semaine 03 Version A17.
7.1 Transformation linéaire
Algorithmique - L’affectation -
Information, Calcul, Communication
IFT 615 – Intelligence artificielle Recherche heuristique
Les bases de données et le modèle relationnel
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Fonctions Logiques & Algèbre de BOOLE
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L’I NSTRUCTION DE T EST A LTERNATIF Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira, Bejaia Année.
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Introduction aux langages formels
Recherche par automates finis
IFT 702 – Planification en intelligence artificielle Langage PDDL
Algorithmique Avancée et Complexité
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
Définition : 2 Les structures de contrôle conditionnelles permettent à un programme de modifier son traitement en fonction d’une condition.
02/02/2019Module Compilation1. Introduction:  petite historique sur flex/lex  définitions de l’outil flex/lex  l’objectif de l’outil flex/lex  Versions.
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels
CSI 3505 Algorithmes Voraces
H. Wertz -- Exécution Symbolique
RABAH M ed Ali 2018/2019
Recherche de zero d'une fonction MARMAD ANAS MPSI -2.
Piles et files.
Introduction à L’Informatique
INTELLIGENCE ARTIFICIELLE
IFT 615 – Intelligence artificielle Consignes pour l’examen final
Transcription de la présentation:

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

IFT313© Froduald Kabanza2 Rappel

IFT313© Froduald Kabanza3 Sujet couvert Convertir un automate fini non-déterministe en un automate fini. déterministe. Simuler un AFN

IFT313© Froduald Kabanza4 Références [1] Sudkamp, T. A.. Languages and Machines. Third Edition Edition. Addison-Wesley, – Sections 5.6. [2] Appel, A. and Palsberg. J. Modern Compiler Implementation in Java. Second Edition. Cambridge, – 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, – Sections à 3.7.3

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.

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.

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.

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

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) a a ε a b [ab] a b b {1,3} [ab] {4} {1,2,3} a {1} {3} a {1,2} b a b

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})

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

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

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

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.  ndnd

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)  ndnd

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 ’ ; }}

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.

IFT313© Froduald Kabanza18 Exemple (AFN) i f IF ε ε ε a z ERROR any character ε ε ε ε ε ε [a-z] [0-9] ID NUM......

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

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.

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.

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

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.

IFT313© Froduald Kabanza24 Vous devriez être capable de Écrire un automate fini déterministe correspondant à un automate fini non déterministe. Simuler un AFN.

IFT313© Froduald Kabanza25 Prochaine leçon  Minimiser un AFD