Lecture
L'expression est lue depuis l'entrée standard.
Un évaluateur arithmétique écrit en C qui accepte une expression classique ou sa notation polonaise inversée et en calcule le résultat entier.
EvalExpr transforme une ligne de calcul en une suite d'opérations que le programme peut exécuter dans le bon ordre.
En notation classique, comme 5*(2^2+3), il faut tenir
compte des parenthèses, des priorités et de l'associativité des opérateurs.
Le rendu convertit d'abord cette écriture en notation polonaise inversée,
puis l'évalue à l'aide d'une pile.
Avec l'option -rpn, la conversion est inutile : les jetons
sont transmis directement au même moteur de calcul. Les deux modes partagent
ainsi les structures de données et les opérations arithmétiques.
Le programme découpe le traitement en étapes simples. Le parcours diffère seulement au moment de choisir entre une expression classique et une entrée RPN.
L'expression est lue depuis l'entrée standard.
Les nombres, opérateurs et parenthèses deviennent des jetons.
Une pile d'opérateurs produit une file ordonnée en RPN.
Les jetons déjà ordonnés passent directement au calcul.
Les opérandes sont empilés, puis chaque opérateur consomme les valeurs utiles et empile son résultat.
Le binaire fonctionne sans argument pour l'écriture classique et
avec -rpn pour la notation polonaise inversée.
Addition, soustraction, multiplication, division, modulo et exponentiation sont représentés par des jetons dédiés.
Les parenthèses, les opérateurs unaires + et
-, ainsi que l'associativité de l'exponentiation sont
pris en compte lors de la conversion.
Une liste chaînée sert de base à la pile et à la file utilisées pour déplacer les jetons entre analyse et calcul.
Après compilation de la copie d'audit, les douze calculs valides de la testsuite shell produisent le résultat attendu.
La compilation stricte s'arrête sur un diagnostic récent concernant
l'ordre des arguments de calloc. Les tests ont donc été
exécutés en neutralisant uniquement ce diagnostic dans une copie temporaire.
La lecture réserve un tampon fixe de 50 caractères, alors que le sujet demandait une entrée de taille arbitraire. La détection des caractères invalides et des mauvais arguments est présente, mais les erreurs de syntaxe et de calcul ne sont pas toutes sécurisées ni associées aux codes de retour attendus. La testsuite fournie couvre uniquement des calculs valides.
Le rendu relie la lecture de l'entrée, la création des jetons, la conversion Shunting-yard et un évaluateur fondé sur une pile. Il propose les deux modes demandés et une testsuite fonctionnelle ciblée.
Ce projet m'a permis de manipuler concrètement les priorités d'opérateurs, les notations infixe et postfixée, ainsi que la mise en œuvre de piles, de files et de listes chaînées en C.