|
Annie Ressouche, Jean-Yves Tigli, Domnica Pavel, Vivien Fighiera
La notion de connecteur complexe a été formellement définie (voir compte rendus des réunion précédentes). Ce connecteur permet de définir les connections entre un ensemble fini de composants émetteurs d'évènements et un ensemble fini de composants avec des méthodes invocables. L' intersection entre ces deux ensembles peut ne pas être vide.
Pour décrire ce connecteur complexe, un langage LS a été défini par Domnica. Dans ce langage, un connecteur est composé de deux parties:
Pour implémenter ce connecteur complexe dans WComp, deux composants spécifiques seront générés:(1) un composant (A) qui gère la logique de déclanchement; (2) un composant (B) qui gère la logique de d' éxécution. De plus, des composants en amont du composant A récupèrent les paramètres des évènements afin de les substituer aux paramètres formelles des méthodes appelées dans la logique de déclanchement. Cette substitution sera faite par des composants en aval du composant B, qui auront aussi pour tache de récupérer les différentes valeurs des méthodes appelées.
La logique de déclanchement doit gérer une logique booléenne (logique du premier ordre) sur un mode (ou état) donné et aussi gérer une logique de transition entre modes. Il faut donc étendre LS pour ajouter cette notion de mode, en conservant le déterminisme (c'est-à-dire mettre des priorités sur les transitions).
La grammaire de LS est spécifiée avec Lex/Yacc et le parser produit est en C. Pour obtenir un parser en C#, compatible avec le code de programmation de WComp, on envisage de changer d'outil de génération d'analyseurs syntaxiques et d'utiliser GOLD (proche de Lex/Yacc).
Pour implémenter le composant WComp B (qui correspond à la logique de déclanchement), on doit en particulier implémenter l'opérateur de parallèle et respecter la sémantique synchrone de LS. Pour implémenter C1.m1 || C2.m2, on crée un thread pour implémenter C1.m1, un autre pour C2.m2 et un RDV (point de synchronisation) pour attendre la fin des exécutions respectives de C1.m1 et de C2.m2.