[C] Question sur les union et gestion de priorités dans une expression

Question sur les union et gestion de priorités dans une expression [C] - C - Programmation

Marsh Posté le 29-08-2003 à 09:41:01    

:hello: all
 
Voilà, je suis en train de coder une fonction d'éval d'un expression numérique, qui renvoie un int correspondant à une expression passée en paramètre sous la forme d'un char* :).
 
Actuellement, je place l'expression dans un arbre, ça marche bien, par contre le gros souci, et je vois pas du tout comment faire, c'est la gestion des priorités des opérateur * et / :/...
 
Autre question : J'ai défini une union, soit une valeur (int), soit un opérateur. Une union est placée dans chaque noeud de l'arbre. Est ce qu'il y a moyen de savoir ce qu'il y a dans un noeud donné? Un opérateur ou un int ? :??:
 
 :jap:


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 29-08-2003 à 09:41:01   

Reply

Marsh Posté le 29-08-2003 à 10:13:44    

utilise des enum(érations) au lieu de char*
 
et apres, ben pour tes noeuds, tu mets une union et une enum dans ta structure, comme ça tu regarde l'enum pour savoir quoi faire d' l'union
   

Reply

Marsh Posté le 29-08-2003 à 10:20:39    

freds45 a écrit :


Autre question : J'ai défini une union, soit une valeur (int), soit un opérateur. Une union est placée dans chaque noeud de l'arbre. Est ce qu'il y a moyen de savoir ce qu'il y a dans un noeud donné? Un opérateur ou un int ? :??:
 
 :jap:  


 
les int sont pas censes etre les feuilles de ton arbre ? les operateurs etant, eux, tous les autres noeuds, me trompe-je ?

Reply

Marsh Posté le 29-08-2003 à 10:24:02    

Taz a écrit :

utilise des enum(érations) au lieu de char*
 
et apres, ben pour tes noeuds, tu mets une union et une enum dans ta structure, comme ça tu regarde l'enum pour savoir quoi faire d' l'union
   
 


 
 
ok, je vois le truc pour le contenu de la structure :)
par contre l'histoire de l'enum au lieu du char* ... je comprends pas ce ke tu veux dire :??: Le char* c'est la chaîne que j'analyse, la valeur est stockée sous forme d'int.


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 29-08-2003 à 10:27:49    

souk a écrit :


 
les int sont pas censes etre les feuilles de ton arbre ? les operateurs etant, eux, tous les autres noeuds, me trompe-je ?


 
En fait j'ai défini qu'un seul type de noeud, qui contient soit un int (la valeur) soit un opérateur. Chui ptêt allé un peu vite sur la structure :/ T'aurais fait autrement ?


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 29-08-2003 à 10:30:21    

freds45 a écrit :


 
En fait j'ai défini qu'un seul type de noeud, qui contient soit un int (la valeur) soit un opérateur. Chui ptêt allé un peu vite sur la structure :/ T'aurais fait autrement ?


 
pas necessairement, tu regardes si le noeud est une feuille, si oui alors c'est une valeur, si non, c'est un operateur. (mais ca aurait ete plus propre d'avoir 2 types de noeuds effectivement, mais spa grave ;) )

Reply

Marsh Posté le 29-08-2003 à 10:34:57    

souk a écrit :


 
pas necessairement, tu regardes si le noeud est une feuille, si oui alors c'est une valeur, si non, c'est un operateur. (mais ca aurait ete plus propre d'avoir 2 types de noeuds effectivement, mais spa grave ;) )


 
Suffit de regarder si les pointeurs vers les deux fils sont null :whistle:
 
par contre l'histoire de priorité des opérateurs... :cry: je sèche !!


Message édité par freds45 le 29-08-2003 à 10:35:26

---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Marsh Posté le 29-08-2003 à 10:35:52    

ah ok, je croyais que tu tapais les trucs en dur, comme je l'ai déjà vu faire ici-même, avec un champ char * pour le type

Reply

Marsh Posté le 29-08-2003 à 11:08:28    

non, j'essaye de faire un truc propre :sol:
 
prochaine étape sur la todo list : des fonctions :sol:  
 :hello:


---------------
Filmstory : gardez trace des films que vous avez vu ! :D
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed