Projet long ENSEEIHT 2013¶
Cahier des charges¶
Objectifs- L'outil doit être capable de charger un fichier Lustre (extension .lus), et de l'afficher graphiquement
- Un modèle Lustre doit pouvoir être vu soit comme une librairie de nœuds, soit comme un programme avec un nœud principal.
- Il doit également permettre d'éditer ce fichier et de sauver les modifications dans le fichier Lustre, mais également de partir de la feuille blanche
- Une boite à outils doit permettre de construire de nouveaux modèles ou parties de modèles à l'aide d'une palette de primitives et de fonctions (nœuds) déjà définis dans le modèle.
- Lorsque l'on visualise un nœud, on doit pouvoir visualiser et modifier:
- sa spécification : entrée, sortie + autres éléments
- graphiquement: voir et éditer comment les sorties sont calculées en fonction des entrées, seuls les nœuds appelés sont boites noires. on doit pouvoir également visualiser la spécification fonctionnelle (pre, post). Cliquer sur une boite change la vue sur le nœud sélectionné. Les liens entre les entrées/sorties du nœud et les nœuds appelés sont représentées par des liens entre les boites (plusieurs variables peuvent être liées par un tel lien).
- Utiliser Obeo Designer http://www.obeodesigner.com
- Adopter une approche MDE
- Décrire la construction de l'éditeur pour pouvoir ensuite étendre la grammaire, les fonctionnalités ...
- Reverser votre éditeur dans le marketplace Obeo http://marketplace.obeonetwork.com ou sur https://github.com/ObeoNetwork
Le langage Lustre¶
Lustre est un langage synchrone décrivant des programmes réactifs, càd des programmes dont le contenu est répété infiniment souvent: lecture des valeurs des capteurs (entrées) - calcul - envoi de commandes aux actuateurs (sorties).
Un modèle/programme Lustre est composé d'un ensemble de nœuds. Un nœud est une sorte de fonction ou d'objet (au sens OO) prenant des flux entrées et produisant des flux sorties. La définition de chaque nœud repose elle-même sur l'utilisation d'autres nœuds.
Un nœud peut être représenté graphiquement par une boite avec n-fils d'entrées et m-fils de sorties pour les n entrées et m sorties.
Références pour Lustre¶
- The Lustre Language, notes by P. Raymond and N. Halbwachs lien sur le site de l'Univ Iowa
- Un parseur/lexeur en Ocaml (document de référence principal) https://cavale.enseeiht.fr/svn/lustreeditor/doc/references
- Des exemples de code Lustre:
- sur le svn Prelude: svn co https://svn.onera.fr/Prelude/Prelude/branches/lustre_compiler/sandbox/benchmarks
- Un compilateur Lustre vers C
- sur le svn Prelude: svn co https://svn.onera.fr/Prelude/Prelude/branches/lustre_compiler
Étapes du travail¶
Les tâches suivantes devront être réalisés- mettre au point un DSL pour Lustre permettant d'éditer des modèles
- proposer un grammaire en xtext pour Lustre
- traiter la synchronisation des éditeurs textuels et graphiques (voir avec Obeo pour du support technique)
- gérer la partie IHM et les extensions (librairie de symboles externes)
Début de modélisation d'un éditeur (sans Obeo Designer)¶
- Un début d'adaptation au xtext Lustre.xtext
- Un métamodèle (incomplet) pour Lustre lustre.ecore
Extension: librairie de symboles externes et spécification¶
Librairie de symboles externes¶
L'éditeur doit permettre de placer des noeuds lustre, des noeuds importés (sans code lustre, mais juste une spécification, de les relier entre eux, mais aussi de déclarer l'utilisation d'une ou plusieurs librairies de symboles, ie. d'autres fichiers Lustre. Une fois chargée, des nouveaux noeuds doivent etre disponibles dans la palette de création de noeuds.
Spécification¶
Prévoir une extension de la grammaire de Lustre afin de pouvoir décrire en commentaire les préconditions sur les inputs, les post conditions sur les outputs, les invariants sur les variables internes, ainsi que des définitions globales du système. On pourra s'inspirer à cet effet du langage de spécification ACSL pour le C http://frama-c.com/acsl.html
Extension du langage¶
Des extensions pourront être traitées ou au moins préparées pour la suite:- possibilité de déclarer des arguments de noeud comme const
- utilisation de tableaux, de matrices
- description d'automates de mode (?)
Updated by Guillaume Babin over 11 years ago · 3 revisions