Traduction

Licence Informatique 3ème année --- TD 6

Structures conditionnelles et boucles


Dans ce TD, nous allons voir comment gérer les conditions if...else... et les boucles while. Le compilateur que nous allons écrire engendrera du p-code, pouvant être exécuté à travers une machine virtuelle.

Le résultat de ce TD doit être envoyé par mail avant vendredi 19 mars minuit à votre chargé de TD. Le titre du mail doit être Traduction TD6 XXX, où XXX est votre nom de famille.

Pour ce TP et les suivants, nous utiliserons une machine virtuelle dont la description se trouve ici.

Étude de programme

Téléchargez les fichiers suivants:


td6.lex, td6.y, td6-test, makefile


Compilez puis exécutez la commande suivante:

td6 td6-test


  1. Exécutez le code ainsi obtenu à l'aide de la machine virtuelle.
  2. Comment les instructions if sont-elles gérées dans ce code?

Structures conditionnelles

Modifiez les programmes flex et bison de façon à autoriser le else optionnel. Comme en C, vous devrez rattacher un else au if le plus proche. Pour cela, vous utiliserez la commande %prec qui permet d'attribuer à une règle une priorité correpondant à un autre opérateur.

Blocs et stockage d'une valeur

Modifiez les programmes flex et bison de façon à autoriser
1) les blocs d'instructions encadrés par des accolades;
2) une variable globale notée $ qu'on pourra accéder en lecture et en écriture grâce à une instruction de la forme $ = val;.

Boucles while

Modifiez les programmes flex et bison de façon à pouvoir utiliser des boucles while.

Boucles while

Modifiez les programmes flex et bison de façon à pouvoir gérer séparément des expressions numériques et des expressions booléennes (seules les expressions numériques pouvant être sauvegardées dans $). Gérez les différents opérateurs arithmétiques et de comparaison.