Sémantique opérationnelle de TOY
Mise en route
Une documentation complète sur Objective Caml est disponible à l'URL :
Vous pouvez télécharger le Mode Tuareg pour Emacs à l'URL :
Récupérez les sources du TP ici et désarchivez-les.
Travail à faire
Première semaine
- 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
- Script de compilation : Makefile
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
- 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
- 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.
Benoit Delahaye
2007-09-28