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 Expressions régulières

2 IFT313© Froduald Kabanza2 Sujets couverts Rôle de lanalyseur lexical Langages réguliers Expressions régulières

3 IFT313© Froduald Kabanza3 Objectifs Savoir ce quun langage régulier. Être capable décrire une expression régulière décrivant un langage donné. Être capable de faire une recherche dans un fichier texte en utilisant grep. Être capable décrire un programme cherchant des patterns dans un fichier texte avec regex.

4 IFT313© Froduald Kabanza4 Rôle de lanalyseur lexical Nous avons vu que la phase analyse dun compilateur comprend: +Lanalyse lexicale : diviser le code source en une suite dunités lexicales (tokens). +Lanalyse syntaxique : analyser la structure grammaticale du code source (de la suite de tokens) +Analyse sémantique : déterminer le sens du code source.

5 IFT313© Froduald Kabanza5 Rôle de lanalyseur lexical Lanalyseur lexical lit une séquence de caractères et produit une séquence de tokens. En même temps, lanalyseur lexical produit une table de symboles. Code source Analyseur lexical Analyseur lexical Analyseur syntaxique Analyseur syntaxique Analyseur sémantique Analyseur sémantique Table de symboles token next token Code cible

6 IFT313© Froduald Kabanza6 Quest-ce quune unité lexicale (token) ? Un token (unité lexicale) est une séquence de caractères pouvant être traitée comme une unité dans la grammaire dun langage de programmation. Exemples: Type de token Séquence de caractères IDx, rate, position NUM60, 10 REAL60.0 IFif WHILEwhile SEMI; LPAREN( RPAREN) ASSIGN=

7 IFT313© Froduald Kabanza7 Quest-ce quune unité lexicale (token) ? Les tokens comme IF, WHILE sont des mots-clés. Les mots-clés sont souvent réservés. Les tokens dun langage de programmation incluent les identificateurs, les mots-clés, les nombres et les séparateurs ou terminaisons dinstructions (par exemple, ; /*) Les tokens sont les symboles terminaux dune grammaire dune langage de programmation. En général, un analyseur lexical ignore les espaces blancs (espaces, sauts de lignes et tabulation) entre les tokens et les commentaires.

8 IFT313© Froduald Kabanza8 Chaîne de caractères unités lexicales int a = 34; // commentaire double /* commentaire */ b= f; { ligne=1, pos=1} { ligne=1, pos=5, name=a} { ligne=1, pos=7} { ligne=1, pos=9, value=34} { ligne=2, pos=12} { ligne=2, pos=25, value=b} { ligne=2, pos=26} { ligne=2, pos=30, value=34.39}

9 IFT313© Froduald Kabanza9 Quest-ce quune unité lexicale (token) ? Nous allons spécifier les tokens dun langage de programmation en utilisant une notation formelle appelée le langage des expressions régulières. Nous allons implémenter les analyseurs lexicaux qui reconnaissent de tels tokens en utilisant des outils formels appelés automates (à états) finis. La théorie des langages réguliers nous permettra détablir une correspondance entre les deux formalismes.

10 IFT313© Froduald Kabanza10 Langages Le code source est une séquence de caractères (symboles), y compris les espaces, tabulations, sauts de lignes, etc. Lensemble de tous les caractères possibles (symboles) est appelé un alphabet. Un langage est un ensemble de mots ou chaînes de caractères (possiblement infini) formé à partir dun alphabet, selon une syntaxe bien précise.

11 IFT313© Froduald Kabanza11 Opérations sur les langages Il y a plusieurs opérations quon peut effectuer avec les langages. Soit L et M deux langages. L U M = {s | s is in L or s is in M} union L = {s | s is not in L } complément LM= {s | s= ss for s in L and s in M } concaténation L * ={s | ss for s and s in L U {ε}} Étoile (ou fermeture) de Kleen (ε représente la chaîne vide ). L + =LL * Une ou plusieurs répétitions de L …

12 IFT313© Froduald Kabanza12 Exemples dopérations sur les langages Soit L = {A,B, …, Z, a,b,…,z} Soit D = {0,1,…,9} Alors +L * est lensemble des mots formé de lettres, y compris la chaîne vide ε (aussi noté ). +L(L U D) * est lensemble de chaînes alphanumériques commençant par une lettre. +DD * est lensemble des entiers positifs.

13 IFT313© Froduald Kabanza13 Cest quoi un langage régulier ? Un langage régulier est un langage défini sur un alphabet fini en utilisant les opérations précédentes: union, concaténation, complément et fermeture de Kleen. Nous verrons bientôt dautres définitions équivalentes : Un langage régulier est celui défini par une expression régulière. Un langage régulier est celui accepté par un automate fini. Un langage régulier est celui généré par une grammaire régulière.

14 IFT313© Froduald Kabanza14 Expression régulières Lensemble de tokens dun langage de programmation est un langage régulier. Pour le spécifier à un générateur danalyseurs lexicaux, comme JFLEX, on utilise une notation dexpressions régulières. Chaque expression régulière r dénote un langage régulier L(r), selon les règles suivantes :

15 IFT313© Froduald Kabanza15 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).

16 IFT313© Froduald Kabanza16 Exemples expressions régulières ((a|b)a)* spécifie le langage {, aa, ba, aaaa, baaa, aaba, baba, aaaaaaa, … } (0|1)*0 spécifies lensemble de nombres binaires qui sont des multiples de 2.

17 IFT313© Froduald Kabanza17 Autres notations dexpressions régulières r+ rr* r? r| ε [a b c] (a|b|c) [a-g] a|b|…|f|g [^s] complément de lensemble ^ début de ligne $ fin de ligne ab la chaîne ab. Nimporte quelle caractère sauf \n [a-zA-Z][a-zA-Z0-9]* : chaîne alphanumérique commençant par une lettre. [0-9]+ : un nombre entier positif. Examples

18 IFT313© Froduald Kabanza18 Outils utilisant des expressions régulières grep regex (devoir 1) regex JFLEX (devoir 2)

19 IFT313© Froduald Kabanza19 Exemple de spécification pour JFLEX Une spécification typique de JFLEX décrit des expressions régulières annotées de code Java pour traiter et renvoyer le token au parser.

20 IFT313© Froduald Kabanza20 Résumé Nous utiliserons des expressions régulières pour décrire les tokens du langages que nous voulons analyser, compiler, traduire ou traiter autrement. Pour la tâche de reconnaissance de tokens, les expressions régulières sont très appropriées. Elles décrivent ce quil faut reconnaître pour isoler un token, plutôt que comment les reconnaître. Toutefois, pour que le scanner puisse effectivement reconnaître les tokens, nous avons besoin dun outil formel procédural, pouvant être implémenté comme un programme. Pour cela, nous utiliserons les automates à états finis. Les expressions régulières sont aussi utiles pour faire une recherche dans un fichier de texte, avec des outils tels que grep et regex et des éditeurs tels que emacs.


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