Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Environnement d’exécution
Cours de compilation Analyse sémantique Environnement d’exécution 10 octobre 2007 Cours de compilation 6 - Intranet
2
Les grandes lignes du cours
Définitions de base Composition de compilateurs L’environnement d’un compilateur Evaluation partielle et compilation Analyses lexicales et syntaxiques Techniques d’analyse descendantes Techniques d’analyse ascendantes YACC Analyse sémantique Environnement d’exécution Génération de code Optimisation de code 10 octobre 2007 Cours de compilation 6 - Intranet
3
Cours de compilation 6 - Intranet
L ‘ A N A L Y S E S E M A N T I Q U E 10 octobre 2007 Cours de compilation 6 - Intranet
4
Cours de compilation 6 - Intranet
V E R I F I C A T I O N D E S T Y P E S 10 octobre 2007 Cours de compilation 6 - Intranet
5
Cours de compilation 6 - Intranet
L’analyse sémantique Elle est faite en même temps que les analyses lexicales et syntaxiques ! 10 octobre 2007 Cours de compilation 6 - Intranet
6
Cours de compilation 6 - Intranet
L’analyse sémantique 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é : Déclaration avant l’utilisation ! 10 octobre 2007 Cours de compilation 6 - Intranet
7
Cours de compilation 6 - Intranet
L’analyse sémantique 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é : Déclaration avant l’utilisation ! Les seuls problèmes : Les procédures mutuellement récursives ! Les types récursifs ! 10 octobre 2007 Cours de compilation 6 - Intranet
8
Cours de compilation 6 - Intranet
L’analyse sémantique proc f ( ) { g ( ); } proc g ( ) f ( ); 10 octobre 2007 Cours de compilation 6 - Intranet
9
Cours de compilation 6 - Intranet
L’analyse sémantique proc f ( ) { g ( ); } proc g ( ) f ( ); 10 octobre 2007 Cours de compilation 6 - Intranet
10
Cours de compilation 6 - Intranet
L’analyse sémantique proc g ( ) ; proc f ( ) { g ( ); } proc g ( ) f ( ); Il faut un prototype pour g ! ! ! 10 octobre 2007 Cours de compilation 6 - Intranet
11
Cours de compilation 6 - Intranet
L’analyse sémantique proc g ( ) ; proc f ( ) ; proc f ( ) { g ( ); } proc g ( ) f ( ); Il faut un prototype pour g ! ! ! Nous donnons tous les prototypes ! ! ! 10 octobre 2007 Cours de compilation 6 - Intranet
12
Cours de compilation 6 - Intranet
L’analyse sémantique Les types récursifs en Pascal : type ptr_arbre = ^arbre ; arbre = record champ : ptr_arbre end ; 10 octobre 2007 Cours de compilation 6 - Intranet
13
Cours de compilation 6 - Intranet
L’analyse sémantique Les types récursifs en Pascal : type ptr_arbre = ^arbre ; arbre = record champ : ptr_arbre end ; Une référence en avant (la seule tolérée en Pascal). 10 octobre 2007 Cours de compilation 6 - Intranet
14
Cours de compilation 6 - Intranet
L’analyse sémantique Les types récursifs en Pascal : type ptr_arbre = ^arbre ; arbre = record champ : ptr_arbre end ; Les types récursifs en C : struct moi_meme { struct moi_meme *self ; } *ptr_structure ; Une référence en avant (la seule tolérée en Pascal). 10 octobre 2007 Cours de compilation 6 - Intranet
15
Cours de compilation 6 - Intranet
L’analyse sémantique Les types récursifs en Pascal : type ptr_arbre = ^arbre ; arbre = record champ : ptr_arbre end ; Les types récursifs en C : struct moi_meme { struct moi_meme *self ; } *ptr_structure ; Une référence en avant (la seule tolérée en Pascal). Nous introduisons un nom auxiliaire ! 10 octobre 2007 Cours de compilation 6 - Intranet
16
Cours de compilation 6 - Intranet
Vérification des types Il s’agit de vérifier l’adéquation entre : Les opérateurs et leurs arguments : #define ab int x x + ( 3 * ab ) 10 octobre 2007 Cours de compilation 6 - Intranet
17
Cours de compilation 6 - Intranet
Vérification des types Il s’agit de vérifier l’adéquation entre : Les opérateurs et leurs arguments : #define ab int x x + ( 3 * ab ) Les membres gauche et droits d’une affectation : float x ; x = ; 10 octobre 2007 Cours de compilation 6 - Intranet
18
Cours de compilation 6 - Intranet
Vérification des types Il s’agit de vérifier l’adéquation entre : Les opérateurs et leurs arguments : #define ab int x x + ( 3 * ab ) Les membres gauche et droits d’une affectation : float x ; x = ; Les déclarations et appels des procédures et fonctions : float f ( int x , float y ) ; f ( 5 , 3.14 ) 10 octobre 2007 Cours de compilation 6 - Intranet
19
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous faisons de la synthèse de types ! 10 octobre 2007 Cours de compilation 6 - Intranet
20
Cours de compilation 6 - Intranet
Principe de la vérification des 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 ! 10 octobre 2007 Cours de compilation 6 - Intranet
21
Cours de compilation 6 - Intranet
Principe de la vérification des 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; * + q deref 1 p 10 octobre 2007 Cours de compilation 6 - Intranet
22
Cours de compilation 6 - Intranet
Principe de la vérification des 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; * + q deref 1 int* p 10 octobre 2007 Cours de compilation 6 - Intranet
23
Cours de compilation 6 - Intranet
Principe de la vérification des 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; * + q int deref 1 int* p 10 octobre 2007 Cours de compilation 6 - Intranet
24
Cours de compilation 6 - Intranet
Principe de la vérification des 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; * + q int deref 1 int int* p 10 octobre 2007 Cours de compilation 6 - Intranet
25
Cours de compilation 6 - Intranet
Principe de la vérification des 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; * int +_int q int deref 1 int int* p 10 octobre 2007 Cours de compilation 6 - Intranet
26
Cours de compilation 6 - Intranet
Principe de la vérification des 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; * int +_int q float int deref 1 int int* p 10 octobre 2007 Cours de compilation 6 - Intranet
27
Cours de compilation 6 - Intranet
Principe de la vérification des 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; *_float float int +_int q float int deref 1 int int* p 10 octobre 2007 Cours de compilation 6 - Intranet
28
Cours de compilation 6 - Intranet
Principe de la vérification des 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; *_float float int_2_float int +_int q float Au passage, nous explicitons la conversion entre types ! int deref 1 int int* p 10 octobre 2007 Cours de compilation 6 - Intranet
29
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! 10 octobre 2007 Cours de compilation 6 - Intranet
30
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! #define ab 2 int x; * + x 2 1 10 octobre 2007 Cours de compilation 6 - Intranet
31
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! #define ab 2 int x; * int int + x int int 2 1 int 10 octobre 2007 Cours de compilation 6 - Intranet
32
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! #define ab 2 int x; * int int + x int val = 2 & int 2 1 int 10 octobre 2007 Cours de compilation 6 - Intranet
33
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! #define ab 2 int x; * int int + x int val = 2 & int 2 1 int & val = 1 10 octobre 2007 Cours de compilation 6 - Intranet
34
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! #define ab 2 int x; * int val = 3 & int + x int val = 2 & int 2 1 int & val = 1 10 octobre 2007 Cours de compilation 6 - Intranet
35
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! #define ab 2 int x; * int val = 3 & int + x int & val = ? val = 2 & int 2 1 int & val = 1 10 octobre 2007 Cours de compilation 6 - Intranet
36
Cours de compilation 6 - Intranet
Principe de la vérification des types Nous pouvons même propager des constantes, introduites par exemple à l’aide de #define ! #define ab 2 int x; * int & val = ? val = 3 & int + x int & val = ? val = 2 & int 2 1 int & val = 1 10 octobre 2007 Cours de compilation 6 - Intranet
37
Cours de compilation 6 - Intranet
Principe de la vérification des types On vérifie également que les tests des if , while , sont des booléens, sauf en C ! 10 octobre 2007 Cours de compilation 6 - Intranet
38
Cours de compilation 6 - Intranet
Principe de la vérification des types On 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 ! 10 octobre 2007 Cours de compilation 6 - Intranet
39
Cours de compilation 6 - Intranet
Principe de la vérification des types On 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 10 octobre 2007 Cours de compilation 6 - Intranet
40
Cours de compilation 6 - Intranet
Principe de la vérification des types On 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 test A [ i ] devient i >= 17 test ERREUR i <= 39 A [ i ] ERREUR 10 octobre 2007 Cours de compilation 6 - Intranet
41
Cours de compilation 6 - Intranet
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 10 octobre 2007 Cours de compilation 6 - Intranet
42
Cours de compilation 6 - Intranet
La table des symboles Concernant les variables nous construisons la « table des symboles », nous respectons la « visibilité lexicale », nous déduisons la « durée de vie » des variables ! 10 octobre 2007 Cours de compilation 6 - Intranet
43
Cours de compilation 6 - Intranet
La table des symboles Concernant 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 variable son type, ses éventuels paramètres, des attributs, . . . prend garde aux homonymes avec des numéros uniques. 10 octobre 2007 Cours de compilation 6 - Intranet
44
Cours de compilation 6 - Intranet
La table des symboles Concernant 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 variable son type, ses éventuels paramètres, des attributs, . . . prend garde aux homonymes avec des numéros uniques. 1 2 3 ... x f ... int int->int float ... / inline double ... 10 octobre 2007 Cours de compilation 6 - Intranet
45
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? 10 octobre 2007 Cours de compilation 6 - Intranet
46
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int t ; . . . x y z t . . . } 10 octobre 2007 Cours de compilation 6 - Intranet
47
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int t ; . . . x y z t . . . } 10 octobre 2007 Cours de compilation 6 - Intranet
48
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int t ; . . . x y z t . . . } Cette occurrence de x est masquée par la redéfinition locale ! 10 octobre 2007 Cours de compilation 6 - Intranet
49
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int t ; . . . x y z t . . . } Cette occurrence de x est masquée par la redéfinition locale ! 10 octobre 2007 Cours de compilation 6 - Intranet
50
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int 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) 10 octobre 2007 Cours de compilation 6 - Intranet
51
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int 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) 10 octobre 2007 Cours de compilation 6 - Intranet
52
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int 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) 10 octobre 2007 Cours de compilation 6 - Intranet
53
Cours de compilation 6 - Intranet
La visibilité lexicale Qui référence quoi ? int x ; int y ; int f ( float z ) { int x ; int 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) x , t et z sont des variables dites « liées » dans f ! (variables locales) 10 octobre 2007 Cours de compilation 6 - Intranet
54
Cours de compilation 6 - Intranet
La visibilité lexicale Un bloc ! 10 octobre 2007 Cours de compilation 6 - Intranet
55
Cours de compilation 6 - Intranet
La visibilité lexicale Un bloc ! { Les variables locales . . . } 10 octobre 2007 Cours de compilation 6 - Intranet
56
Cours de compilation 6 - Intranet
La visibilité lexicale Un bloc ! { Les variables locales sont créées . . . } Entrée 10 octobre 2007 Cours de compilation 6 - Intranet
57
Cours de compilation 6 - Intranet
La visibilité lexicale Un bloc ! { Les variables locales sont créées . . . } Entrée Exécution 10 octobre 2007 Cours de compilation 6 - Intranet
58
Cours de compilation 6 - Intranet
La visibilité lexicale Un bloc ! { Les variables locales sont créées . . . } Les variables locales sont détruites Entrée Exécution Sortie 10 octobre 2007 Cours de compilation 6 - Intranet
59
Cours de compilation 6 - Intranet
La visibilité lexicale Un bloc ! { Les variables locales sont créées . . . } Les variables locales sont détruites La durée de vie est « statique » ou « lexicale » ! ! ! Entrée Exécution Sortie 10 octobre 2007 Cours de compilation 6 - Intranet
60
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! 10 octobre 2007 Cours de compilation 6 - Intranet
61
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! Blocs disjoints 10 octobre 2007 Cours de compilation 6 - Intranet
62
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! Blocs disjoints Blocs englobants 10 octobre 2007 Cours de compilation 6 - Intranet
63
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! { } { } { { } } Blocs disjoints Blocs englobants 10 octobre 2007 Cours de compilation 6 - Intranet
64
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! Visibilité ! ! ! Blocs disjoints Blocs englobants 10 octobre 2007 Cours de compilation 6 - Intranet
65
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! Visibilité ! ! ! Blocs disjoints Blocs englobants ICI 10 octobre 2007 Cours de compilation 6 - Intranet
66
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! Visibilité ! ! ! Blocs disjoints Blocs englobants non oui ICI 10 octobre 2007 Cours de compilation 6 - Intranet
67
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! Visibilité ! ! ! Blocs disjoints Blocs englobants non ICI oui ICI 10 octobre 2007 Cours de compilation 6 - Intranet
68
Cours de compilation 6 - Intranet
La visibilité lexicale Organisation relative des blocs ! Visibilité ! ! ! Blocs disjoints Blocs englobants non oui oui ICI oui ICI 10 octobre 2007 Cours de compilation 6 - Intranet
69
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : 10 octobre 2007 Cours de compilation 6 - Intranet
70
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! 10 octobre 2007 Cours de compilation 6 - Intranet
71
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! 10 octobre 2007 Cours de compilation 6 - Intranet
72
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! 10 octobre 2007 Cours de compilation 6 - Intranet
73
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
74
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! oui oui oui ICI 10 octobre 2007 Cours de compilation 6 - Intranet
75
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! oui oui oui ICI 10 octobre 2007 Cours de compilation 6 - Intranet
76
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! oui non non oui non oui ICI 10 octobre 2007 Cours de compilation 6 - Intranet
77
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! int x ; int x ; float y ; float z ; 10 octobre 2007 Cours de compilation 6 - Intranet
78
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! float z int x ; Table des symboles chaînée : int x int x ; float y ; float y float z ; int x 10 octobre 2007 Cours de compilation 6 - Intranet /
79
Cours de compilation 6 - Intranet
La visibilité lexicale Règles de visibilité : - Nous voyons tout ce qui nous englobe (visibilité lexicale) ! - Pour les homonymes, nous voyons l’occurrence la plus interne ! float z int x ; Table des symboles chaînée : int x int x ; float y ; float y L’occurrence externe de x est masquée ! ! float z ; int x 10 octobre 2007 Cours de compilation 6 - Intranet /
80
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : 10 octobre 2007 Cours de compilation 6 - Intranet
81
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! 10 octobre 2007 Cours de compilation 6 - Intranet
82
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! 10 octobre 2007 Cours de compilation 6 - Intranet
83
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! 10 octobre 2007 Cours de compilation 6 - Intranet
84
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
85
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
86
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
87
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! int x ; Toutes les variables ont pu être initialisées ! int x ; float y ; float z ; ICI 10 octobre 2007 Cours de compilation 6 - Intranet
88
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! int x ; Toutes les variables ont pu être initialisées ! L’occurrence externe de x est masquée ! ! int x ; float y ; float z ; ICI 10 octobre 2007 Cours de compilation 6 - Intranet
89
Nous avons une pile d'exécution ! ! !
La visibilité lexicale Nous avons une pile d'exécution ! ! ! Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! int x ; Toutes les variables ont pu être initialisées ! L’occurrence externe de x est masquée ! ! int x ; float y ; float z ; ICI 10 octobre 2007 Cours de compilation 6 - Intranet
90
Nous avons une pile d'exécution ! ! !
La visibilité lexicale Nous avons une pile d'exécution ! ! ! Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! int x ; Toutes les variables ont pu être initialisées ! ENTREE L’occurrence externe de x est masquée ! ! int x ; float y ; float z ; ICI 10 octobre 2007 Cours de compilation 6 - Intranet
91
Nous avons une pile d'exécution ! ! !
La visibilité lexicale Nous avons une pile d'exécution ! ! ! Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! int x ; Toutes les variables ont pu être initialisées ! ENTREE L’occurrence externe de x est masquée ! ! int x ; float y ; float z ; ICI SORTIE 10 octobre 2007 Cours de compilation 6 - Intranet
92
Nous avons une pile d'exécution ! ! !
La visibilité lexicale Nous avons une pile d'exécution ! ! ! Discipline d’exécution : - Nous entrons dans les blocs en respectant les niveaux ! - Nous exécutons les blocs en commençant au début ! int x ; Toutes les variables ont pu être initialisées ! ENTREE L’occurrence externe de x est masquée ! ! int x ; float y ; float z ; ICI SORTIE 10 octobre 2007 Cours de compilation 6 - Intranet
93
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution des GOTO : 10 octobre 2007 Cours de compilation 6 - Intranet
94
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! 10 octobre 2007 Cours de compilation 6 - Intranet
95
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques ! 10 octobre 2007 Cours de compilation 6 - Intranet
96
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques ! 10 octobre 2007 Cours de compilation 6 - Intranet
97
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques ! NON ! ! ! GOTO Les variables ne sont pas initialisées ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
98
Cours de compilation 6 - Intranet
La visibilité lexicale Discipline d’exécution des GOTO : - Un GOTO est un saut vers une instruction (cf. assembleur) ! - Les GOTO ne peuvent pas être quelconques ! NON ! ! ! GOTO Les variables ne sont pas initialisées ! ICI SANS PROBLEMES ! ! ! GOTO 10 octobre 2007 Cours de compilation 6 - Intranet
99
Cours de compilation 6 - Intranet
La visibilité lexicale Conséquences : 10 octobre 2007 Cours de compilation 6 - Intranet
100
Cours de compilation 6 - Intranet
La visibilité lexicale Conséquences : Le dernier bloc dans lequel nous sommes entrés sera le premier que nous allons quitter ! 10 octobre 2007 Cours de compilation 6 - Intranet
101
Cours de compilation 6 - Intranet
La visibilité lexicale 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 ! 10 octobre 2007 Cours de compilation 6 - Intranet
102
Cours de compilation 6 - Intranet
La visibilité lexicale 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 ! L'exécution peut être gérée dans une pile ! ! ! 10 octobre 2007 Cours de compilation 6 - Intranet
103
Cours de compilation 6 - Intranet
V I S I B I L I T E D Y N A M I Q U E 10 octobre 2007 Cours de compilation 6 - Intranet
104
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! 10 octobre 2007 Cours de compilation 6 - Intranet
105
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... ICI 10 octobre 2007 Cours de compilation 6 - Intranet
106
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... En visibilité lexicale, quand nous sommes dans g , nous ne voyons pas le paramètre formel x de f ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
107
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... PILE ICI 10 octobre 2007 Cours de compilation 6 - Intranet
108
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... PILE L’appel initial est f ( 5 ) ! ! ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
109
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... f ( 5 ) y = 3 x = 5 PILE L’appel initial est f ( 5 ) ! ! ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
110
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... f ( 5 ) y = 3 x = 5 PILE L’appel initial est f ( 5 ) ! ! ! ICI x et y ont des valeurs ! 10 octobre 2007 Cours de compilation 6 - Intranet
111
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... PILE L’appel initial est g ( 4 ) ! ! ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
112
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... y = 4 g ( 4 ) PILE L’appel initial est g ( 4 ) ! ! ! ICI 10 octobre 2007 Cours de compilation 6 - Intranet
113
Cours de compilation 6 - Intranet
La visibilité dynamique Toutes les variables de la pile sont visibles (en fait leurs dernières occurrences) ! ! ! void f ( x ) { g ( 3 ) ; } void g ( y ) ... y = 4 g ( 4 ) PILE L’appel initial est g ( 4 ) ! ! ! ICI y seule a une valeur ! 10 octobre 2007 Cours de compilation 6 - Intranet
114
Cours de compilation 6 - Intranet
L E S D U R E E S D E V I E 10 octobre 2007 Cours de compilation 6 - Intranet
115
Cours de compilation 6 - Intranet
Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » ! Elles sont créées à l’entrée dans le bloc ! Elles sont détruites à la sortie du bloc ! 10 octobre 2007 Cours de compilation 6 - Intranet
116
Cours de compilation 6 - Intranet
Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » ! Elles sont créées à l’entrée dans le bloc ! Elles sont détruites à la sortie du bloc ! Les valeurs allouées ont une durée de vie « dynamique » ! Elles sont créées par malloc , ! Elles sont détruites explicitement ! 10 octobre 2007 Cours de compilation 6 - Intranet
117
Cours de compilation 6 - Intranet
Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » ! Elles sont créées à l’entrée dans le bloc ! Elles sont détruites à la sortie du bloc ! Les valeurs allouées ont une durée de vie « dynamique » ! Elles sont créées par malloc , ! Elles sont détruites explicitement ! PILE ! HEAP ! 10 octobre 2007 Cours de compilation 6 - Intranet
118
Cours de compilation 6 - Intranet
Les durées de vie des variables Les variables déclarées ont une durée de vie « statique » ! Elles sont créées à l’entrée dans le bloc ! Elles sont détruites à la sortie du bloc ! Les valeurs allouées ont une durée de vie « dynamique » ! Elles sont créées par malloc , ! Elles sont détruites explicitement ! Attention : { *p ; p = malloc ( ) ; } p sera détruite, mais pas la donnée allouée ! PILE ! HEAP ! 10 octobre 2007 Cours de compilation 6 - Intranet
119
Cours de compilation 6 - Intranet
E N V I R O N N E M E N T D ‘ E X E C U T I O N 10 octobre 2007 Cours de compilation 6 - Intranet
120
Tout sera géré dans la pile
L’environnement d’exécution Tout sera géré dans la pile sauf les malloc ! 10 octobre 2007 Cours de compilation 6 - Intranet
121
Tout sera géré dans la pile
L’environnement d’exécution Tout sera géré dans la pile sauf les malloc ! Dans la pile nous gérons : Les imbrications des opérations (adresses de retour) ! 10 octobre 2007 Cours de compilation 6 - Intranet
122
Tout sera géré dans la pile
L’environnement d’exécution Tout sera géré dans la pile sauf les malloc ! Dans la pile nous gérons : Les imbrications des opérations (adresses de retour) ! Les variables du programme ! 10 octobre 2007 Cours de compilation 6 - Intranet
123
Tout sera géré dans la pile
L’environnement d’exécution Tout sera géré dans la pile sauf les malloc ! Dans la pile nous gérons : Les imbrications des opérations (adresses de retour) ! Les variables du programme ! Les variables temporaires du compilateur ! 10 octobre 2007 Cours de compilation 6 - Intranet
124
Tout sera géré dans la pile
L’environnement d’exécution Tout sera géré dans la pile sauf les malloc ! 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 ! 10 octobre 2007 Cours de compilation 6 - Intranet
125
Cours de compilation 6 - Intranet
L’environnement d’exécution Pour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! 10 octobre 2007 Cours de compilation 6 - Intranet
126
Cours de compilation 6 - Intranet
L’environnement d’exécution Pour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! Soient proc f (... ) { ... f ... g ... } proc g (... ) { ... f ... g ... } 10 octobre 2007 Cours de compilation 6 - Intranet
127
Cours de compilation 6 - Intranet
L’environnement d’exécution Pour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! Soient proc f (... ) { ... f ... g ... } proc g (... ) { ... f ... g ... } Un « arbre d’activations » possible : f f g g g f 10 octobre 2007 Cours de compilation 6 - Intranet f
128
L’environnement d’exécution ----------------------------------------------------------------
Pour les fonctions et procédures nous distinguons entre leurs déclarations et leurs activations ! Soient proc f (... ) { ... f ... g ... } proc g (... ) { ... f ... g ... } Un « arbre d’activations » possible : f Le parcours préfixe de l’arbre d’activation donne la séquence des appels et retours de fonctions ! f g g g f 10 octobre 2007 Cours de compilation 6 - Intranet f
129
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main begin end 10 octobre 2007 Cours de compilation 6 - Intranet
130
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main f ( … ) var_f begin end begin end 10 octobre 2007 Cours de compilation 6 - Intranet
131
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main f ( … ) var_f g (…) var_g begin end begin end begin end 10 octobre 2007 Cours de compilation 6 - Intranet
132
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main f ( … ) var_f g (…) var_g begin end h (…) var_h begin end begin end begin end 10 octobre 2007 Cours de compilation 6 - Intranet
133
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main main f ( … ) var_f f g (…) var_g begin end f h (…) var_h begin end g begin end h begin end g 10 octobre 2007 Cours de compilation 6 - Intranet
134
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main main f ( … ) var_f f g (…) var_g begin end f h (…) var_h begin end g begin end h begin end La pile g 10 octobre 2007 Cours de compilation 6 - Intranet
135
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main main f ( … ) var_f f g (…) var_g begin end f h (…) var_h begin end g begin end h main begin end La pile g 10 octobre 2007 Cours de compilation 6 - Intranet
136
Cours de compilation 6 - Intranet
L’environnement d’exécution main () var_main main f ( … ) var_f f g g (…) var_g begin end h f g h (…) var_h begin end f g f begin end h main begin end La pile g 10 octobre 2007 Cours de compilation 6 - Intranet
137
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g g (…) var_g begin end h g h (…) var_h begin end f f begin end main begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
138
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g g (…) var_g begin end h Nous n’avons pas envie d’inspecter toute la pile à chaque fois que nous avons besoin de la valeur d’une variable ! g h (…) var_h begin end f f begin end main begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
139
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g OUI, le bloc courant ! g (…) var_g begin end h g h (…) var_h begin end f f begin end main begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
140
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g OUI g (…) var_g begin end h NON, à cause de la lexicalité ! g h (…) var_h begin end f f begin end main begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
141
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g OUI g (…) var_g begin end h NON g NON, pas la dernière activation ! h (…) var_h begin end f f begin end main begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
142
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g OUI g (…) var_g begin end h NON g NON h (…) var_h begin end f OUI, dernière activation d’un bloc englobant ! f begin end main begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
143
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g OUI g (…) var_g begin end h NON g NON h (…) var_h begin end f OUI f NON, c’est bien un bloc englobant, mais pas la dernière activation ! begin end main begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
144
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f g OUI g (…) var_g begin end h NON g NON h (…) var_h begin end f OUI f NON begin end main OUI, l’unique activation du bloc principal ! begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
145
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f En résumé : g OUI g (…) var_g begin end h NON g NON h (…) var_h begin end f OUI f NON begin end main OUI begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
146
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f En résumé : Nous voyons les dernières activations du bloc courant et de ses blocs englobants ! g OUI g (…) var_g begin end h NON g NON h (…) var_h begin end f OUI f NON begin end main OUI begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
147
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f En résumé : Nous voyons les dernières activations du bloc courant et de ses blocs englobants ! g OUI g (…) var_g begin end h NON g NON h (…) var_h begin end f OUI f NON begin end main OUI begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
148
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f 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 ! g OUI g (…) var_g begin end h NON g NON h (…) var_h begin end f OUI f NON begin end main OUI begin end La pile 10 octobre 2007 Cours de compilation 6 - Intranet
149
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f Nous créons une mini-pile appelée « adresseur » ou « display » ! g g (…) var_g begin end h g h (…) var_h begin end f f begin end main begin end La pile L’adresseur 10 octobre 2007 Cours de compilation 6 - Intranet
150
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( … ) var_f Nous créons une mini-pile appelée « adresseur » ou « display » ! g g (…) var_g begin end h L’adresseur repère les blocs actifs. g h (…) var_h begin end f f begin end main begin end La pile L’adresseur 10 octobre 2007 Cours de compilation 6 - Intranet
151
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( x ) var_f Nous créons une mini-pile appelée « adresseur » ou « display » ! g g (…) var_g begin end h L’adresseur repère les blocs actifs. g h (…) var_h begin end x f x f begin end main Trouver le paramètre x de f begin end La pile L’adresseur 10 octobre 2007 Cours de compilation 6 - Intranet
152
Qu'est-ce qui est visible de la pile ?
L’environnement d’exécution Qu'est-ce qui est visible de la pile ? main () var_main f ( x ) var_f Nous créons une mini-pile appelée « adresseur » ou « display » ! g g (…) var_g begin end h L’adresseur repère les blocs actifs. g h (…) var_h begin end x f x f Niveau de f begin end main Trouver le paramètre x de f est simple. begin end La pile L’adresseur 10 octobre 2007 Cours de compilation 6 - Intranet
153
Cours de compilation 6 - Intranet
G E S T I O N D E L ‘ A D R E S S E U R 10 octobre 2007 Cours de compilation 6 - Intranet
154
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : 10 octobre 2007 Cours de compilation 6 - Intranet
155
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 1 ) g est de niveau N+1 : - Nous rajoutons une entrée à l’adresseur ! ! ! 10 octobre 2007 Cours de compilation 6 - Intranet
156
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 1 ) g est de niveau N+1 : - Nous rajoutons une entrée à l’adresseur ! ! ! N . . . 1 La pile 10 octobre 2007 Cours de compilation 6 - Intranet
157
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 1 ) g est de niveau N+1 : - Nous rajoutons une entrée à l’adresseur ! ! ! N+1 g N . . . 1 La pile 10 octobre 2007 Cours de compilation 6 - Intranet
158
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 2 ) g est de niveau N : 10 octobre 2007 Cours de compilation 6 - Intranet
159
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 2 ) g est de niveau N : - Si g = f , la nouvelle activation invalide l’ancienne ! - Si g <> f , alors f devient invisible par lexicalité ! 10 octobre 2007 Cours de compilation 6 - Intranet
160
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 2 ) g est de niveau N : - Si g = f , la nouvelle activation invalide l’ancienne ! - Si g <> f , alors f devient invisible par lexicalité ! Dans tous les cas : - Nous sauvons l’entrée N de l’adresseur ! - Nous y installons le pointeur vers le bloc g ! - A la sortie, nous restaurons l’entrée sauvée ! 10 octobre 2007 Cours de compilation 6 - Intranet
161
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 3 ) g est de niveau N - k : 10 octobre 2007 Cours de compilation 6 - Intranet
162
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 3 ) g est de niveau N - k : Si k = 0 , nous retrouvons le cas 2 ! 10 octobre 2007 Cours de compilation 6 - Intranet
163
Cours de compilation 6 - Intranet
La gestion de l’adresseur Soit f une fonction de niveau N qui appelle g ! Discussion par cas suivant le niveau de g : ( 3 ) g est de niveau N - k : Si k = 0 , nous retrouvons le cas 2 ! Donc : - Nous sauvons les entrées N - k , , N ! - Nous y installons le pointeur vers le bloc g ! - A la sortie, nous restaurons les entrées sauvées ! 10 octobre 2007 Cours de compilation 6 - Intranet
164
Cours de compilation 6 - Intranet
La gestion de l’adresseur Nous avons donc les quatre étapes suivantes : N f ( 1 ) N-k-1 1 10 octobre 2007 Cours de compilation 6 - Intranet
165
Cours de compilation 6 - Intranet
La gestion de l’adresseur Sauvegardées ! ! ! Nous avons donc les quatre étapes suivantes : N f ( 1 ) ( 2 ) N-k-1 N-k-1 1 1 10 octobre 2007 Cours de compilation 6 - Intranet
166
Cours de compilation 6 - Intranet
La gestion de l’adresseur Sauvegardées ! ! ! Nous avons donc les quatre étapes suivantes : N f ( 1 ) ( 2 ) N-k-1 N-k-1 1 1 ( 3 ) N-k g N-k-1 1 10 octobre 2007 Cours de compilation 6 - Intranet
167
Cours de compilation 6 - Intranet
La gestion de l’adresseur Sauvegardées ! ! ! Nous avons donc les quatre étapes suivantes : N f ( 1 ) ( 2 ) N-k-1 N-k-1 1 1 La restauration des entrées sauvegardées nous ramène au point de départ. ( 3 ) N-k g ( 4 ) N-k-1 1 10 octobre 2007 Cours de compilation 6 - Intranet
168
Cours de compilation 6 - Intranet
La gestion de l’adresseur En C nous avons : Des variables globales de niveau 1 ! Des fonctions et procédures de niveau 2 ! 10 octobre 2007 Cours de compilation 6 - Intranet
169
Cours de compilation 6 - Intranet
La gestion de l’adresseur En C nous avons : Des variables globales de niveau 1 ! Des fonctions et procédures de niveau 2 ! Ce n’est pas la peine de gérer un adresseur de 2 niveaux ! 10 octobre 2007 Cours de compilation 6 - Intranet
170
Cours de compilation 6 - Intranet
La gestion de l’adresseur En C nous avons : Des variables globales de niveau 1 ! Des fonctions et procédures de niveau 2 ! Ce n’est pas la peine de gérer un adresseur de 2 niveaux ! . . . L’adresseur La pile 10 octobre 2007 Cours de compilation 6 - Intranet
171
Cours de compilation 6 - Intranet
La gestion de l’adresseur 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 ) ; h ( g ) ; } void h ( z ) int x = 3 ; . . . z ( 4 ) ; 10 octobre 2007 Cours de compilation 6 - Intranet
172
Cours de compilation 6 - Intranet
La gestion de l’adresseur 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 ) ; h ( g ) ; } void h ( z ) int x = 3 ; . . . z ( 4 ) ; Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 10 octobre 2007 Cours de compilation 6 - Intranet
173
La fonction g est passée à
La gestion de l’adresseur 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 ) ; h ( g ) ; } void h ( z ) int x = 3 ; . . . z ( 4 ) ; Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 La fonction g est passée à h où elle prend le nom z ! 10 octobre 2007 Cours de compilation 6 - Intranet
174
La fonction g est passée à
La gestion de l’adresseur 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 ) ; h ( g ) ; } void h ( z ) int x = 3 ; . . . z ( 4 ) ; Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 PROBLEME ! 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 qu’elle doit considérer que x vaut 5 ! 10 octobre 2007 Cours de compilation 6 - Intranet
175
La fonction g est passée à
La gestion de l’adresseur 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 ) ; h ( g ) ; } void h ( z ) int x = 3 ; . . . z ( 4 ) ; Pour un appel f ( 5 ), la fonction g doit considérer que x vaut 5 ! x = 5 PROBLEME ! 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 qu’elle doit considérer que x vaut 5 ! SOLUTION ! 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 ! 10 octobre 2007 Cours de compilation 6 - Intranet
176
Cours de compilation 6 - Intranet
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 10 octobre 2007 Cours de compilation 6 - Intranet
177
Cours de compilation 6 - Intranet
La structure d’un bloc d’activation Point de référence ! Lien de contrôle Le bloc précédent ! 10 octobre 2007 Cours de compilation 6 - Intranet
178
Sauvegarde des registres « Place pour le résultat »
La structure d’un bloc d’activation } Mémoire temporaire Variables locales Sauvegarde des registres Mis en place par l’appelé ! Point de référence ! } Lien de contrôle Mis en place par l’appelant ! Les arguments « Place pour le résultat » Le bloc précédent ! 10 octobre 2007 Cours de compilation 6 - Intranet
179
Cours de compilation 6 - Intranet
Résumé Analyse sémantique Environnement d’exécution 10 octobre 2007 Cours de compilation 6 - Intranet
180
Cours de compilation 6 - Intranet
C ’ e S t L a F i N ! ! ! b O n N e J o U r N é E ! ! ! 10 octobre 2007 Cours de compilation 6 - Intranet
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.