Programme en langage source (L1) Programme en langage cible (L2) Traducteur Pro

Programme en langage source (L1) Programme en langage cible (L2) Traducteur Programme en langage à haut niveau Compilateur Programme en langage machine Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs Chapitre I : Introduction aux compilateurs I.1 Définitions: a) Traducteur: est un programme traduisant un programme écrit dans un langage L1 (langage source) en un programme équivalent écrit en un langage L2 (langage cible). entrée sortie b) Compilateur : est un traducteur dont le langage source est un langage de haut niveau et langage cible est le langage machine. Gestion des erreurs Remarque: Avant la phase finale (Code machine), un langage intermédiaire est produit et mis dans un Fichier Code, ce dernier est fichier multi-plateforme (qui pourra être utilisé dans n’importe quelle machine). Exemple: compilateur java, qui crée un fichier code compilé par le programme JVM (Java Virtual Machine). c) Préprocesseur (Précompilateur) Si L1 et L2 sont des langages de haut niveau, le traducteur est appelé un préprocesseur. d) Interpréteur: est un traducteur ligne par ligne (instruction/instruction) d’un programme écrit dans un langage de haut niveau. Exemples: BASIC , LISP , PHP… sont des langages interprétés. Université de Tébessa 2014 – 2015 M. ZEBDI A. 1 Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs I.2 Structure d'un compilateur : a) Schéma général d'un compilateur : ( Langage Source) ( Langage cible) Université de Tébessa 2014 – 2015 M. ZEBDI A. Programme source Analyse lexicale Analyse syntaxique Analyse sémantique Génération du code intermédiaire Optimisation du code intermédiaire Génération du code machine Programme en code machine (exécutable) Gestion de la Table des symboles Gestion des erreurs Sy nt hè se A na ly se 2 Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs b) L’étape de l’analyse : découpée en trois phases, à savoir : b.1) Analyse lexicale (lexicographique ou analyse linéaire) : Cette phase initiale du compilateur consiste à : 1- Lire le programme source en entrée (considéré comme un fichier texte), caractère par caractère. 2- Éliminer les caractères superflus (commentaires, espaces, ...). 3- Organiser le programme source en Unités Lexicales (Tokens) regroupées dans un tableau appelé : Table des symboles. Exemple : A partir de la ligne d’un programme source en PASCAL for i :=1 to vmax do a :=a+i; On peut dégager la suite de tokens suivante (avec leurs types) : for : mot clé i : identificateur := : affectation 1 : entier to : mot clé vmax : identificateur do : mot clé et que l’on peut construire la table des symboles suivante : Numéro de symbole Token Type de token Type de variable . . . . . . .. . . … …. 10 for Mot clé 11 to Mot clé 12 do Mot clé … ..... ..... … …. ..... 50 ; Séparateur … …. ..... 100 := Affectation … …. .… 110 + Opération Arithmétique …. …. .… …. …. .… 1000 i Identificateur 1001 a Identificateur 1002 vmax Identificateur …. …... .… …. ….. .… 5001 1 Nombre Entier …. …. .… Ensuite, l’énoncé précédent peut s’exprimer ainsi : 10, 1000, 100, 5001, 11, 1002, 12, 1001, 100, 1001, 101,1000, 50 for i := 1 to vmax do a := a + i ; Université de Tébessa 2014 – 2015 M. ZEBDI A. a : identificateur := : affectation a : identificateur + : opérateur arithmétique i : identificateur ; : séparateur 3 Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs C’est-à-dire comme une suite de références à la table des symboles. b.2) Analyse syntaxique (grammaticale ou hiérarchique) : Lors de l’analyse syntaxique, on vérifie que l’ordre des tokens correspond à l’ordre définit pour le langage. On dit que l’on vérifie la syntaxe du langage à partir de la définition de sa grammaire. Cette phase produit une représentation sous forme d’arbre de la suite des tokens obtenus lors de la phase précédente. Par exemple, l’arbre suivant représente la structure de la phrase précédente: for i :=1 to vmax do a := a+i b.3) Analyse sémantique (analyse contextuelle): A ce stade d’analyse, certaines propriétés relatives à la signification des phrases du programme source sont à vérifier. L’objectif majeur de cette phase est la Vérification des Types. Des contrôles de cohérence sémantique liés directement à cet objectif doivent être établit :  Déclaration des identificateurs.  Compatibilités des opérandes avec les opérations.  Conversion de type.  Compatibilités des arguments des fonctions.  …. A la fin de cette phase, le compilateur renvoie un compte rendu des erreurs (lexicales, syntaxique et sémantiques), avant de passer à l’étape de « Synthèse ». Université de Tébessa 2014 – 2015 M. ZEBDI A. L’arbre syntaxique obtenu après l’analyse syntaxique NB : Outils théoriques utilisés: grammaires et automates à pile . NB : Outils théoriques utilisés: expressions régulières et automates à états finis. 4 Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs Si on prend, par exemple, le contrôle de la « conversion de type » avec la phrase suivante : aire:=base*hauteur/2 La conversion du nombre entier 2 en nombre réel 2.0 doit être effectuée (correction automatique), c’est le cas de plusieurs compilateurs, ou énoncée comme erreur sémantique. Un autre exemple ( en C) : int i ; float x ; i = x ; Université de Tébessa 2014 – 2015 M. ZEBDI A. . 0 NB : Outils théoriques utilisés: schéma de traduction dirigée par la syntaxe. 5 Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs c) L’étape de synthèse : c.1) Génération du code intermédiaire : A l'issue de l'étape d'analyse certains compilateurs construisent explicitement une représentation intermédiaire du programme source. Cette représentation est considérée comme un programme destiné à une machine abstraite (virtuelle) (comme le Java Virtual Machine). Donc, c'est un code multi plateformes qui doit avoir deux propriétés importantes:  Facile à produire.  Facile à traduire en langage cible. Comme exemples de formes intermédiaires, on peut citer: Code à 3-adresses. Quadruplets (exemple: Byte Code Java). Notation polonaise. Arbre abstrait & DAG. Exemple du code intermédiaire en utilisant la forme du code à 3-adresses: temp1 = EntierVersRéel(2) temp2 = hauteur / temp1 temp3 = base * temp2 aire = temp3 c.2) Optimisation du code intermédiaire: Cette phase tente d'améliorer le code intermédiaire, de façon que le code machine résultant s'exécute plus rapidement. Donc, il faut: Minimiser le nombre d'instructions. Occuper un minimum d'espace mémoire. C'est-à-dire utiliser le minimum de ressources (processeur, mémoire) Exemple: temp1 := hauteur / 2.0 aire := base * temp1 c.2) Génération du code machine (Programme en langage cible): La phase finale d'un compilateur est la production du code cible, qui consiste, normalement, en du code machine exécutable (translatable) ou en du code en langage d'assemblage. A ce stade, On sélectionne des emplacements mémoire pour chacune des variables utilisées dans le programme. Puis les instructions intermédiaires sont traduites en une suite d'instructions machines qui effectuent les mêmes tâches, (le problème crucial de ce processus est l'assignation des variables aux registres). Université de Tébessa 2014 – 2015 M. ZEBDI A. 6 Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs Exemple1: MOV hauteur, R1 DIV #2.0, R1 MOV base, R2 MUL R1, R2 MOV R2, aire Exemple2: var_a A0000 ; les adresses des variables var_i A0001 var_vmax A0002 ... ; le code du programme mov var_i,1 loop: mov A0, (var_i) ; comparaison i >= vmax jge A0, (var_vmax), finFor ; si vrai aller en finFor mov A0, (var_a) ; calcul de a+i add A0, A0, (var_i) mov var_a,A0 ; a := a+i mov A0, (var_i) ; on incrémente i add A0, A0, 1 mov var_i, 1 jmp loop ; et on continue la boucle finFor: ... N.B: Université de Tébessa 2014 – 2015 M. ZEBDI A. 0001 01 00 00001000 * 0101 01 10 00000010 0001 10 00 00000100 * 0100 10 01 00000001 0010 10 00 00000000 * • Table des symboles : 1. Information concernant le type et l'emplacement mémoire des identificateurs. 2. Initialisée par l'analyseur lexical, complétée et utilisée par les autres phases. • Gestion des erreurs : 1. Erreurs lexicales (symboles ou mots n'appartenant pas au langage source). 2. Erreurs syntaxiques (règles grammaticales non respectées). 3. Erreurs sémantiques (incohérence de types ). Diverses modes de récupérations d'erreurs possibles, selon la finalité du compilateur : 1. Arrêt à la première erreur ; 2. Resynchronisation sur la prochaine construction correcte ; 3. Tentatives de correction. 7 Expressions Régulières du Langage Source Constructeur d'analyseur lexical (Lex ou Flex ) A.E.F Reconnaissant les mots du langage source Grammaire non contextuelle Constructeur d'analyseur syntaxique (Yacc ) Analyseur syntaxique (A.P) Compilation (3èmeLMD –S5-) Chap1 : Introduction aux compilateurs I.3 Les outils d’aide à la construction des compilateurs : Leur rôle est de fournir des programmes en langages évolués (C par exemple), comportant les parties sources d’un compilateur. Comme outils efficaces d'aide à la réalisation de compilateurs on peut citer : • Constructeurs d'analyseurs lexicaux (exemple : LEX ou FLEX) ; • Constructeurs d'analyseurs syntaxiques (exemple : YACC) ; • Traducteurs dirigés par la syntaxe (exemple : YACC) ; • Générateurs de code automatiques ; a) uploads/Management/ chap-i-introduction-aux-compilateurs.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 Apv 06, 2021
  • Catégorie Management
  • Langue French
  • Taille du fichier 0.1835MB