La version 0.2 de l'outil DC2SDX pour la traduction DC vers SynDEx est disponible (voir 4).
Le DC généré à partir d'une spécification Esterel simple comporte une partie "définition" assez importante. Ceci fait que la description SynDEx obtenue par traduction est également assez complexe, bien que les opérations impliquées soient très simples (opérations logiques and, or, etc.). Il résulte donc une granularité trop fine des descriptions SynDEx obtenue à partir des descriptions Esterel (voir 2.6).
Une grammaire BNF du format se trouve ici.
DC définit un ensemble de types, constantes et fonctions prédéfinis. Par exemple, pour les valeurs et les opérations booléennes.
[CL] : La version 5.0 de SynDEx n'a pas de conditionnement (si ce n'est des "conditionnelles" qui sont considérées comme des opérations "normales" avec une sortie et trois entrées dont une booléenne, comme en Mustig par ex.), c'est-à-dire correspond à du DC sans autre "horloge d'activation" que l'horloge "la plus fine" (qui est implicite).
La version 5.1 de SynDEx, en cours de préparation, permettra de spécifier des horloges d'activation et, par étapes progressives, saura faire des optimisations sur les horloges d'activation (évaluation "paresseuse"/"demand-driven" des opérations "safe") qui permettront des spécifications plus légères (avec des horloges implicites).
En SynDEx 5.1, on ne "contrôlera" pas directement les connexions (les flots) mais on "conditionnera" une opération par l'intermédiaire de son port d'entrée "condition d'activation" (un nouveau port spécial introduit en SynDEx v5.1, en plus des ports d'entrée et sortie de l'opération de la v5.0). Il en va de même en DC où le "at" d'une "equ:" (ou d'un "proccall:") conditionne "l'exécution" de la fonction (ou de la procédure), c'est-à-dire la mise à jour du(des) flot(s) défini(s). En termes de génération d'exécutif, on conditionnera, au moyen d'un "jump conditionnel" (généré par une macro "if_" prenant en argument le tampon connecté au port d'entrée "condition d'activation"), l'exécution de la séquence d'instructions représentant l'opération (qui ne prendra en argument que les tampons représentant les ports d'entrée et de sortie).
function 270.500 270.500 and__27 b__and {bool !LF_30 bool ?LF_27 bool ?AUX_11} function 271.500 271.500 not__27 b__not {bool !AUX_11 bool ?AUX_12} constant 272.500 272.500 cst__27 b__false {bool !AUX_12}Les connexions sont implicitement les suivantes :
connect not__27 AUX_11 and__27 AUX_11 connect cst__27 AUX_12 not__27 AUX_12
Ces solutions ont été proposées lors de la réunion TOLÈRE du 11 février 1999.
| |
package XXXX | fichier "XXXX.sdx" |
table types | rien (information sémantique) |
table fonctions | rien (information sémantique) |
table procédures | rien (information sémantique) |
table constantes | rien (information sémantique) |
table noeuds | description d'algorithme |
définition | une liste d'opérations et une liste de connexions |
Normalement, un package (DC) doit correspondre à un fichier (sdx). Le problème semble être l'importation de packages (DC).
Etant donné 2.3, il faut utiliser pour le moment des opérations conditionnelles et attendre SynDEx v5.1.
DC ne contenant pas d'informations sur la représentation graphique du graphe de l'algorithme, le traducteur DC2SDX devra générer des coordonnées pour chaque sommet.
coordX(s) = max(coordX(pred(s))) + deltaXoù pred(s) est l'ensemble des prédécesseurs de s, hormis les sommets "memory". Pour coordY(s), je trie les sommets de même coordX par y(s)=moy(coordY(pred(s)) (moyenne arithmétique des coordY des prédécesseurs de s) croissante et les positionne dans la même colonne à intervalles réguliers.
Une distribution du traducteur DC vers SynDEx v5 est disponible. Cette version de DC2SDX contient :
Quelques caractéristiques de cette version (un rapport technique est en cours de préparation) :
Pour toute information, suggestion, rapport de bogue, etc. contactez svp Mihaela Sighireanu à Mihaela.Sighireanu@inria.fr.