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

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

Embed Size (px)

Citation preview

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

Projet GENIE LOGICIEL

Réalisation d’un compilateur ADT’81 à

TAD persistants

IASIG promotion 2007 - 2008

19 Mai 2008

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

Architecture

PAA

VTO

PO

Tâches

adt.cfg

adt.bnf

Eq1.err

Eq2.err

Eq3.err

Eq4.err

adt.carspe

C2.err

MotCompilo.err

C2

MES

MoteurCentral

TSOURCE

Moteur IHM

TR

Source.adt

CARSPE

MC

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

C2 – Etape préparatoire

Adt.bnf< > ::=

chaine

STRIP

TR

NTRjustifieBNF

>

[

]

{

}

í ý@

#

|

<

¤

#

|

::= ::=

$1

$2

$3

$4

$5

$6

$7

$8

VNT TD

CARSPE

R

BNF.doc

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

TDVT : 1

CARSPE : 0

VNT : 2

CODE

1 2 0 2 1 2 2 0

NUM

5 6@@@

TACHE

0 0 0 0 03045 4103 4104

CARSPE

VT

VNT

32-12 -5498 29 30

C

8

32

54

6

UTI

C2 – Moteur M0

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

C2 – Moteur M1

< > ::= í | ýu

Devient :

< > ::= < T >

< T > ::=

| |

|| |

v< > ::= { }

< > ::= < T >

< T > ::= |<V> < T > <V>

<V> ::=

Devient :

w< > ::= [ ]

< > ::= < T >

Devient :

< T > ::= |

R123

« un parmi »

itératif

facultatif

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

C2 – Moteur M1

R123

99 11

CODE NUM TACHE

0 03045

C

31 2 2

0 0 0 02 1 2 2 0 04103 4104-5498 29 302 02 2 100 10099

100 44

< > ::= { }32-12 -5498 29 30

32-12 99

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

CODE NUM TACHE

0 0304532-12 99

C

31 2 2

0 02 1 2 2 0 04103 4104-5498 29 302 2 135 100

42

2 2 100 99 0 0 2

B

C2 – Moteur M1

< > ::=

x

Devient :

< > ::= < T >

< T > ::=

| |

| |

R4

+ 5000

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

C2 – Moteur M2CODE NUM TACHE

0 0304532-12 99

C

31 2 2

0 02 1 2 2 0 04103 4104-5498 29 302 2 135 100

42

2 2 100 99 0 0 2

PA

A

PO

O

99

100

135

36

36 3

1232

5099

num

304500

tache num tache

122 2

VT

135100

00

15

15

ad nb ad nb

99

122

12

54

B

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

Le Moteur de Compilateur

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

Equipe 1

L’en-tête d’un module

Les déclarations d’externes

La gestion des appels

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

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)

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

• 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

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

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

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

• Tâche @1002#: Traitement des paramètres formels

Exemple de procédure sans type : subroutine decision (note, elimination,

seuil) ;

Mise à jour de TETMODUL:

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

• Tâche @1015#:

Test sur la présence de récursivité

Test sur la conformité de returns

Mise à jour de l’extension de TETMODUL

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

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

paramètres formels

Tâche @1006#

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

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

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

EXTtemp

naturetemp recursiftemp

Type retourné

<type spécifié> ::= <type> @2007# <type> ::= <numérique> | <texte> | <booléen> | <tad >

TGEXT

TEXT

TGMODUL

TGETFFExt

TEXTETFF

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

EXTtemp

sin

TABLES

CHARGE_INTRIN

Comparer…

Table des intrinsèques

GESTION DES INTRINSEQUES

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

GESTION DES ERREURS

Externe déjà déclaré

Déclaration non conforme

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

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

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

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

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

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

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

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 »

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

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

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

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

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

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

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

2

Appelé Appelant PTGEXT PTGPANBPA Confext

Table Générale des appels

4 3 5 -false1 2

Valide

false1

0

TGEXTTGMODUL

2

1

0

Genre Type lc adfst sparse

Table Générale des paramètres actuels

SCA F 0 -false0 0

ICE

ID

Valide

false

Remplissage des tables TGAPP et

TGPA

Remplissage des tables

TAPP et TPA

Remplissage des principales tables relatifs à un appel

Table des appels

PTEXT NBPA

NTAPP

PTPA

0

1

2

0

2

1

-1

0

2

Cas Ad ICEE

NTPA

0ID

EXP

ID

8

1

TEXT

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

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

Moteur de compilation

Moteur de l’équipe 1

Tâche 1300

Transmission du code de la tâche

Appel de « ParamActu »

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

Equipe 2 : DéclarationsSpécificationsExpressionsConstantes

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

Les identificateursTIDENT

Identificateur Genre Liste Types élémentaires TAD Flou Unité Mode Adresse

32 car 3 bits 4 bits 12 bits 18 bits 4 bits 8 car 2 bits 8 car

CIDENT

identgenretypelcstadfapproxuncesubjmultsparmodecstvalcstnbbornebibf

liste

flou

cas des valeurs constantes

cas des tableaux

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

La classe temporaire d’identificateurs

Vtemp12

VcodErrVgenreVtypeVlcVstVadfVapproxVunceVsubjVmultVsparVmodeVcstVvalcstVnbborneVbibf

• Commune aux équipes 1 et 2• Permet de ne stocker que les identificateurs n’ayant pas d’erreurs

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

Les constantes

TCST

Type Valeur

5 bits de 1 car à 65535 car

PTCST

Adresse Nombre

1 car 1car

CCSTtype

valeur

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

Les spécifications

Début : à la suite de la déclaration d’en-tête de module.

Fin : à la rencontre de « local », « external » ou « begin ».

<spécification> ::= <ident> [ { , <ident> } ]  : <descr. spécif.>

• Identificateurs entrés en paramètres dans la déclaration de module.

• Mode de passage obligatoire.

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

<spécification> ::= <ident> @2905# [ { , @2014# <ident> @2905# } ]  : @2014# <descr. spécif.>

<descr. spécif.> ::= <descr. spécif. scalaire> | <descr. spécif. tableau> | <descr. spécif. liste> | <descr. spécif. groupe>

<descr. spécif. liste> ::= list @2008# [ of @2012# <type spécifié> [ <flou> @2901# ] ]

<type spécifié> ::= <type> @2007#

Exemple de spécification :

X, Y, Z : list of integer in ;

Partie de la BNF correspondante et tâches associées :

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

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

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

Les déclarations

<partie déclaration> ::= [ local [ { <déclaration> ; } ] ]

• Identificateurs locaux

• Pas de mode de passage

• Déclaration « complète »

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

Les déclarations

<descr. déclar. tableau> ::= [ sparse ]

í vector [<paire de bornes> ]

| matrix [ <paire de bornes> , <paire de bornes> ]

| tensor [ <paire de bornes> , <paire de bornes> [{ , <paire de bornes> }] ]

ý of <type déclaré> [ <flou>]

local

M : matrix[1:N,1:M] of integer;

T : tensor[1:N,1:M,1:P,20:Q] of float;

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

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 d’erreurs.

• Enregistrement des erreurs en tant qu’objets de la classe CERR.

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

Les expressions

1 expression

TEXP

Cas Adresse

1 car 1 car

PTEXP

Adresse Nb mots

2 car 1car

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

Les expressions

CEXPtypegenre

CodeAdcodeadresse

PileExp

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

La transformation en polonaise inversePILE

ANNEXE

Numéro des opérateurs

PILE

Cas Adresse

Type Genre

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

La transformation en polonaise inverse

TOTO := 3 + TITI(52,X) + attributs’SUM

identificateurs• Appel de la procédure de

gestion des identificateurs• Empilement direct

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

La transformation en polonaise inverse

TOTO := 3 + TITI(52,X) + attributs’SUM

constantes

• Appel de la procédure qui gère les constantes

• Empilement direct

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

La transformation en polonaise inverse

TOTO := 3 + TITI(52,X) + attributs’SUM

externes

• Appel de l’équipe 1– Type et genre renvoyé– Enregistrement de l’appel

• Opérateurs cachés

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

La transformation en polonaise inverse

TOTO := 3 + TITI(52,X) + attributs’SUM

opérateurs • Ajout dans la pile annexe• Gestion particulière de

certains opérateurs

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

Opérateur

OPPARAM1PARAM2RESUG1G2RESUGNtableNUMOPniv

MesOpérateurs

Les opérateurs

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

^ 1 11 16 1

(.) 116 122 17 2

(^) 123 129 18 2

* 12 18 19 2

/ 19 22 20 2

% 23 23 21 2

mod 24 24 22 2

& 25 40 23 2

+ 41 47 24 3

- 48 54 25 3

- 55 61 26 0

> 62 64 27 4

>= 65 67 28 4

= 68 79 29 4

/= 80 91 30 4

<= 92 94 31 4

< 95 97 32 4

in 130 159 33 5

notin 160 189 34 5

not 98 98 35 5

compl 190 219 36 5

inter 220 249 37 6

and 99 99 38 6

nand 100 100 39 6

union 250 279 40 7

or 101 101 41 7

nor 102 102 42 7

xor 103 103 43 7

:= 104 115 44 8

Les opérateurs visibles par l’utilisateur 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

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

‘ 45

[ -1

] -2

( 1ère cat -3

( foncteur -4

( fonction -5

) -6

, -7

Les opérateurs visibles par l’utilisateurs 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

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

Les opérateurs cachés à l’utilisateur et présents dans la pile

VECTEUR 1

MATRICE 2

TENSEUR 3

FONCTION 4

FONCTEUR 5

FONCTEURM 6

A 7

L 8

O 9

a1 10

a2 11

l1 12

l2 13

l3 14

l4 15

• Créés lors du dépilement des opérateurs précédents

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

La vérification du type et du genre

Détermination du type et du genre d’une expression grâce aux tables des types.

Ex : le signe +

int int int

float float float

3 2 +float float ?

3 2 +-- -- float

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

Les interactions directes avec les autres équipes

Equipe 2

Req_eq2

Cas (ICE)

Adresse

Type

Genre

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

Equipe 3 : Instructions Exécutables

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

Avec l’équipe 1: Requête pour un identificateur de module lors d’un appel et requête pour l’instruction « 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 d’une affectation

REQ_EQ2 (nomexp, adresse, ICE, type, genre, ls, cs)

REQ_AFFEC (nomexp, adresse, vecteurDeMessages, ls, cs)

Interactions avec les autres équipes

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

Instructions Exécutables

5 types d’instructions 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 d’entrée-sortie non traitées dans cette

version du compilateur

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

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

10

2

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

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

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113

PILIE_ANXPILIE_ANX

LOOP

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

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

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 l’adresse du compteur dans adC de la TB

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2

vers TIDENT

PILIE_ANX

LOOP

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

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

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

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2

vers TIDENT

PILIE_ANX

LOOP

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

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

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 l’expression arithmétique- remplissage de la TB avec l’adresse de l'expression + cas

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2 cstadReq2 adReq2 adReq2 exp ident

PILIE_ANX

LOOP

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

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

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 l’expression + pas une constante- remplissage de la TB avec l’adresse de l'expression + cas

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2 cstadReq2 adReq2 adReq2 exp ident expadReq2

PILIE_ANX

LOOP

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

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

loop for i : 1 to pos+1 step pas while a>b do … until bool endloop ;

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2 cstadReq2 adReq2 adReq2 exp ident expadReq2

16

4

PILIE_ANX

LOOP

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

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

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 l’expression + pas une constante- remplissage de la TB avec l’adresse de l'expression + cas

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2 cstadReq2 adReq2 adReq2 exp ident exp identadReq2 adReq2

16

4

PILIE_ANX

LOOP

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

Boucles séquentielles<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3012# <eae> @3030#

to @3013# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

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 l’adresse de la boucle dans la TIE- insertion de NTIE à adFB de la TB

PILIE_ANXPILIE_ANX

LOOP

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2 cstadReq2 adReq2 adReq2 exp ident exp identadReq2 adReq2

16

4

TIE

code IE adresseIE

TB

ad TB ad FB ad C ad BI ad BF ad P ad W ad U cas BI cas BF cas P cas W cas U

11 LOOP 3

113 adReq2 cstadReq2 adReq2 adReq2 exp ident exp identadReq2 adReq2

17

4

ENDLOOP 3

17

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

Gestion des erreurs syntaxiques<boucle séquentielle> ::= loop @3010# [ for <ident> @3020# : @3004# <eae> @3030#

to @3004# <eae> @3031# [ step <eae> @3032# ] ] [ while <exp bool> @3040# ] do @3004# <lie boucle> [ until <exp bool> @3041# ] endloop @3050#

loop while a>b for i : 1 to pos+1 step pas do … until bool endloop ;

Tâche 3004 :- appel à GEST_ERR_SYN

3000 3001 3002 3004

defaut 0 85 4 23

do 0 85 4 -1

for 0 85 4 22

loop 0 85 4 23

while 0 85 4 21

20 l'instruction ...

21 plus d'une clause while dans la tête de boucle

22 la clause for est injustifiée ou mal placée

23 le terme do doit apparaître pour clore la tête de boucle

24 l'expression ...

GEST_ERR_SYN

TABERRSYN

TABMESS

Numéro de tâche

Sous-chaîne récupérée

Message d’erreur

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

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

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

Instructions Exécutables de BaseLa table des tests

TIE

code IEadresse

IE

TT

ad O ad FSI

IF

ENDIF

cas ad C

ELSE

vers :TIDENTPTEXP

NTTNTIE

1 car 1 car 1 car 1 car 1 car1 bit

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

Instructions Exécutables de BaseTIE

code IEadresse

IE

TC

ad O ad EC

CASE

ENDCASE

cas type ad C ad TW1 ad TW2

vers :TIDENTPTEXPTCST

NTIE NTC

WHEN

WHEN

OTHERS

TW

cas ad D ad F ad TIED ad TIEF

NTW

TLST

cas ad

NTLST

vers :TIDENTPTEXPTCST

1 car 1 car 1 car 1 car 1 car 1 car 1 car2 bits 5 bits 2 bits 1 car 1 car 1 car 1 car

1 car2 bits

La table des cases, des whens et des listes

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

Instructions Exécutables de Base

TIE

code IE adresseIE

TV

ad D ad F

VECT

ENDVECT

ad C ad BI ad BF ad P cas BI cas BF cas P

vers :TIDENTPTEXPTCST

NTIE NTV

1 car 1 car 1 car 1 car 1 car 1 car 1 car 1 car 2 bits 2 bits2 bits

La table des boucles vectorielles

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

Instructions Exécutables de Base

TIE

code IEadresse

IE

TP

ad TSP

PARBEGIN

ENDPAR

nb SP

NTIE NTP

PAR

TSP

ad D ad F

NTSP

ad F

1 car 1 car 1 car 1 car 1 car 1 car 1 car

La table des séquences parallèles

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

Instructions Exécutables de BaseLa table des débranchements de boucle

TIE

code IEadresse

IE

TDB

cas B ad B

EXITvers :

TBTVTE

NTIE NTDB

1 car 1 car 2 bits 1 car

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

Instructions d’appel<appel de procédure sans type> ::= call @3200# <ident de module> @3211# <partie

paramètres actuels><relance de coroutine> ::= resume @3201# <ident de module> @3212# <partie

paramètres actuels><enchaînement de module> ::= chain @3202# <ident de module> @3210#

TIE

CALL 8TAPP

8 ad

TEXT

CALL TOTO (X, Y) ;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 l’adresse dans la TEXTGestion des erreurs

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

<affectation> ::= <ident dim ou non> @3240# í := @3241# <exp> @3230# | inc @3241# <exp> @3231# ý

Tâche 3240 : vérification syntaxique sur l’identificateur par le moteur de compilateurTâche 3241 : vérification syntaxique sur l’opérateur d’affectation « := »Tâche 3230 : Traitement de l’expression derrière l’affectationTâches 3241 et 3231 : Message à l’utilisateur l’opérateur « inc » n’est pas autorisé dans

cette version du compilateur.

Affectations

TIE

code IE adresseIE

TEXP

NTIE

NTEXP

:=

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

TIE

code IE adresseIE

INSERT

NTIE

INSERT A,B,C INTO L1, L2 AFTER X ;INSERT A,B,C INTO L1, L2 AFTER X ;

Tâche 3280 :Vérification des éléments à insérerRemplissage de TMELST

TMELST

ad e1 ad L ad e2 cas e1 cas e2

NTMELST

ABCABC

L1L1L1L2L2L2

XXXXXX

insert insert insert insert insert

5

5

6 7

6 7

8 9

10

8 9

10

idididididid

id

id

id

id

id

id

Tâche 3290 :Vérification des identificateurs de listeRemplissage de TMELST

Tâche 3300 :Vérification de l’élément de référenceRemplissage de TMELST

Tâche 3260 et 3272 :Vérifications syntaxiques par le moteur de compilateur

<insertion> ::= insert @3260# <liste d’exp> @3280# into @3272# <liste d’ident de listes> @3290# [after <exp> @3300# | before <exp> @3301# ]

Opérations sur les listes

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

<extraction> ::= extract @3261# <liste d’exp> @3281# outof @3273# <liste d’ident de listes> @3291#

<organisation> ::= í linear @3263 <liste d’ident de listes> @3293# | circular @3264# <liste d’ident de listes> @3294# ý

<multiplicité> ::= í single @3265# <liste d’ident de listes> @3295# | tuple @3266# <liste d’ident de listes> @3296# ý

<classement> ::= í ascend @3267# <liste d’ident de listes> @3297# | descend @3268#

<liste d’ident de listes> @3298# | free @3269# <liste d’ident de listes> @3299# ý

<vidage> ::= empty @3262# <liste d’ident de listes> @3292#

<typage> ::= í typelist @3270# <ident de liste> @3360# <type> @3370# | retypelist @3271# <ident de liste> @3361# <type> @3371#ý

Opérations sur les listes

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

TE

ad D ad F ad EL ad L ad C cas L cas C

NTE

TIE

code IE adresseIE

EACH

ENDEACH

NTIE

EACH e OF L / X = A*B+3 DO {…} ENDEACH ;EACH e OF L / X = A*B+3 DO {…} ENDEACH ;

23

23

23 46 67

46

67

e L c exp id

Tâche 3320 :Vérification de l’identificateur de boucle ad D

Tâche 3330 :Vérification de l’identificateur de liste ad L

Tâche 3340 :Vérification de la condition ad C

Tâche 3350 :Vérifications syntaxiques defermeture de boucle ad F

Tâche 3310 :Vérification syntaxique ad D

<boucle ensembliste> ::= each @3310# <ident> @3320# of @3321# <ident de liste>

@3330# [ \ <exp bool> @3340# ] do @3014# <lie> endeach @3350#

Boucles ensemblistes

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

Gestion des TADTIE

code IE adresseIE

TCALOad cas

CREATE

NTIE

NTCALO

INCLUDE

THC

vers :TIDENTPTEXPTCSTTLST

pt_i_ept_ia_ea

cas_inb_el_i

cas_ianb_el_ia

vers :TIDENTPTEXPTCSTTLST

TEPSpt_e cas_e nb_el_e

DESIGN

vers :TIDENTPTEXPTCSTTLST

NTHC

NTEPS

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

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

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

OBJECTIFS

• Compilation de l’ensemble des instructions TAD manipulées par ADT81

• Utilisation d’un langage OO: C++

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

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

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

Résultats:Les instructions dédiées

aux TAD

<instruction tad> ::= <création> | <instruction tad> ::= <création> |

<changement d’état> | <affectation tad> | <changement d’état> | <affectation tad> |

<assertion> | <référencement> | <inclusion> <assertion> | <référencement> | <inclusion>

<exclusion> | <synonymie> | <renommage><exclusion> | <synonymie> | <renommage>

• 9 instructions traitées• Syntaxe définie par les règles de BNF• Tâches exécutées en fonction du contrôle

syntaxique

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

Positionnement des tâches

• Exemple d’ASSERT

<assertion> ::= assert <lien entre objets> @4300#

<lien entre objets> ::=

<objet lini> [ not@4301# ] <constante chaîne>@4303# <objet lfin>@4304#

| [ not @4301# ] <ident de lien entre objets>@4302#

<ident de lien entre objets> ::= <ident> @4000#

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

- Mettre en mémoire et vérifier

- L’envoi à l’équipe 2

Les tables utilisées :

- Les tables temporaires

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

- Les tables générales

THC

TCALO

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

- Les tables générales

TEPS

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

Les types de tâches

Le cas des IDENTIFICATEURS:- Déconcaténation du TAD concerné - Récupération de l’ident - Envoi de la requête générale à l’équipe 2

- Contrôle erreur : IDENT non déclaré

- Remplissage de PTCNAT-1

PTi

ID

TYPE

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

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

-1

PTc CST TYPE

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

Le cas des EXPRESSIONS:

- Déconcaténation du TAD de l’expression

- 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

-1

PTe EXP TYPE

ID CST

-1ID/CSTPTI/PTC

-1 PTC CST

OPER OP

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

Le cas des IE: <synonymie> := synonym <tad> @4326 , @4327 <exp chaîne> @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 1 2 3

Recopier ou non dans la table finale

Envoi -1 à l’équipe 3Envoi PT à l’équipe 3

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

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 d’entrée dans certains cas

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

Graphe d’enchaînement

REQUETES EQ-4

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

Phase de programmation

Les classes utilisées :

- CCALO :

changements d’états

-CHC :

hyperComposants

- CEPS :

embryons, structures, prototypes

- C_Eq4 :

Méthodes et attributs de l’equipe 4

- CPTCNAT:

classe interne à Eq4

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

Instructions non traitées-Embryons Prototype Structure

<conception> ::= design <liste de conception>

<composition>::= compose <prototype> with <liste composition>

<construction> ::= build <liste de structures> as <prototype>

EC EHC P S ~ Cla EA EHA ~ Att EL EHL ~ Lien

-Assoc / Dissoc <

dissociation>::=dissoc <couple dissocié>[{ , <couple dissocié> }]

<couple dissocié> ::= <classe> from <tad associé 1> ……

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

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

Instructions non traitées-Specify / Modify <spécification tad> ::= specify í<spécification d’attribut>| <spécification de lien>ý

<spécification d’attribut> ::= <spec att> [{ , <spec att> }]

<spec att> ::= <attribut de classe> [{ ,<attribut de classe> }] <descrip spec att>

<descrip spec att> ::= [<descrip genre> ] <descrip dim>] [<descrip type>] …..

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)

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

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

TETMODUL TCT

TIETBTTTCTW

TLSTTMELST

TETVTP

TSPTDB

PTEXPTEXP

TIDENTTCST

TAPP TPA TEXT TEXTETFF

TCALOTHCTEPS

Tables du module compilé

TETMODUL TCT TIE TB TT TC TW TLST TMELST TE TV TP TSP TDB TCALO THC TEPSPTEXP TEXP TIDENT TCST TAPP TPA TEXT TEXTETFF

Chaîne portable de A-code

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

Création du A-code

Exemple de A-code :

Toto (αh⌂

(32 caractères)Nom du module

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

Création du A-code

Exemple de A-code :

Toto (αh⌂

(4 caractères)Nature, récursivité, nombre de paramètres, etc.

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

Création du A-code

Exemple de A-code :

Toto (αh⌂

(23 caractères)TCT : 23 compteurs de tables

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

Conclusion

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

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 d’une équipe et entre équipes.

Réaliser un travail très complet et complexe.

Demande une implication et une motivation partagée par l’ensemble des équipes.

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

Merci de votre attention