1

je n'ai trouvé que la méthode maison ( à l'observation car je n'en fait pas au school ) suivante pour exécuter du RPN :

"( 5 - c ) * ( c + a ) / x" correspond en RPN à " x c a + / c 5 - * "

- envoi de x c a sur la pile
- Addition
- division
- envoi de c 5 sur la pile
- Soustraction
- Multiplication

Pouvez vous m'éclairer s'il existe une méthode meilleure

2

ben non, qu'est-ce que tu voudrais de mieux ? enfin ca dépend de quelles sont tes contraintes de vitesse (si empiler un nombre prend *vraiment* trop de temps, ou si tu as des nbs en precision illimitée et que tu veux faire tes additions sur place, ou...), mais a priori c'est plutot efficace...

sinon petites remarques :
- en général on écrit plutot "5 c -" pour "5-c", ou "c a + x /" pour "(c+a)/x" (a l'envers de ce que tu fais, quoi)
- la plupart des langages (dont le C), considerent les operateurs +, -, * et / comme associatifs a gauche, i.e. a*b*c/d/e*f/g = ((((((a*b)*c)/d)/e)*f)/g), la tu as fait le contraire...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

Merci Pollux, je me sens rassuré pour l'efficacité du code. c'est exactement l'effet voulu.

________________________________________________________________
Ok pour l'associativité mais ça change quoi au résultat final ?

Parceque mon convertisseur RPN analyse l'expression de gauche à droite.

ça va pas le faire de le refaire en commençant à droite.

ca ne change rien au résultat il me semble !
_________________________________________________________________
Je vais pouvoir intégré Le Parser d'expression à mon Interpreteur.
Celui-ci utilise les même type de variable que le TI-Basic.


En fait je trouve contraignant d'empiler.
donc je fait comme ceci :

"( 5 - c ) * ( c + a ) / x" correspond en RPN à " x c a + / c 5 - * "

correspond dans mon language à :

# # *
c 5 -
x # /
c a +

ce qui fait à l'exécution puisque c'est organisé comme une Pile :
a+c
(a+c)/x
5 -c
( 5- c) *(a+c)/x

Le #
représente donc le résultat du dernier calcul.

_______________________________________________________________________________
Je fait un Interpreteur pour MYLIB. Un genre de Basic.
Avec la méthode que j'utilise, Les variables définies dans le code sont directement référencées comme argument des fonctions sans recopie dans la pile.
La pile ne me sert qu'à déposer temporairement les résultats calculs intermédiaires.



4

ce qui revient a garder les 2 premiers niveaux de la pile dans un endroit spécial, en fait... mais si tu te contentes de passer des références plutot que de recopier quand tu empiles, l'empilement devient négligeable, non ? (c'est ce que je faisais dans GT-Basic, chaque variable [temporaire ou non] avait un handle sur 2 octets [plus rapide et plus compact qu'une adresse], j'empilais le handle pour passer des arguments, et la fonction appelée se chargeait de dépiler et de libérer les handles temporaires qd elle avait fini smile c'est bien plus efficace que la methode tios, i.e. recopie bourrin couic2)

[rha ca me donne envie de faire un GT-Basic pour TI mais sans compilo on-calc toussa sad]

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

tu m'enleve les mot de la bouche.
C'est exactement comme que je procède :

Le # indique une référence de type ESI à un argument situé soit dans une variable soit dans le code.
l'argument est référencé dans une structure puis utilisé lors de l'appel à la fonction.

l'interpreteur est déjà fait.
comme je n'avais pas fait de parser, je me suis mis pendant ces 3 jours à potasser le sujet sur une feuille , histoire de tirer quelque règle maison pour le parser.

je suis assez content du résultat.
je vais gerer les erreurs de syntaxe maintenant.

6

Au fait pollux , jamais entendu parler de GT-Basic

ou peut-on l'essayer ?

7

nulle part, c'était un gros vaporware ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

8

theroeme de l'aiguillage

9

10

ben oui, +∞ ≤ +∞ ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

Et c 'est quoi encore ce gtools ?


12

13

au moins gstools a eu un betatongue

14

Ca fume!!! grin
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.