Environnement d’exécution

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

Premier programme en C :
Présentation générale Marc Gengler
Les fonctions A quoi ça sert ?
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
Cours d’Algorithmique
Cours d’Algorithmique
Cours d’Algorithmique
Cours d'algorithmique 10 / Intranet 1 19 décembre 2006 Cours dAlgorithmique Logique de Hoare (fin) : Les boucles et les invariants.
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d’Algorithmique
Problème des 4 couleurs, graphes planaires.
Analyse syntaxique (intro)
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut.
Quelques applications.
9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes.
Cours d’Algorithmique
Cours d'algorithmique 9 - Intranet 1 12 décembre 2006 Cours dAlgorithmique Logique de Hoare (début) : Principes et constructions élémentaires.
Cours d'algorithmique 7 - Intranet 1 27 novembre 2006 Cours dAlgorithmique Dérécursion (début) : Équivalences entre programmes récursifs et programmes.
Cours d'algorithmique 4 - Intranet 1 16 novembre 2006 Cours dAlgorithmique Lalgorithme alpha-beta. Sous-arbres alpha et beta dun arbre minimax et propriétés.
Cours d'algorithmique 11 / Intranet 1 9 janvier 2006 Cours dAlgorithmique N P - complétude.
Cours d'algorithmique 5 - Intranet 1 17/21 novembre 2006 Cours dAlgorithmique Divide and Conquer : principes et applications. Calculabilité.Complexité.
Cours de compilation 2 - Intranet
Cours de graphes Les plus courts chemins,
Cours de compilation Marc Gengler 18h de cours avec un peu de TD
18 octobre 2007Cours de compilation 7 - Intranet1 Cours de compilation Génération de code Optimisation de code.
21 septembre 2007Cours de compilation 2 - Intranet1 Cours de compilation Evaluation partielle etcompilation.
Analyse syntaxique (intro)
Cours d'algorithmique 8 - Intranet 1 4 décembre 2006 Cours dAlgorithmique Dérécursion (fin) : Équivalences entre programmes récursifs et programmes itératifs.
Cours d’Algorithmique
24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.
Cours d’Algorithmique
C.
Cours d'algorithmique 2 - Intranet 1 8 novembre 2006 Cours dAlgorithmique Listes, piles et files. Arbres. Types de données abstraits. Implantations.
Cours d’Algorithmique
Principes de programmation (suite)
Cours d’Algorithmique
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Problème des 4 couleurs, graphes planaires.
Quelques graphes particuliers.
Cours de graphes Les arbres et arborescences.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
16 mars 2007Cours de graphes 7 - Intranet1 Cours de graphes Problèmes NP-complets. Réductions polynômiales.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Environnements d'exécution
Cours de graphes Marc Gengler Alexandra Bac Sébastien Fournier
21 février 2006Cours de graphes 2 - Intranet1 Cours de graphes Les plus courts chemins, les chemins les plus légers : à laide de la vague, à laide de la.
Cours de graphes 6 - Intranet
23 février 2007Cours de graphes 4 - Intranet1 Cours de graphes Problèmes de flots. Théorème du Max-flow – Min-cut. Algos de Ford-Fulkerson et Edmonds-Karp.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Plan cours La notion de pointeur et d’adresse mémoire.
Les adresses des fonctions
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Arbres binaires et tables de hachage
Tutorat en bio-informatique
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Les types composés Les enregistrements.
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
PRO-1027 Programmation Scientifique en C
IFT359 – Programmation fonctionnelle Thème 07 Fermeture, affectation ou monades 1.
Transcription de la présentation:

Environnement d’exécution Cours de compilation Analyse sémantique Environnement d’exécution 10 octobre 2007 Cours de compilation 6 - Intranet

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

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

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

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

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

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

Cours de compilation 6 - Intranet L’analyse sémantique ---------------------------------------------------------------- proc f ( . . . ) { g ( . . . ); } proc g ( . . . ) f ( . . . ); 10 octobre 2007 Cours de compilation 6 - Intranet

Cours de compilation 6 - Intranet L’analyse sémantique ---------------------------------------------------------------- proc f ( . . . ) { g ( . . . ); } proc g ( . . . ) f ( . . . ); 10 octobre 2007 Cours de compilation 6 - Intranet

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

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

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

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

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

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

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 5 . . . int x . . . x + ( 3 * ab ) 10 octobre 2007 Cours de compilation 6 - Intranet

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 5 . . . int x . . . x + ( 3 * ab ) Les membres gauche et droits d’une affectation : float x ; . . . x = 3.14 ; 10 octobre 2007 Cours de compilation 6 - Intranet

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 5 . . . int x . . . x + ( 3 * ab ) Les membres gauche et droits d’une 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 ) . . . 10 octobre 2007 Cours de compilation 6 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 [ 17 . . 39 ] of . . . 10 octobre 2007 Cours de compilation 6 - Intranet

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 [ 17 . . 39 ] of . . . test A [ i ] devient i >= 17 test ERREUR i <= 39 A [ i ] ERREUR 10 octobre 2007 Cours de compilation 6 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 /

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 /

Cours de compilation 6 - Intranet La visibilité lexicale ---------------------------------------------------------------- Discipline d’exécution : 10 octobre 2007 Cours de compilation 6 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

Cours de compilation 6 - Intranet La visibilité lexicale ---------------------------------------------------------------- Discipline d’exécution des GOTO : 10 octobre 2007 Cours de compilation 6 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours de compilation 6 - Intranet L’environnement d’exécution ---------------------------------------------------------------- main () var_main begin end 10 octobre 2007 Cours de compilation 6 - Intranet

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours de compilation 6 - Intranet Résumé ---------------------------------------------------------------- Analyse sémantique Environnement d’exécution 10 octobre 2007 Cours de compilation 6 - Intranet

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