Projets de programmation
Transcription
Projets de programmation
Projets de programmation Trois projets de programmation sont proposés dans le cadre du cours. Vous pouvez vous appuyer sur l’implémentation du compilateur MiniLustre utilisé en TD. Pour les étudiants intéressés et motivés, nous pouvons mettre à disposition les sources du compilateur Heptagon [2] du langage Lustre étendu avec tableaux et automates. Nous adapterons alors le sujet du projet (e.g., compilation d’Esterel, N -synchrone). N’hésitez pas à nous écrire ([email protected] ou [email protected]). Ce travail est à rendre pour le 31 décembre 2012. Calcul d’horloge par typage Le calcul d’horloge implanté dans le compilateur MiniLustre est limité puisque les entrées/sorties d’un noeud doivent être synchrones, i.e., de même horloge. Le projet consiste à étendre le compilateur MiniLustre avec un calcul d’horloge complet. Vous vous appuyerez sur le système de types présenté dans le cours (cf. notes et articles). Suggestion/simplification: Dans un premier temps, vous pourrez vous limiter aux horloges booléennes (MiniLustre utilise une généralisation des horloges booléennes aux types énumérés). On pourra ainsi écrire: node f(x:bool; y: int on x) returns (o:int on x; z:bool; k: int on z); var nat:int; let nat = 0 -> pre nat + 1; z = not(x); o = (nat when x) + y; k = nat when z; tel; Compilation des automates de modes Un automate de mode est un automate dans lequel chaque état peut lui-même être décrit par un système d’équations (à la Lustre) ou contenir des automates. Les automates de modes ont été introduits par F. Maraninchi [4, 3]. Ces automates combinés à Lustre permettent de décrire dans un cadre unique les parties data-flow et les parties à controle prépondérant. Dans [1], des formes plus générales d’automates de modes ont été considérées. La compilation de ces constructions consiste en une traduction vers un noyau data-flow avec horloges. On pourra écrire, par exemple: node switch(x: bool) returns (o: bool); let automaton 1 state Ok var cpt: int; do cpt = 1 -> pre cpt + 1; o = true; until cpt = 10 then Nok | x then Ok state Nok var cpt: int; do cpt = 1 -> pre cpt + 1; o = false; until cpt = -10 then Ok end tel; qui retourne la valeur true pour o pendant dix instants puis retourne la valeur false pendant dix instants. Si au dixième instant, x est vrai, l’état Ok est réinitialisé. Vous ajouterez également l’opération last x qui permet de parler de la dernière valeur définie d’une variable. Ainsi: node up_down(x: bool) returns (o: bool); var o: int init 0; let automaton state Ok do o = last o + 1 until x then Nok state Nok: do o = last o - 1 until x then Ok end tel; qui incrémente o jusqu’à ce que x soit vrai puis le décrémente jusqu’à ce que x soit vrai, etc. L’objectif du projet est de proposer une extension de MiniLustre avec des constructions d’automates telles que présentées dans [1] et de réaliser une compilation par traduction dans le noyau primitif. Pour la syntaxe concrète, vous pouvez vous inspirer de celle du compilateur Heptagon. References [1] Jean-Louis Colaço, Bruno Pagano, and Marc Pouzet. A Conservative Extension of Synchronous Data-flow with State Machines. In ACM International Conference on Embedded Software (EMSOFT’05), Jersey city, New Jersey, USA, September 2005. 2 [2] Léonard Gérard, Adrien Guatto, Cédric Pasteur, and Marc Pouzet. A Modular Memory Optimization for Synchronous Data-Flow Languages. Application to Arrays in a Lustre Compiler. In Languages, Compilers, Tools and Theory for Embedded Systems (LCTES’12), Beijing, June 12-13 2012. Best paper award. [3] F. Maraninchi and Y. Rémond. Mode-automata: About modes and states for reactive systems. In European Symposium On Programming, Lisbon (Portugal), March 1998. Springer verlag. [4] F. Maraninchi, Y. Rémond, and Y. Raoul. Matou : An implementation of mode-automata into dc. In Compiler Construction, Berlin (Germany), March 2000. Springer verlag. 3