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

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

Présentations similaires


Présentation au sujet: "21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation."— Transcription de la présentation:

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

2 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

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

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

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

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

7 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 ! –un compilateur Il ne possède aucune donnée !Il ne possède aucune donnée !

8 21 septembre 2007Cours de compilation 2 - Intranet8 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 !

9 21 septembre 2007Cours de compilation 2 - Intranet9 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 –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 !

10 21 septembre 2007Cours de compilation 2 - Intranet10 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 ! –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 !

11 21 septembre 2007Cours de compilation 2 - Intranet11 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 !

12 21 septembre 2007Cours de compilation 2 - Intranet12 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 !

13 21 septembre 2007Cours de compilation 2 - Intranet13 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 !

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

15 21 septembre 2007Cours de compilation 2 - Intranet15 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

16 21 septembre 2007Cours de compilation 2 - Intranet16 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 !

17 21 septembre 2007Cours de compilation 2 - Intranet17 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.

18 21 septembre 2007Cours de compilation 2 - Intranet18 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.

19 21 septembre 2007Cours de compilation 2 - Intranet19 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

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

21 21 septembre 2007Cours de compilation 2 - Intranet21 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

22 21 septembre 2007Cours de compilation 2 - Intranet22 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 prog1.c prog1.c

23 21 septembre 2007Cours de compilation 2 - Intranet23 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

24 21 septembre 2007Cours de compilation 2 - Intranet24 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 :

25 21 septembre 2007Cours de compilation 2 - Intranet25 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

26 21 septembre 2007Cours de compilation 2 - Intranet26 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.

27 21 septembre 2007Cours de compilation 2 - Intranet27 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

28 21 septembre 2007Cours de compilation 2 - Intranet28 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

29 21 septembre 2007Cours de compilation 2 - Intranet29 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 :

30 21 septembre 2007Cours de compilation 2 - Intranet30 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

31 21 septembre 2007Cours de compilation 2 - Intranet31 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.

32 21 septembre 2007Cours de compilation 2 - Intranet32 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

33 21 septembre 2007Cours de compilation 2 - Intranet33 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 !

34 21 septembre 2007Cours de compilation 2 - Intranet34 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 :

35 21 septembre 2007Cours de compilation 2 - Intranet35 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 :

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

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

38 21 septembre 2007Cours de compilation 2 - Intranet38 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 5

39 21 septembre 2007Cours de compilation 2 - Intranet39 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 )

40 21 septembre 2007Cours de compilation 2 - Intranet40 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

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

42 21 septembre 2007Cours de compilation 2 - Intranet42 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 )

43 21 septembre 2007Cours de compilation 2 - Intranet43 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 ) 3

44 21 septembre 2007Cours de compilation 2 - Intranet44 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 )

45 21 septembre 2007Cours de compilation 2 - Intranet45 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 :

46 21 septembre 2007Cours de compilation 2 - Intranet46 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 :

47 21 septembre 2007Cours de compilation 2 - Intranet47 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

48 21 septembre 2007Cours de compilation 2 - Intranet48 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

49 21 septembre 2007Cours de compilation 2 - Intranet49 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

50 21 septembre 2007Cours de compilation 2 - Intranet50 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

51 21 septembre 2007Cours de compilation 2 - Intranet51 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

52 21 septembre 2007Cours de compilation 2 - Intranet52 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 :

53 21 septembre 2007Cours de compilation 2 - Intranet53 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 :

54 21 septembre 2007Cours de compilation 2 - Intranet54 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 )

55 21 septembre 2007Cours de compilation 2 - Intranet55 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 ) )

56 21 septembre 2007Cours de compilation 2 - Intranet56 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 ) ) 3

57 21 septembre 2007Cours de compilation 2 - Intranet57 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 ) )

58 21 septembre 2007Cours de compilation 2 - Intranet58 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 :

59 21 septembre 2007Cours de compilation 2 - Intranet59 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

60 21 septembre 2007Cours de compilation 2 - Intranet60 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 :

61 21 septembre 2007Cours de compilation 2 - Intranet61 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 :

62 21 septembre 2007Cours de compilation 2 - Intranet62 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 )

63 21 septembre 2007Cours de compilation 2 - Intranet63 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 !

64 21 septembre 2007Cours de compilation 2 - Intranet64 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 !!!

65 21 septembre 2007Cours de compilation 2 - Intranet65 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 )

66 21 septembre 2007Cours de compilation 2 - Intranet66 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 )

67 21 septembre 2007Cours de compilation 2 - Intranet67 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

68 21 septembre 2007Cours de compilation 2 - Intranet68 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

69 21 septembre 2007Cours de compilation 2 - Intranet69 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

70 21 septembre 2007Cours de compilation 2 - Intranet70 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

71 21 septembre 2007Cours de compilation 2 - Intranet71 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

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

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

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

75 21 septembre 2007Cours de compilation 2 - Intranet75 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

76 21 septembre 2007Cours de compilation 2 - Intranet76 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

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

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

79 21 septembre 2007Cours de compilation 2 - Intranet79 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 ) = Res Int.o ( Prog1.c, D ) = Res Prog2.c = Int.c D1 = Prog1.c D2 = D

80 21 septembre 2007Cours de compilation 2 - Intranet80 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

81 21 septembre 2007Cours de compilation 2 - Intranet81 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

82 21 septembre 2007Cours de compilation 2 - Intranet82 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 »

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

84 21 septembre 2007Cours de compilation 2 - Intranet84 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 (...,... ) )......

85 21 septembre 2007Cours de compilation 2 - Intranet85 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 ! ! !

86 21 septembre 2007Cours de compilation 2 - Intranet86 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 ! ! !

87 21 septembre 2007Cours de compilation 2 - Intranet87 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 ! ! !

88 21 septembre 2007Cours de compilation 2 - Intranet88 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 ! ! !

89 21 septembre 2007Cours de compilation 2 - Intranet89 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 ! ! !

90 21 septembre 2007Cours de compilation 2 - Intranet90 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 ! ! !

91 21 septembre 2007Cours de compilation 2 - Intranet91 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 ! ! !

92 21 septembre 2007Cours de compilation 2 - Intranet92 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 !

93 21 septembre 2007Cours de compilation 2 - Intranet93 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 )

94 21 septembre 2007Cours de compilation 2 - Intranet94 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

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

96 21 septembre 2007Cours de compilation 2 - Intranet96 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

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

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

99 21 septembre 2007Cours de compilation 2 - Intranet99 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 ) = Res Ep.o ( Int.c, Prog1.c ) = Res Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c

100 21 septembre 2007Cours de compilation 2 - Intranet100 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

101 21 septembre 2007Cours de compilation 2 - Intranet101 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

102 21 septembre 2007Cours de compilation 2 - Intranet102 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 ) = Res Ep.o ( Int.c, Prog1.c ) = Res Prog2.c = Ep.c D1 = Int.c D2 = Prog1.c

103 21 septembre 2007Cours de compilation 2 - Intranet103 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

104 21 septembre 2007Cours de compilation 2 - Intranet104 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

105 21 septembre 2007Cours de compilation 2 - Intranet105 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

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

107 21 septembre 2007Cours de compilation 2 - Intranet107 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

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

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

110 21 septembre 2007Cours de compilation 2 - Intranet110 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 ) = Res Ep.o ( Ep.c, Int.c ) = Res Prog2.c = Ep.c D1 = Ep.c D2 = Int.c

111 21 septembre 2007Cours de compilation 2 - Intranet111 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

112 21 septembre 2007Cours de compilation 2 - Intranet112 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

113 21 septembre 2007Cours de compilation 2 - Intranet113 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 ) = Res Ep.o ( Ep.c, Int.c ) = Res Prog2.c = Ep.c D1 = Ep.c D2 = Int.c

114 21 septembre 2007Cours de compilation 2 - Intranet114 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

115 21 septembre 2007Cours de compilation 2 - Intranet115 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

116 21 septembre 2007Cours de compilation 2 - Intranet116 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

117 21 septembre 2007Cours de compilation 2 - Intranet117 Résumé Résumons :Résumons : 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

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

119 21 septembre 2007Cours de compilation 2 - Intranet119 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

120 21 septembre 2007Cours de compilation 2 - Intranet120 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

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

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

123 21 septembre 2007Cours de compilation 2 - Intranet123 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 )

124 21 septembre 2007Cours de compilation 2 - Intranet124 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 )

125 21 septembre 2007Cours de compilation 2 - Intranet125 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 )

126 21 septembre 2007Cours de compilation 2 - Intranet126 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 )

127 21 septembre 2007Cours de compilation 2 - Intranet127 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

128 21 septembre 2007Cours de compilation 2 - Intranet128 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

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

130 21 septembre 2007Cours de compilation 2 - Intranet130 Quelques commentaires :Quelques commentaires : –Cela fonctionne, mais nest pas très efficace (cf. loptimisation conditionnelle de tout à lheure). Synthèse

131 21 septembre 2007Cours de compilation 2 - Intranet131 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. Synthèse

132 21 septembre 2007Cours de compilation 2 - Intranet132 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. Synthèse

133 21 septembre 2007Cours de compilation 2 - Intranet133 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

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

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


Télécharger ppt "21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation."

Présentations similaires


Annonces Google