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
Ou plutôt, je sens que ça devrait être bien marrant à coder, mais je ne sais pas trop par où attaquer les choses.
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.




Fichier joint : 
