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© Froduald Kabanza1 Rappel Modèle analyse-synthèse de la compilation position = initial + rate * 60 Analyseur lexicale (scanner) Analyseur syntaxique.

Présentations similaires


Présentation au sujet: "IFT313© Froduald Kabanza1 Rappel Modèle analyse-synthèse de la compilation position = initial + rate * 60 Analyseur lexicale (scanner) Analyseur syntaxique."— Transcription de la présentation:

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

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

3 Rappel Expressions régulières Automates à états finis Conversion dune expression régulière en un automate à états fini non déterministe IFT313© Froduald Kabanza3

4 Rappel Expressions régulières Automates à états finis Conversion dune expression régulière en un automate à états fini non déterministe IFT313© Froduald Kabanza4

5 IFT313© Froduald Kabanza5 Expression régulières ε (ou ) : Lexpression régulière ε représente le langage { ε } (ou {}) symbole (caractère) : Pour chaque symbole (caractère) a dans lalphabet, lexpression 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) : r|s (alternation) est une expression régulière représentant L(r) U L(s). rs (concaténation) est une expression régulière représentant L(r)L(s). r* (zéro ou plusieurs répétitions) représente (L(r)) *. (r) est une expression régulière représentant L(r).

6 IFT313© Froduald Kabanza6 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 lensemble de nombres binaires qui sont des multiples de 2.

7 Rappel Expressions régulières Automates à états finis Conversion dune expression régulière en un automate à états fini non déterministe IFT313© Froduald Kabanza7

8 IFT313© Froduald Kabanza8 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

9 IFT313© Froduald Kabanza9 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)

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

11 IFT313© Froduald Kabanza11 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.

12 IFT313© Froduald Kabanza12 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;

13 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 Kabanza13

14 IFT313© Froduald Kabanza14 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.

15 Rappel Expressions régulières Automates à états finis Conversion dune expression régulière en un automate à états fini non déterministe IFT313© Froduald Kabanza15

16 IFT313© Froduald Kabanza16 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.

17 IFT313© Froduald Kabanza17 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

18 IFT313© Froduald Kabanza18 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 ε ε ε

19 IFT313© Froduald Kabanza19 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

20 IFT313© Froduald Kabanza20 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


Télécharger ppt "IFT313© Froduald Kabanza1 Rappel Modèle analyse-synthèse de la compilation position = initial + rate * 60 Analyseur lexicale (scanner) Analyseur syntaxique."

Présentations similaires


Annonces Google