[JAVA]expression arithmetique parenthesee +arbre binaire

expression arithmetique parenthesee +arbre binaire [JAVA] - Java - Programmation

Marsh Posté le 24-03-2003 à 20:30:57    

J'aimerais des indications car je vois pas du tout comment m'y prendre:
l'utilisateur saisit une expression arithmetique parenthesee qui sera alors transformée en arbre binaire afin d'executer d'autres fonctions
merci d'avance

Reply

Marsh Posté le 24-03-2003 à 20:30:57   

Reply

Marsh Posté le 24-03-2003 à 20:57:30    

Dorf54 a écrit :

J'aimerais des indications car je vois pas du tout comment m'y prendre:
l'utilisateur saisit une expression arithmetique parenthesee qui sera alors transformée en arbre binaire afin d'executer d'autres fonctions
merci d'avance
 


 
C'est la base de la compilation, avec JLex et CUP (google est notre ami à tous) tu saisis l'arbre syntaxique (qui sera binaire si tous tes opérateurs sont binaires) et en java pur tu l'exécute.
 
Tu peux commencer par concevoir la partie calcul puis la partie compilation ensuite.

Reply

Marsh Posté le 24-03-2003 à 21:04:03    

Ben en fait, c'est de l'analyse lexicale/syntaxique ça.
Il faut que tu définisses une grammaire pour ton arithmétique, du genre :
Expression arithmétique = Expression operateur Expression | nombre
operateur = + | - | * | /
Bon là c'est une version simpliste faite a l'intuition (sans les priorités, associativités, ...).
 
Après, certainement qu'il doit y avoir une API en Java qui fait tout ca ...
En C, les outils adaptés sont Lex ou flex(pour l'analyse syntaxique) et yacc ou bison (pour l'analyse lexicale)


Message édité par bobuse le 24-03-2003 à 21:05:46

---------------
get amaroK plugin
Reply

Marsh Posté le 24-03-2003 à 21:06:39    

nraynaud a écrit :


 
C'est la base de la compilation, avec JLex et CUP (google est notre ami à tous) tu saisis l'arbre syntaxique (qui sera binaire si tous tes opérateurs sont binaires) et en java pur tu l'exécute.
 
Tu peux commencer par concevoir la partie calcul puis la partie compilation ensuite.


merci pour la recherche  ;)  
Je le garde sous le coude celui-là


---------------
get amaroK plugin
Reply

Marsh Posté le 24-03-2003 à 21:27:18    

oula ca me parait compliqué tout ca
je pensais juste a une simple fonction
c'est vraiment la seule methode?
merci pour vos reponses en tous cas
 :hello:

Reply

Marsh Posté le 24-03-2003 à 21:40:56    

bobuse a écrit :


merci pour la recherche  ;)  
Je le garde sous le coude celui-là


 
heu pour tout t'avouer, ça m'est tombé tout cuit dans le bec au bébut d'un TP.
 
Plus tard en cherchant un peu, j'ai trouvé JFlex qui parrait plus mieux sur le papier, mais malgré sa prétendue compatibilité, il est pas compatible avec JLex.

Reply

Marsh Posté le 24-03-2003 à 23:41:57    

tiens moins moins a pas mis un blueflag ?  ;)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 25-03-2003 à 00:20:17    

DarkLord a écrit :

tiens moins moins a pas mis un blueflag ?  ;)

javais pas encore vu :o
 
euh.
qu'en est-il de javacc ... ? :whistle:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 25-03-2003 à 00:23:10    

the real moins moins a écrit :

javais pas encore vu :o
 
euh.
qu'en est-il de javacc ... ? :whistle:


 
 [:rofl]  [:xp1700]


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 25-03-2003 à 02:40:27    

Dorf54 a écrit :

oula ca me parait compliqué tout ca
je pensais juste a une simple fonction
c'est vraiment la seule methode?
merci pour vos reponses en tous cas
 :hello:  


c'est tout à fait possible de faire ca avec un système d'arbre binaire, et utiliser une fonction pour parser ton expression. Je l'ai déjà fait comme TP (avec +,-,*,/,^,sin,cos, nombres, lettres et parenthèses) Mais l'expression devait être complètement parenthesée.
Mais ca donne un algorithme un peu chiants si tu veux vraiment traiter tous les cas (points de vue priorité de l'opérateur * sur + ...)
Et c'est moins "générique" que les autres méthodes données (que je connaissais pas mais je suis loin d'être une base en info...).
 
Edit: en fait je viens seulement de me souvenir que le but de ce TP était de faire un système qui dérivait analytiquement l'expression qu'on lui donnait. Il y avait une variable x, et on pouvait lui donner également des paramètres a,b,c...  
Ca marchait vraiment bien, je me souviens que quand je l'avais fait, j'étais super fier de ce truc  :)


Message édité par deltaden le 25-03-2003 à 02:45:27

---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 25-03-2003 à 02:40:27   

Reply

Marsh Posté le 25-03-2003 à 09:28:48    

Dorf54 a écrit :

oula ca me parait compliqué tout ca
je pensais juste a une simple fonction
c'est vraiment la seule methode?
merci pour vos reponses en tous cas
 :hello:  


Ben tu peux toujours essayer de le faire a l'intuition, mais bon [:spamafote] T'as de grande chance de te retrouver dans des cul-de-sac ...
Le mieux est d'ecrire la grammaire des expressions arithmétiques (tu peux surement la trouver sur le net, histoire de pas se planter ;) ), apres tu parse la chaine pour separer les lexemes (c'est le nom, si mes souvenirs sont bons) : nombres, operateurs, parentheses, ... et tu construits ton arbre a partir de la grammaire en utilisant des algos de construction existants (google :D )


---------------
get amaroK plugin
Reply

Marsh Posté le 25-03-2003 à 12:09:09    

bobuse a écrit :


Ben tu peux toujours essayer de le faire a l'intuition, mais bon [:spamafote] T'as de grande chance de te retrouver dans des cul-de-sac ...
Le mieux est d'ecrire la grammaire des expressions arithmétiques (tu peux surement la trouver sur le net, histoire de pas se planter ;) ), apres tu parse la chaine pour separer les lexemes (c'est le nom, si mes souvenirs sont bons) : nombres, operateurs, parentheses, ... et tu construits ton arbre a partir de la grammaire en utilisant des algos de construction existants (google :D )


 
roh vi, doit en avoir moulte et 100, genre dans doc de yacc (ca doit etre transposable, j'imagine)

Reply

Marsh Posté le 25-03-2003 à 22:35:29    

finalement je l'ai fait en statique
encore merci
 :hello:

Reply

Sujets relatifs:

Leave a Replay

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