Bonjour,
J’écris en ce moment un générateur de code Ada pour de l’embarqué. Il permet de générer la description de messages (des types Ada) reçus et envoyés par un microcontrôleur dont le logiciel est fait en Ada.
Les messages sont des records (dans d’autre langage appelé "struct") qui ont des champs qui possèdes tous un type. Ça peut être des tableaux de records, des entiers…
Chaque type est donné dans un fichier. Par exemple un type allant de 0 à 127 appelé A, sera dans un fichier A.range.yaml. Un autre type B qui est un tableau de 15 éléments de type A sera dans un autre fichier B.array.yaml. Les fichiers YAML étant les points d’entrés du logiciel.
Pour cet exemple, il faut que mon logiciel me sorte comme fichier ads le fichier suivant :
type A_T is range 0 .. 127;
type B_Index_T is range 1 .. 15;
type B_T is array (B_Index_T) of A_T;
Dans ce cas là c’est assez simple, A n’ayant pas de dépendance par définition se retrouve forcément au début du fichier, suivi de B qui a forcément une dépendance (par définition encore une fois).
Mais si je prends un cas plus complexe, avec une structure qui contient des tableaux et ces tableaux qui contiennent d’autres structures avec eux-mêmes d’autres types composés… La question se pose alors :
Comment déterminer l’ordre dans lequel le générateur doit définir les types pour que le fichier Ada compile ?
J’imagine qu’il faut se pencher sur les graphs… Mais j’avoue être complètement novice dans ce vaste domaine. Auriez-vous des pistes ? Ou mêmes des idées d’algorithmes ?
Je vous remercie.