Skip to topic | Skip to bottom
Home
Projects
Projects.EnstCalcr1.2 - 13 Mar 2003 - 16:54 - Main.fouqui_gtopic end

Start of topic | Skip to actions

EnstCalc

Ce TP est destiné aux étudiants de la brique ??? de l'ENST. Son but est la découverte des outils flex et bison par l'implementation d'un parseur et d'un scanner simple.

Spécifications

EnstCalc est une calculatrice infixe implémentant les entiers int du Main.C. Elle doit fournir au moins les opérations suivantes, par ordre croissant de priorité :

  • = et <> non associatifs
  • <, <=, >, >= non associatifs
  • + et - binaires, associatifs à gauche
  • * et / associatifs à gauche
  • ** (puissance) associative à droite
  • + et - unaires

Elle lit sur son entrée standard, et produit sur la sortie le résultat. Les commentaires sont ignorés ; ils sont introduits par # et se termine à la fin de la ligne. Les blancs sont également ignorés. Une ligne peut-être soit vide (après suppression des blans et des commentaires), soit contenir un unique calcul.

Elle ne doit pas s'arrêter sur la première erreur de syntaxe : elle doit reporter l'erreur, ignorer le reste de la ligne, et se tenir prête pour les calculs suivants. La reprise sur erreur se fera simplement en utilisant le symbole error de Bison.

Elle doit être capable de signaler l'emplacement d'une erreur dans une ligne de commande.

L'entrée se termine par EOF.

Exemples

On doit pouvoir lancer les appels suivants:

$ echo "1 + 2 * 3" | ./enstcalc
7
$ echo "(((1) + 2) * 3)" | ./enstcalc
9
$ echo "# Vrai est représenté par 1, faux par 0.
-1**2 = 1" | ./enstcalc
1
$ echo "1 < 2 < 3
6 * 7" | ./enstcalc
parse error
42

Flex et bison

Flex et Bison sont disponibles sur mon compte: ~fouquier/usr/bin Vous pouvez ajouter ce répertoire dans le PATH.

La compilation s'effectue en trois étape:

  • compilation du parseur (fichier .y) avec bison
  • compilation du scanner (fichier .l) avec flex
  • compilation des fichiers C et génération de l'exécutable.

Attention:

  • les dépendances dans le Makefile doivent être faites sur les fichiers .y et .l
  • Il vaut mieux compiler bison avant flex, car le fichier .l va inclure un .h généré par bison.

Pour corriger sa grammaire, utiliser le mode debug de bison et regardez le fichier .output

Conseils

Procéder par étape, ne vous occupez pas de la gestion d'erreur tout de suite. Commencez par savoir calculer.

-- GeoffroyFouquier - 13 Mar 2003
to top


You are here: Projects > EnstCalc

to top

Copyright © 1999-2010 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback