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

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

Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)

Présentations similaires


Présentation au sujet: "Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)"— Transcription de la présentation:

1 Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) www.zegour.uuuq.com email: d_zegour@esi.dzd_zegour@esi.dz

2 Procédures et fonctions : Introduction Un programme est un ensemble de modules. Le premier module est principal Chaque module autre que le principal est soit une procédure(ACTION) ou une fonction (FONCTION). Chaque module est compilé séparément Le résultat de chaque module compilé (forme interne) est sauvegardé dans un fichier

3 Procédures et fonctions : Organisation de la mémoire à l’exécution Format de la zone de données Adresse zone de données de l'appelant Adresse vers un entier contenant le numéro de l’appelant Adresse vers un entier contenant le numéro du quadruplet de retour dans l’appelant Paramètres Variables locales et temporaires Notre implémentation : Une zone de données ne contient que des adresses ( vers n’importe quel type d’objet )

4 Procédures et fonctions : Organisation de la mémoire à l’exécution Les différentes zones de données à un moment donné : l’action principale (P) appelle Q; Q appelle R; R appelle S. Le tas 0 k Libre ZDD S ZDD P ZDD Q ZDD R Pile d’exécution Constantes Méthode S en cours d’exécution Lien vers l’appelant Paramètres Variables locales Variables temporaires Principal Procédure S (en cours d’exécution) Les variables globales se trouvent en fond de pile

5 Procédures et fonctions : gestion des zones de données Paramètres Tous les paramètres sont transmis par "nom". Tous les paramètres doivent être déclarés. Variables globales Si une variable utilisée n'est pas définie dans l'action ou la fonction, elle doit être globale( déclarée dans le module principal).

6 Procédures et fonctions : gestion des zones de données Au moment d'un appel  Vérification : nombre de paramètres et concordance des types  Allocation d'une zone de données (Empilement) et mise à jour du sommet de pile  Mise à jour des Informations de lien Mot 0 <-- adresse zone de données de l'appelant Mot 1 <-- adresse vers un entier contenant le numéro de l’appelant Mot 2 <-- adresse vers un entier contenant le numéro du quadruplé du retour (adresse de retour) dans l'appelant  Passage des paramètres (transmissions des adresses vers les mots Mot3, Mot4,...  Chargement des tables de l'appelée si elles n'existent pas en mémoire  Donner la main à l'appelée.

7 Procédures et fonctions : gestion des zones de données Au moment d'un retour  Récupération du - numéro du quadruplé de retour (adresse de retour) - numéro de l’appelant  Libération de la zone de données ( dépilement ) et mise à jour du sommet de pile  Si les tables de l'appelant n'existent pas en mémoire, les charger. ( cas des appels récursifs)  Donner la main à l’appelant

8 Procédures et fonctions : gestion des zones de données Compléments  Les procédures récursives sont gérées de la même manière.  Pendant l’exécution - les tables de compilation du module principal existent toujours en mémoire. - Au plus, les tables d’un module secondaire sont présentes en mémoire.  Des opérations de « Swapping » sont alors entreprises comme suit : lors d’un appel ou d’un retour à un module, si les tables de ce dernier ne sont pas présentes en mémoire centrale alors on les charge  Il est clair que les tables de compilation restent invariantes pendant l’exécution.

9 Procédures et fonctions : table des procédures TABPRO ChampsSignification NomNom de la procédure ou fonction NuméroNuméro attribué Défini Booléen indiquant si le module a été défini Typetype (si le module compilé est une fonction) Longzddlongueur de la Zdd QuadrupletTable des quadruplés TabobTable des objets TabcompTable complémentaire TabtypTable des types Fichiers correspondants

10 Procédures et fonctions : les variables globales  Tous les objets déclarés (variables, enregistrement, tableau, … ) dans l’action principale (la première action) sont globaux à toutes les actions et fonctions.  Les objets globaux sont connus et peuvent être référencés dans toutes les actions et fonctions.  Si une variable est re déclarée avec le même nom dans une action secondaire ou fonction, elle sera considérée comme locale.

11 Procédures et fonctions : Sémantique des variables globales Dans la phase de compilation il y a présence permanente des tables des symboles et des tables des objets de l’action principale et de l’action en cours de compilation Action principale : TABSYMG = (Symbole, Indice dans TABOBG) TABOBG : Table des objets du module principal Action (ou fonction) en cours de compilation : TABSYM = (Symbole, Indice dans TABOB) TABOB : Table des objets du module en cours de compilation

12 Procédures et fonctions : Sémantique des variables globales Modification des modules New_idf et Old_idf : New_id(Idf)  indice dans la table des symboles, -1 si Échec Un nouvel identificateur vient d’être déclaré. Si compilation du module principal Vérifie si l’identificateur Idf n’est pas déjà déclaré (n’existe pas dans la table TABSYMG ) puis le met dans la table Si compilation d’un module secondaire Vérifie si l’identificateur Idf n’est pas déjà déclaré (n’existe pas dans la table TABSYM ) puis le met dans la table

13 Procédures et fonctions : Sémantique des variables globales Modification des modules New_idf et Old_idf : Old_id(idf )  Indice (dans la table des symboles ), -  si Échec Si compilation du module principal Un identificateur vient d’être déclaré ou utilisé. Recherche l’emplacement correspondant dans la table des symboles du module en cours ( TABSYMG ) Si Trouvé : (Indice > 0 : dans TABSYMG ); Si compilation d’un module secondaire Recherche l’emplacement correspondant dans la table des symboles du module en cours ( TABSYM ).Si Trouvé : (Indice > 0 : dans TABSYM ); S’il n’existe pas continuer la recherche dans TABSYMG Si Trouvé : indice = -indice (Indice < 0 : dans TABSYMG )

14 Sémantique des procédures et fonctions : Quadruplés Au niveau des déclarations ACTION (Parf1,Parf2,…), FONCTION(Parf1, Parf2,….) : Type A : Nombre de paramètres B : Pointeur dans TABCOMP vers la liste des paramètres formels C : Pointeur dans TABPRO Remarque : Dans le cas d’une fonction, un paramètre est ajouté implicitement de type Type et qui contiendra le résultat de la fonction. (‘Proc’, A, B, C )

15 Sémantique des procédures et fonctions : Quadruplés Au niveau des instructions APPEL Idf (Par1, Par2,…..) A : Pointeur dans TABOB vers une constante contenant le nom de l’appelé B : Pointeur dans TABCOMP vers la liste des paramètres réels C : Nombre de paramètres (‘Appel’, A, B, C )

16 Procédures et fonctions : Déclarations  [ ~Soit|Soient~ ] Debut Fin [;]  ;{ [~Soit|Soient~] ;}*  [Sep ~ ~]  Idf {, Idf}* { ~ | ~ [;] }*  Action Idf [ ( ) ] [;] [ ~Soit|Soient~ ] Debut Fin  Fonction Idf ( ) : [ ~Soit|Soient~ ] Debut Fin |~Action|Fonction( )~

17 Procédures et fonctions : Déclarations  Types | | Tableau( )[De~ |Types~ ] |  [Structure ](Types {, Types }*)  Cste {, Cste}*

18 Procédures et fonctions : Instructions  { ; }*  Idf := | Lire ( Idf {, Idf }* ) | Ecrire ( {, }* ) | Tantque [ : ] Fintantque | Si [:] [Sinon ] Fsi | Pour Idf:=, [, ][:] Finpour | Appel Idf [(Exp {, }*)] |

19 Procédures et fonctions : Instructions  ~ Init_vecteur | Init_struct ~ ( Idf, [[ ~ |[[ {, }*]] ~ {, ~ |[[ {, }*]]~}* ]] ) | Aff_element ( [[ {, }* ]], ) | Aff_struct(Idf, Cste, )

20 Procédures et fonctions : Expressions  [ Opr ]  [Sign] { Opa }*  {Opm }*  Idf | Cste | ( ) | | Non | Vrai | Faux | Chaine  Element ( [[ {, }* ]] ) | Struct ( Idf, Cste) [(Exp {, }*)]

21 Sémantique d’une déclaration : Fonctions sémantiques  Action | Fonction ( ) F1 Soit L la liste des identificateurs ayant la spécification S. Pour chaque identificateur Idf : vérifier s’il n’est pas déjà déclaré, sinon Erreur. Le mettre dans TABPRO ( champ Nom=‘Idf’ et Défini=faux) F1 F2 Soit L la liste des identificateurs ayant la spécification S et soit Typefonc le type retourné par. Pour chaque identificateur Idf : vérifier s’il n’est pas déjà déclaré, sinon Erreur. Le mettre dans TABPRO ( champ Nom=‘Idf’, Défini=faux et Type= Typefonc) F2

22 Sémantique d’une action : Fonctions sémantiques  Action Idf [ ( ) ] [;] [ ~Soit|Soient~ ] Debut Fin F2 Initialiser un compteur pour l’attribution des adresses (Adrcour=3) F1 F1F3 F4F5 Vérifier que l’action Idf existe dans TABPRO. Sinon Erreur. Mettre le champ ‘défini’ à vrai.Soit Pttabpro l’emplacement de Idf. F2 Soit L la liste des paramètres retournée par. Créer les objets pour les paramètres et les mettre les paramètres dans Tabcomp. Soit Pttabcom l’emplacement dans cette table et N leur nombre. Générer le quadruplet (‘Proc’, N, Pttabcomp, Pttabpro) F3 Vérifier que tous les paramètres sont déclarés F4 Générer le quadruplet (‘Ret’,,,) F5

23 Sémantique d’une fonction : Fonctions sémantiques  Fonction Idf ( ) : [ ~Soit|Soient~ ] Debut Fin F5 Initialiser un compteur pour l’attribution des adresses (Adrcour=3) F1 Vérifier que la fonction Idf existe dans TABPRO. Sinon Erreur. Mettre le champ ‘défini’ à vrai.Soit Pttabpro l’emplacement de Idf. F2 Soit L la liste des paramètres retournée par. Créer les objets pour les paramètres et les mettre les paramètres dans Tabcomp. Soit Pttabcom l’emplacement dans cette table et N leur nombre. Ajouter un paramètre avec le nom de la fonction et ayant le type retourné par. Générer le quadruplet (‘Proc’, N+1, Pttabcomp, Pttabpro) F3 Vérifier que tous les paramètres sont déclarés F4 Générer le quadruplet (‘Ret’,,,) F5 F1F2F3 F4

24 Sémantique d’un appel de procédure : Fonctions sémantiques  Appel Idf [( {, }*)] F4 Vérifier que la procédure Idf a été déclarée. Sinon Erreur F1 F1F2F3 Soit Temp le résultat retourné par. S’il s’agit d’une constante générer un temporaire Tempx du type de la constante et générer le quadruplet (‘Aff’, Temp,, Tempx). Mettre Temp (ou Tempx) dans Tabcomp. Soit Pttabcomp son emplacement dans cette table. Initialiser un compteur Compte à 1. F2 Soit Temp le résultat retourné par. S’il s’agit d’une constante générer un temporaire Tempx du type de la constante et générer le quadruplet (‘Aff’, Temp,, Tempx). Mettre Temp (ou Tempx) dans Tabcomp. Incrémenter Compte F3

25 Sémantique d’un appel de procédure : Fonctions sémantiques  Appel Idf [( {, }*)] F4 F1F2F3 Générer une constante chaîne de caractères pour idf et créer dans TABOB un objet pour cette constante. Soit Pt1 son emplacement dans cette table.Générer le quadruplé (‘Appel’, Pt1, Pttabcomp, Compte) F4 La vérification sur le nombre de paramètres et la concordance des types est effectuée à l’exécution.

26 Sémantique d’un appel de fonction : Fonctions sémantiques  Idf [( Exp {, }*)] F3 F1F2 Vérifier que la fonction Idf a été déclarée. Sinon Erreur. Soit Typefonc le type de la fonction idf. générer un temporaire Tempf de type Typefonc et le mettre dans Tabcomp. Soit Pttabcomp son emplacement dans cette table. Initialiser un compteur Compte à 1. F1 Soit Temp le résultat retourné par. S’il s’agit d’une constante générer un temporaire Tempx du type de la constante et générer le quadruplet (‘Aff’, Temp,, Tempx). Mettre Temp (ou Tempx) dans Tabcomp. Incrémenter Compte F2

27 Sémantique d’un appel de fonction : Fonctions sémantiques  Idf [( Exp {, }*)] F3F1F2 Générer une constante chaîne de caractères pour idf et créer dans TABOB un objet pour cette constante. Soit Pt1 son emplacement dans cette table.Générer le quadruplé (‘Appel’, Pt1, Pttabcomp, Compte). Retourner Ptempf. F3 La vérification sur le nombre de paramètres et la concordance des types est effectuée à l’exécution.

28 Sémantique des procédures : Exemple soit a,b, c des entiers; somme une action; debut lire(a);lire(b); appel somme (a,b,c); ecrire (c) fin action somme (x, y, z) soit x, y,z des entiers; debut z := x + y fin ‘L’110 111 112 ‘C’210 0 1 2 TABOB 3 LONGZDD 3 Quadruplés générés ‘De’0 1 2 ‘Lire’01 11 ‘Appel’323 ‘Ecr’31 1 2 3 TABCOMP TABTYP ES 0 0 ‘Somme’ TABCONS 1 0,1,2 2 3 2 1 0 4 5 6

29 Sémantique des procédures : Exemple soit a,b, c des entiers; somme une action; debut lire(a);lire(b); appel somme (a,b,c); ecrire (c) fin action somme (x, y, z) soit x, y,z des entiers; debut z := x + y fin ‘L’113 114 115 ‘X’116 0 1 2 TABOB 7 LONGZDD 3 Quadruplés générés ‘Proc’301 ‘De’0 1 2 ‘+E’013 ‘Aff’232 ‘Ret’ 1 2 3 TABCOMP TABTYP E 0 0,1,2 0 Indice dans la table des procédures

30 Sémantique des fonctions : Exemple soit a,b des entiers; somme une fonction(entier); debut lire(a);lire(b); ecrire( somme (a,b) ); fin fonction somme (x, y) : entier soit x, y des entiers; debut somme := x + y fin ‘L’110 111 ‘X’112 ‘C’210 0 1 2 TABOB 3 LONGZDD 3 Quadruplés générés ‘De’0 1 ‘Lire’01 11 ‘Appel’323 ‘Ecr’31 1 2 3 TABCOMP TABTYP ES 0 0 ‘Somme’ TABCONS 1 2, 0,1 2 3 2 1 0 4 5

31 Sémantique des fonctions : Exemple Soit a,b des entiers; somme une fonction(entier); debut lire(a);lire(b); ecrire( somme (a,b) ); fin fonction somme (x, y) : entier soit x, y des entiers; debut somme := x + y fin ‘L’113 114 115 ‘X’116 0 1 2 TABOB 7 LONGZDD 3 Quadruplés générés ‘Proc’301 ‘De’0 1 ‘+E’123 ‘Aff’03 ‘Ret’ 1 2 3 TABCOMP TABTYP E 0 0,1,2 0 Table des procédures 4 5

32 Sémantique des variables globales : Exemple Soit g un entier; V un vecteur(10); soit A une action; debut g :=5; appel A ; fin action A ; Soit I un entier; debut pour I:=1, 10 Aff_element(V[I], Element(V[I]) + g ); fpour; Ecrire(V) fin ‘L’110 ‘C’110 ‘L’241 ‘C’111 612 0 1 2 TABOB 2 LONGZDD 3 Quadruplés générés ‘De’0 ‘Dv’201 ‘Aff’03 ‘Appel’40 1 2 3 TABTYP EV10ES 0 ‘10’,’5’,’A’ TABCONS 0 1 2 4 TABCOMP 1 0

33 Sémantique des variables globales : Exemple Soit g un entier; V un vecteur(10); soit A une action; debut g :=5; appel A ; fin action A ; Soit I un entier; debut pour I:=1, 10 Aff_element(V[I], Element(V[I]) + g ); fpour; Ecrire(V) fin ‘L’113 ‘C’110 111 ‘X’214 ‘Y’115 ‘X’116 0 1 2 TABOB 4 LONGZDD 3 Quadruplés générés ‘Proc’01 ‘Aff’01 ‘<=’023 ‘B’349 ‘Elem’04 ‘+E’4-05 ‘Aff_el’05 ‘+E’010 ‘B’2 ‘Ecrire’21 ‘Ret’ 1 2 3 TABTYP EB 0 ‘1’,’10’ TABCONS 0 1 44 5 6 7 8 TABCOMP 0 0 0 1 9 10 11 5 -2 2 TABPRO


Télécharger ppt "Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)"

Présentations similaires


Annonces Google