générer du code java dynamiquement

générer du code java dynamiquement - Java - Programmation

Marsh Posté le 24-10-2007 à 12:27:29    

Bonjour, dans le cadre d'une petite appli, je désire générer du code dynamiquement pour l'exemple suivant:
L'utilisateur entre une formule mathématique dans un champ de texte, par exemple e(2x) et je désire générer à partir de cette entrée une méthode java, par exemple  
 
double calc(double x){
return Math.exp(2*x);
}
 
Quelle approche dois-je adopter ? Quels sont les outils ?
 
Par avance merci.

Reply

Marsh Posté le 24-10-2007 à 12:27:29   

Reply

Marsh Posté le 24-10-2007 à 13:25:24    

Python ou un autre langage interprêté ne seraient ils pas plus adaptés ?

Reply

Marsh Posté le 24-10-2007 à 14:59:18    

gzii a écrit :

Python ou un autre langage interprêté ne seraient ils pas plus adaptés ?


merci pour ta suggestion mais je n'ai pas le choix du langage.

Reply

Marsh Posté le 24-10-2007 à 16:43:17    

Java est un langage compilé, pas interprété. Donc on n'est pas dans un monde dans lequel on peut s'amuser à "créer du code à la volée" (même si en Java, il y a des mécanismes qui rendent cela possible ; ceci dit, "possible" ne signifie pas "simple", bien au contraire).
 
Si ce que tu souhaites évaluer, c'est juste une expression mathématique, cela te sera plus simple de fabriquer une structure mémoire décrivant ton expression mathématique (c'est une forme de compilation). Par exemple sous forme d'arbre :

  exp
   |
   *
  / \
 2   +
    / \
   x   1


représenteront avantageusement l'expression "exp(2*(x+1))".
Chaque opérateur binaire (+, -, *, /, modulo) est transformé en un noeud de l'arbre à 2 noeuds fils, chaque opérateur unaire (- unaire pour obtenir l'opposé, et la plupart des fonctions mathématiques du genre sin, cos, exp, ln, ...) est transformé en un noeud à un seul fils, et les variables et les nombres littéraux sont transformés en noeuds sans aucun noeud fils (autrement dit, en feuilles de l'arbre).
 
Ensuite, une petite fonction d'évaluation qui parcourt récursivement ton arbre pourra te donner la valeur de la fonction pour une valeur quelconque de tes variables.
En plus, ce mécanisme te permettra de faire beaucoup d'autres traitements sur ta fonction mathématique que Java ne sait pas faire tout seul : par exemple, simplifier la fonction (0 * une expression bien compliquée = toujours 0 !), obtenir sa fonction dérivée, etc.


Message édité par BifaceMcLeOD le 24-10-2007 à 16:47:13
Reply

Marsh Posté le 24-10-2007 à 21:21:21    

merci pour ton conseil, je pense que je vais m'orienter dans cette direction dans un premier temps du moins :jap:

Reply

Sujets relatifs:

Leave a Replay

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