2.2 Derivations
3.1.1 Systeme favorisant la reutilisation
Nous proposons de denir un systeme de transformation de specications alge-briques en un langage imperatif: utilisant a la fois le style fonctionnel et le style pro-cedural.
Le developpement se fait ainsi au niveau des specications algebriques, en bene-ciant de la clarte et de la s^urete de la programmation fonctionnelle et de la semantique algebrique. L'ecacite n'est pas apportee par le langage de bas niveau seul, mais par les possibilites d'optimisation oertes par une description initiale abstraite et un niveau de realisation ou les defauts des langages fonctionnels (par exemple la gestion de la memoire) peuvent ^etre supprimes.
Les bibliotheques algebriques existantes peuvent avoir plus d'une implementation imperative. La derivation d'une specication utilisant une bibliotheque doit donc abou-tir a un programme utilisant toute l'implementation de cette bibliotheque. Cette pro-priete apporte plusieurs avantages :
deriver toute specication de maniere a la tester dans un contexte precis: sta-tion ou processeur dedie, interface homme/machine dierente, environnement ou systeme d'exploitation particulier, ...
reutiliser toute specication par son integration dans la bibliotheque algebrique, soit par sa derivation automatique, soit en fournissant sa realisation concrete et ce qui les lie.
integrer un programme imperatif a la bibliotheque, et orir ainsi son utilisation a partir d'un langage de haut niveau. Ceci est possible des lors que l'on sait lui associer sa specication algebrique.
42 CHAPITRE3. M
ETHODE DED
ERIVATION VERSDESPROGRAMMES
Les systemes formels choisis sont, d'une part, le langage LPG pour les specications algebriques d'origine (mais ce pourrait ^etre tout autre langage de specication algebri-que), et d'autre part le langage Ada pour le langage de programmation.
Ce systeme doit donc ^etre capable de passer d'un style purement fonctionnel: LPG, a un style imperatif (ou des modications \en-place" de variables peuvent ^etre faites par des aectations ou des appels de procedures): Ada, et permettre ainsi de reuti-liser des bibliotheques de specications algebriques dont les implementations en Ada, validees, imposent les interfaces (ordre et modes xes des parametres des fonctions ou procedures).
Le schema general est decrit a la gure 3.1 suivante.
implémente Set Array Seq String Specif. Algébrique Bibliothèque Char Nat Bool Integer Impl. de Ø et Succ Array of Booleans Array List Impl. de Empty et Cons est importé par
Corps du programme Ada Spécification Ada Integer Dérivation standard de Ø and Succ Array of Booleans List Utilisateur Définition des Liens de Dérivation des opérateurs Spécifications Algébriques Spécification Ada du programme Dérivation du Corps du Programme utilise
Corps de programmes Ada
Array Choix des Liens
d'Implémentation en librairie
Dérivation standard de Empty et Cons
Fig.3.1 { Systeme d'implementation de Specications Algebriques avec Bibliotheque Dans ce systeme, l'utilisateur qui veut transformer en Ada une specication doit choisir pour chacun des operateurs de cette specication son style : s'il souhaite obtenir une fonction ou une procedure, son prol : le type et le mode (in, out, in out) de chacun de ses parametres formels, et la correspondance des parametres entre ceux de l'operateur algebrique et ceux de la fonction ou procedure derivee.
Exemple 3.1:
Ayant la specication de l'operateur algebrique3.1. CADREET PROBL
EMATIQUE 43
seqnatest implementee par le typelistnat, nous devons indiquer pour une fonction ou procedure de nomtrier que nous souhaitons deriver, la correspondance de chaque parametre :
1. function trier(l: in listnat) return listnat, l'operande de
sortnat correspond alet le resultat algebrique au resultat de l'evaluation de la fonction.
2. procedure trier(l: in listnat; ltriee: out listnat), l'operande de
sortnatcorrespond au premier parametrel, et le resultat algebrique au deuxieme parametre ltrieeen retour de l'execution de la procedure.
3. procedure trier(ltriee: out listnat; l: in listnat), l'operande de
sortnat correspond au deuxieme parametre l, et le resultat algebrique au pre-mier parametre ltrieeen retour de l'execution de la procedure.
4. procedure trier(l: in out listnat), l'operande de sortnat correspond a l'unique parametre l, et le resultat algebrique au m^eme parametre l modie en retour de l'execution de la procedure.
Le nombre de possibilites augmente avec l'arite de l'operateur, et particulierement si nous considerons les operateurs dont le co-domaine est un produit cartesien de sortes: chaque sorte du co-domaine, si elle existe dans le domaine, peut correspondre a un parametre in out dans le cas d'une derivation vers une procedure. Ceci est montre dans l'exemple suivant:
Exemple 3.2:
Soit l'operateur suivant:insdico : (string,seq[string],dico[string]) ->(dico[string],boolean,seq[string])
un operateur d'insertion d'un mot et de sa denition dans un dictionnaire, tel que: insdico(m;l1;d1) = (d2;e;l2) avec m un mot, l1 sa denition, d1 un dictionnaire, et comme resultatd2egal ad1 augmente du motmet de sa denition,eun booleen egal a vraisimavait deja une denition dansd1, etl2sa denition precedente si elle existait. Cet operateur peut avoir comme implementation, avec une correspondance evi-dente:
1. procedure dicinsert(cle: in str20;
new def: in liste str20; dico: in str strlist map; new dico: out str strlist map; existe: out boolean;
anc def: out liste str20 ) 2. procedure dicinsert(cle: in str20;
new def: in liste str20; dico: in out str strlist map;
44 CHAPITRE3. M
ETHODE DED
ERIVATION VERSDESPROGRAMMES
existe: out boolean; anc def: out liste str20) 3. procedure dicinsert(cle: in str20;
def: in out liste str20; dico: in out str strlist map; existe: out boolean)
4. ...
De nombreuses consequences decoulent du choix du style et du prol. La premiere est la forme de l'appel: soitt=g(t
1
;:::;op(:::);:::;t
n) selon queopest derive en une fonction F ou une procedure P, il pourra ^etre en position de parametre eectif dans le code derive de t ou devra preceder ce code. Dans ce cas, ce sera une variable (ou une expression-gauche) en parametre eectif de sortie de Pqui sera parametre eectif d'entree ou entree-sortie du code derive de g. Une seconde consequence qui rend plus complexe la derivation d'un texte imperatif est la destruction de la valeur d'une variable en parametre eectif d'un parametre en mode entree-sortie. Ces cas seront detaillees dans la section 3.1.3 traitant de la problematique.