La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Cours de compilation 2 - Intranet

Présentations similaires


Présentation au sujet: "Cours de compilation 2 - Intranet"— Transcription de la présentation:

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

2 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

3 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

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

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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

17 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

18 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

19 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

20 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

21 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

22 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

23 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

24 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

25 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

26 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

27 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

28 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

29 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

30 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

31 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

32 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

33 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

34 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

35 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

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

37 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

38 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

39 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

40 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

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

42 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

43 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

44 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

45 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

46 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

47 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

48 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

49 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

50 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

51 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

52 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

53 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

54 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

55 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

56 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

57 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

58 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

59 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

60 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

61 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

62 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

63 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

64 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

65 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

66 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

67 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

68 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

69 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

70 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

71 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

72 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

73 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

74 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

75 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

76 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

77 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

78 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

79 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

80 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

81 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

82 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

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

84 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

85 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

86 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

87 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

88 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

89 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

90 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

91 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

92 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

93 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

94 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

95 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

96 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

97 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

98 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

99 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

100 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

101 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

102 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

103 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

104 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

105 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

106 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

107 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

108 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

109 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

110 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

111 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

112 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

113 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

114 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

115 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

116 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

117 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

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

119 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

120 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

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

122 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

123 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

124 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

125 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

126 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

127 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

128 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

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

130 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

131 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

132 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

133 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

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

135 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


Télécharger ppt "Cours de compilation 2 - Intranet"

Présentations similaires


Annonces Google