Projet de compilation (Étape 1)

SE202 - Année scolaire 2015/2016

Mise en place d'un environnement de développement

Python et virtualenv

Le projet nécessite d'utiliser Python 3.4 ainsi que la bibliothèque Ply.

Pour cela, il est conseillé de mettre en place puis d'utiliser virtualenvwrapper qui permet de mettre en place des environnements de Python isolés, avec une version particulière de l'interpréteur et ses propres bibliothèques.

Liens :

Création de l'environnement virtuel

Une fois virtualenvwrapper installé et mis en place dans les fichiers de configuration du shell, il faut créer l'environnement de travail (appelons le tiger).

% mkvirtualenv -p python3.4 tiger
(tiger)% pip install ply

Pour recommencer à travailler dans cet environnement, il suffira de faire:

% workon tiger

Dépôt git

Vous allez utiliser votre propre dépôt git, dans lequel vous ajouterez le code venant de l'équipe pédagogique. Pour cela, il vous faut sortir votre dépôt (où LOGIN est votre login Unix que vous avez transmis dans le mail pour créer les dépôts), et y ajouter comme nouveau dépôt distant le dépôt contenant le code de référence.

% git clone git@git.rfc1149.net:se202-2015/LOGIN tiger
% cd tiger
% git remote add template \
    git@git.rfc1149.net:se202-2015/template
  • origin représente votre dépôt, vers lequel vous ferez des git push ;
  • template représente le dépôt de l'équipe pédagogique, d'où vous prendrez le nouveau code au fur et à mesure de l'avancée du projet.

Première étape

Avant de commencer

Avant de commencer à travailler, il vous faut intégrer le code venant de l'équipe pédagogique. Depuis votre dépôt :

% git remote update
% git merge template/step1

À ce stade, votre dépôt a été enrichi de l'étape step1 du dépôt de référence. Vérifiez que les tests de base fonctionnent :

% workon tiger
(tiger)% python -m unittest

La première commande fait appel à votre environnement de développement virtuel tiger, si ce n'était pas déjà fait. La seconde cherche tous les tests unitaires du dépôt et les exécute.

Travail préliminaire

  • Explorez les fichiers qui sont disponibles. Assurez vous de comprendre à quoi ils servent.
  • dumper est un visiteur qui parcourt l'arbre et affiche son contenu sous forme de chaîne de caractères. Des tests dans test_dumper vérifient que son comportement est correct.
  • evaluator est un autre visiteur qui évalue l'expression (mode interprétation). Des tests dans test_evaluator vérifient que son comportement est correct.

Vous pouvez également tester vos visiteurs grâce au programme tiger.py qui se trouve à la racine de votre dépôt. Pour avoir l'aide, faîtes ./tiger.py --help.

Travail à faire

  • Ajoutez les opérateurs binaires -, /, &, |, ainsi que les opérateurs de comparaison (cf. cours). On rappelle qu'une comparaison vérifiée renvoie 1, qu'une comparaison non vérifiée renvoie 0.
  • Écrivez des tests pour ces expressions.
  • Attention à la précédence et à l'associativité de ces opérateurs. Notamment, 10 - 1 - 2 doit renvoyer 7 et s'afficher comme ((10 - 1) - 2).
  • Implémentez la construction if/then/else, et bien entendu ajoutez les tests correspondants. On rappelle que toute valeur différente de 0 est considérée comme vraie.
  • N'oubliez pas de pusher le résultat sur votre dépôt git personnel (branche master).

Note sur if/then/else

Les sous-expressions doivent être composées telles qu'elles soient les plus longues possibles. Par exemple, le code suivant

if 1 then 100 else 200 + 300

doit s'évaluer en 100, pas en 400, car il doit être compris comme

if 1 then 100 else (200 + 300)

et s'afficher ainsi dans le dumper.

En cas de problème

En cas de problème, si vous ne trouvez pas par vous-même, envoyez un message décrivant précisément :

  • votre problème ;
  • ce que vous avez essayé ;
  • ce que ça a donné et ce que vous attendiez à la place ;

à la liste .