Introduction : Compilation et Traduction

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Développement logiciel sur micro-contrôleurs PIC en C
Introduction au langage C
Initiation à la programmation et algorithmique cours 4
Les tableaux. Tableau? Erreur de langage ! Un tableau est généralement une liste… Cest donc une liste de mêmes éléments : Liste de notes Liste de noms.
Vue générale Pr ZEGOUR DJAMEL EDDINE
Sémantique des déclarations pour le langage Z minimal
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
C.
Chap 1 Grammaires et dérivations.
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
Langage C Licence Informatique 3ème année
Principes de programmation (suite)
CPI/BTS 2 Programmation Web Introduction au PHP
Initiation à la programmation et algorithmique
Introduction : Compilation et Traduction
Démarche de résolution de problèmes
Analyse lexicale Généralités Expressions rationnelles Automates finis
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Programmation fonctionnelle Le langage LISP
Programmation multimédia 3
Génération de code intermédiaire
Introduction à la programmation (Java)
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.
Principes de programmation
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
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
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 3 Syntaxe et sémantique.
Analyse lexicale et syntaxique
Partie II Sémantique.
Séance d’introduction
Types de données fondamentaux
Faculté Polytechnique de Mons
Animateur : Med HAIJOUBI
Programmer en langage c
9ième Classe (Mardi, 4 novembre) CSI2572. H Nous avons vu comment utiliser les directives #define #ifndef #endif Pour s’assurer de l’inclusion unique.
Cours Architecture des Systèmes Informatiques
Paradigmes des Langages de Programmation
JavaScript.
Le langage XML.
ALGORITHMIQUE ET PROGRAMMATION C
GESTION ET TRAITEMENT DES ERREURS
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
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
La programmation.
Le langage Racket (Lisp)
Introduction au langage C Fonctions et Procédures
Le codage des nombres en informatique
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
IFT313 – Introduction aux langages formels Eric Beaudry Département d’informatique Université de Sherbrooke Laboratoire sur JFLEX Été 2010.
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.
Introduction au langage C
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
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).  

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.

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

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") Ex. if (bool = = 1) goto 10 [if] [(] [bool] [= =] [1] [)] [goto] [10]

L'analyseur lexical constitue la table des symboles ou sont rangés les identificateurs des variables ou d'étiquettes avec leur type et éventuellement leur valeur.  Une fois analysée : if ([var, 35] eq [const, 25]) goto [label, 2]. Ici les mots soulignés seront les types de lexèmes et les nombres représentent des indices de la table des symboles.

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

    Analyse syntaxique 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 parenthèses).

Ex. a * (b + c) Exp Exp * exp a ( exp ) b c Si la grammaire contient les règles : exp  exp + exp | ( exp ) | id | exp * exp.

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.

Optimisation du code (facultative) On pourra remplacer a := c * (b + d) + d / (b + d) par e := b + d a := c * e + d / e

    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.