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

IFT451 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: "IFT451 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313."— Transcription de la présentation:

1 IFT451 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313 Convertir un expression régulière en un AFN

2 IFT313© Froduald Kabanza2 Sujet couvert Convertir une expression régulière en automate fini.

3 IFT313© Froduald Kabanza3 Objectif Être capable décrire un automate fini acceptant le langage décrit par une expression régulière donnée.

4 IFT313© Froduald Kabanza4 Références [1] Sudkamp, T. A.. Languages and Machines. Third Edition Edition. Addison-Wesley, – Sections 6.1 à 6.2. [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.7 [4] Aho, A., Lam, M., Sethi R., Ullman J. Compilers: Principles, Techniques, and Tools, 2 nd Edition. Addison Wesley, – Section 3.7.4

5 IFT313© Froduald Kabanza5 Pourquoi la conversion ? Les expressions régulières sont souvent plus faciles à décrire, mais plus compliquées à implémenter directement. Les automates finis non déterministes (AFN) sont utiles parce quil est très facile de convertir une expression régulière en AFN. Ceci nous donne deux chois pour coder un analyseur lexical (scanner) à partir dune expression régulière : a.Convertir lAFN en AFD et utiliser un pilote (driver) de AFD. b.Utiliser un pilote (driver) de AFN. Nous voyons la première approche en détail. La deuxième approche est laissée comme exercice.

6 IFT313© Froduald Kabanza6 Algorithme RegExpToNFA Entrée : Une expression régulière r sur un alphabet A Sortie : Un AFN acceptant L(r). Méthode : Pour chaque expression régulière r de base (c-à-d., ε ou un élément de A), il existe un AFN très simple pour L(r). Pour chaque expression régulière plus complexe, u, (par exemple: rs, r|s, r*, r+, [abc], [a-z],…), on obtient lAFN pour L(u) en combinant les AFNs pour L(r), L(s), L(a), L(b), … On peut ensuite optimiser lAFN obtenu.

7 IFT313© Froduald Kabanza7 Cas de base 1.Pour ε, construire lAFN : tel que i est un nouvel état initial et accepteur. 2.Pour chaque symbole a de lalphabet, construire lAFN : Là aussi i et f sont de nouveaux états. i i f a

8 IFT313© Froduald Kabanza8 Cas récursifs Soit N(r) et N(s) les automates pour les expressions régulières r et s : Pour les cas récursifs, nous avons besoin de manipuler explicitement uniquement les états initiaux et finis des automates à combiner. rs

9 IFT313© Froduald Kabanza9 Cas récursifs 3.Pour lexpression régulière rs, construire lAFN N(rs) : C-à-d.: Létat initial de N(rs) est létat initial de N(r) et les états finaux de N(rs) sont les états finaux de N(s). Ensuite, il faut ajouter des transitions ε partant des états finaux de N(r) vers létat initial de N(s). r s ε ε ε

10 IFT313© Froduald Kabanza10 Cas récursifs 4.Pour lexpression régulière r|s, construire lAFN N(r|s) : C-à-d.: on crée un nouvel état i, avec des transitions ε aux états initiaux de N(r) et N(s). Les états finaux de N(rs) sont ceux de N(r) et N(s). r s ε ε i

11 IFT313© Froduald Kabanza11 Cas récursifs 5.Pour lexpression régulière r*, construire lAFN N(r*) : C-à-d: On crée un nouvel état initial i avec une transition ε à lancien état initial de N(r), ainsi que des transitions des états finaux de N(r) à lancien état initial de N(r). i ε ε ε ε r

12 IFT313© Froduald Kabanza12 Autres expressions 6.Pour r+, construire N(r+) comme N(rr*). 7.For r?, construire N(r?) comme N(r| ε ). 8.For abc, construire N(abc) comme N(a(bc)). 9.Finalement pour [abc], construire N([abc]) comme N(a|(b|c)). En général, pour les abréviations, utilisez la définition correspondante.

13 IFT313© Froduald Kabanza13 Exemple r = if 1 2 i I N(i) : 3 4 f F N(f) : 1 2 i 3 4 f IF ε N(if) : 1 2 i 3 f IF Après simplification :

14 IFT313© Froduald Kabanza14 Exemple r = [0-9]+ | [0-9]*.[0-9] ε ε ε N([0-9]), après simplifications : N([0-9]*), après simplifications :

15 IFT313© Froduald Kabanza15 Exemple (suite) r = [0-9]+ | [0-9]*.[0-9] ε ε ε ε ε NUM ε REAL. Ainsi de suite … À la fin on obtient : [0-9].. REAL NUM [0-9]

16 IFT313© Froduald Kabanza16 Résumé Il est facile de traduire une expression régulière en un AFN La méthode quon vient de voir nest pas optimale. Il existe des approches plus efficaces. On peut formellement démontrer que la méthode précédente est correcte. (Laissé comme exercice). Donc pour toute expression régulière il existe un AFN qui accepte le langage décrit par lexpression. Linverse est vrai aussi (Laissé comme exercice).

17 IFT313© Froduald Kabanza17 Leçon suivante Nous venons de voir comment générer un AFN à partir dune expression régulière. Létape prochaine est de voir la construction dun AFD correspondant à un AFN. Nous savons déjà comment programmer un scanner en utilisant un AFD (Devoir 1). La construction dun AFD à partir dun AFN nous permettra donc dimplémenter des scanners à partir des expressions régulières. Lalternative est de scanner en utilisant un AFN directement. Nous aborderons ce sujet sommairement.


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

Présentations similaires


Annonces Google