Evaluation d'expressions avec JLex et CUP

Bobez
Evaluation d'expressions avec JLex et CUP

Bonjour,

Je m'adresse ici à ceux qui savent se servir de JLex et Cup... Je suis débutant dans ces deux outils et j'ai un petit soucis ; je m'explique.

Je cherche à faire des évaluations d'expressions arithmétiques du style:
5 * (12.5 + COS(PI))

Ce que j'arrive à faire: je lance mon exécutable généré automatiquement par JLex et CUP, je tape une expression et ça me renvoie la valeur. Jusque là tout va bien.

Le problème, c'est que je cherche à utiliser ça dans une autre classe java: par exemple, j'ai une expression dans un String, et j'aimerais évaluer sa valeur. Mais je ne dispose pas de méthode adéquate, comment faire ?

Conceptuellement, je cale un peu ;)
Merci d'avance.

fredericmazue

Je n'ai jamais utilisé JLex et CUP donc je ne peux pas beaucoup t'aider.
Mais je demande si tu n'utilises pas un outil trop lourd pour ce que tu veux faire.
Est-ce que tu connais JEP ?
http://www.singularsys.com/jep/

Peut être que ça ferait ton affaire.
Il y a quelqu'un sur ce forum qui l'a utilisé récemment et qui semble satisfait avec.
Le quelqu'un c'est wiss20000

Bobez

Salut fredericmazue,

Merci pour ta réponse. Avant de poster, j'avais effectivement regardé le topic auquel tu fais référence. Cela résolvait bien mon problème, mais, en fait, je fais ça dans le cadre d'un projet de fac de réalisation d'un tableur, et l'un des points intéressants est celui de l'évaluation de formules, donc il ne s'agit pas de prendre un truc tout fait ;)

Par contre, j'ai trouvé en cherchant la réponse à mon problème. Je l'explique en deux mots ici au cas où ça serve à quelqu'un par la suite: en fait, la méthode parse() du parser retourne un Objet de type Symbol, dont l'attribut value contient le RESULT correspondant à l'axiome de la grammaire écrite avec CUP. Il suffit donc de faire un truc du style :

Float f = (Float)new parser(new Yylex(new StringReader("32-2"))).parse().value;
System.out.println("Resultat: " + f);

Rien que ça :wink:
fredericmazue

Quote:
e l'explique en deux mots ici au cas où ça serve à quelqu'un par la suite:

Tout à fait
Excellente initiative :)

A bientôt sur ce forum. Et bravo ! :)