Sasume
:
Voici ce que donne l'algo pour le Parser en 7 Ko (sans gestion des erreur pour le moment )
Algebrique
( 5 - c ) ( a + c ) / x
RPN
x c a + / c 5 - *
MYLIB
# # *
c 5 -
x # /
c a +
# représente le résultat du dernier calcul
MYLIB fait donc : Addition, division, Soustraction puis Multiplication
Pas de doute RPN donne un code plus Compact.
MYLIB s'exécute plus vite je pense ( à condition que je me trompe dans la façon d'exécuter du RPN).
Actuellement voici comment je procède : analyse de Gauche à droite de L'expression basée sur 2 piles
- Pile OPS des d'operateurs
- Pile RPN de l'expression
Règle:
-Les Constantes Littérales/Symboliques sont déposées immédiatement sur la Pile RPN
-Les Opérateurs sont déposés sur la pile et seront dépilé par priorité
Le résultats est obtenu directement sur la pile RPN.
En fait je Réorganise l'expression RPN avec la règle suivante :
- Réduction de l'Expression RPN par itération successive
- Sont réduits à chaque itération les Opérateurs ayant uniquement des arguments calculables
- la réduction consite à remplacé l'argument calculable par le Symbole #
Ce qui fait que je peut obtenir la meilleur expression RPN possible si je voulais.
Mais , le problème c'est l'exécution du Code RPN par la Librairie.
La seul méthode que j'ai pu bricole en regardant une expression RPN consite à remettre dans la Pile les arguments ( ie recopier de nouveau ) jusqu'à ce qu'un Opérateur/Fonction les réduise.
Je trouve cela ignoble de devoir recopier des arguments une fois de plus.
Donc , je procède par le symbole '#' pour signifier qu'un argument est sur le haut de la pile.
Puisque le code à exécuté se trouve dans une variable je n'ai donc pas besoin de recopier l'argument à utiliser.
Si quelqu'un peu m'expliquer la meilleur façon d'exécuter du code RPN , j'ai rien trouvé sur le NET.