S5 · 2024 48 h

EvalExpr

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.

C99 Shunting-yard Pile et file Make

Le projet en quelques mots

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.

De l'expression au résultat

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.

01

Lecture

L'expression est lue depuis l'entrée standard.

02

Analyse des caractères

Les nombres, opérateurs et parenthèses deviennent des jetons.

Mode classique

Conversion Shunting-yard

Une pile d'opérateurs produit une file ordonnée en RPN.

Option -rpn

Chemin direct

Les jetons déjà ordonnés passent directement au calcul.

03

Évaluation

Les opérandes sont empilés, puis chaque opérateur consomme les valeurs utiles et empile son résultat.

Ce qui est présent dans le rendu

Deux notations

Le binaire fonctionne sans argument pour l'écriture classique et avec -rpn pour la notation polonaise inversée.

Calculs entiers

Addition, soustraction, multiplication, division, modulo et exponentiation sont représentés par des jetons dédiés.

Priorités

Les parenthèses, les opérateurs unaires + et -, ainsi que l'associativité de l'exponentiation sont pris en compte lors de la conversion.

Structures chaînées

Une liste chaînée sert de base à la pile et à la file utilisées pour déplacer les jetons entre analyse et calcul.

Vérification du rendu conservé

12 / 12

Cas fournis

Après compilation de la copie d'audit, les douze calculs valides de la testsuite shell produisent le résultat attendu.

GCC 15

Compilation à reprendre

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.

Limites de la copie conservée

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.

Synthèse du projet

Travail réalisé

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 que le projet m'a apporté

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.