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.

Slides:



Advertisements
Présentations similaires
Introduction : Compilation et Traduction
Advertisements

Developpement Process « Coding party !! » Tony Carnal Altran.
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
1 Chapitre 2 La numération binaire. 2 Chapitre 2 : La numération binaire Introduction 1 - Le système binaire 2 - La conversion des nombres entiers 2.1.
Développement à l'Aide de Langages Dynamiques : Smalltalk module IT308: Méthodologies et outils logiciels Nada Ayad, Damien Cassou et Annabelle Souc.
Des commandes plus avancées I. Les processus Lister des processus : ps & top Arrêter des processus : kill II. Recherche Rechercher des fichiers : find.
1- Régles de normalisation 2ème partie : normalisation Modèle Conceptuel des Données 2- Les Formes Normales 3- Dépendances Fonctionnelles 4- Recap - Méthodologie.
1- Introduction 1ère partie Le langage SQL 2- Connexion 3- Structure & Contenu 4- Requêtes.
SQL partie 5 1 LMD create – update – primary key secondary key.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Présentation du programme
Programmation d'un aspirateur robot connecté
Ajouter le code dans une page html
Les tableaux différencier les variables simples des variables indicées (ordonnées et numérotées) un identificateur unique désigne un ensemble, une collection.
Environnement de développement des BD
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Cours de programmation en langage C (Norme ANSI)
Représentation des nombres réels
Initiation aux bases de données et à la programmation événementielle
Pas de variable globale
Les notions de classe et d'objet
Micro Informatique au Cellier
Algorithmique et programmation de modèles numériques
Semaine #1 INF130 par Frédérick Henri.
Loi Normale (Laplace-Gauss)
Javadoc et débogueur Semaine 03 Version A17.
AO (Architecture des ordinateurs)
Principes de programmation (suite)
11ième Classe (Mardi, 18 novembre) CSI2572
Les expressions régulières en javascript
Les fonctions.
Les fonctions.
GOBO Ne pas partir de zéro
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
Présentation multimédia avec open office
Des outils pour le développement logiciel
Javadoc et débogueur Semaine 03 Version A16.
Introduction à Clojure Jean-Sébastien A. Beaudry
Arguments de la ligne de commande
Cyber-Sphinx Séance 2.
Module 5 : Gestion des disques.
Réalisation d’une application web sous le thème: «Mon vétérinaire » par : Benzineb Asmaa et Meftahi Oualid Présentation à Université Saad Dahlab Blida.
PROGRAMMATION INFORMATIQUE D’INGÉNIERIE II
L’I NSTRUCTION DE T EST A LTERNATIF Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira, Bejaia Année.
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Cyber-Sphinx Séance 2.
Programmation en C++ C++ de base
Structure D’une Base De Données Relationnelle
IFT313 IFT313 Introduction aux langages formels Froduald Kabanza Département d’informatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Introduction aux langages formels
Recherche par automates finis
Calcul Scientifique Initiation à SCILB
ACP Analyse en Composantes Principales
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
“Laisser sa trace dans un fichier”
SYSTèMES à évènements discrets
IFT313 Introduction aux langages formels
SUJET : E C L A T UNIVERSITE GASTON BERGER DE SAINT LOUIS UFR DES SCIENCES APPLIQUEES ET DE TECHNOLOGIE MASTER PROFESSIONNEL EN DÉVELOPPEMENT DE SYSTÈMES.
Transition vers l’assignation automatique des stages à la résidence
IFT313 Introduction aux langages formels
RABAH M ed Ali 2018/2019
Lecture/Écriture de fichiers (I/O)
Analyse et programmation langage ADA
Boulain Joris, Handouz Yassine, Regnier Fabien, Giraud Antoine
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

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 d’outil flex/lex 02/02/2019Module Compilation2

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

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

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

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

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

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

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

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

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;

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.

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?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Les références : Références: flex.html#lex_simple_example. bases-de-lex.html /02/2019Module Compilation 32

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