Upload
andre-martinet
View
126
Download
2
Embed Size (px)
Citation preview
Projet GENIE LOGICIEL
Réalisation d’un compilateur ADT’81 à
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
C2 – Etape préparatoire
Adt.bnf< > ::=
chaine
STRIP
TR
NTRjustifieBNF
>
[
]
{
}
í ý@
#
|
<
¤
#
|
::= ::=
$1
$2
$3
$4
$5
$6
$7
$8
VNT TD
CARSPE
R
BNF.doc
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
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
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
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
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
Le Moteur de Compilateur
Equipe 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
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)
• 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
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
• Tâche @1002#: Traitement des paramètres formels
Exemple de procédure sans type : subroutine decision (note, elimination,
seuil) ;
Mise à jour de TETMODUL:
• Tâche @1015#:
Test sur la présence de récursivité
Test sur la conformité de returns
Mise à jour de l’extension de TETMODUL
Vérification de la conformité des paramètres actuels avec les
paramètres formels
Tâche @1006#
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
EXTtemp
naturetemp recursiftemp
Type retourné
<type spécifié> ::= <type> @2007# <type> ::= <numérique> | <texte> | <booléen> | <tad >
TGEXT
TEXT
TGMODUL
TGETFFExt
TEXTETFF
EXTtemp
sin
TABLES
CHARGE_INTRIN
Comparer…
Table des intrinsèques
GESTION DES INTRINSEQUES
GESTION DES ERREURS
Externe déjà déclaré
Déclaration non conforme
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
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
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
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 »
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
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
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).
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
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 »
Equipe 2 : DéclarationsSpécificationsExpressionsConstantes
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
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
Les constantes
TCST
Type Valeur
5 bits de 1 car à 65535 car
PTCST
Adresse Nombre
1 car 1car
CCSTtype
valeur
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.
<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 :
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
Les déclarations
<partie déclaration> ::= [ local [ { <déclaration> ; } ] ]
• Identificateurs locaux
• Pas de mode de passage
• Déclaration « complète »
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;
…
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.
Les expressions
1 expression
TEXP
Cas Adresse
1 car 1 car
PTEXP
Adresse Nb mots
2 car 1car
Les expressions
CEXPtypegenre
CodeAdcodeadresse
PileExp
La transformation en polonaise inversePILE
ANNEXE
Numéro des opérateurs
PILE
Cas Adresse
Type Genre
La transformation en polonaise inverse
TOTO := 3 + TITI(52,X) + attributs’SUM
identificateurs• Appel de la procédure de
gestion des identificateurs• Empilement direct
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
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
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
Opérateur
OPPARAM1PARAM2RESUG1G2RESUGNtableNUMOPniv
MesOpérateurs
Les opérateurs
^ 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
‘ 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
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
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
Les interactions directes avec les autres équipes
Equipe 2
Req_eq2
Cas (ICE)
Adresse
Type
Genre
Equipe 3 : Instructions Exécutables
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
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
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
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
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
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
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
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
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
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
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
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…)
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
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
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
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
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
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
<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
:=
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
<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
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
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
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
OBJECTIFS
• Compilation de l’ensemble des instructions TAD manipulées par ADT81
• Utilisation d’un langage OO: C++
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
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
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#
- Mettre en mémoire et vérifier
- L’envoi à l’équipe 2
Les tables utilisées :
- Les tables temporaires
- Les tables générales
THC
TCALO
- Les tables générales
TEPS
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
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
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
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
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
Graphe d’enchaînement
REQUETES EQ-4
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
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
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)
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
Création du A-code
Exemple de A-code :
Toto (αh⌂
(32 caractères)Nom du module
Création du A-code
Exemple de A-code :
Toto (αh⌂
(4 caractères)Nature, récursivité, nombre de paramètres, etc.
Création du A-code
Exemple de A-code :
Toto (αh⌂
(23 caractères)TCT : 23 compteurs de tables
Conclusion
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.
Merci de votre attention