Rappel Modle analysesynthse de la compilation code source

  • Slides: 20
Download presentation
Rappel Modèle analyse-synthèse de la compilation code source position = initial + rate *

Rappel Modèle analyse-synthèse de la compilation code source position = initial + rate * 60 Analyseur lexicale (scanner) unités lexicales id 1 = id 2 + id 3 * 60 (token) table de symboles position id 1 initial id 2 rate id 3 Analyseur syntaxique (parser) arbre syntaxique = + * id 1 id 2 IFT 313 © Froduald Kabanza 60 id 3 1

Rappel Modèle analyse-synthèse de la compilation Chacun des éléments du lexique est décrit par

Rappel Modèle analyse-synthèse de la compilation Chacun des éléments du lexique est décrit par une expression régulière code source position = initial + rate * 60 Analyseur lexicale (scanner) L’analyseur lexical est un automate à états fini déterministe unités lexicales id 1 = id 2 + id 3 * 60 (token) Nous avons donc besoin de : 1. Convertir une expression régulière en un AFN 2. Convertir un AFN en AFD 3. Optimiser l’AFD IFT 313 © Froduald Kabanza 2

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière en un automate à états fini non déterministe IFT 313 © Froduald Kabanza 3

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière en un automate à états fini non déterministe IFT 313 © Froduald Kabanza 4

Expression régulières 1 ε (ou ‘’) : L’expression régulière ε représente le langage {ε}

Expression régulières 1 ε (ou ‘’) : L’expression régulière ε représente le langage {ε} (ou {‘’}) 2 symbole (caractère) : Pour chaque symbole (caractère) a dans l’alphabet, l’expression régulière a représente le langage {a}, c-à-d. , le langage contenant juste le mot a. - Étant donnés les expressions régulières r et s représentant, respectivement, les langages L(r) et L(s) : 3 r|s (alternation) est une expression régulière représentant L(r) U L(s). 4 rs (concaténation) est une expression régulière représentant L(r)L(s). 5 r* (zéro ou plusieurs répétitions) représente (L(r))*. 7 (r) est une expression régulière représentant L(r). IFT 313 © Froduald Kabanza 5

Exemples expressions régulières · ((a|b)a)* spécifie le langage de mots de longueur paire terminés

Exemples expressions régulières · ((a|b)a)* spécifie le langage de mots de longueur paire terminés par un ‘a’ { ‘’, aa, ba, aaaa, baaa, aaba, baba, aaaaaa, …} · (0|1)*0 spécifies l’ensemble de nombres binaires qui sont des multiples de 2. IFT 313 © Froduald Kabanza 6

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière en un automate à états fini non déterministe IFT 313 © Froduald Kabanza 7

Automates à états finis Un automate à états finis, ou automate fini (AF) tout

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). Entrée if (rate >= 0) …… Tête de lecture w 1 AF IFT 313 2 h 3 i © Froduald Kabanza . . . 4 IF f 8

Définition formelle Un automate fini M est un tuple M = (S, A, R,

Définition formelle Un automate fini M est un tuple M = (S, A, R, s 0, F) : - A est un ensemble de symboles (l’alphabet) - S est un ensemble fini d’états - R est soit: + Une relation de transition R : S × A* ® 2 S pour les automate fini non déterministe (AFN) + Une fonction de transition R: 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) IFT 313 © Froduald Kabanza 9

Exemple [0 -9] 1 “” 5 “” IFT 313 0 0 0. . 9

Exemple [0 -9] 1 “” 5 “” IFT 313 0 0 0. . 9 2 2 3 3 0 [0 -9] NUM 4 3 [0 -9] SPACE a. . z 1 2 3 4 5 . 2 . . 4 3 0 0 0 © Froduald Kabanza “ ” 5 0 0 0 5 REAL other 0 0 0 10

Simuler un AFD Algorithme I : DFASimualtor (Simulateur d’AFD ou Pilote. AFD) - Entrée

Simuler un AFD Algorithme I : DFASimualtor (Simulateur d’AFD ou Pilote. AFD) - Entrée : + Chaîne de symboles input terminée par EOF (fin de fichier). + AFD D, avec la matrice de transitions trans, état initial s 0 (initial. State), et états accepteurs F - Sortie : True if D accepts x; False otherwise. - Approche : + Suivre la fonction de transition trans. + Utiliser input. next. Char() pour lire la prochaine caractère dans input. IFT 313 © Froduald Kabanza 11

Code de l’algorithme current. State = D. initial. State; current. Input. Position = 0;

Code de l’algorithme current. State = D. initial. State; current. Input. Position = 0; current. Char = input. next. Char(); current. Input. Position++; while ((current. Char!=EOF) && (current. State !=0 ) ) { current. State = D. trans[current. State][current. Char]; current. Char = input. next. Char(); current. Input. Position++; } if in(current. State, D. F) && (current. Char == EOF)) return TRUE; else return FALSE; IFT 313 © Froduald Kabanza 12

Exemple de trace Entrée : current Input Position State 0 1 2 3 4

Exemple de trace Entrée : current Input Position State 0 1 2 3 4 1 2 2 3 3 Retourne TRUE (accepte l’entrée) parce qu’il termine dans un état accepteur et toute l’entrée est lue. IFT 313 [0 -9] 9 7. 5 EOF [0 -9] 2 . “” 5 [0 -9] NUM 1 “” . 4 3 REAL [0 -9] SPACE ‘‘ [0 -9] ‘. ’ 1 5 2 4 2 0 2 3 3 0 4 0 3 0 5 5 0 0 © Froduald Kabanza 13

Reconnaître des tokens - L’algorithme précédent accepte ou rejette un chaîne de caractères. -

Reconnaître des tokens - L’algorithme précédent accepte ou rejette un chaîne de caractères. - La tâche d’un analyseur lexical n’est pas juste d’accepter ou rejeter des chaînes de caractères. - Il doit trouver la plus longue sous-chaîne de l’entrée correspondant à une expression régulière (longest match). - On peut étendre l’algorithme précédent pour garder une trace de la plus longue sous-chaîne acceptée, en introduisant des variables additionnelles. IFT 313 © Froduald Kabanza 14

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière

Rappel • Expressions régulières • Automates à états finis • Conversion d’une expression régulière en un automate à états fini non déterministe IFT 313 © Froduald Kabanza 15

Algorithme Reg. Exp. To. NFA - Entrée : Une expression régulière r sur un

Algorithme Reg. Exp. To. NFA - 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 l’AFN pour L(u) en combinant les AFNs pour L(r), L(s), L(a), L(b), … + On peut ensuite optimiser l’AFN obtenu. IFT 313 © Froduald Kabanza 16

Cas de base 1. Pour ε, construire l’AFN : i tel que i est

Cas de base 1. Pour ε, construire l’AFN : i tel que i est un nouvel état initial et accepteur. 2. Pour chaque symbole a de l’alphabet, construire l’AFN : i a f Là aussi i et f sont de nouveaux états. IFT 313 © Froduald Kabanza 17

Cas récursifs 3. Pour l’expression régulière rs, construire l’AFN N(rs) : r ε ε

Cas récursifs 3. Pour l’expression régulière rs, construire l’AFN N(rs) : r ε ε s ε 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). IFT 313 © Froduald Kabanza 18

Cas récursifs 4. Pour l’expression régulière r|s, construire l’AFN N(r|s) : r ε i

Cas récursifs 4. Pour l’expression régulière r|s, construire l’AFN N(r|s) : r ε i ε 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). IFT 313 © Froduald Kabanza 19

Cas récursifs 5. Pour l’expression régulière r*, construire l’AFN N(r*) : i ε r

Cas récursifs 5. Pour l’expression régulière r*, construire l’AFN N(r*) : i ε r ε ε ε C-à-d: On crée un nouvel état initial i avec une transition ε à l’ancien état initial de N(r), ainsi que des transitions des états finaux de N(r) à l’ancien état initial de N(r). IFT 313 © Froduald Kabanza 20