M28 : Compilation Pr Errais Mohammed mahammed.errais@gmail.com Session Automne

M28 : Compilation Pr Errais Mohammed mahammed.errais@gmail.com Session Automne UNIVERSITE HASSAN II FACULTÉ DES SCIENCES AIN CHOC CASABLANCA SMI Organisation du cours 2 Analyse Syntaxique 3 Analyse sémantique 4 Introduction 1 Analyse lexicale 2 Objectifs du cours Comprendre le fonctionnement d’un compilateur Maitriser les étapes et les principes d’un compilateur Apprendre à manipuler correctement les compilateurs Introduire les notions de base de la théorie des langages 3 Objectifs du cours Initiation aux principes de base à la réalisation des compilateurs : analyse lexicale, analyse syntaxique Comprendre les outils fondamentaux utilisés pour effectuer ces analyses : automates, langages rationnels, grammaires 4 Organisation du cours Cours magistrale : Aspects théoriques (~50%) Travaux dirigées : Exercices sur les automates, les grammaires ( ~30%) Travaux Pratiques : Laboratoire sur la mise en place des compilateur ( ~20%) 5 Organisation du cours Contenu des modules Automates finis et expression régulière. Grammaires. Analyse lexicale. Analyse syntaxique. Analyse sémantique. 6 Organisation du cours Note du module Examen de fin de semestre 75% Contrôles continus et TP 25% 7 Organisation du cours 8 Analyse Syntaxique 3 Analyse sémantique 4 Introduction 1 Analyse lexicale 2 Introduction – Plan de cours I. Introduction 1. Introduction générale 2. Qu’est ce que la compilation? 3. Pourquoi ce cours ? 4. Structure d’un compilateur 9 Introduction Introduction générale L’exécution des programmes directement sur les machines ( processus mémoire, circuits …) nécessite l’utilisation des langages de bas niveaux Assembleur, codage binaire (0 …1 ) Très difficile à gérer par le programmeur Comment faire le lien entre les deux niveaux (haut /bas) ? 10 Introduction Introduction générale 11 Maple Python C Java Introduction Introduction générale Un interprète prend en entrée un programme P écrit dans le langage L et des données et produit en sortie un résultat correspondant à l'exécution de P avec les données. 12 Introduction Introduction générale Contrairement à un interpréteur, le compilateur donne comme résultat un autre programme écrit dans un autre langage. 13 Introduction Qu’est ce que la compilation? Tout programmeur utilise un outil essentiel à la réalisation des programmes informatiques Le compilateur. Définition : Un compilateur est un logiciel particulier qui traduit un programme écrit dans un langage de haut niveau par le programmeur en instructions exécutables 14 Introduction Qu’est ce que la compilation? 15 Emacs, bloc note L’outil gcc Introduction Pourquoi ce cours? Il est important de comprendre le fonctionnement d’un compilateur pour : La compilation peut être utilisé pour la transformation d’un programme d’un langage de haut nivaux à un autre (C à pascal). Besoin de retrouver un code à partir d’un exécutable La compréhension du fonctionnement du compilateur permet d’implémenter d’une manière plus efficace. 16 Introduction – Plan de cours I. Introduction 1. Introduction générale 2. Qu’est ce que la compilation? 3. Pourquoi ce cours ? 4. Structure d’un compilateur 17 Introduction Structure d’un compilateur La sortie d’un compilateur varie selon l’application : Un programme exécutable pour un processus physique (processeur, mémoire) Fichier de code pour une VM( exemple JAVA) Code abstrait destiné à un outil particulier. 18 Introduction Structure d’un compilateur La compilation se décompose en deux phases : 19 Phase d’analyse : Permet de reconnaitre les variables, les instructions et élaborer la structure syntaxique. Phase de synthèse : Permet de produire le programme cible. Introduction Structure d’un compilateur 20 Introduction Structure d’un compilateur Analyse lexicale Permet de reconnaitre les types des caractères lu par le compilateur. Les caractères sont exprimés par des unités lexicales ( identificateur, constante, opérateur ….) Les objectifs de cette étape : Eliminer les caractères superflu (espaces, commentaires ..) Identifier les symbole les unités lexicales 21 Introduction Structure d’un compilateur 22 Exemple d’analyse lexical d’une l’expression : Introduction Structure d’un compilateur Question : Donner le résultat de l’analyse lexicale de l’expression suivante : 23 Introduction Structure d’un compilateur 24 Introduction Structure d’un compilateur Analyse syntaxique Permet de vérifier la grammaire des unités lexicales est ce que les unités sont écrites dans le bon ordre comme défini dans le langage source? Le résultat de cette étape est le regroupement des unités lexicales en structure grammaticale 25 Introduction Structure d’un compilateur 26 Introduction Structure d’un compilateur Analyse contextuelle Dite aussi Analyse sémantique permet de vérifier si la structure du texte est correcte Est ce qu’une unité lexicale est correcte? Les identificateurs sont déclarés Les opérantes sont ils compatible ( additionner un float à un entier ) ? Les arguments des fonctions sont correctes? Dans cette étape le compilateur vérifie le sens des phrases 27 Introduction Structure d’un compilateur 28 Phase de synthèse Code source analysé Introduction Structure d’un compilateur Génération de code intermédiaire et optimisation Permet de transformer le code source au programme cible ( généralement assembleur). L’optimisation consiste à adapter le code cible au matérielle de la machine courante ( adapté les adresses, éliminer les instructions inutiles. Le résultat de cette étape est le programme cible. 29 Introduction Structure d’un compilateur En parallèle avec les phase d’analyse et de synthèse il existe une phase supplémentaire dite phase parallèle. La phase parallèle comporte deux étapes: 30 Gestion de la table des symboles Gestion des erreurs Introduction Structure d’un compilateur Gestion de la table des symboles : La table des symboles est une structure qui sert à stocker les identificateurs. Le remplissage de la table est fait dans la phase d’analyse. Les informations stockés dans la table sont essentielles pour l’analyse lexicale et syntaxique. 31 Exemple : Introduction Structure d’un compilateur Gestion des erreurs Permet d’identifier l’erreur de la manière la plus précise possible. Un compilateur qui se contente d’afficher « syntax error » n’apporte pas d’aide lors de la mise en point. 32 Introduction Structure d’un compilateur: Exemple 33 Questions 1. Donner un exemple d’erreurs possibles lors de l’analyse lexicale. 2. Pour l’expression suivante : if y<1. donner le résultat de la phase d’analyse. 3. Proposer une définition d’un compilateur. 4. C’est quoi la différence entre un interprète et un compilateur. Pour chaque type donner un exemple de langage. 5. C’est quoi le compilateur le plus répondu pour le langage C? 34 Questions 1. Citer les différentes phase d’un compilateur? 2. C’est quoi le rôle de la table de symbole? 3. Expliquer la différence entre l’analyse syntaxique et l’analyse sémantique? 4. C’est quoi l’objectif de l’étape d’optimisation du code? 5. Donner le résultat de l’analyse lexicale. 35 Organisation du cours 36 Analyse Syntaxique 3 Analyse sémantique 4 Introduction 1 Analyse lexicale 2 Pan de la partie I. Introduction II. Analyseur lexicale 1. C’est quoi un analyseur lexicale ? 2. Théorie des langages 3. Mise en ouvre d’un analyseur lexicale 37 Analyseur lexicale C’est quoi ? Le programme source se compose de flot de caractère. Le rôle principale de l’analyseur lexical est de reconnaitre dans ce flot « les unités lexicales ». Les unités lexicales => les mots clés du langage que le compilateur doit reconnaitre. Les principaux unités dans un langages sont : • Opérateurs arithmétiques : +, -, * , / • Opérateurs logiques : < , > , == • Les mots clés : if, where , while • Les constantes , les numéros 38 Généralement une unité lexicale reconnue dans le texte source distingue quatre notions: L’unité lexicale représentée par un code conventionnel ( PLUS, EGAL, PLUS PLUS …) « le lexème » la chaine de caractère qui correspond à une unité lexicale exemple « + est PLUS ou < est INF … » Un attribut qui dépend de l’unité lexicale en question pour un nombre il s’agit de ca valeur, pour un identificateur il s’agit d’un envoi à la table des symboles 39 Analyseur lexicale C’est quoi ? 40 Analyseur lexicale C’est quoi ? Généralement une unité lexicale reconnue dans le texte source distingue quatre notions – suite : Le modèle qui permet de spécifier l’unité lexicale plusieurs techniques formelles existent pour décrire un modèle. Pr exemple le modèle sert à identifier : Comment décrire l’ensemble des chiffres ? Comment décrire à l’analyseur lexical l’ensemble des identificateurs ? La tache principale de l’analyseur est la reconnaissance des unités lexicales. Pour cela il faut répondre à deux questions importantes : 1. Comment définir le modèle qui décrit les unités lexicales? 2. Quelle structure utilisée pour reconnaitre les mots du programme source à base du modèle ? Pour répondre à ces questions l’analyse lexicale utilise les techniques et les concepts de la théorie des langages. 41 Analyseur lexicale C’est quoi ? Pan de la partie I. Introduction II. Analyseur lexicale 1. C’est quoi un analyseur lexicale ? 2. Théorie des langage 1. Généralités 2. Expressions régulières 3. automates 3. Mise en ouvre d’un analyseur lexicale 42 Théorie des langages Généralités L'objectif de cette section est d'étudier les notions de théorie des langages qui sont utiles en compilation. Les notions de vocabulaire, de chaîne sur un vocabulaire et de langage sur un vocabulaire, ainsi que diverses opérations 43 Théorie des langages Généralités- Langage sur un vocabulaire Définition : Vocabulaire / Alphabet • Un vocabulaire V est un ensemble fini, dont les éléments sont appelés « caractères » ou « symboles ». Définition : uploads/Management/ introduction-copie.pdf

  • 21
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Oct 03, 2022
  • Catégorie Management
  • Langue French
  • Taille du fichier 2.2351MB