Sémantique opérationnelle de TOY
Ce TP est prévu pour une durée de 3 semaines, il devrait donc être terminé la semaine du 16 octobre 2008.
Rapports à rendre le lundi 20 octobre à 17h. 1 point de pénalité par heure de retard.
Ces rapports doivent contenir :
- Les réponses aux questions posées dans cet énoncé ;
- Vos choix et méthodes pour l'implémentation/la sémantique des commandes ;
- Des tests de votre programme (captures d'écran par exemple) pour prouver l'intéret/la validité de vos choix ;
- Des morceaux significatifs du code, avec impérativement une explication du point de vue sémantique (Votre rapport ne doit PAS être une juxtaposition de morceaux de code) ;
- ... la liste n'est pas exhaustive.
Les soutenances auront lieu les mardi 22 et jeudi 24 octobre. Chaque groupe aura environ 15 minutes pour faire une démo de son projet (la plus automatisée possible, utilisez un script plutôt que de tout taper en ligne de commande). Vous pouvez montrer dans quelles conditions votre projet compile, le faire tourner sur des exemples significatifs et expliquer/montrer certaines parties du code. Vous me donnerez par la même occasion une copie de votre démo (le script et les fichiers du projet).
Mise en route
Une documentation complète sur Objective Caml est disponible à l'URL :
Récupérez les sources du TP ici et désarchivez-les.
Travail à faire
Première semaine (02/10/08)
- Voici en gros le contenu des différents fichiers.
- Définition des tokens pour l'analyseur lexical: lexer.mll
- Définition de la grammaire et des actions associées pour
l'analyseur syntaxique: parser.mly
- Définition des types: types.ml
- Fonctions d'affichage: printer.ml
- Fonctions d'évaluation ou mise à jour de l'environnement:
state.ml
- Calcul d'un pas: step.ml
- Programme principal: toy.ml
Ouvrez les et comprenez ce qu'il s'y passe.
- Complétez le fichier printer.ml afin qu'il prenne en
compte toutes les structures de programme.
- Complétez le fichier step.ml afin qu'il permette de
calculer la sémantique de tout programme. Proposez un jeu de
tests pour les principales fonctions.
Deuxième semaine (09/10/08)
- On veut ajouter les effets de bord : x++, x = 2 comme des expressions.
- Donner la sémantique SOS de ces expressions.
- Proposer une extension de la syntaxe actuelle pour prendre en
compte ces effets de bords, en déduire les modifications à effectuer
dans les fichiers réalisant l'analyse syntaxique des programmes TOY.
- Ajouter dans l'évaluation des expressions ces effets de bord.
- Tester sur un petit programme.
- Ajouter l'affichage de l'environnement à chaque pas de calcul.
- Boucle for.
- Ajouter la structure de contrôle for i := e1 to e2 do P
end. Proposer un type de syntaxe abstraite pour cette instruction
puis enrichir le type prog avec.
- Donner sa sémantique.
- Ajouter les calculs correspondants.
- Tester sur des exemples.
Troisième semaine (16/10/08)
- Ajouter des opérateurs, par exemple and, or mais aussi
ceux qui vous paraissent manquants et très utiles.
- Ajouter le traitement des exceptions : try et
raise. On utilisera pour cela la version
étiquetée de SOS, avec le nouveau type :
etiq =
| Tau
| Etiq of string
et on modifiera la sémantique en conséquence.
- Ajouter l'affichage de la trace pendant l'exécution.