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