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

Projet GENIE LOGICIEL Réalisation dun compilateur ADT81 à TAD persistants IASIG promotion 2007 - 2008 19 Mai 2008.

Présentations similaires


Présentation au sujet: "Projet GENIE LOGICIEL Réalisation dun compilateur ADT81 à TAD persistants IASIG promotion 2007 - 2008 19 Mai 2008."— Transcription de la présentation:

1 Projet GENIE LOGICIEL Réalisation dun compilateur ADT81 à TAD persistants IASIG promotion Mai 2008

2 Architecture

3 C2 – Etape préparatoire

4 C2 – Moteur M0

5 C2 – Moteur M1 R123 « un parmi » itératif facultatif

6 C2 – Moteur M1 R123

7 C2 – Moteur M1 R

8 C2 – Moteur M2

9 Le Moteur de Compilateur

10 Equipe 1 Len-tête dun module Les déclarations dexternes La gestion des appels

11 Traitement de len-tête dun module Rappel: en ADT81, la définition dun 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)

12 Son identificateur La liste des paramètres formels Lindication éventuelle de la récursivité Lindication éventuelle de la généricité Le type retourné dans le cas dune procédure sans type Le genre et le type retourné dans le cas dun foncteur

13 Les tâches associées à la BNF traitant len-tête Tâche : Traitement de la nature du module Tâche Traitement du nom de module + traitement du préfixe dans le cas dun foncteur Insertion du préfixe dans la TPPF

14 Traitement des paramètres formels Exemple de procédure sans type : subroutine decision (note, elimination, seuil) ; Mise à jour de TETMODUL:

15 Test sur la présence de récursivité Test sur la conformité de returns Mise à jour de lextension de TETMODUL

16 Vérification de la conformité des paramètres actuels avec les paramètres formels

17 Gestion de la déclaration dexterne ::= [ [ { } ] ] [ ] ::= [ {, } ] | [ ] [ ] | [ ] | [ ] [ | [ ] [ ::= { [ {, } ] … : remplissage des tables en lien avec les externes : initialisation des variables temporaires : enregistrement des noms des externes : enregistrement de la variable temporaire sur la nature : variable temporaire (booléen) renseignement la récursivité : activation de la variable « intrinseque » : remplissage des tables dexternes

18 EXTtemp naturetemprecursiftemp Type retourné ::= | | | TGEXT TEXT TGMODUL TGETFFExt TEXTETFF

19 EXTtemp sin TABLES CHARGE_INTRIN Comparer… Table des intrinsèques GESTION DES INTRINSEQUES

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

21 Validation des externes Comparer la nature, le type, … Pendant leur déclaration: – Condition : doit avoir été compilé (TGMODCOMP + extension) A lenregistrement de lentête de module: – Condition : doit avoir été déclaré en externe (TGEXT) Type retourné naturetemp

22 COMPILATION DE FIN DE MODULE ::= Tous les externes validés? ValidMODULE() Existe-t-il un retour (result) dans le corps dun foncteur ou fonction? ValidFF() Tous les externes ont-ils été appelés? ExterneAPPELE() Compiler le module : ValidCOMPIL() TGEXT TGMODULE

23 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

24 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 »

25 LES APPELS La procédure statique «Instruction exécutable » Procédure (statique et void) appelée dans une instruction exécutable lors dun appel dexterne. @1300# @1300 # 1er rôle : renseigner léquipe 3 de ladresse de lexterne (TEXT). 2nd rôle: vérifier la conformité à la déclaration dexterne(sa nature avec mot utilisé). Les moyens: procédure RechercheCEXT, TEXT,codeIE

26 LES APPELS La procédure statique «Entete_fct » Procédure (statique et void) appelée dans une expression lors dun appel dexterne (juste après « ident de module ») ::= FUNCTION ::= FUNCTOR [ ] Un rôle multiple : – Donner ladresse de lexterne dans TEXT – Donner le genre de lexterne – Donner le type de lexterne Les moyens : Nom_externe, RechercheCEXT et TEXT

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

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

29 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 » @1300#

30 Equipe 2 : Déclarations Spécifications Expressions Constantes

31 Les identificateurs TIDENT IdentificateurGenreListeTypes élémentairesTADFlouUnitéModeAdresse 32 car3 bits4 bits12 bits18 bits4 bits8 car2 bits8 car liste flou cas des valeurs constantes cas des tableaux

32 La classe temporaire didentificateurs Commune aux équipes 1 et 2 Permet de ne stocker que les identificateurs nayant pas derreurs

33 Les constantes TCST TypeValeur 5 bitsde 1 car à car PTCST AdresseNombre 1 car

34 Les spécifications Début : à la suite de la déclaration den-tête de module. Fin : à la rencontre de « local », « external » ou « begin ». ::= [ {, } ] : Identificateurs entrés en paramètres dans la déclaration de module. Mode de passage obligatoire.

35 } ] ::= | | | ::= [ ] ] Exemple de spécification : X, Y, Z : list of integer in ; Partie de la BNF correspondante et tâches associées :

36 Traitement par le moteur de compilateur : X, Y, Z : list of integer in ; Pile X Y Z Tâche 2008 : Vgenre LIS Tâche 2007 : Vtype I Tâche 2001 : Vmode IN Tâche 2016 : Enregistrement dans la TIDENT X Y Z

37 Les déclarations ::= [ local [ { ; } ] ] Identificateurs locaux Pas de mode de passage Déclaration « complète »

38 Les déclarations ::= [ sparse ] vector [ ] | matrix [, ] | tensor [, [{, }] ] of [ ] local … M : matrix[1:N,1:M] of integer; T : tensor[1:N,1:M,1:P,20:Q] of float; …

39 Le traitement des erreurs Recherche des erreurs de spécifications, déclarations et expressions. Tâches 2900 à 2999 entièrement dédiées à la recherche derreurs. Enregistrement des erreurs en tant quobjets de la classe CERR.

40 Les expressions 1 expression TEXP CasAdresse 1 car PTEXP AdresseNb mots 2 car1car

41 Les expressions

42 La transformation en polonaise inverse PILE ANNEXE Numéro des opérateurs PILE CasAdresseTypeGenre

43 La transformation en polonaise inverse TOTO := 3 + TITI(52,X) + attributsSUM identificateurs Appel de la procédure de gestion des identificateurs Empilement direct

44 La transformation en polonaise inverse TOTO := 3 + TITI(52,X) + attributsSUM constantes Appel de la procédure qui gère les constantes Empilement direct

45 La transformation en polonaise inverse TOTO := 3 + TITI(52,X) + attributsSUM externes Appel de léquipe 1 – Type et genre renvoyé – Enregistrement de lappel Opérateurs cachés

46 La transformation en polonaise inverse TOTO := 3 + TITI(52,X) + attributsSUM opérateurs Ajout dans la pile annexe Gestion particulière de certains opérateurs

47 Les opérateurs

48 ^ (.) (^) * / % mod & > >= = /= <= < in notin not compl inter and nand union or nor xor := Les opérateurs visibles par lutilisateur et présents dans la pile Empilés et dépilés sans changements Possèdent une table des résultats des types comme attributs Possèdent un niveau

49 45 [ ]-2 ( 1 ère cat-3 ( foncteur-4 ( fonction-5 )-6,-7 Les opérateurs visibles par lutilisateurs mais non présents dans la pile Empilés dans la pile annexe Transformés en opérateurs cachés lors de leur dépilement

50 Les opérateurs cachés à lutilisateur et présents dans la pile VECTEUR1 MATRICE2 TENSEUR3 FONCTION4 FONCTEUR5 FONCTEURM6 A7 L8 O9 a110 a211 l112 l213 l314 l415 Créés lors du dépilement des opérateurs précédents

51 La vérification du type et du genre Détermination du type et du genre dune expression grâce aux tables des types. Ex : le signe + intintint floatfloatfloat … 32+ float ? float

52 Les interactions directes avec les autres équipes Equipe 2 Req_eq2 Cas (ICE) Adresse Type Genre

53 Equipe 3 : Instructions Exécutables

54 Avec léquipe 1: Requête pour un identificateur de module lors dun appel et requête pour linstruction « result » REQ_APPEL (nomexp, codeIE, adresse, message) REQ_RESULT (type, genre, mult, org, cla, spar, ls, cs) Avec léquipe 2: Requête pour le traitement des expressions dans le cas général et dans le cas dune affectation REQ_EQ2 (nomexp, adresse, ICE, type, genre, ls, cs) REQ_AFFEC (nomexp, adresse, vecteurDeMessages, ls, cs) Interactions avec les autres équipes

55 Instructions Exécutables 5 types dinstructions exécutables : - Instructions exécutables de base (boucles, tests, cases, parallèles, débranchements…) - Instructions de liste - Instructions TAD - Instructions processus non traitées dans cette version du compilateur - Instructions dentrée-sortie non traitées dans cette version du compilateur

56 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Tâche 3010 : - empilement de LOOP dans la PILIE_ANX - insertion de LOOP et de la valeur de NTB dans la TIE - insertion de NTIE à adTB de la TB

57 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Tâche 3020 : - vérifications sur le compteur de boucle - insertion de ladresse du compteur dans adC de la TB

58 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Tâches 3012, 3013, 3004 : - appel à GEST_ERR_SYN : automate de gestion des erreurs syntaxiques

59 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Tâches 3030, 3031, 3032 : - vérification sur le type de lexpression arithmétique - remplissage de la TB avec ladresse de l'expression + cas

60 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Tâches 3040 : - vérification sur le type de lexpression + pas une constante - remplissage de la TB avec ladresse de l'expression + cas

61 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ;

62 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Tâches 3041 : - vérification sur le type de lexpression + pas une constante - remplissage de la TB avec ladresse de l'expression + cas

63 Boucles séquentielles ::= [ : to [ ] ] [ ] [ ] loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ; Tâche 3050 : - dépile PILIE_ANX - insertion de ENDLOOP et de ladresse de la boucle dans la TIE - insertion de NTIE à adFB de la TB

64 Gestion des erreurs syntaxiques ::= [ : to [ ] ] [ ] [ ] loop while a>b for i : 1 to pos+1 step pas do … until bool endloop ; Tâche 3004 : - appel à GEST_ERR_SYN

65 Instructions Exécutables de Base Les autres instructions exécutables de bases : - Tests - Cases - Boucles vectorielles - Groupes de séquences parallèles - Débranchements de boucle - Débranchements de module - Autres instructions non traitées (relance de coroutine, rupture, allocation/désallocation…)

66 Instructions Exécutables de Base La table des tests

67 Instructions Exécutables de Base La table des cases, des whens et des listes

68 Instructions Exécutables de Base La table des boucles vectorielles

69 Instructions Exécutables de Base La table des séquences parallèles

70 Instructions Exécutables de Base La table des débranchements de boucle

71 Instructions dappel CALL TOTO (X, Y) ; Tâche 3200 : insertion de CALL et de la valeur de NTAPP dans la TIE Tâche 3210 : Envoi de « TOTO » à léquipe 1 qui nous retourne ladresse dans la TEXT Gestion des erreurs

72 @3230# Tâche 3240 : vérification syntaxique sur lidentificateur par le moteur de compilateur Tâche 3241 : vérification syntaxique sur lopérateur daffectation « := » Tâche 3230 : Traitement de lexpression derrière laffectation Tâches 3241 et 3231 : Message à lutilisateur lopérateur « inc » nest pas autorisé dans cette version du compilateur. Affectations

73 INSERT A,B,C INTO L1, L2 AFTER X ; Tâche 3280 : Vérification des éléments à insérer Remplissage de TMELST A B C A B C L1 L2 X X X X X X insert id Tâche 3290 : Vérification des identificateurs de liste Remplissage de TMELST Tâche 3300 : Vérification de lélément de référence Remplissage de TMELST Tâche 3260 et 3272 : Vérifications syntaxiques par le moteur de compilateur @3290# | ] Opérations sur les listes

74 @3291# @3370# @3371# Opérations sur les listes

75 EACH e OF L / X = A*B+3 DO {…} ENDEACH ; eL c exp id Tâche 3320 : Vérification de lidentificateur de boucle ad D Tâche 3330 : Vérification de lidentificateur de liste ad L Tâche 3340 : Vérification de la condition ad C Tâche 3350 : Vérifications syntaxiques de fermeture de boucle ad F Tâche 3310 : Vérification syntaxique ad D @3330# [ ] Boucles ensemblistes

76 Gestion des TAD

77 Eq4: Les Types Abstraits de Données Interactions avec les équipes: – 2: Identificateurs, Constantes, Expressions – 3: instructions exécutables FANTIN Maryse, LORTAL Isabelle, VAN BRABANT Sophie

78 OBJECTIFS Compilation de lensemble des instructions TAD manipulées par ADT81 Utilisation dun langage OO: C++

79 METHODOLOGIE Traiter les instructions TAD Mémoriser le résultat dans des tables dédiées TAD sous 3 formes: – Identificateurs – Constantes – Expressions => pointeurs donnés par léquipe 2 Résultat enregistré dans les tables => pointeur envoyé à léquipe 3

80 Résultats: Les instructions dédiées aux TAD ::= | ::= | | | | | 9 instructions traitées Syntaxe définie par les règles de BNF Tâches exécutées en fonction du contrôle syntaxique

81 Positionnement des tâches Exemple dASSERT ::= ::= | [

82 - Mettre en mémoire et vérifier- Lenvoi à léquipe 2 Les tables utilisées : - Les tables temporaires

83 - Les tables générales THC TCALO

84 - Les tables générales TEPS

85 Les types de tâches Le cas des IDENTIFICATEURS: -Déconcaténation du TAD concerné -Récupération de lident -Envoi de la requête générale à léquipe 2 -Contrôle erreur : IDENT non déclaré -Remplissage de PTCNAT PTiID TYPE

86 Le cas des CONSTANTES: -Déconcaténation du TAD concerné -Récupération de la constante chaîne -Contrôle erreur : chaîne vide -Envoi de la requête générale à léquipe 2 -Remplissage de PTCNAT PTcCST TYPE

87 Le cas des EXPRESSIONS: -Déconcaténation du TAD de lexpression -Récupération de la constante chaîne (ALO) -Contrôle erreur : chaîne vide -Envoi de la requête générale à léquipe 2 -Finalisation de la Pile -Test sur le contenu de Pile -Requête STOCKPILE eq2 -Remplissage de PTCNAT PTeEXPTYPE ID CST ID/CSTPTI/PTC PTC CST OPER OP

88 Le cas des IE: @4328 1) Contrôle erreurs : - Syntaxe - Contenu PTCNAT messages & mise en mémoire temporairement 2) Contrôle erreurs VT : - Syntaxe message & mise en mémoire temporairement 3) Contrôle erreurs : - comme 1) - recherche si au moins 1 erreur parmi Recopier ou non dans la table finale Envoi -1 à léquipe 3 Envoi PT à léquipe 3

89 Interfaçage avec les autres équipes - Prise en compte du travail des autres équipes - Requêtes spécifiques accord sur les paramètres utilisés Réadaptation des paramètres dentrée dans certains cas

90 Graphe denchaînement REQUETES EQ-4

91 Phase de programmation Les classes utilisées : - CCALO : changements détats -CHC : hyperComposants - CEPS : embryons, structures, prototypes - C_Eq4 : Méthodes et attributs de lequipe 4 - CPTCNAT: classe interne à Eq4

92 Instructions non traitées -Embryons Prototype Structure ::= design ::= compose with ::= build as EC EHC P S ~ Cla EA EHA ~ Att EL EHL ~ Lien -Assoc / Dissoc ::=dissoc [{, }] ::= from …… >>> structure IE similaire : tâches équivalentes >>> contrôle nouvelles erreurs: - types utilisés : E P S - booléens présence/absence VT with / as / from

93 Instructions non traitées -Specify / Modify ::= specify | ::= [{, }] ::= [ ] ] [ ] ….. Assoc/Dissoc et Specify/Modify : listes ~ IE indépendantes >>> Requête spécifique à léq3 - envoi du PT - envoi du code IE >>> nombreuses possibilités de spécifications / modifications: risque de matrices creuses >>> concaténation des différents termes / utilisation de marqueurs (carspe)

94 Création du A-code A la fin de la compilation de chaque module (si aucune erreur)

95 Création du A-code Exemple de A-code : Toto (αh (32 caractères) Nom du module

96 Création du A-code Exemple de A-code : Toto (αh (4 caractères) Nature, récursivité, nombre de paramètres, etc.

97 Création du A-code Exemple de A-code : Toto (αh (23 caractères) TCT : 23 compteurs de tables

98 Conclusion

99 Défis relevés Appréhender un nouveau langage de programmation de type orienté objet. Perspectives dévolutions Traiter les dernières instructions non programmées. Intérêts Coopérer entre les membres dune équipe et entre équipes. Réaliser un travail très complet et complexe. Demande une implication et une motivation partagée par lensemble des équipes.

100 Merci de votre attention


Télécharger ppt "Projet GENIE LOGICIEL Réalisation dun compilateur ADT81 à TAD persistants IASIG promotion 2007 - 2008 19 Mai 2008."

Présentations similaires


Annonces Google