1 Ministre de l’enseignement supérieur et de la recherche scientifique Universi
1 Ministre de l’enseignement supérieur et de la recherche scientifique Université Abderrahmane Mira Bejaia Faculté des sciences exactes Département d’informatique Licence Académique 3ème année Cours compilation Chapitre 1 : Introduction Licence 3 Cours compilation Chapitre 1 2 1. Introduction Ce chapitre présente brièvement le sujet principal du cours (les compilateurs avec leurs structures ordinaires à laquelle nous ferons référence dans la suite du cours. 1.1 . Prérequis pour suivre le cours Le cours suppose que l’étudiant s’est familiarisé avec la programmation (langage algorithmique) et les concepts de la théorie des langages tels que les automates d’état fini, les grammaires et leurs types ainsi que les transformations de grammaires et d’automates. Il n’y a aucun rappel sur ces notions. 1.2. Intérêt de l’étude de la compilation Ça permet de voir en détail le fonctionnement d’un langage de programmation, y compris dans des aspects obscurs et peu étudiés Pour écrire de bon code, il faut avoir une idée de la façon dont il est traduit. Ça permet d’étudier des algorithmes d’intérêt général et des objets abstraits comme les automates d’état finis et les expressions régulières qui sont utiles dans d’autres contextes. Ça permet de traduire un langage de programmation vers un autre langage de programmation. 2. Définitions générales 2.2. Compiler Signifie, analyser une description d’information et synthétiser un autre forme adaptée à ce que l’on veut faire, tout en maintenant le sens de l’information. 2.3. Compilation La compilation est définie comme un traducteur automatique d’une forme source en une forme cible. Dans ce cas, la forme source est le programme introduit par l’utilisateur (haut niveau) et la forme cible représente le code objet exécutable par l’ordinateur. Sommairement, un compilateur est constitué de deux parties. Fig. 1 : Fonctionnement d’un compilateur Code source Compilateur Code objet Résultat Données Licence 3 Cours compilation Chapitre 1 3 a. La partie analyse : Consiste à partitionner le programme source en ces différentes constituantes et en créer une représentation intermédiaire. Elle vérifie avant si le programme est écrit selon les spécifications du programme source. b. La partie synthèse : Construit le code objet à partie de cette représentation intermédiaire. 2.4. Interpréteur Un interpréteur est un logiciel qui interprète le programme source, c’est-à-dire qu’il analyse les instructions du programme source les unes après les autres, et exécute chacune d’elles immédiatement. Dans ce cas, il n’y a pas de création d’un programme objet équivalent. On peut citer comme exemple, le langage HTML. Fig. 2 : Fonctionnement d’un interpréteur 3. Phases de compilation Les phases de compilation sont représentées dans le schéma suivant : Code source Interpréteur Résultat Données Licence 3 Cours compilation Chapitre 1 4 Fig. 3 : Phases de compilation 4. Rôle des phases de compilation 4.1. Analyse lexicale Son rôle consiste : Lire le programme source caractère par caractère ; Regrouper les caractères en une séquence d’unités lexicales ; Sauter les blancs et les commentaires ; Construire et mettre à jour la table des symboles Remarque : l’analyse lexicale est basée sur une grammaire de type 3 Exemple : l’analyse lexicale du fragment du programme suivant 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 objet Code objet Arbre syntaxique Code intermédiaire Séquence d’unités lexicales Table des symboles Erreurs Analyse Synthèse Licence 3 Cours compilation Chapitre 1 5 Begin i : = 5 ; End ; Le fragment ci-dessus peut être regroupé en unités lexicales suivantes : Begin : mot clé i : identificateur ; := : opérateur d’affectation 5 : constante entière ; : séparateur d’instruction ; End : mot clé 4.2. Analyse syntaxique. Celle-ci permet de : Structurer la séquence d’unités lexicales issues de l’analyse lexicale conformément à la syntaxe du langage, décrite par une grammaire non contextuelle de type (2). Construire un arbre syntaxique qui représente la syntaxe du programme source. 4.3. Analyse sémantique Son rôle consiste à vérifier que les composants du programme source sont agencés d’une façon significative ; Recueillir les informations sur les types des identificateurs et mettre à jour la table des symboles ; Assurer le contrôle des types ; Vérifier le nombre et les types des arguments lors des appels de procédures et de fonctions. 4.4. Génération du code intermédiaire Après les trois phases d’analyse, le compilateur génère une représentation ente le programme source et le programme cible. Cette représentation doit être facile à produire et facile à traduire en code cible. Exemple : La forme post-fixée : I = 5 + i * 3 => i 5 i 3 * + = Licence 3 Cours compilation Chapitre 1 6 4.5. Optimisation du code intermédiaire Le rôle de cette phase consiste à améliorer le code intermédiaire de tel sort qu’il en résulte un code cible : Rapide à exécuter ; Qui occupe moins d’espace. 4.6. Génération du code objet Son rôle est de traduire la forme intermédiaire en un code objet, en tenant compte de l’adressage. Remarques La table des symboles est utilisée par le compilateur pour enregistrer les identificateurs et leurs attributs, ces attributs peuvent être des informations d’emplacement, de type visibilité .etc. Quand une erreur est détectée par le compilateur, la phase concernée doit établir un diagnostic et doit s’adapter pour que le compilateur poursuit l'exécution, et afin de permettre la détection d’autres éventuelles erreurs. uploads/Management/ cours-compilation-chapitre-1.pdf
Documents similaires










-
29
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 26, 2022
- Catégorie Management
- Langue French
- Taille du fichier 0.2315MB