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

10 octobre 2007Cours de compilation 6 - Intranet1 Cours de compilation Analyse sémantique Environnement dexécution.

Présentations similaires


Présentation au sujet: "10 octobre 2007Cours de compilation 6 - Intranet1 Cours de compilation Analyse sémantique Environnement dexécution."— Transcription de la présentation:

1 10 octobre 2007Cours de compilation 6 - Intranet1 Cours de compilation Analyse sémantique Environnement dexécution

2 10 octobre 2007Cours de compilation 6 - 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 10 octobre 2007Cours de compilation 6 - Intranet3 L A N A L Y S E S E M A N T I Q U E

4 10 octobre 2007Cours de compilation 6 - Intranet4 V E R I F I C A T I O N D E S T Y P E S

5 10 octobre 2007Cours de compilation 6 - Intranet5 Lanalyse sémantique Elle est faite en même temps que les analyses lexicales et syntaxiques !Elle est faite en même temps que les analyses lexicales et syntaxiques !

6 10 octobre 2007Cours de compilation 6 - Intranet6 Lanalyse sémantique Elle est faite en même temps que les analyses lexicales et syntaxiques !Elle est faite en même temps que les analyses lexicales et syntaxiques ! Il faut donc que tout soit déclaré avant dêtre utilisé :Il faut donc que tout soit déclaré avant dêtre utilisé : –Déclaration avant lutilisation !

7 10 octobre 2007Cours de compilation 6 - Intranet7 Lanalyse sémantique Elle est faite en même temps que les analyses lexicales et syntaxiques !Elle est faite en même temps que les analyses lexicales et syntaxiques ! Il faut donc que tout soit déclaré avant dêtre utilisé :Il faut donc que tout soit déclaré avant dêtre utilisé : –Déclaration avant lutilisation ! Les seuls problèmes :Les seuls problèmes : –Les procédures mutuellement récursives ! –Les types récursifs !

8 10 octobre 2007Cours de compilation 6 - Intranet8 Lanalyse sémantique proc f (... ) { g (... ); g (... ); } proc g (... ) { f (... ); f (... ); }

9 10 octobre 2007Cours de compilation 6 - Intranet9 Lanalyse sémantique proc f (... ) { g (... ); g (... ); } proc g (... ) { f (... ); f (... ); }

10 10 octobre 2007Cours de compilation 6 - Intranet10 Lanalyse sémantique proc g (... ) ; proc f (... ) { g (... ); g (... ); } proc g (... ) { f (... ); f (... ); } Il faut un prototype pour g ! ! !

11 10 octobre 2007Cours de compilation 6 - Intranet11 Lanalyse sémantique proc g (... ) ; proc f (... ) ; proc f (... ) { g (... ); g (... ); } proc g (... ) { f (... ); f (... ); } Il faut un prototype pour g ! ! ! Nous donnons tous les prototypes ! ! !

12 10 octobre 2007Cours de compilation 6 - Intranet12 Lanalyse sémantique Les types récursifs en Pascal :Les types récursifs en Pascal : type ptr_arbre = ^arbre ; type ptr_arbre = ^arbre ; arbre = record arbre = record champ : ptr_arbre champ : ptr_arbre end ; end ;

13 10 octobre 2007Cours de compilation 6 - Intranet13 Lanalyse sémantique Les types récursifs en Pascal :Les types récursifs en Pascal : type ptr_arbre = ^arbre ; type ptr_arbre = ^arbre ; arbre = record arbre = record champ : ptr_arbre champ : ptr_arbre end ; end ; Une référence en avant (la seule tolérée en Pascal).

14 10 octobre 2007Cours de compilation 6 - Intranet14 Lanalyse sémantique Les types récursifs en Pascal :Les types récursifs en Pascal : type ptr_arbre = ^arbre ; type ptr_arbre = ^arbre ; arbre = record arbre = record champ : ptr_arbre champ : ptr_arbre end ; end ; Les types récursifs en C :Les types récursifs en C : struct moi_meme { struct moi_meme *self ; struct moi_meme *self ; } *ptr_structure ; *ptr_structure ; Une référence en avant (la seule tolérée en Pascal).

15 10 octobre 2007Cours de compilation 6 - Intranet15 Lanalyse sémantique Les types récursifs en Pascal :Les types récursifs en Pascal : type ptr_arbre = ^arbre ; type ptr_arbre = ^arbre ; arbre = record arbre = record champ : ptr_arbre champ : ptr_arbre end ; end ; Les types récursifs en C :Les types récursifs en C : struct moi_meme { struct moi_meme *self ; struct moi_meme *self ; } *ptr_structure ; *ptr_structure ; Une référence en avant (la seule tolérée en Pascal). Nous introduisons un nom auxiliaire !

16 10 octobre 2007Cours de compilation 6 - Intranet16 Vérification des types Il sagit de vérifier ladéquation entre :Il sagit de vérifier ladéquation entre : –Les opérateurs et leurs arguments : #define ab 5... int x... x + ( 3 * ab )

17 10 octobre 2007Cours de compilation 6 - Intranet17 Vérification des types Il sagit de vérifier ladéquation entre :Il sagit de vérifier ladéquation entre : –Les opérateurs et leurs arguments : #define ab 5... int x... x + ( 3 * ab ) –Les membres gauche et droits dune affectation : float x ;... x = 3.14 ;

18 10 octobre 2007Cours de compilation 6 - Intranet18 Vérification des types Il sagit de vérifier ladéquation entre :Il sagit de vérifier ladéquation entre : –Les opérateurs et leurs arguments : #define ab 5... int x... x + ( 3 * ab ) –Les membres gauche et droits dune affectation : float x ;... x = 3.14 ; –Les déclarations et appels des procédures et fonctions : float f ( int x, float y ) ;... f ( 5, 3.14 )...

19 10 octobre 2007Cours de compilation 6 - Intranet19 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types !

20 10 octobre 2007Cours de compilation 6 - Intranet20 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes !

21 10 octobre 2007Cours de compilation 6 - Intranet21 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref + 1 q *

22 10 octobre 2007Cours de compilation 6 - Intranet22 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref + 1 q * int*

23 10 octobre 2007Cours de compilation 6 - Intranet23 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref + 1 q * int* int

24 10 octobre 2007Cours de compilation 6 - Intranet24 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref + 1 q * int* intint

25 10 octobre 2007Cours de compilation 6 - Intranet25 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref +_int 1 q * int* intint int

26 10 octobre 2007Cours de compilation 6 - Intranet26 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref +_int 1 q * int* intint intfloat

27 10 octobre 2007Cours de compilation 6 - Intranet27 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref +_int 1 q *_float int* intint intfloat float

28 10 octobre 2007Cours de compilation 6 - Intranet28 Principe de la vérification des types Nous faisons de la synthèse de types !Nous faisons de la synthèse de types ! –Nous partons des feuilles (variables et constantes) dont les types sont connus ! –Nous déduisons et vérifions les types des expressions plus complexes ! int *p; float q; p deref +_int 1 q int_2_float int* intint intfloat Au passage, nous explicitons la conversion entre types ! *_floatfloat

29 10 octobre 2007Cours de compilation 6 - Intranet29 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define !

30 10 octobre 2007Cours de compilation 6 - Intranet30 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define ! #define ab 2 int x; x *

31 10 octobre 2007Cours de compilation 6 - Intranet31 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define ! #define ab 2 int x; x * intint int int int

32 10 octobre 2007Cours de compilation 6 - Intranet32 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define ! #define ab 2 int x; x * val = 2 & int int int int int

33 10 octobre 2007Cours de compilation 6 - Intranet33 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define ! #define ab 2 int x; x * val = 2 & int int & val = 1 int int int

34 10 octobre 2007Cours de compilation 6 - Intranet34 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define ! #define ab 2 int x; x * val = 2 & int int & val = 1 val = 3 & int int int

35 10 octobre 2007Cours de compilation 6 - Intranet35 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define ! #define ab 2 int x; x * val = 2 & int int & val = 1 val = 3 & int int & val = ? int

36 10 octobre 2007Cours de compilation 6 - Intranet36 Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à laide de #define !Nous pouvons même propager des constantes, introduites par exemple à laide de #define ! #define ab 2 int x; x * val = 2 & int int & val = 1 val = 3 & int int & val = ?

37 10 octobre 2007Cours de compilation 6 - Intranet37 Principe de la vérification des types On vérifie égalementOn vérifie également –que les tests des if, while,... sont des booléens, sauf en C !

38 10 octobre 2007Cours de compilation 6 - Intranet38 Principe de la vérification des types On vérifie égalementOn vérifie également –que les tests des if, while,... sont des booléens, sauf en C ! –que les tableaux ne débordent pas, sauf en C !

39 10 octobre 2007Cours de compilation 6 - Intranet39 Principe de la vérification des types On vérifie égalementOn vérifie également –que les tests des if, while,... sont des booléens, sauf en C ! –que les tableaux ne débordent pas, sauf en C ! var A = array [ ] of...

40 10 octobre 2007Cours de compilation 6 - Intranet40 Principe de la vérification des types On vérifie égalementOn vérifie également –que les tests des if, while,... sont des booléens, sauf en C ! –que les tableaux ne débordent pas, sauf en C ! var A = array [ ] of... A [ i ] devient test i >= 17 ERREUR test i <= 39 ERREUR A [ i ]

41 10 octobre 2007Cours de compilation 6 - Intranet41 V I S I B I L I T E L E X I C A L E E T T A B L E S D E S S Y M B O L E S

42 10 octobre 2007Cours de compilation 6 - Intranet42 La table des symboles Concernant les variablesConcernant les variables –nous construisons la « table des symboles », –nous respectons la « visibilité lexicale », –nous déduisons la « durée de vie » des variables !

43 10 octobre 2007Cours de compilation 6 - Intranet43 La table des symboles Concernant les variablesConcernant les variables –nous construisons la « table des symboles », –nous respectons la « visibilité lexicale », –nous déduisons la « durée de vie » des variables ! La table des symboles collecte pour chaque variableLa table des symboles collecte pour chaque variable –son type, ses éventuels paramètres, des attributs,... –prend garde aux homonymes avec des numéros uniques.

44 10 octobre 2007Cours de compilation 6 - Intranet44 La table des symboles Concernant les variablesConcernant les variables –nous construisons la « table des symboles », –nous respectons la « visibilité lexicale », –nous déduisons la « durée de vie » des variables ! La table des symboles collecte pour chaque variableLa table des symboles collecte pour chaque variable –son type, ses éventuels paramètres, des attributs,... –prend garde aux homonymes avec des numéros uniques xfx...intint->intfloat.../inlinedouble...

45 10 octobre 2007Cours de compilation 6 - Intranet45 La visibilité lexicale Qui référence quoi ? Qui référence quoi ?

46 10 octobre 2007Cours de compilation 6 - Intranet46 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... }

47 10 octobre 2007Cours de compilation 6 - Intranet47 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... }

48 10 octobre 2007Cours de compilation 6 - Intranet48 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... } Cette occurrence de x est masquée par la redéfinition locale !

49 10 octobre 2007Cours de compilation 6 - Intranet49 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... } Cette occurrence de x est masquée par la redéfinition locale !

50 10 octobre 2007Cours de compilation 6 - Intranet50 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... } Cette occurrence de x est masquée par la redéfinition locale ! La variable y est dite « libre » dans f ! (variable globale)

51 10 octobre 2007Cours de compilation 6 - Intranet51 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... } Cette occurrence de x est masquée par la redéfinition locale ! La variable y est dite « libre » dans f ! (variable globale)

52 10 octobre 2007Cours de compilation 6 - Intranet52 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... } Cette occurrence de x est masquée par la redéfinition locale ! La variable y est dite « libre » dans f ! (variable globale)

53 10 octobre 2007Cours de compilation 6 - Intranet53 La visibilité lexicale Qui référence quoi ? Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; { int x ; int t ; int t ;... x... y... z... t x... y... z... t... } Cette occurrence de x est masquée par la redéfinition locale ! x, t et z sont des variables dites « liées » dans f ! (variables locales) La variable y est dite « libre » dans f ! (variable globale)

54 10 octobre 2007Cours de compilation 6 - Intranet54 La visibilité lexicale Un bloc ! Un bloc !

55 10 octobre 2007Cours de compilation 6 - Intranet55 La visibilité lexicale Un bloc ! Un bloc ! { Les variables locales { Les variables locales }

56 10 octobre 2007Cours de compilation 6 - Intranet56 La visibilité lexicale Un bloc ! Un bloc ! { Les variables locales sont créées { Les variables locales sont créées } Entrée

57 10 octobre 2007Cours de compilation 6 - Intranet57 La visibilité lexicale Un bloc ! Un bloc ! { Les variables locales sont créées { Les variables locales sont créées } Entrée Exécution

58 10 octobre 2007Cours de compilation 6 - Intranet58 La visibilité lexicale Un bloc ! Un bloc ! { Les variables locales sont créées { Les variables locales sont créées } Les variables locales sont détruites } Les variables locales sont détruites Entrée Exécution Sortie

59 10 octobre 2007Cours de compilation 6 - Intranet59 La visibilité lexicale Un bloc ! Un bloc ! { Les variables locales sont créées { Les variables locales sont créées } Les variables locales sont détruites } Les variables locales sont détruites La durée de vie est « statique » ou « lexicale » ! ! ! La durée de vie est « statique » ou « lexicale » ! ! ! Entrée Exécution Sortie

60 10 octobre 2007Cours de compilation 6 - Intranet60 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs !

61 10 octobre 2007Cours de compilation 6 - Intranet61 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! Blocs disjoints Blocs disjoints

62 10 octobre 2007Cours de compilation 6 - Intranet62 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! Blocs disjoints Blocs englobants Blocs disjoints Blocs englobants

63 10 octobre 2007Cours de compilation 6 - Intranet63 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! {... } {... } { {... } } {... } {... } { {... } } Blocs disjoints Blocs englobants Blocs disjoints Blocs englobants

64 10 octobre 2007Cours de compilation 6 - Intranet64 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! Visibilité ! ! ! Visibilité ! ! ! Blocs disjoints Blocs englobants Blocs disjoints Blocs englobants

65 10 octobre 2007Cours de compilation 6 - Intranet65 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! Visibilité ! ! ! Visibilité ! ! ! Blocs disjoints Blocs englobants Blocs disjoints Blocs englobants ICI

66 10 octobre 2007Cours de compilation 6 - Intranet66 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! Visibilité ! ! ! Visibilité ! ! ! Blocs disjoints Blocs englobants Blocs disjoints Blocs englobants ICI oui non

67 10 octobre 2007Cours de compilation 6 - Intranet67 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! Visibilité ! ! ! Visibilité ! ! ! Blocs disjoints Blocs englobants Blocs disjoints Blocs englobants ICI oui non ICI

68 10 octobre 2007Cours de compilation 6 - Intranet68 La visibilité lexicale Organisation relative des blocs ! Organisation relative des blocs ! Visibilité ! ! ! Visibilité ! ! ! Blocs disjoints Blocs englobants Blocs disjoints Blocs englobants ICI oui non ICI oui oui

69 10 octobre 2007Cours de compilation 6 - Intranet69 La visibilité lexicale Règles de visibilité : Règles de visibilité :

70 10 octobre 2007Cours de compilation 6 - Intranet70 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) !

71 10 octobre 2007Cours de compilation 6 - Intranet71 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne !

72 10 octobre 2007Cours de compilation 6 - Intranet72 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne !

73 10 octobre 2007Cours de compilation 6 - Intranet73 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne ! ICI

74 10 octobre 2007Cours de compilation 6 - Intranet74 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne ! ICI oui oui oui

75 10 octobre 2007Cours de compilation 6 - Intranet75 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne ! ICI oui oui oui

76 10 octobre 2007Cours de compilation 6 - Intranet76 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne ! ICI oui oui oui non non non

77 10 octobre 2007Cours de compilation 6 - Intranet77 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne ! int x ; int x ; float y ; float z ;

78 10 octobre 2007Cours de compilation 6 - Intranet78 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne ! int x ; int x ; float y ; float z ; Table des symboles chaînée : float y int x / float z

79 10 octobre 2007Cours de compilation 6 - Intranet79 La visibilité lexicale Règles de visibilité : Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons loccurrence la plus interne ! int x ; int x ; float y ; float z ; Table des symboles chaînée : float y int x / float z Loccurrence externe de x est masquée ! !

80 10 octobre 2007Cours de compilation 6 - Intranet80 La visibilité lexicale Discipline dexécution : Discipline dexécution :

81 10 octobre 2007Cours de compilation 6 - Intranet81 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux !

82 10 octobre 2007Cours de compilation 6 - Intranet82 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début !

83 10 octobre 2007Cours de compilation 6 - Intranet83 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début !

84 10 octobre 2007Cours de compilation 6 - Intranet84 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI

85 10 octobre 2007Cours de compilation 6 - Intranet85 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI

86 10 octobre 2007Cours de compilation 6 - Intranet86 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI

87 10 octobre 2007Cours de compilation 6 - Intranet87 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI int x ; int x ; float y ; float z ; Toutes les variables ont pu être initialisées !

88 10 octobre 2007Cours de compilation 6 - Intranet88 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI int x ; int x ; float y ; float z ; Toutes les variables ont pu être initialisées ! Loccurrence externe de x est masquée ! !

89 10 octobre 2007Cours de compilation 6 - Intranet89 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI int x ; int x ; float y ; float z ; Toutes les variables ont pu être initialisées ! Loccurrence externe de x est masquée ! !

90 10 octobre 2007Cours de compilation 6 - Intranet90 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI int x ; int x ; float y ; float z ; Toutes les variables ont pu être initialisées ! Loccurrence externe de x est masquée ! ! ENTREE

91 10 octobre 2007Cours de compilation 6 - Intranet91 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI int x ; int x ; float y ; float z ; Toutes les variables ont pu être initialisées ! Loccurrence externe de x est masquée ! ! ENTREE SORTIE

92 10 octobre 2007Cours de compilation 6 - Intranet92 La visibilité lexicale Discipline dexécution : Discipline dexécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI int x ; int x ; float y ; float z ; Toutes les variables ont pu être initialisées ! Loccurrence externe de x est masquée ! ! ENTREE SORTIE

93 10 octobre 2007Cours de compilation 6 - Intranet93 La visibilité lexicale Discipline dexécution des GOTO : Discipline dexécution des GOTO :

94 10 octobre 2007Cours de compilation 6 - Intranet94 La visibilité lexicale Discipline dexécution des GOTO : Discipline dexécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) !

95 10 octobre 2007Cours de compilation 6 - Intranet95 La visibilité lexicale Discipline dexécution des GOTO : Discipline dexécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques !

96 10 octobre 2007Cours de compilation 6 - Intranet96 La visibilité lexicale Discipline dexécution des GOTO : Discipline dexécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques !

97 10 octobre 2007Cours de compilation 6 - Intranet97 La visibilité lexicale Discipline dexécution des GOTO : Discipline dexécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques ! GOTO Les variables ne sont pas initialisées ! ICI

98 10 octobre 2007Cours de compilation 6 - Intranet98 La visibilité lexicale Discipline dexécution des GOTO : Discipline dexécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques ! GOTO Les variables ne sont pas initialisées ! ICI GOTO

99 10 octobre 2007Cours de compilation 6 - Intranet99 La visibilité lexicale Conséquences : Conséquences :

100 10 octobre 2007Cours de compilation 6 - Intranet100 La visibilité lexicale Conséquences : Conséquences : Le dernier bloc dans lequel nous sommes entrés sera le premier que nous allons quitter !

101 10 octobre 2007Cours de compilation 6 - Intranet101 La visibilité lexicale Conséquences : Conséquences : Le dernier bloc dans lequel nous sommes entrés sera le premier que nous allons quitter ! Tout ce qui est lexicalement visible depuis un endroit a pu être initialisé au paravent !

102 10 octobre 2007Cours de compilation 6 - Intranet102 La visibilité lexicale Conséquences : Conséquences : Le dernier bloc dans lequel nous sommes entrés sera le premier que nous allons quitter ! Tout ce qui est lexicalement visible depuis un endroit a pu être initialisé au paravent !

103 10 octobre 2007Cours de compilation 6 - Intranet103 L A V I S I B I L I T E D Y N A M I Q U E

104 10 octobre 2007Cours de compilation 6 - Intranet104 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! !

105 10 octobre 2007Cours de compilation 6 - Intranet105 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI

106 10 octobre 2007Cours de compilation 6 - Intranet106 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI En visibilité lexicale, quand nous sommes dans g, nous ne voyons pas le paramètre formel x de f !

107 10 octobre 2007Cours de compilation 6 - Intranet107 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI PILE

108 10 octobre 2007Cours de compilation 6 - Intranet108 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI PILE Lappel initial est f ( 5 ) ! ! !

109 10 octobre 2007Cours de compilation 6 - Intranet109 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI PILE Lappel initial est f ( 5 ) ! ! ! f ( 5 ) x = 5 y = 3

110 10 octobre 2007Cours de compilation 6 - Intranet110 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI PILE Lappel initial est f ( 5 ) ! ! ! f ( 5 ) x = 5 y = 3

111 10 octobre 2007Cours de compilation 6 - Intranet111 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI PILE Lappel initial est g ( 4 ) ! ! !

112 10 octobre 2007Cours de compilation 6 - Intranet112 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI PILE Lappel initial est g ( 4 ) ! ! ! y = 4 g ( 4 )

113 10 octobre 2007Cours de compilation 6 - Intranet113 La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) void f ( x ) { g ( 3 ) ; g ( 3 ) ; } void g ( y ) void g ( y ) { } ICI PILE Lappel initial est g ( 4 ) ! ! ! y = 4 g ( 4 )

114 10 octobre 2007Cours de compilation 6 - Intranet114 L E S D U R E E S D E V I E

115 10 octobre 2007Cours de compilation 6 - Intranet115 Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » !Les variables déclarées ont une durée de vie « statique » ! –Elles sont créées à lentrée dans le bloc ! –Elles sont détruites à la sortie du bloc !

116 10 octobre 2007Cours de compilation 6 - Intranet116 Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » !Les variables déclarées ont une durée de vie « statique » ! –Elles sont créées à lentrée dans le bloc ! –Elles sont détruites à la sortie du bloc ! Les valeurs allouées ont une durée de vie « dynamique » !Les valeurs allouées ont une durée de vie « dynamique » ! –Elles sont créées par malloc,... ! –Elles sont détruites explicitement !

117 10 octobre 2007Cours de compilation 6 - Intranet117 Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » !Les variables déclarées ont une durée de vie « statique » ! –Elles sont créées à lentrée dans le bloc ! –Elles sont détruites à la sortie du bloc ! Les valeurs allouées ont une durée de vie « dynamique » !Les valeurs allouées ont une durée de vie « dynamique » ! –Elles sont créées par malloc,... ! –Elles sont détruites explicitement !

118 10 octobre 2007Cours de compilation 6 - Intranet118 Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » !Les variables déclarées ont une durée de vie « statique » ! –Elles sont créées à lentrée dans le bloc ! –Elles sont détruites à la sortie du bloc ! Les valeurs allouées ont une durée de vie « dynamique » !Les valeurs allouées ont une durée de vie « dynamique » ! –Elles sont créées par malloc,... ! –Elles sont détruites explicitement ! Attention : {... *p ;Attention : {... *p ; p = malloc (... ) ; p = malloc (... ) ; } p sera détruite, mais pas la donnée allouée ! } p sera détruite, mais pas la donnée allouée !

119 10 octobre 2007Cours de compilation 6 - Intranet119 E N V I R O N N E M E N T D E X E C U T I O N

120 10 octobre 2007Cours de compilation 6 - Intranet120 Lenvironnement dexécution

121 10 octobre 2007Cours de compilation 6 - Intranet121 Lenvironnement dexécution Dans la pile nous gérons :Dans la pile nous gérons : –Les imbrications des opérations (adresses de retour) !

122 10 octobre 2007Cours de compilation 6 - Intranet122 Lenvironnement dexécution Dans la pile nous gérons :Dans la pile nous gérons : –Les imbrications des opérations (adresses de retour) ! –Les variables du programme !

123 10 octobre 2007Cours de compilation 6 - Intranet123 Lenvironnement dexécution Dans la pile nous gérons :Dans la pile nous gérons : –Les imbrications des opérations (adresses de retour) ! –Les variables du programme ! –Les variables temporaires du compilateur !

124 10 octobre 2007Cours de compilation 6 - Intranet124 Lenvironnement dexécution Dans la pile nous gérons :Dans la pile nous gérons : –Les imbrications des opérations (adresses de retour) ! –Les variables du programme ! –Les variables temporaires du compilateur ! –Les paramètres des fonctions et procédures !

125 10 octobre 2007Cours de compilation 6 - Intranet125 Lenvironnement dexécution Pour les fonctions et procédures nous distinguons entrePour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! leurs déclarations et leurs activations !

126 10 octobre 2007Cours de compilation 6 - Intranet126 Lenvironnement dexécution Pour les fonctions et procédures nous distinguons entrePour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! leurs déclarations et leurs activations ! Soient proc f (... ) {... f... g... }Soient proc f (... ) {... f... g... } proc g (... ) {... f... g... } proc g (... ) {... f... g... }

127 10 octobre 2007Cours de compilation 6 - Intranet127 Lenvironnement dexécution Pour les fonctions et procédures nous distinguons entrePour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! leurs déclarations et leurs activations ! Soient proc f (... ) {... f... g... }Soient proc f (... ) {... f... g... } proc g (... ) {... f... g... } proc g (... ) {... f... g... } Un « arbre dactivations » possible :Un « arbre dactivations » possible : f g f g f g f

128 10 octobre 2007Cours de compilation 6 - Intranet128 Lenvironnement dexécution Pour les fonctions et procédures nous distinguons entrePour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! leurs déclarations et leurs activations ! Soient proc f (... ) {... f... g... }Soient proc f (... ) {... f... g... } proc g (... ) {... f... g... } proc g (... ) {... f... g... } Un « arbre dactivations » possible :Un « arbre dactivations » possible : f g f g f g f Le parcours préfixe de larbre dactivation donne la séquence des appels et retours de fonctions !

129 10 octobre 2007Cours de compilation 6 - Intranet129 Lenvironnement dexécution main () var_main beginend

130 10 octobre 2007Cours de compilation 6 - Intranet130 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend

131 10 octobre 2007Cours de compilation 6 - Intranet131 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend

132 10 octobre 2007Cours de compilation 6 - Intranet132 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend

133 10 octobre 2007Cours de compilation 6 - Intranet133 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend main f f g h g

134 10 octobre 2007Cours de compilation 6 - Intranet134 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g

135 10 octobre 2007Cours de compilation 6 - Intranet135 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g main

136 10 octobre 2007Cours de compilation 6 - Intranet136 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g main f f g h g

137 10 octobre 2007Cours de compilation 6 - Intranet137 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g

138 10 octobre 2007Cours de compilation 6 - Intranet138 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g Nous navons pas envie dinspecter toute la pile à chaque fois que nous avons besoin de la valeur dune variable !

139 10 octobre 2007Cours de compilation 6 - Intranet139 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g OUI, le bloc courant !

140 10 octobre 2007Cours de compilation 6 - Intranet140 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON, à cause de la lexicalité !

141 10 octobre 2007Cours de compilation 6 - Intranet141 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON, pas la dernière activation !

142 10 octobre 2007Cours de compilation 6 - Intranet142 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON OUI, dernière activation dun bloc englobant !

143 10 octobre 2007Cours de compilation 6 - Intranet143 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON OUI NON, cest bien un bloc englobant, mais pas la dernière activation !

144 10 octobre 2007Cours de compilation 6 - Intranet144 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON OUI NON OUI, lunique activation du bloc principal !

145 10 octobre 2007Cours de compilation 6 - Intranet145 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON OUI NON OUI En résumé :

146 10 octobre 2007Cours de compilation 6 - Intranet146 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON OUI NON OUI En résumé : Nous voyons les dernières activations du bloc courant et de ses blocs englobants !

147 10 octobre 2007Cours de compilation 6 - Intranet147 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON OUI NON OUI En résumé : Nous voyons les dernières activations du bloc courant et de ses blocs englobants !

148 10 octobre 2007Cours de compilation 6 - Intranet148 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h gOUI NON NON OUI NON OUI En résumé : Nous voyons les dernières activations du bloc courant et de ses blocs englobants ! Leur nombre dépend du texte du programme !

149 10 octobre 2007Cours de compilation 6 - Intranet149 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g Ladresseur Nous créons une mini-pile appelée « adresseur » ou « display » !

150 10 octobre 2007Cours de compilation 6 - Intranet150 Lenvironnement dexécution main () var_main beginend f ( … ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g Ladresseur Ladresseur repère les blocs actifs. Nous créons une mini-pile appelée « adresseur » ou « display » !

151 10 octobre 2007Cours de compilation 6 - Intranet151 Lenvironnement dexécution main () var_main beginend f ( x ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g Ladresseur Ladresseur repère les blocs actifs. x x Trouver le paramètre x de f... Nous créons une mini-pile appelée « adresseur » ou « display » !

152 10 octobre 2007Cours de compilation 6 - Intranet152 Lenvironnement dexécution main () var_main beginend f ( x ) var_f beginend g (…) var_gbeginend h (…) var_hbeginend La pile main f f g h g Ladresseur Nous créons une mini-pile appelée « adresseur » ou « display » ! Ladresseur repère les blocs actifs. x x Trouver le paramètre x de f est simple. Niveau de f

153 10 octobre 2007Cours de compilation 6 - Intranet153 G E S T I O N D E L A D R E S S E U R

154 10 octobre 2007Cours de compilation 6 - Intranet154 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g :

155 10 octobre 2007Cours de compilation 6 - Intranet155 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 1 ) g est de niveau N+1 : ( 1 ) g est de niveau N+1 : - Nous rajoutons une entrée à ladresseur ! ! ! - Nous rajoutons une entrée à ladresseur ! ! !

156 10 octobre 2007Cours de compilation 6 - Intranet156 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 1 ) g est de niveau N+1 : ( 1 ) g est de niveau N+1 : - Nous rajoutons une entrée à ladresseur ! ! ! - Nous rajoutons une entrée à ladresseur ! ! ! 1 N La pile...

157 10 octobre 2007Cours de compilation 6 - Intranet157 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 1 ) g est de niveau N+1 : ( 1 ) g est de niveau N+1 : - Nous rajoutons une entrée à ladresseur ! ! ! - Nous rajoutons une entrée à ladresseur ! ! ! 1 N La pile g... N+1

158 10 octobre 2007Cours de compilation 6 - Intranet158 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 2 ) g est de niveau N : ( 2 ) g est de niveau N :

159 10 octobre 2007Cours de compilation 6 - Intranet159 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 2 ) g est de niveau N : ( 2 ) g est de niveau N : - Si g = f, la nouvelle activation invalide lancienne ! - Si g = f, la nouvelle activation invalide lancienne ! - Si g <> f, alors f devient invisible par lexicalité ! - Si g <> f, alors f devient invisible par lexicalité !

160 10 octobre 2007Cours de compilation 6 - Intranet160 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 2 ) g est de niveau N : ( 2 ) g est de niveau N : - Si g = f, la nouvelle activation invalide lancienne ! - Si g = f, la nouvelle activation invalide lancienne ! - Si g <> f, alors f devient invisible par lexicalité ! - Si g <> f, alors f devient invisible par lexicalité ! Dans tous les cas : Dans tous les cas : - Nous sauvons lentrée N de ladresseur ! - Nous sauvons lentrée N de ladresseur ! - Nous y installons le pointeur vers le bloc g ! - Nous y installons le pointeur vers le bloc g ! - A la sortie, nous restaurons lentrée sauvée ! - A la sortie, nous restaurons lentrée sauvée !

161 10 octobre 2007Cours de compilation 6 - Intranet161 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 3 ) g est de niveau N - k : ( 3 ) g est de niveau N - k :

162 10 octobre 2007Cours de compilation 6 - Intranet162 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 3 ) g est de niveau N - k : ( 3 ) g est de niveau N - k : Si k = 0, nous retrouvons le cas 2 ! Si k = 0, nous retrouvons le cas 2 !

163 10 octobre 2007Cours de compilation 6 - Intranet163 La gestion de ladresseur Soit f une fonction de niveau N qui appelle g ! Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : Discussion par cas suivant le niveau de g : ( 3 ) g est de niveau N - k : ( 3 ) g est de niveau N - k : Si k = 0, nous retrouvons le cas 2 ! Si k = 0, nous retrouvons le cas 2 ! Donc : Donc : - Nous sauvons les entrées N - k,..., N ! - Nous sauvons les entrées N - k,..., N ! - Nous y installons le pointeur vers le bloc g ! - Nous y installons le pointeur vers le bloc g ! - A la sortie, nous restaurons les entrées sauvées ! - A la sortie, nous restaurons les entrées sauvées !

164 10 octobre 2007Cours de compilation 6 - Intranet164 La gestion de ladresseur Nous avons donc les quatre étapes suivantes : Nous avons donc les quatre étapes suivantes : ( 1 ) 1 N-k-1 Nf

165 10 octobre 2007Cours de compilation 6 - Intranet165 La gestion de ladresseur Nous avons donc les quatre étapes suivantes : Nous avons donc les quatre étapes suivantes : ( 1 ) 1 N-k-1 Nf ( 2 ) 1 N-k-1 Sauvegardées ! ! !

166 10 octobre 2007Cours de compilation 6 - Intranet166 La gestion de ladresseur Nous avons donc les quatre étapes suivantes : Nous avons donc les quatre étapes suivantes : ( 1 ) 1 N-k-1 Nf ( 2 ) 1 N-k-1 Sauvegardées ! ! ! ( 3 ) 1 N-k-1 N-kg

167 10 octobre 2007Cours de compilation 6 - Intranet167 La gestion de ladresseur Nous avons donc les quatre étapes suivantes : Nous avons donc les quatre étapes suivantes : ( 1 ) 1 N-k-1 Nf ( 2 ) 1 N-k-1 Sauvegardées ! ! ! ( 3 ) 1 N-k-1 N-kg ( 4 ) La restauration des entrées sauvegardées nous ramène au point de départ.

168 10 octobre 2007Cours de compilation 6 - Intranet168 La gestion de ladresseur En C nous avons : En C nous avons : Des variables globales de niveau 1 ! Des variables globales de niveau 1 ! Des fonctions et procédures de niveau 2 ! Des fonctions et procédures de niveau 2 !

169 10 octobre 2007Cours de compilation 6 - Intranet169 La gestion de ladresseur En C nous avons : En C nous avons : Des variables globales de niveau 1 ! Des variables globales de niveau 1 ! Des fonctions et procédures de niveau 2 ! Des fonctions et procédures de niveau 2 ! Ce nest pas la peine de gérer un adresseur de 2 niveaux ! Ce nest pas la peine de gérer un adresseur de 2 niveaux !

170 10 octobre 2007Cours de compilation 6 - Intranet170 La gestion de ladresseur En C nous avons : En C nous avons : Des variables globales de niveau 1 ! Des variables globales de niveau 1 ! Des fonctions et procédures de niveau 2 ! Des fonctions et procédures de niveau 2 ! Ce nest pas la peine de gérer un adresseur de 2 niveaux ! Ce nest pas la peine de gérer un adresseur de 2 niveaux ! Ladresseur La pile...

171 10 octobre 2007Cours de compilation 6 - Intranet171 La gestion de ladresseur Le choix de C se justifie si nous voulons passer, de manière simple, en argument des fonctions à variables libres ! void f ( x ) { void g ( y ) return ( x+y ) ; void g ( y ) return ( x+y ) ; h ( g ) ; h ( g ) ; } void h ( z ) { int x = 3 ; int x = 3 ;... z ( 4 )... ;... z ( 4 )... ; }

172 10 octobre 2007Cours de compilation 6 - Intranet172 La gestion de ladresseur Le choix de C se justifie si nous voulons passer, de manière simple, en argument des fonctions à variables libres ! void f ( x ) { void g ( y ) return ( x+y ) ; void g ( y ) return ( x+y ) ; h ( g ) ; h ( g ) ; } void h ( z ) { int x = 3 ; int x = 3 ;... z ( 4 )... ;... z ( 4 )... ; } Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 x = 5

173 10 octobre 2007Cours de compilation 6 - Intranet173 La gestion de ladresseur Le choix de C se justifie si nous voulons passer, de manière simple, en argument des fonctions à variables libres ! void f ( x ) { void g ( y ) return ( x+y ) ; void g ( y ) return ( x+y ) ; h ( g ) ; h ( g ) ; } void h ( z ) { int x = 3 ; int x = 3 ;... z ( 4 )... ;... z ( 4 )... ; } Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 x = 5 La fonction g est passée à h où elle prend le nom z !

174 10 octobre 2007Cours de compilation 6 - Intranet174 La gestion de ladresseur Le choix de C se justifie si nous voulons passer, de manière simple, en argument des fonctions à variables libres ! void f ( x ) { void g ( y ) return ( x+y ) ; void g ( y ) return ( x+y ) ; h ( g ) ; h ( g ) ; } void h ( z ) { int x = 3 ; int x = 3 ;... z ( 4 )... ;... z ( 4 )... ; } Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 x = 5 La fonction g est passée à h où elle prend le nom z ! z est appliquée dans un contexte où x vaut 3 alors quelle doit considérer que x vaut 5 !

175 10 octobre 2007Cours de compilation 6 - Intranet175 La gestion de ladresseur Le choix de C se justifie si nous voulons passer, de manière simple, en argument des fonctions à variables libres ! void f ( x ) { void g ( y ) return ( x+y ) ; void g ( y ) return ( x+y ) ; h ( g ) ; h ( g ) ; } void h ( z ) { int x = 3 ; int x = 3 ;... z ( 4 )... ;... z ( 4 )... ; } Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 x = 5 La fonction g est passée à h où elle prend le nom z ! z est appliquée dans un contexte où x vaut 3 alors quelle doit considérer que x vaut 5 ! Si les fonctions sont définies au même niveau, le problème ne se pose pas car elles référencent toutes le même contexte !

176 10 octobre 2007Cours de compilation 6 - Intranet176 S T R U C T U R E D U N B L O C D A C T I V A T I O N

177 10 octobre 2007Cours de compilation 6 - Intranet177 La structure dun bloc dactivation Lien de contrôle Point de référence ! Le bloc précédent !

178 10 octobre 2007Cours de compilation 6 - Intranet178 La structure dun bloc dactivation Mémoire temporaire Variables locales Sauvegarde des registres Les arguments « Place pour le résultat » Lien de contrôle Mis en place par lappelé ! } Mis en place par lappelant ! } Point de référence ! Le bloc précédent !

179 10 octobre 2007Cours de compilation 6 - Intranet179 Résumé Analyse sémantique Analyse sémantique Environnement dexécution Environnement dexécution

180 10 octobre 2007Cours de compilation 6 - Intranet180 C e S t L a F i N ! ! ! b O n N e J o U r N é E ! ! !


Télécharger ppt "10 octobre 2007Cours de compilation 6 - Intranet1 Cours de compilation Analyse sémantique Environnement dexécution."

Présentations similaires


Annonces Google