Introduction : Compilation et Traduction

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Traitement sémantique et grammaire dattributs Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI)
Vue générale Pr ZEGOUR DJAMEL EDDINE
Sémantique des déclarations pour le langage Z minimal
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
C.
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Le codage de l ’information
Le Concept du programme enregistré
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
Chap 1 Grammaires et dérivations.
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Langage C Licence Informatique 3ème année
1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 5 Interpréteur de commande, Bourne shell,
IFT313 Introduction aux langages formels
Initiation à la programmation et algorithmique
Démarche de résolution de problèmes
Analyse lexicale Généralités Expressions rationnelles Automates finis
Nature, numération, code
Projet de Compilation Manuel VACELET, Jean Pierre CAURIER, Gaël COLLE,
Le codage des nombres en informatique
Algorithme d’addition #1
IFT313 Introduction aux langages formels
Faculté I&C, Claude Petitpierre, André Maurer 1 JavaCC Java compilers compiler (version générant du Javascript)
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
IFT313 Introduction aux langages formels
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Grammaires attribuées.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Automates à pile LR Notion de poignée.
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
Amorçage des compilateurs Un compilateur est un programme écrit dans un langage Peut-il être écrit dans le langage cible ? dans le langage source ? comment.
Architecture et technologie des ordinateurs II
Chapitre 3 Syntaxe et sémantique.
Analyse lexicale et syntaxique
Partie II Sémantique.
Séance d’introduction
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI Jean-Jacques DUMÉRY -1-
Rappel Modèle analyse-synthèse de la compilation
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Faculté Polytechnique de Mons
Paradigmes des Langages de Programmation
Expressions logiques Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Cours 1 1 Java. Cours 1 2 Plan général 1.Introduction 2.Les types primitifs, évaluation d’expressions 3.Instructions for, if…. 4.Introduction de l’objet,
GESTION ET TRAITEMENT DES ERREURS
3-Présentation d’un µP simple
Langages de programmation Ordinateurs = Machines à exécution.  D’où la nécessité d’outils de communication qui s’adaptent le mieux aux utilisateurs. Comment.
Sémantique des expressions arithmétiques pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Tables de compilation pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
REPRESENTATION DE L’INFORMATION
Le langage Z minimal Pr ZEGOUR DJAMEL EDDINE
Le langage Racket (Lisp)
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Introduction et Généralités sur l’Algorithmique
Patricia Renault UPMC 2005/2006
Introduction à la compilation
Chap 1 Grammaires et dérivations.
COMPIL - Z Compilateur visible
Philippe Gandy - 1 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Chapitre 9 Les caractères.
Introduction au langage C
Transcription de la présentation:

Introduction : Compilation et Traduction Un compilateur est un programme qui prend comme donnée un programme écrit dans un langage source et le traduit dans un langage appelé le langage objet.   C etc.  objet (bas niveau spécifique à chaque type de machine).

Interpréteurs et preprocesseurs Les interpréteurs sont des programmes qui traduisent directement le programme source en des commandes exécutables immédiatement : LISP, VB, Shell en UNIX. Les préprocesseurs qui effectuent une transformation simple d'un langage évolué dans un autre (ou une version simplifiée du même langage). Le compilateur C est muni d'un préprocesseur pour l'utilisation des commandes include et define.  

programme source programme objet Messages d’erreur Compilateur

Les étapes de compilation

Génération du code intermédiaire programme source Analyse lexicale Analyse syntaxique Analyseur sémantique Génération du code intermédiaire Gestion Gestion des tables des erreurs Optimisation du code Génération du code Programme objet

Exemple La traduction de l’instruction : position = initial + rate * 60

Analyse lexicale Il s'agit d'analyser le programme source en y repérant les mots-clés, les identificateurs, d'étiquettes etc…   Les caractères lus successivement sont regroupés en lexemes ("token") A certaines unités lexicales sont attachées des valeurs lexicales. Par exemple, quand on rencontre un identificateur, comme initial l’analyseur lexical produit un unité lexicale id et rentre le lexème initial dans la table des symboles, s’il n’y est pas déjà. La valeur lexicale associée à cette occurrence de id pointera vers l’entrée de initial dans la table des symboles. Nous emploierons id1, id2, and id3 pour position, initial, and rate, respectively, de façon à mettre en valeur le fait que la répresentation interne d’un identificateur est différente de la suite des caractères qui le forme. La representation de position = initial + rate * 60 après l’analyse lexicale dévient id1 = id2 + id3 * 60

Traduction de l’instruction position = initial + rate * 60 id1 = id2 + id3 * 60 = id1 + id2 * id3 60 Analyseur lexical Analyseur syntaxique Analyseur sémantique

= id1 + id2 * id3 inttoreal 60 temp1 = inttoreal (60) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3 Générateur de code intermédiaire

id1 := id2 + temp1 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 Optimiseur de code temp1 := id3 * 60.0 id1 := id2 + temp1 Générateur de code MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

Table des symboles position … initial rate La phase finale d’un compilateur est la production du code cible, qui consiste normalement en du code machine translatable ou en code en langage d’assemblage.

Important : L'analyseur lexical a la structure d'un automate fini. Un automate fini qui reconnaît des identificateurs lettre/chiffre lettre délimiteur

Analyseur syntaxique (parser) L'analyseur syntaxique prend comme source le résultat de l'analyseur lexical. Son résultat est l'arbre de dérivation du mot d'entrée (dont les lettres sont les lexèmes) relativement à la grammaire du langage de programmation. Il détecte en même temps les erreurs (par ex. non correspondance des ‘{‘ et des ‘}’).

Si la grammaire contient les règles : Exemple : a * (b + c) expr   expr * expr a ( expr ) expr + expr b c Si la grammaire contient les règles : exp  exp + exp | ( exp ) | id | exp * exp. Cette grammaire est ambiguë.

Génération du code intermédiaire Le langage intermédiaire est un langage simple du type du "code à trois adresses". Une instruction typique a la forme A := B op C où A, B, C sont des opérandes et op un opérateur binaire

Code optimisation(facultative) The code optimisation phase attempts to improve the intermediate code, so that faster-running machine code will result.

    Génération du code La différence principale entre le langage intermédiaire et l'écriture finale en code machine réside dans l'utilisation des registres dans lesquels sont effectués les calculs et dans l'attribution d'adresses physiques en mémoire.

Gestion des erreurs Elle peut se produire à toutes les étapes de la compilation. Par exemple : l'analyseur lexical peut rencontrer des identificateurs mal orthographiés. l'analyseur syntaxique peut détecter une parenthèse manquante. le générateur de code peut détecter une incompatibilité de types entre les opérandes d'un opérateur. la procédure de gestion des tables peut rencontrer un identificateur déclaré plusieurs fois avec des valeurs contradictoires.