1 / 22

Projet GENIE LOGICIEL

Réalisation d’un compilateur ADT’81 à TAD persistants. 19 Mai 2008. Projet GENIE LOGICIEL. IASIG promotion 2007 - 2008. Les rôles de l’équipe 1. L’en-tête d’un module Les déclarations d’externes La gestion des appels. Traitement de l’en-tête d’un module.

magee
Télécharger la présentation

Projet GENIE LOGICIEL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Réalisation d’un compilateur ADT’81 à TAD persistants 19 Mai 2008 Projet GENIE LOGICIEL IASIG promotion 2007 - 2008

  2. Les rôles de l’équipe 1 • L’en-tête d’un module • Les déclarations d’externes • La gestion des appels

  3. Traitement de l’en-tête d’un module Rappel: en ADT’81, la définition d’un module comporte : • La nature du module : • le programme (program) • la procédure sans type (subroutine) • la procédure avec type (function) • le foncteur (functor) • la coroutine (coroutine)

  4. Son identificateur • La liste des paramètres formels • L’indication éventuelle de la récursivité • L’indication éventuelle de la généricité • Le type retourné dans le cas d’une procédure sans type • Le genre et le type retourné dans le cas d’un foncteur

  5. Les tâches associées à la BNF traitant l’en-tête • Tâche : @1000# : Traitement de la nature du module • Tâche : @1001#: Traitement du nom de module+ traitement du préfixe dans le cas d’un foncteur Insertion du préfixe dans la TPPF

  6. Tâche @1002#: Traitement des paramètres formels Exemple de procédure sans type : subroutine decision (note, elimination, seuil) ; Mise à jour de TETMODUL:

  7. Tâche @1015#: • Test sur la présence de récursivité • Test sur la conformité de returns • Mise à jour de l’extension de TETMODUL

  8. Vérification de la conformité des paramètres actuels avec les paramètres formels Tâche @1006#

  9. Gestion de la déclaration d’externe • <partie externe> ::= [ external@1200# [ { <description d’externe> ;@1209# } ] ] [ <partie intrinsèque> ] • <description d’externe> ::= <ident> [ { , <ident> } ]  :@1201# program@1202# | subroutine@1203# [ recursive@1207# ] [ generic@1005#] | coroutine@1204#[ generic@1005#] | function@1205# [ recursive@1207# ] [generic @1005#] returns@1211#<type retourné> [ <flou>@1500#] | functor@1206# [ recursive@1207# ] [generic @1005#] returns@1211# <résultat de foncteur>  • <partie intrinsèque> ::= intrinsic@1208# { <ident> [ { , <ident> } ] … • Taches @1200# à @1209# : remplissage des tables en lien avec les externes • @1200# : initialisation des variables temporaires • @1201# : enregistrement des noms des externes • @1202# -> @1206# : enregistrement de la variable temporaire sur la nature • @1207# : variable temporaire (booléen) renseignement la récursivité • @1208# : activation de la variable « intrinseque » • @1209# : remplissage des tables d’externes

  10. <type spécifié> ::= <type>@2007# <type> ::= <numérique> | <texte> | <booléen> | <tad > naturetemp recursiftemp Type retourné TGEXT TGETFFExt TGMODUL TEXTETFF TEXT

  11. GESTION DES INTRINSEQUES CHARGE_INTRIN Comparer… Table des intrinsèques TABLES

  12. GESTION DES ERREURS Externe déjà déclaré Déclaration non conforme

  13. Validation des externes • Comparer la nature, le type, … • Pendant leur déclaration: • Condition : doit avoir été compilé (TGMODCOMP + extension) • A l’enregistrement de l’entête de module: • Condition : doit avoir été déclaré en externe (TGEXT) Type retourné naturetemp

  14. COMPILATION DE FIN DE MODULE <corps de module> ::= begin @3000# <lie>end @3001# ; @3002 • Tous les externes validés? ValidMODULE() • Existe-t-il un retour (result) dans le corps d’un foncteur ou fonction? ValidFF() • Tous les externes ont-ils été appelés? ExterneAPPELE() • Compiler le module : ValidCOMPIL() TGEXT TGMODULE

  15. EDITION DE LIEN • Valide les modules • Condition : ses externes doivent être validés • Condition : chaque module doit avoir été appelé au moins une fois ? X D

  16. LES APPELS Les procédures appelées par les autres équipes • La procédure statique « Instruction_exécutable »: • La procédure statique « Entete_fct » • La procédure statique « remp »

  17. LES APPELS La procédure statique «Instruction exécutable » • Procédure (statique et void) appelée dans une instruction exécutable lors d’un appel d’externe. • <appel de procédure sans type> ::= call @3200# <ident de module> @3211# <partie paramètres actuels>@1300# • <relance de coroutine> ::= resume @3201# <ident de module> @3212# <partie paramètres actuels>@1300 # • 1er rôle : renseigner l’équipe 3 de l’adresse de l’externe (TEXT). • 2nd rôle: vérifier la conformité à la déclaration d’externe(sa nature avec mot utilisé). • Les moyens: procédure RechercheCEXT, TEXT,codeIE

  18. LES APPELS La procédure statique «Entete_fct » • Procédure (statique et void) appelée dans une expression lors d’un appel d’externe (juste après « ident de module ») • <fonction> ::= FUNCTION <ident de module> <partie paramètres actuels> • <foncteur> ::= FUNCTOR <ident module foncteur> [ <partie paramètres actuels>] • Un rôle multiple : • Donner l’adresse de l’externe dans TEXT • Donner le genre de l’externe • Donner le type de l’externe • Les moyens : Nom_externe, RechercheCEXT et TEXT

  19. LES APPELS La procédure statique «remp » • Procédure (statique et void) appelée dans une expression lors d’un appel d’externe (juste après « partie paramètres actuels ») • <fonction> ::= FUNCTION <ident de module> <partie paramètres actuels> • <foncteur> ::= FUNCTOR <ident module foncteur> [ <partie paramètres actuels>] • Un rôle complexe: • Dans le cas d’un foncteur: gérer le préfixe • Suite à l’appel, remplir les tables TAPP, TPA,TGAPP, TGPA et TGMODUL(colonne Valide) • Vérifier la conformité à la déclaration de module • Vérifier si l’externe a été compilé: si non alors RIEN, si oui alors étape 2 • Pour chaque paramètre actuel vérifier si l’objet de la classe CGPA est identique à celui de TGPF (même type, même genre etc).

  20. Remplissage des principales tables relatifs à un appel Remplissage des tables TAPP et TPA Remplissage des tables TGAPP et TGPA

  21. Transmission du code de la tâche Appel de « ParamActu » Moteur de compilation Tâche 1300 Moteur de l’équipe 1 LES APPELS Tâche 1300 « ParamActu » • Procédure (statique et void) appelée dans une instruction exécutable juste après « partie paramètres actuels » • <appel de procédure sans type> ::= call @3200# <ident de module> @3211# <partie paramètres actuels>@1300# • <relance de coroutine> ::= resume @3201# <ident de module> @3212# <partie paramètres actuels>@1300 # • Un rôle complexe mais similaire à « remp »: • Vérification de la syntaxe de l’appel: PA vide, « ( » ou/et « ) » absente(s). • Remplir les tables TAPP, TPA,TGAPP, TGPA et TGMODUL(colonne Valide) • Vérifier la conformité à la déclaration de module • Vérifier si l’externe a été compilé: si non alors RIEN, si oui alors étape 2 • Pour chaque paramètre actuel, vérifier si l’objet de la classe CGPA est identique à celui de TGPF (même type, même genre etc).

  22. Merci de votre attention

More Related