La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313."— Transcription de la présentation:

1 IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313 Automates finis

2 IFT313© Froduald Kabanza2 Sujets couverts Automates finis. Reconnaître des tokens avec un automate fini.

3 IFT313© Froduald Kabanza3 Objectifs Être capable décrire une automate fini acceptant un langage donné. Être capable de programmer un automate fini reconnaissant les tokens dun langage donné.

4 IFT313© Froduald Kabanza4 Références [1] Sudkamp, T. A.. Languages and Machines. Third Edition Edition. Addison-Wesley, – Sections 5.1 à 5.5. [2] Appel, A. and Palsberg. J. Modern Compiler Implementation in Java. Second Edition. Cambridge, – Sections 2.3 [3] Wolper, P. Introduction à la calculabilité, 3è édition. Dunod, 2006 –Sections 2.1 à 2.5 [4] Aho, A., Lam, M., Sethi R., Ullman J. Compilers: Principles, Techniques, and Tools, 2 nd Edition. Addison Wesley, – Sections 3.6

5 IFT313© Froduald Kabanza5 Automates à états finis Un automate à états finis, ou automate fini (AF) tout court, est un modèle très simple de programme ayant : une entrée de chaîne de symboles (caractères), un ensemble fini détats, des transitions entre les états en fonction des symboles lus, et un état initial un ensemble détats accepteurs (appelés aussi états finaux). if (rate >= 0) …… Entrée i f IF w h AF Tête de lecture

6 IFT313© Froduald Kabanza6 Définition formelle Un automate fini M est un tuple M = (S,A,R,s0, F) : A est un ensemble de symboles (lalphabet) S est un ensemble fini détats R est soit: Une relation de transitionR : S × A* 2 S pour les automate fini non déterministe (AFN) Une fonction de transitionR : S × A S pour les automates finis déterministes (AFD) s 0 est létat initial (appartenant dans S) F est un ensemble finaux détats (appartenant dans S)

7 IFT313© Froduald Kabanza7 Langage accepté par un automate La trace dexécution dun automate est la séquence détats quil traverse en lisant son entrée. Un automate accepte son entrée sil existe une exécution telle que lautomate génère une trace terminant par un état accepteur et toute lentrée est lu. Pour un automate non déterministe il y a plusieurs exécution potentielles: Un tel automate accepte son entrée si une telle exécutions terminant par un état accepteur et toute lentrée est lu. Le langage accepté par un automate est lensemble des mots acceptés par lautomates.

8 IFT313© Froduald Kabanza8 Exemples 12 [a-z] [0-9] ID : REAL : [0-9].. NUM : 1 2 [0-9]

9 IFT313© Froduald Kabanza9 Exemples 14 / \n\n Commentaires, espaces, \n, \t : 23 / [a-z] 5, \n, \t

10 IFT313© Froduald Kabanza10 Exemple : automate combiné i f ID IF 4 [0-9a-z] ID [a-eg-z0-9] [0-9a-z] 11 / \n\n 9 10 / Comments Error [a-z] 12, \n, \t, \n, \t white space 13 Error 56 [0-9] REAL [0-9] Error other 7 8 [0-9] REAL [0-9] NUM.. [0-9] [a-hj-z]

11 IFT313© Froduald Kabanza11 Implémenter un AFD AFD = Automate fini déterministe La composante principale dun AFD est sa fonction de transition. Elle est facilement implémentée par un tableau à deux dimensions indexé par les états (des nombres) et lalphabet. Par exemple si on met les états en lignes et lalphabet en colonne trans[s][a] est létat successeur de s sous la transition a

12 IFT313© Froduald Kabanza12 Exemple a..z other [0-9].. REAL NUM [0-9] 5 SPACE

13 IFT313© Froduald Kabanza13 Implémenter un AFD En pratique lAFD sera calculé par un générateur danalyseur lexical tel que JFLEX, à partir dun ensemble dexpressions régulières, du genre : ( )+ { /* ignore */} [0-9]+ {return new Token(…);} ([0-9]+.[0-9]*) | (.[0-9]+) {return new Token(…);}

14 IFT313© Froduald Kabanza14 Implémenter un AFD Lautomate global est une combinaison des automates individuels 2 1 SPACE ( )+ 2 1 NUM [0-9] [0-9] [0-9].. REAL [0-9] ([0-9]+.[0-9]*) | (.[0-9]+)

15 IFT313© Froduald Kabanza15 Simuler un AFD Algorithme I : DFASimualtor (Simulateur dAFD ou PiloteAFD) Entrée : Chaîne de symboles input terminée par EOF (fin de fichier). AFD D, avec la matrice de transitions trans, état initial s0 (initialState), et états accepteurs F Sortie : True if D accepts x; False otherwise. Approche : Suivre la fonction de transition trans. Utiliser input.nextChar() pour lire la prochaine caractère dans input.

16 IFT313© Froduald Kabanza16 Code de lalgorithme currentState = D.initialState; currentInputPosition = 0; currentChar = input.nextChar(); currentInputPosition++; while ((currentChar!=EOF) && (currentState !=0 ) ) { currentState = D.trans[currentState][currentChar]; currentChar = input.nextChar(); currentInputPosition++; } if in(currentState, D.F) && (currentChar == EOF)) return TRUE; else return FALSE;

17 Exemple de trace Entrée : EOF Retourne TRUE (accepte lentrée) parce quil termine dans un état accepteur et toute lentrée est lue. current State current Input Position [0-9].. REAL NUM [0-9] 5 SPACE [0-9] IFT313© Froduald Kabanza17

18 IFT313© Froduald Kabanza18 Reconnaître des tokens Lalgorithme précédent accepte ou rejette un chaîne de caractères. La tâche dun analyseur lexical nest pas juste daccepter ou rejeter des chaînes de caractères. Il doit trouver la plus longue sous-chaîne de lentrée correspondant à une expression régulière (longest match). On peut étendre lalgorithme précédent pour garder une trace de la plus longue sous-chaîne acceptée, en introduisant des variables additionnelles.

19 IFT313© Froduald Kabanza19 Reconnaître des tokens Garder une trace de la plus longue sous-chaîne acceptée revient à mémoriser la dernier état accepteur visité par lAFD. Cela est fait en introduisant les variables suivantes : initialInputPosition : position initiale de la tête de lecture; LastFinal : Plus récent état accepteur visité; inputPositionAtLastFinal : position dans la chaîne dentrée lorsque lAFD était dans cet état. text : sous-chaîne entre initialInputPosition (left) et inputPositionAtLastFinal (right). Cest le texte du token. La plus longue sous-chaîne acceptée (longuest match), c-à-d., le token est reconnu, lorsque lAFD atteint un cul-de-sac (c-à-d., état 0)

20 IFT313© Froduald Kabanza20 Reconnaître des tokens Chaque fois quun token est reconnu, lAFD recommence dans son état initial pour reconnaître le prochain token. En général, lorsquun token est reconnu, currentInputPosition peut être au- delà de inputPositionAtLastFinal. Il faut donc réinitialiser currentInputPosition En plus, il faut spécifier une table dactions à effectuer dans les états accepteurs lorsquun token est reconnu. Ces actions sont du code Java. Action[d] donne le code pour létat d.

21 IFT313© Froduald Kabanza21 Exemple a..z other [0-9].. REAL NUM [0-9] 5 SPACE

22 IFT313© Froduald Kabanza22 Reconnaître des tokens - Actions A[1] = {/* ignore */} A[2] = {return new Token(Token.NUM, text, left, right);} A[3] = {return new Token (Token.REAL, text, left, right);} [0-9].. REAL NUM [0-9] 5 SPACE

23 IFT313© Froduald Kabanza23 Reconnaître des tokens Token est une classe Java. Son constructeur accepte comme arguments : type NUM or REAL String text: texte du texte dentrée correspondant au token. intleft: position de début (initialInputPosition) intright : position de fin (inputPositionAtLastFinal)

24 IFT313© Froduald Kabanza24 Exemple Input : EOF text = substring(0,4) = 97.5 lastFinal State current State current Input Position initialInput Position (left) inputPosition AtLastFinal State (right) Action A[3] [0-9].. REAL NUM [0-9] 5 SPACE 0 ungetChar() => initialInputPosition = 4

25 IFT313© Froduald Kabanza25 Exemple (suite) text = substring(start,end) = substring(4,5) = lastFinal State current State current Input Position initialInput Position (left) inputPosition AtLastFinal State (right) Action A[5] [0-9].. REAL NUM [0-9] 5 SPACE Input : EOF 0 ungetChar() => InitialInputPosition = 5

26 IFT313© Froduald Kabanza26 text = substring(start,end) = substring(5,6) = 7 lastFinal State current State current Input Position initialInput Position (left) inputPosition AtLastFinal State (right) Action A[2] Exemple (suite) Input : EOF [0-9].. REAL NUM [0-9] 5 SPACE 0

27 IFT313© Froduald Kabanza27 Résumé Un AFD est un outil opérationnel pour reconnaître des tokens. Pour cela, il faut reconnaître la plus longue sous-chaîne de lentrée, acceptée par lautomate. Une partie du devoir 1 consiste à implémenter lalgorithme de reconnaissance de tokens par un AFD. Mais les AFD peuvent être complexes à spécifier. Les expressions régulières sont plus simples. Il nous faut une méthode pour traduire une expression régulière en un automate fini. La suite du cours explique comment : Convertir une expression en un AFN Convertir un AFN en un AFD. Simuler un AFN pour reconnaître des tokens.


Télécharger ppt "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313."

Présentations similaires


Annonces Google