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

Slides:



Advertisements
Présentations similaires
Structures de données avancées : MLH (Multidimensional linear hashing)
Advertisements

Structures de données avancées : Principales structures de fichiers
Structures de données avancées : Principales structures de données
Structures de données avancées : MBT ( Multidimensional B-trees )
Traitement sémantique et grammaire dattributs Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI)
Le langage Z Pr ZEGOUR DJAMEL EDDINE
Machines de Turing Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure dInformatique (ESI)
Sémantique des déclarations pour le langage Z minimal
Algorithmique (suite)
C.
Structures et unions types énumérés Qu'est-ce qu'une structure
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Initiation à la programmation et algorithmique cours 3
Algorithmique -les fichiers-
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Algorithmique et Programmation
Analyse lexicale Généralités Expressions rationnelles Automates finis
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
Programmation fonctionnelle Le langage LISP
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
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.
Structures de données IFT-2000

Séance d’introduction
1 Le fichier séquentiel Suite finie déléments dun même type Exemples : – fichier des livres dune bibliothèque – enregistrements sur un magnétophone – ensemble.

Structures de données IFT-10541
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Types de données fondamentaux
Structures de données avancées : Arbres AVL & Arbres Rouge et Noir
2.1 - Historique Chapitre 2 : Introduction au langage C++
Structures complexes Pr ZEGOUR DJAMEL EDDINE
Expressions logiques Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Cours Architecture des Systèmes Informatiques
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Algorithmique et programmation Informatique Cours 12 3/12/2001.
Les adresses des fonctions
Listes linéaires chaînées Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Décomposition et paramétrage des algorithmes
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Un survol du language C.
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.
Sémantique des expressions arithmétiques pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Tables de compilation pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Le langage Z minimal Pr ZEGOUR DJAMEL EDDINE
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
L’analyse lexicale Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Structures de contrôle Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Structures simples et tableaux Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Structures de données avancées : Fichiers multidimensionnels Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) zegour.esi.dz
Les types composés Les enregistrements.
Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
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.
Expressions sur les chaînes de caractères Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
ISBN Chapitre 10 L'implémentation des sous- programmes.
Fonctions standards Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Module algorithmique et programmation
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI) C O M P I L Z.
Fichiers Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
8PRO107 Éléments de programmation Les adresses et les pointeurs.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Organisation de la mémoire pour le langage minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Transcription de la présentation:

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

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

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 )

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

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).

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.

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

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.

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

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.

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

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

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 )

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 )

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 )

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( )~

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

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

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

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

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

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

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

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

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.

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

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.

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’ ‘C’ TABOB 3 LONGZDD 3 Quadruplés générés ‘De’0 1 2 ‘Lire’01 11 ‘Appel’323 ‘Ecr’ TABCOMP TABTYP ES 0 0 ‘Somme’ TABCONS 1 0,1,

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’ ‘X’ TABOB 7 LONGZDD 3 Quadruplés générés ‘Proc’301 ‘De’0 1 2 ‘+E’013 ‘Aff’232 ‘Ret’ TABCOMP TABTYP E 0 0,1,2 0 Indice dans la table des procédures

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’ ‘X’112 ‘C’ TABOB 3 LONGZDD 3 Quadruplés générés ‘De’0 1 ‘Lire’01 11 ‘Appel’323 ‘Ecr’ TABCOMP TABTYP ES 0 0 ‘Somme’ TABCONS 1 2, 0,

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’ ‘X’ TABOB 7 LONGZDD 3 Quadruplés générés ‘Proc’301 ‘De’0 1 ‘+E’123 ‘Aff’03 ‘Ret’ TABCOMP TABTYP E 0 0,1,2 0 Table des procédures 4 5

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’ TABOB 2 LONGZDD 3 Quadruplés générés ‘De’0 ‘Dv’201 ‘Aff’03 ‘Appel’ TABTYP EV10ES 0 ‘10’,’5’,’A’ TABCONS TABCOMP 1 0

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’ ‘X’214 ‘Y’115 ‘X’ 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’ TABTYP EB 0 ‘1’,’10’ TABCONS TABCOMP TABPRO