21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation.

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
Les fonctions A quoi ça sert ?
Formation universitaire à .NET: Introduction à C#
Algorithmes et structures de données avancés
Calculs de complexité d'algorithmes
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.
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.
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 compilation 2 - Intranet
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
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.
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 &
C.
Calcul propositionnel
DROITES PARALLELES ET PERPENDICULAIRES 1. Droites sécantes
Cours d’Algorithmique
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
CSI3525: Concepts des Langages de Programmation Notes # 5: Langages de Programmation Fonctionelle I: Introduction au Scheme.
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.
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
Plan cours La notion de pointeur et d’adresse mémoire.
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.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
Tutorat en bio-informatique
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
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
Nouvelles Technologies Internet & Mobile
Scripts et fonctions Instructions de contrôle
Transcription de la présentation:

21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation

21 septembre 2007Cours de compilation 2 - Intranet2 Les grandes lignes du cours Définitions de base Définitions de base Composition de compilateurs Composition de compilateurs Lenvironnement dun compilateur Lenvironnement dun compilateur Evaluation partielle et compilation Evaluation partielle et compilation Analyses lexicales et syntaxiques Analyses lexicales et syntaxiques Techniques danalyse descendantes Techniques danalyse descendantes Techniques danalyse ascendantes Techniques danalyse ascendantes YACC YACC Analyse sémantique Analyse sémantique Environnement dexécution Environnement dexécution Génération de code Génération de code Optimisation de code Optimisation de code

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

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

21 septembre 2007Cours de compilation 2 - Intranet5 Définitions de base Classiquement, on distingue entreClassiquement, on distingue entre –un interprète Il possède toutes les données !Il possède toutes les données ! Il exécute tout le programme !Il exécute tout le programme ! –un évaluateur (interprète) partiel Il possède une partie des données !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 !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 ne possède aucune donnée ! Il nexécute rien du tout !Il nexécute rien du tout !

21 septembre 2007Cours de compilation 2 - Intranet6 Définitions de base Classiquement, on distingue entreClassiquement, on distingue entre –un interprète Il possède toutes les données !Il possède toutes les données ! Il exécute tout le programme !Il exécute tout le programme ! –un évaluateur (interprète) partiel Il possède toutes les données !Il possède toutes les données ! Il exécute les parties du programme pour lesquelles il a toutes les données et laisse tel quel le reste !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 ne possède aucune donnée ! Il nexécute rien du tout !Il nexécute rien du tout !

21 septembre 2007Cours de compilation 2 - Intranet7 Définitions de base Classiquement, on distingue entreClassiquement, on distingue entre –un interprète Il possède toutes les données !Il possède toutes les données ! Il exécute tout le programme !Il exécute tout le programme ! –un évaluateur (interprète) partiel Il ne possède aucune donnée !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 !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 ne possède aucune donnée ! Il nexécute rien du tout !Il nexécute rien du tout !

21 septembre 2007Cours de compilation 2 - Intranet8 Définitions de base Un évaluateur partiel est donc unUn é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:La théorie en a été faite par Futamura en 1971: Les trois projections de Futamura. Les trois projections de Futamura. Les premières réalisations datent de 1986.Les premières réalisations datent de 1986.

21 septembre 2007Cours de compilation 2 - Intranet9 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 2007Cours de compilation 2 - Intranet10 Notations et définitions Pour un programme, nous distinguons entrePour 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 prog.c prog.o Nous distinguons aussi entreNous distinguons aussi entre –les programmes unaires, indiqués par le 1 –les programmes binaires, indiqués par le 2 prog1.c prog2.o prog1.c prog2.o

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

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

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

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

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

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

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

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

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

21 septembre 2007Cours de compilation 2 - Intranet20 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 2007Cours de compilation 2 - Intranet21 Léquivalence fondamentale Int.o ( Ep.o ( Prog2.c, D1 ), D2 ) = Res Léquivalence fondamentale est la suivante :Léquivalence fondamentale est la suivante : Prog2.o ( D1, D2 ) = Res Int.o ( Prog1.c, D2 ) = Res Prog1.o ( D2 ) = Res

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

21 septembre 2007Cours de compilation 2 - Intranet23 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 2007Cours de compilation 2 - Intranet24 Première projection de Futamura Léquivalence fondamentale est instanciée par :Léquivalence fondamentale est instanciée par : Int.o ( Ep.o ( Int.c, Prog1.c ), D ) = « Val » Int.o ( Prog1.c, D ) = « Val » Prog2.c = Int.c D1 = Prog1.c D2 = D Compile_Prog1.c Compile_Prog1.o ( D ) = « Val »

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

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

21 septembre 2007Cours de compilation 2 - Intranet27 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 2007Cours de compilation 2 - Intranet28 Deuxième projection de Futamura Léquivalence fondamentale est instanciée par :Léquivalence fondamentale est instanciée par : La première projection pour comparaison :La première projection pour comparaison : Int.o ( Ep.o ( Ep.c, Int.c ), Prog1.c ) = Res Ep.o ( Int.c, Prog1.c ) = Res Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c Prog2.c = Int.c D1 = Prog1.c D2 = D

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

21 septembre 2007Cours de compilation 2 - Intranet30 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 2007Cours de compilation 2 - Intranet31 Troisième projection de Futamura Léquivalence fondamentale est instanciée par :Léquivalence fondamentale est instanciée par : La deuxième projection pour comparaison :La deuxième projection pour comparaison : Int.o ( Ep.o ( Ep.c, Ep.c ), Int.c ) = Res Ep.o ( Ep.c, Int.c ) = Res Prog2.c = Ep.c D1 = Ep.c D2 = Int.c Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c

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

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

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

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

21 septembre 2007Cours de compilation 2 - Intranet36 Quelques commentaires :Quelques commentaires : –Cela fonctionne, mais nest pas très efficace (cf. loptimisation conditionnelle de tout à lheure). –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 dun facteur 100 et plus (synthèse dimages). Synthèse