Compilation. I. Introduction

Documents pareils
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours 1 : La compilation

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Évaluation et implémentation des langages

Programmation C. Apprendre à développer des programmes simples dans le langage C

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours 1 : Qu est-ce que la programmation?

Traduction des Langages : Le Compilateur Micro Java

Machines virtuelles Cours 1 : Introduction

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Initiation à l algorithmique

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Représentation d un entier en base b

UE C avancé cours 1: introduction et révisions

Chapitre I Notions de base et outils de travail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable


TP 1. Prise en main du langage Python

Compilation (INF 564)

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

UE Programmation Impérative Licence 2ème Année

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Feuille TD n 1 Exercices d algorithmique éléments de correction

Éléments de programmation et introduction à Java

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Bases de programmation. Cours 5. Structurer les données

MIS 102 Initiation à l Informatique

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Vérification formelle de la plate-forme Java Card

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Plan du cours. Historique du langage Nouveautés de Java 7

UFR d Informatique. FORMATION MASTER Domaine SCIENCES, TECHNOLOGIE, SANTE Mention INFORMATIQUE

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Cours de Systèmes d Exploitation

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Créer le schéma relationnel d une base de données ACCESS

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Architecture matérielle des systèmes informatiques

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

ASR1 TD7 : Un microprocesseur RISC 16 bits

Programmation C++ (débutant)/instructions for, while et do...while

Cours d algorithmique pour la classe de 2nde

Introduction à l algorithmique et à la programmation M1102 CM n 3

Algorithmique et Programmation, IMA

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Cours d Algorithmique et de Langage C v 3.0

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Rappels d architecture

Conversion d un entier. Méthode par soustraction

Cours d initiation à la programmation en C++ Johann Cuenin

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Estimation des charges. «Le travail se dilate jusqu à remplir le temps disponible»

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

S LICENCE INFORMATIQUE Non Alt Alt SS1 S2 S3 S4 S5 S6 Parcours : IL (Ingénierie Logicielle) SRI (Systèmes et Réseaux Informatiques)

Conventions d écriture et outils de mise au point

TP1. Outils Java Eléments de correction

as Architecture des Systèmes d Information

USTL - Licence ST-A 1ère année Initiation à la programmation TP 1

Calculer avec Sage. Revision : 417 du 1 er juillet 2010

Notions fondamentales du langage C# Version 1.0

Licence Sciences et Technologies Examen janvier 2010

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Cours Bases de données

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

TP, première séquence d exercices.

ACTIVITÉ DE PROGRAMMATION

Quelques éléments de compilation en C et makefiles

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

1. Structure d'un programme FORTRAN 95

Chap III : Les tableaux

TP : Gestion d une image au format PGM

Introduction au langage C

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Annexe : La Programmation Informatique

STAGE IREM 0- Premiers pas en Python

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Architecture des ordinateurs

1 Recherche en table par balayage

10 tâches d administration simplifiées grâce à Windows Server 2008 R2. 1. Migration des systèmes virtuels sans interruption de service

Cours Informatique Master STEP

Conception des systèmes répartis

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

UNE EXPERIENCE, EN COURS PREPARATOIRE, POUR FAIRE ORGANISER DE L INFORMATION EN TABLEAU

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Transmission d informations sur le réseau électrique

Programmation Web. Madalina Croitoru IUT Montpellier

Microprocesseur + Logiciel

Solution logicielle pour le pilotage et l ERM. Journées d études IARD 26 mars mars 2010

Présentation du Master Ingénierie Informatique et du Master Science Informatique , Année 2 Université Paris-Est Marne-la-Vallée

Transcription:

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 1/17 Compilation I. Introduction Jacques Farré Jacques.Farre@unice.fr http://deptinfo.unice.fr/~jf/compil-l3/

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 2/17 Plan du cours et modalités de contôle le cours comprend 3 parties introduction et analyse lexicale (3 séances) analyse syntaxique (5 séances) analyse sémantique et interprétation (4 séances) contrôles 1 examen final de 2h (40%) projet (30%, fait en grande partie pendant les TPs; l activité en TP sera prise en compte dans cette note) 3 interrogations en TD de 30 mn (30%) 18 février (analyse lexicale) 25 mars (analyse syntaxique) 6 mai (analyse sémantique et interprétation) présence aux TDs et TPs obligatoire (sinon malus)

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 3/17 Introduction Compilation : traduction d un dans un autre pas seulement des s de programmation : s de script, d interrogation, de description (LaTeX, XML...) pas seulement pour obtenir un programme exécutable : enjoliveurs, éditeurs syntaxiques... concepts et outils utilisés dans de nombreux autres domaines : web, bases de données, traitement des langues naturelles... Concepts et outils fondamentaux théorie des s (grammaires, automates) sémantiques formelles algorithmes et structures de données variés principes de génie logiciel Vous rencontrerez inévitablement un jour ou l autre un problème de compilation dans votre vie professionnelle

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 4/17 Terminologie source : celui qu il faut analyser objet : celui vers lequel il faut traduire machine ou d assemblage : machine sous forme symbolique traducteur : passage d un à un autre, par exemple préprocesseur : d un sur- de L vers L (C par exemple) assembleur : du d assemblage vers le code machine binaire éditeur de liens : d un ensemble de sous-programmes en binaire relogeable (les.o de linux par exemple) vers un programme exécutable compilateur : traduction d un source (généralement) de haut niveau vers un de plus bas niveau décompilateur : programme qui essaye de reconstruire le programme source à partir du code objet

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 5/17 Compilateur et interprète données programme en source COMPILATEUR données programme en objet programme en source INTERPRÉTATION TRADUCTION forme interne avantages et inconvénients de chaque modèle compilateur : produit du code machine programme efficace mais pas toujours portable interprète : programme portable mais moins efficace, mais qui peut manipuler le code source (méta-programmation)

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 6/17 Compilation croisée Les traducteurs (compilateurs et interprètes) sont des programmes comme les autres ils sont écrits dans un certain de programmation la différence est qu ils prennent des programmes comme données et produisent (compilateurs) du code exécutable Diagramme en T : Compilateur de S vers un code O implanté sur une machine X : programme écrit en S compilateur de S vers O sur machine X programme exécutable SOURCE S OBJET O sur machine O D EXECUTION X machine X par exemple, compilateur Objective C sur un PC pour processeur embarqué programme en Objective C compilateur de Objective C pour processeur ARM compilation sur machine Intel Objective C Code ARM Compilateur en code 80x86 PC programme en code ARM

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 7/17 Comment obtenir un compilateur? on l écrit dans un E (de haut niveau si possible) on suppose qu on dispose d un compilateur de ce sur une machine X par exemple, un compilateur de Java écrit en C sur un PC : S = Java, O = JVM, E = C, X = code intel core SOURCE S OBJET O SOURCE S OBJET O D ECRITURE E SOURCE E OBJET X D EXECUTION X D EXECUTION X machine X

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 8/17 Comment obtenir un auto-compilateur? si on veut écrire le compilateur dans son propre S écrire d abord un compilateur d un sous-ensemble S de S en E, et le compiler écrire ensuite en S le compilateur de S c est ce qu on appelle un bootstrap du compilateur SOURCE S OBJET O SOURCE S OBJET O D ECRITURE E SOURCE E OBJET X D EXECUTION X D EXECUTION X SOURCE S OBJET O machine X SOURCE S OBJET O D ECRITURE S SOURCE S OBJET O D EXECUTION O D EXECUTION X machine X

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 9/17 Compilateurs monolithiques les premiers compilateurs étaient monolitiques : ils pouvaient travailler en 1 seule passe (les s étaient encore simples) autant de compilateurs que de couples (, machine cible), soit m n source 1 COMPILATEUR 1-1 objet 1 source 1 COMPILATEUR 1-n objet n source 2 COMPILATEUR 2-n objet n source m COMPILATEUR m-1 objet 1 source m COMPILATEUR m-n objet n

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 10/17 Compilateurs modulaires source PARTIE AVANT représentation intermédiaire PARTIE ARRIÈRE objet partie avant (analyse) : analyses lexicale, syntaxique, sémantique (cours de L3) partie arrière (synthèse) : optimisation, production de code (cours de M1) avantages de cette décomposition : m parties avant + n parties arrières permettent d avoir m n compilateurs source 1 source m PARTIE AVANT 1 PARTIE AVANT m représentation intermédiaire PARTIE ARRIÈRE 1 PARTIE ARRIÈRE n objet 1 objet n le objet peut être celui d une machine virtuelle (JVM...) : le programme résultant sera portable on peut interpréter la représentation intermédiaire

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 11/17 Schéma synthétique de la partie avant demande l analyse syntaxique COMPILATEUR demande l analyse sémantique ANALYSEUR SYNTAXIQUE construit représentation intermédiaire consulte ANALYSEUR SÉMANTIQUE demande un lexème ANALYSEUR LEXICAL renvoie un lexème source TRAITEMENT DES ERREURS

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 12/17 Justification de l architecture de la partie avant du point du vue lexico-syntaxique le programme source est plein de bruits (espaces inutiles, commentaires...) pour la grammaire, de nombreux symboles sont équivalents (identificateurs, nombres...) ce qui justifie le pré-traitement (en général au vol) du texte source par l analyseur lexical du point de vue sémantique existence de références en avant (utilisation d un identificateur avant sa déclaration par exemple) unification du traitement de constructions équivalentes (attr=0 et this.attr=0 par exemple) ou proches (boucles notamment) ce qui justifie la mémorisation (sous forme intermédiaire) du texte à compiler

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 13/17 Concepts et structures de données utilisés analyse lexicale : s réguliers, expressions régulières, automates finis pour l essentiel, mais aussi tables d adressage dispersé, arithmétique analyse syntaxique : grammaires hors-contexte, automates à pile (analyseurs descendants ou ascendants), attributs sémantiques analyse sémantique : diverses sémantiques formelles (mais l analyse sémantique est souvent codée à la main), équations de type, table de symboles représentation intermédiaire : arbre ou graphe le plus généralement

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 14/17 Un exemple Soit en Java : if (i==0) --ifou; analyse lexicale : reconnaître les lexèmes : mot-clé if (mais pas dans l identicateur ifou), reconnaître i et ifou comme lexèmes de la classe identificateur, 0 comme de la classe des nombres entiers, -- comme un seul lexème, et pas la suite - - analyse syntaxique et représentation intermédiaire : analyser le texte selon la règle de grammaire : instruction MOT-IF ( condition ) instruction et construire (par exemple) un sous-arbre comme IF sous-arbre de la condition sous-arbre de l instruction

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 15/17 Un exemple (suite) Soit en Java : if (i==0) --ifou; analyse sémantique : analyse de nom : vérifier que i et ifou sont bien déclarés, et déclarés comme des variables (ou des attributs); met en œuvre la table des symboles, qui permet de mémoriser les symboles déclarés (classes, attributs, méthodes, variables locales et paramètres...) analyse de type : vérifier que le type de i ou celui de ifou est compatible avec les opérations effectuées; met en œuvre des équations de type du genre int == int bool peut travailler en 1 ou plusieurs parcours de la représentation intermédiaire (selon la complexité du ) peut transformer/enrichir/normaliser la représentation intermédiaire par exemple, si ifou est un attribut, représenter de la même manière --ifou et --this.ifou

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 16/17 Propriétés d un bon compilateur Reconnaître tout le, et rien que le (ou alors avoir un mode permettant d informer des constructions non standards) sinon, on accepte des programmes non portables Ne pas se restreindre à des constructions humainement lisibles : beaucoup de programmes sont créés par des programmes Indiquer de façon claire les erreurs et éviter les messages d erreur en cascade (bien que la source de l erreur ne soit pas toujours évidente) Traduire correctement vers le cible, et en donnant le meilleur code possible Être raisonnablement rapide (utiliser des algorithmes quasi linéaires)

Université de Nice - Sophia Antipolis Licence 3 Informatique 2012-2013 17/17 Bibliographie Les bases Compilateurs. Dick Grune, Henry E. Bal, Ceriel J.H. Jacobs, Koen G. Langendoen, Dunod 2002 Compilateurs - Principes, techniques et outils - Avec plus de 200 exercices. Alfred Aho, Monica Lam, Ravi Sethi et Jeffrey D. Ullman, Pearson Education, 2007 Compiler Design. Reinhard Wilhelm et Dieter Maurer, Adison-Wesley, 1995. Pour les mordus de théorie The Theory of Parsing, Translation and Compiling (2 volumes). Alfred V. Aho et Jeffrey D. Ullman, Prentice-Hall 1972 Parsing Theory (2 volumes). Seppo Sippu et Eljas Soisalon-Soininen, Springer-Verlag 1992