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

02/02/2019Module Compilation1. Introduction:  petite historique sur flex/lex  définitions de l’outil flex/lex  l’objectif de l’outil flex/lex  Versions.

Présentations similaires


Présentation au sujet: "02/02/2019Module Compilation1. Introduction:  petite historique sur flex/lex  définitions de l’outil flex/lex  l’objectif de l’outil flex/lex  Versions."— Transcription de la présentation:

1 02/02/2019Module Compilation1

2 Introduction:  petite historique sur flex/lex  définitions de l’outil flex/lex  l’objectif de l’outil flex/lex  Versions d’outil flex/lex 02/02/2019Module Compilation2

3 utilisation de flex:  Structure de fichier  Quelque variables et directives spéciaux  Commands flex/lex et la compilation d’ un fichier flex/lex 02/02/2019Module Compilation3

4 Conclusion:  Résumé sur l’outil flex/lex. 02/02/2019Module Compilation4

5 Quelque notion importantes pour comprendre la suite: (mécanisme de flex/lex) 02/02/2019Module Compilation5 Analyse lexical Unité lexical Grammaire lexical Lexème

6 Voici ce schéma qui montre les phases de compilation : 02/02/2019Module Compilation6

7 7 Code source Code cible Analyseur lexical Analyseur syntaxique Analyseur sémantique Générateur de code intermédiare Optimiser le code Génération le code Gestion de la table de symboles Traitement des erreurs

8 Module Compilation8 Code source Code cible Analyseur lexical Analyseur syntaxique Analyseur sémantique Générateur de code intermédiare Optimiser le code Génération le code Gestion de la table de symboles Traitement des erreurs Nous s’intéréssons ici de cette phase

9 l’analyse lexical? Fait partie de la première phase de la chaine de compilation,elle cosiste à convertir une chaine de caractère en un liste de symboles (token en anglais),ces symboles ensuite consomées de l’analyse syntaxique (deuxéme phase de la compilation) Un programme qui réalise une analyse lexical est appelé un analyseur lexical (tokenizer) ce dernier est généralement combiné avec un analyseur syntaxique pour analyser la syntaxe d’un texte. 02/02/2019Module Compilation9

10 Lexème? Est une suite de caractères dans un programme source qui correspond au motif d’un symbole lexical et qui est analysé par un analyseur lexical comme une instance de ce symbole lexical c-à-d: 02/02/2019Module Compilation10 lexème Symbole lexical Analyseur lexical appartient Analysé un instance

11 02/02/2019Module Compilation11 Nom (catégorie)Valeur IdentifiantX; couleurs; up; Mots-clésIf while return Ponctuation } ( ; Opération + - = / LittérauxTrue false …. commentaire//en ligne /*en bloc Unité lexical? C’est une couple composée d’un nom(catégorie)et son valeur qui est optionnel;

12 02/02/2019Module Compilation12 Grammaire lexical? Les langages de programmation déffinissent souvent des règles sous la forme d’un grammaire ce dèrnier déffinissant la syntaxe à adopter ces règles et qui prennent souvent la forme d’expresions régulières et déffinissent les séquences de caractères utilisées pour former des lexème.

13 L’analyseur lexical lit les caractères de l’entrée un à un afin de séparer les unités lexicales : séparateurs, commentaires, mots clés ; identificateurs, entiers, réels, symboles,... Ces unités correspondent à des expressions régulières. Ainsi, les symboles appartiennent à un ensemble fini de caractères, et les identificateurs correspondent par exemple à une suite finie de lettres. 02/02/2019Module Compilation13 Analyseur lexical?

14 L’analyse lexicale correspond à la détection de ces unités lexicales. Pour cela, l’ensemble des unités lexicales reconnaissables est donné au générateur d’analyseur lexical(comme l’outil flex) par le biais d’une grammaire composée d’expressions régulières. Cette grammaire distingue donc un nombre fini de classes d’unités lexicales, encore appelées lexèmes (token en anglais). 02/02/2019Module Compilation14

15 Analyseur lexical? On retient ensuite, pour chaque unité lexicale reconnue, sa valeur et sa classe qui seront utilisées dans la construction de l’arbre de syntaxe. Exemples : le mot-clef "int" (INT) correspond à la chaîne int ; un entier (DIGIT) est donné par : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 un identificateur (ID) est donné par : a,..., z, A,..., Z + 02/02/2019Module Compilation15

16 Petite historique sur flex/lex Définitions de l’outil flex/lex L’objectif de l’outil flex/lex Version de l’outil flex/lex Introduction 02/02/2019Module Compilation16

17 Introduction  Définition d’outil flex: flex est une version libre de l’analyseur lexical lex.il est généralement associé à l’ analyseur syntaxique GNU Bison. flex est un outil pour générer des analyseurs ; sont des programmes qui reconnaisent des motifs lexicaux dans une texte (on les vue déjà). 02/02/2019Module Compilation17

18 Introduction  Petite historique sur l’outil flex:  l’outil flex/lex a été dévloppé en 1975 aux laboratoires Bell.  A l’origine un outil de Unix, aujourd'hui aussi pour Windows  A l’origine pour C, Aujourd’hui aussi pour Java  Coopère généralement avec Yacc (générateur d’analyseur syntaxique) 02/02/2019Module Compilation18

19 Introduction  L’objectif d’outil flex: Le seul objectif qui est très importante est : flex a pour but de programmer des analyseur lexicaux en s’affrenchissant totalement les problèmes de création et de gestion des automates (le cas qui est très compliqué si on la fait manuelement). 02/02/2019Module Compilation19

20 Introduction  Versions d’outil flex: Les version les plus populaires et qui sont disponibles actuellement sont: flex version pour GNU Lex (utilise langage C). jLex version java (légères différences dans la syntaxe). CsLex version dérivé de jLex (utilise C #). 02/02/2019Module Compilation20

21 Structure de fichier flex/lex Quelque variables et directives spéciaux Commands flex/lex et la compilation d’ un fichier flex/lex Utilisation de flex 02/02/2019Module Compilation21

22 utilisation de flex  Structure de fichier flex/lex: La structure d’un fichier flex/lex peut décomposée sur trois partie comme le schéma suivante montre: %{ Partie1: // déclaration en C %} //déclaration flex/lex % Partie2: //les règles de traduction % Partie3 : //code C additionnel 02/02/2019Module Compilation22

23 utilisation de flex  Structure de fichier flex/lex: Pour le code additionnel, ainsi que pour les méthodes utilisées dans les règles de traductions. nous utilisant le langage C. partie1 (déclaration): Ici nous retrouverons les déclarations, dans notre langage C,entourées par( %{%}) Tout ce que nous écrivons entre ces accolades sera placé dans le fichier « lex.yy.c » Remarque : Nous pouvons utiliser cette première partie du fichier lex pour définir des notations raccourcis pour des expressions régulières que nous utilisons par la suite, entourées par des accolades. 02/02/2019Module Compilation 23

24 Utilisation de flex  Structure de fichier flex/lex: partie2 (production): Contient les règles de traduction de la grammaire, chaque règle était composèe d’un production suivie la plus souvent par l’action sémantique qui correspond. Elles sont de la forme suivante : M 1 {action 1} M 2 {action 2} … M n {action n} 02/02/2019Module Compilation 24 Suite d’instruction en C qui décrivent ce que l’analyseur lexical doit faire lorsqu’il reconnaît un lexème Les expressions régulières de lex

25 Utilisation de flex  Structure de fichier flex/lex: Expressions régulières étendues : méta(spésiaux)-opérateurs : [ ] - + ? * ^ " " \ Exemples : les entiers: [0-9]+ les identificateurs C: [a-zA-Z_] [a-zA-Z0-9_]* les commentaires lignes Java: "/ /".* les chaînes de caractères sans " : \" [^"]*\" 02/02/2019Module Compilation 25

26 utilisation de flex  Structure de fichier flex/lex: partie3 (code en C): Ce sont des fonctions C qui sont utilisées pour l’analyse syntaxique. En général, cette partie contient la fonction main(). Toutefois cette partie peut être vide. Dans ce cas, tout se passe comme si on y avait écrit : main() { yylex() } 02/02/2019Module Compilation 26

27 Utilisation de flex  Quelque variables et directives spéciaux : Directive spéciales de lex : ECHO permet de copie yytext dans la sortie de l’analyseur BEGIN suivi d’un nom, place ou démarrage l’analyseur dans l’état souhaité REJECT force l’analyseur à évaluer ‘’la deuxième meilleur règle’’ YYmore() force l’analyseur à concaténer la valeur actuelle de yytext à la prochaine valeur que prendra yytext Unput(c) remplace le caractère c sur le flux d’entrée. YY-FLUSH-BUFFER vide le tampon interne de l’analyseur. YYterminate() normalement appelée lorsque EOF est rencontré, cette directive arrête l’analyseur et renvoie la valeur 0, si tout le texte avait été traité. 02/02/2019Module Compilation 27

28 Utilisation de flex Quelque variables et directives spéciaux : - variablles lex : Char*yytext élément lexical courant Int yyleng taille de l’element lexical courant FILE*YYin fichier à partir du quel lex lit FILE*YYout fichier de sortie (dans le quel lex affiche les ECHO) Int YY-START était courant de démarrage de l’analyseur 02/02/2019Module Compilation 28

29 Utilisation de flex  Commands flex/lex et la compilation d’ un fichier flex/lex : Pour les commandes qui nous utilisons sur flex ;sont des commandes pour compiler des « fichier.l » qui sont succissivement : Flex nom fichier.l Cc lex.yy.c -lfl./a.out Lors de la compilation d’un fichier on doit entrer la commande « flex nom_de fichier.l » Nous obtenons ensuite un nouveau fichier lex.yy.c qui comporte le code compiler par lex. Lex inclut à ce moment le fichier y.tab.c qui a été généré par yacc, on trouve dans ce fichier des différentes déclarations qui facilite l’opération de compilation 02/02/2019Module Compilation 29

30 Utilisation de flex  Commands flex/lex et la compilation d’ un fichier flex/lex : flex/ lex génère ensuite un analyseur lexical dans un fichier « lex.yy.c » aui inclut entre autres la fonction « yylex » cette dèrnière lire le texte en entrée standard lettre par lettre et appliquer les règles définies dans la deuxième partie du programme lex. 02/02/2019Module Compilation 30

31 Conclusion (Résumé) Lex est un outil très populaire qui devient une norme de fait pour la génération d’analyseurs lexicaux. Il prend en entrée les spécifications de utilisateurs sous forme d’expressions régulières et génère(s’il n y a pas d’erreurs) un programme en C contient la table de transition de l’automate d’états finis déterministe minimal et l’algorithme d’analyse lexical. Ce programme en C devra à son tour être compilé avec un compilateur C pour générer l’exécutable de l’analyseur lexical. Lex est un outil très populaire qui devient une norme de fait pour la génération d’analyseurs lexicaux. Il prend en entrée les spécifications de utilisateurs sous forme d’expressions régulières et génère(s’il n y a pas d’erreurs) un programme en C contient la table de transition de l’automate d’états finis déterministe minimal et l’algorithme d’analyse lexical. Ce programme en C devra à son tour être compilé avec un compilateur C pour générer l’exécutable de l’analyseur lexical. 02/02/2019Module Compilation 31

32 Les références : Références: https://www.gaudry.be/langages- flex.html#lex_simple_example. https://docplayer.fr/9163060-Chapitre-4- bases-de-lex.html. http://jflex.de/jflex-black.png https://encryptedtbn0.gstatic.com 02/02/2019Module Compilation 32

33 Entour de flex  L’instalation d’outil flex/lex:  Sur linux: On distinguedeux méthodes: avec connexion: Sans connexion: on suivie les étapes suivantes:  Sur windows: on suivie les étapes suivantes: 02/02/2019Module Compilation33


Télécharger ppt "02/02/2019Module Compilation1. Introduction:  petite historique sur flex/lex  définitions de l’outil flex/lex  l’objectif de l’outil flex/lex  Versions."

Présentations similaires


Annonces Google