J'ai besoin de pouvoir évaluer des expressions mathématiques pour en ressortir une valeur entière sur 32 bits. Je vais pouvoir rencontrer ça :
- notations décimales, binaires, octales ou hexa mélangées, seul le décimal n'étant pas préfixé. Les nombres peuvent être signés
- les 4 opérations de base
- les parenthèses, imbriquées ou non
- les symboles utilisés dans une expression (genre 5+TRUC)
- le signe de la négation logique : ~
- le signe négatif
En clair, je dois pouvoir évaluer ça : 32 + 5 x (TRUC / 2 x ( -$45 ) )
Donc en clair, j'arrive devant mon expression, j'ai l'adresse de son premier caractère, et là... ben c'est la merde

J'ai pensé à plusieurs choses : analyse récursive : l'expression du haut peut être évaluée comme étant eval(32) + eval(5 x (TRUC / 2 x (-$45) ) )
Problème, si "j'avance" bêtement comme ça dans mon expression, je vais à coup sûr rater la priorité des opérateurs.
Le stockage des valeurs intermédiaires se ferait alors sur la pile, la fonction s'appellerait elle-même jusqu'au dépilage final qui renverrait une valeur.
J'ai pensé aussi à engranger les éléments comme dans une pile RPN. Mais je me demande si ça me sera utile, avec toujours le problème des priorités non résolu.
Comment m'y prendre ? Je parle évidemment de l'algo de calcul, pas de lecture du flux à proprement parler, reconnaitre un signe ou un chiffre quelle que soit la base ou ne signe n'est pas un problème.
Voilà, et pour finir, j'implémenterai ça en assembleur.
Merci.
