Cours de compilation 2 - Intranet

Slides:



Advertisements
Présentations similaires
Cours n° 1 Introduction à la programmation
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Présentation générale Marc Gengler
Environnement d’exécution
Les fonctions A quoi ça sert ?
Formation universitaire à .NET: Introduction à C#
Algorithmes et structures de données avancés
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d’Algorithmique
Problème des 4 couleurs, graphes planaires.
Analyse syntaxique (intro)
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut.
Quelques applications.
9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes.
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
Cours d'algorithmique 4 - Intranet 1 16 novembre 2006 Cours dAlgorithmique Lalgorithme alpha-beta. Sous-arbres alpha et beta dun arbre minimax et propriétés.
Cours d’Algorithmique
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Cours d'algorithmique 5 - Intranet 1 17/21 novembre 2006 Cours dAlgorithmique Divide and Conquer : principes et applications. Calculabilité.Complexité.
Cours de graphes Les plus courts chemins,
Cours de compilation Marc Gengler 18h de cours avec un peu de TD
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation.
Analyse syntaxique (intro)
Cours d'algorithmique 8 - Intranet 1 4 décembre 2006 Cours dAlgorithmique Dérécursion (fin) : Équivalences entre programmes récursifs et programmes itératifs.
Cours d’Algorithmique
24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.
Cours d’Algorithmique
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Calcul propositionnel
DROITES PARALLELES ET PERPENDICULAIRES 1. Droites sécantes
Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations.
Cours d’Algorithmique
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
OCaml - Les listes L3 MI.
Cours d’Algorithmique
Analyse lexicale Généralités Expressions rationnelles Automates finis
Problème des 4 couleurs, graphes planaires.
Quelques applications.
Quelques graphes particuliers.
Cours de graphes Les arbres et arborescences.
Introduction à la programmation (Java)
16 mars 2007Cours de graphes 7 - Intranet1 Cours de graphes Problèmes NP-complets. Réductions polynômiales.
Structures de données IFT-2000
Partie II Sémantique.
Sémantique dénotationnelle
Cours de graphes Marc Gengler Alexandra Bac Sébastien Fournier
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Cours de graphes 6 - Intranet
23 février 2007Cours de graphes 4 - Intranet1 Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut. Algos de Ford-Fulkerson et Edmonds-Karp.
Programmation non procédurale Le projet ECOLE 2000
Programmation procédurale Transformations
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
2.1 - Historique Chapitre 2 : Introduction au langage C++
INTRODUCTION.
Tutorat en bio-informatique
Le langage Racket (Lisp)
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
Langage de programmation
Scripts et fonctions Instructions de contrôle
Transcription de la présentation:

Cours de compilation 2 - Intranet Evaluation partielle et compilation 21 septembre 2007 Cours de compilation 2 - Intranet

Les grandes lignes du cours Définitions de base Composition de compilateurs L’environnement d’un compilateur Evaluation partielle et compilation Analyses lexicales et syntaxiques Techniques d’analyse descendantes Techniques d’analyse ascendantes YACC Analyse sémantique Environnement d’exécution Génération de code Optimisation de code 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet I N T R O D U C T I O N 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète un compilateur 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! un compilateur Il ne possède aucune donnée ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il possède une partie des données ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il possède une partie des données ! Il exécute les parties du programme pour lesquelles il a toutes les données et laisse tel quel le reste ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il exécute les parties du programme pour lesquelles il a toutes les données et laisse tel quel le reste ! un compilateur Il ne possède aucune donnée ! Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Classiquement, on distingue entre un interprète Il possède toutes les données ! Il exécute tout le programme ! un évaluateur (interprète) partiel Il ne possède aucune donnée ! Il exécute les parties du programme pour lesquelles il a toutes les données et laisse tel quel le reste ! un compilateur Il n’exécute rien du tout ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions et permet de construire automatiquement un compilateur en partant de son interprète ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions et permet de construire automatiquement un compilateur en partant de son interprète ! La théorie en a été faite par Futamura en 1971: Les trois projections de Futamura. 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Définitions de base ---------------------------------------------------------------- Un évaluateur partiel est donc un outil hybride entre interprète et compilateur, qui englobe les deux notions et permet de construire automatiquement un compilateur en partant de son interprète ! La théorie en a été faite par Futamura en 1971: Les trois projections de Futamura. Les premières réalisations datent de 1986. 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Q U E L Q U E S N O T A T I O N S E T D E F I N I T I O N S 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c prog.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c son exécutable, indiqué par le suffixe .o prog.c prog.o 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c son exécutable, indiqué par le suffixe .o prog.c prog.o Nous distinguons aussi entre les programmes unaires, indiqués par le 1 prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Pour un programme, nous distinguons entre son code source, indiqué par le suffixe .c son exécutable, indiqué par le suffixe .o prog.c prog.o Nous distinguons aussi entre les programmes unaires, indiqués par le 1 les programmes binaires, indiqués par le 2 prog1.c prog2.o 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c l’unique donnée D de ce programme. 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c l’unique donnée D de ce programme. Nous avons les propriétés suivantes : Int.o ( Prog1.c , D ) = Résultat 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un interprète Int est un programme binaire dont les arguments sont : le texte source d’un programme unaire Prog1.c l’unique donnée D de ce programme. Nous avons les propriétés suivantes : Int.o ( Prog1.c , D ) = Résultat Prog1.o ( D ) = Résultat 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c On dit encore que le programme Prog2.c est « spécialisé » par rapport à la donnée D1 ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c Prog1.o ( D2 ) = Résultat Int.o ( Prog1.c , D2 ) = Résultat Pour tout D2 : 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Notations et définitions ---------------------------------------------------------------- Un évaluateur partiel Ep est un programme binaire dont les arguments sont : le source d’un programme binaire Prog2.c la première donnée D1 de ce programme. Nous avons les propriétés suivantes : Ep.o ( Prog2.c , D1 ) = Prog1.c Prog1.o ( D2 ) = Résultat Prog2.o ( D1 , D2 ) = Résultat Pour tout D2 : 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet E X E M P L E S 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. L’idée est la suivante : ( x + 3 ) * ( y – 4 ) plus le fait que x vaille 5 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. L’idée est la suivante : ( x + 3 ) * ( y – 4 ) plus le fait que x vaille 5 donne 8 * ( y – 4 ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- L’évaluateur Ep évalue les sous-expressions connues et laisse les autres telles quelles. L’idée est la suivante : ( x + 3 ) * ( y – 4 ) plus le fait que x vaille 5 donne 8 * ( y – 4 ) 8 5 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == 1 ) return( d1 + d2 ) else return( ( d1 * d1 ) + d2 ) l ( d2 ) return( 9 + d2 ) Faux 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) l ( d2 ) if ( 3 == d2 ) return( 3 * d2 ) else return( 9 ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 d2 vaut 3 ici !!! 3 9 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 d2 vaut 3 ici !!! 3 Le résultat vaut donc toujours 9 !!! 9 l ( d2 ) return( 9 ) 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Un évaluateur partiel ne fait rien de tel ! Exemples ---------------------------------------------------------------- Ep.o ( Prog2.c , D1 ) = Prog1.c Peuvent être calculées : Il nous reste : Un humain aurait fait mieux avec un raisonnement conditionnel ! 3 3 l ( d1 , d2 ) if ( d1 == d2 ) return( d1 * d2 ) else return( ( d1 * d1 ) ) 3 d2 vaut 3 ici !!! 3 Le résultat vaut donc toujours 9 !!! 9 l ( d2 ) return( 9 ) 3 3 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet L A B A S E D E S P R O J E C T I O N S D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Int.o ( Prog1.c , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale est la suivante : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Int.o ( Prog1.c , D2 ) = Res  Prog1.o ( D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res  Prog1.o ( D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res  Prog1.o ( D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res L’équivalence fondamentale ---------------------------------------------------------------- L’équivalence fondamentale plus précisément : Les projections de Futamura sont des instances particulières de cette équivalence, avec des choix tout à fait particuliers pour Prog2.c , D1 et D2 ! Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res  Prog1.o ( D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet P R E M I E R E P R O J E C T I O N D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = Res Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = Res  Int.o ( Prog1.c , D ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val » Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val »  Int.o ( Prog1.c , D ) = « Val » 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val » Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val »  Int.o ( Prog1.c , D ) = « Val » 21 septembre 2007 Cours de compilation 2 - Intranet

Première projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Int.c D1 = Prog1.c D2 = D Compile_Prog1.c Int.o ( Ep.o ( Int.c , Prog1.c ) , D ) = « Val »  Int.o ( Prog1.c , D ) = « Val »  Compile_Prog1.o ( D ) = « Val » 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! L’exécution du programme n’est pas encore réalisée ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cela s'appelle "compiler" ! ! ! Première projection de Futamura ---------------------------------------------------------------- Pourquoi ? Ce qui est connu ! ! ! L’analyse du programme est donc déjà réalisée ! ! ! Int.c : l ( P , D ) case is_cst? ( P ) return ( P ) is_var? ( P ) return ( value ( P , D )) is_add? ( P ) return ( add_int ( ... , ... ) ) ... Ce qui n’est pas connu ! ! ! L’exécution du programme n’est pas encore réalisée ! ! ! ... ... ... 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- La première projection de Futamura donne donc le texte source du code que l’interprète aurait exécuté s’il avait eu les données ! 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- La première projection de Futamura donne donc le texte source du code que l’interprète aurait exécuté s’il avait eu les données ! Nous obtenons un « compilateur interprétatif », c’est-à-dire réalisé par inspection de l’interprète : Comp_int.c = l ( P ) Ep.o ( Int.c , P ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Première projection de Futamura ---------------------------------------------------------------- La première projection de Futamura donne donc le texte source du code que l’interprète aurait exécuté s’il avait eu les données ! Nous obtenons un « compilateur interprétatif », c’est-à-dire réalisé par inspection de l’interprète : Comp_int.c = l ( P ) Ep.o ( Int.c , P ) Comp_int.o ( Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Résumé ---------------------------------------------------------------- Résumons : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet D E U X I E M E P R O J E C T I O N D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res  Ep.o ( Int.c , Prog1.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La première projection pour comparaison : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res  Ep.o ( Int.c , Prog1.c ) = Res Prog2.c = Int.c D1 = Prog1.c D2 = D 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La première projection pour comparaison : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res  Ep.o ( Int.c , Prog1.c ) = Res Prog2.c = Int.c D1 = Prog1.c D2 = D 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Res  Ep.o ( Int.c , Prog1.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Compile_Prog1.c  Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Compile_Prog1.c  Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Deuxième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Compilateur_Int.c Int.o ( Ep.o ( Ep.c , Int.c ) , Prog1.c ) = Compile_Prog1.c  Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c  Compilateur_Int.o ( Prog1.c ) = Compile_Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Résumé ---------------------------------------------------------------- Résumons : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet T R O I S I E M E P R O J E C T I O N D E F U T A M U R A 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Prog2.c , D1 ) , D2 ) = Res  Prog2.o ( D1 , D2 ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res  Ep.o ( Ep.c , Int.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La deuxième projection pour comparaison : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res  Ep.o ( Ep.c , Int.c ) = Res Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : La deuxième projection pour comparaison : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res  Ep.o ( Ep.c , Int.c ) = Res Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c 21 septembre 2007 Cours de compilation 2 - Intranet

Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Res  Ep.o ( Ep.c , Int.c ) = Res 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Compilateur_Int.c  Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Compilateur_Int.c  Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Troisième projection de Futamura ---------------------------------------------------------------- L’équivalence fondamentale est instanciée par : Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Gen_Compil.c Int.o ( Ep.o ( Ep.c , Ep.c ) , Int.c ) = Compilateur_Int.c  Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c  Gen_Compil.o ( Int.c ) = Compilateur_Int.c 21 septembre 2007 Cours de compilation 2 - Intranet

Résumé ---------------------------------------------------------------- Résumons : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet S Y N T H E S E 21 septembre 2007 Cours de compilation 2 - Intranet

Synthèse ---------------------------------------------------------------- Les trois projections de Futamura : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet

Synthèse ---------------------------------------------------------------- Les trois projections de Futamura : Ep.o ( Int.c , Prog1.c ) = Compile_Prog1.c Ep.o ( Ep.c , Int.c ) = Compilateur_Int.c Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Remarquable : Gen_Compil.o ( Ep.c ) = Int.o ( Gen_Compil.c , Ep.c ) = Int.o ( Ep.o ( Ep.c , Ep.c ) , Ep.c ) = Ep.o ( Ep.c , Ep.c ) = Gen_Compil.c 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). De 1986 à 1995, construction de générateurs de compilateurs pour des langages fonctionnels. 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). De 1986 à 1995, construction de générateurs de compilateurs pour des langages fonctionnels. Depuis, on fait de l’évaluation partielle de sous-ensembles de C . 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Synthèse ---------------------------------------------------------------- Quelques commentaires : Cela fonctionne, mais n’est pas très efficace (cf. l’optimisation conditionnelle de tout à l’heure). De 1986 à 1995, construction de générateurs de compilateurs pour des langages fonctionnels. Depuis, on fait de l’évaluation partielle de sous-ensembles de C . Parfois, on obtient des accélérations d’un facteur 100 et plus (synthèse d’images). 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet Résumé ---------------------------------------------------------------- Evaluation partielle et compilation 21 septembre 2007 Cours de compilation 2 - Intranet

Cours de compilation 2 - Intranet C ’ e S t L a F i N ! ! ! b O n N e J o U r N é E ! ! ! 21 septembre 2007 Cours de compilation 2 - Intranet