expression arithmetique parenthesee +arbre binaire [JAVA] - Java - Programmation
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: |
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.
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)
Marsh Posté le 24-03-2003 à 21:06:39
nraynaud a écrit : |
merci pour la recherche
Je le garde sous le coude celui-là
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
Marsh Posté le 24-03-2003 à 21:40:56
bobuse a écrit : |
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.
Marsh Posté le 24-03-2003 à 23:41:57
tiens moins moins a pas mis un blueflag ?
Marsh Posté le 25-03-2003 à 00:20:17
DarkLord a écrit : tiens moins moins a pas mis un blueflag ? |
javais pas encore vu
euh.
qu'en est-il de javacc ... ?
Marsh Posté le 25-03-2003 à 00:23:10
the real moins moins a écrit : javais pas encore vu |
Marsh Posté le 25-03-2003 à 02:40:27
Dorf54 a écrit : oula ca me parait compliqué tout ca |
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
Marsh Posté le 25-03-2003 à 09:28:48
Dorf54 a écrit : oula ca me parait compliqué tout ca |
Ben tu peux toujours essayer de le faire a l'intuition, mais bon 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 )
Marsh Posté le 25-03-2003 à 12:09:09
bobuse a écrit : |
roh vi, doit en avoir moulte et 100, genre dans doc de yacc (ca doit etre transposable, j'imagine)
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