Expression tree - Bonnes pratiques ?
Bonjour,
J'essaye de générer des expressions sous forme d'arbre. J'ai donc crée plusieurs classes abstraites :
Expression -> Operator -> UnaryOperator -> Exp2, Incr, ..
Expression -> Operator -> BinaryOperator -> Add, Sub, ..
Expression -> Operand -> Variable, Constant, ..
De ces classes découlent des opérateurs unaires/binaires et des variables/constantes (comme vous pouvez vous en douter :))
Je me pose deux questions :
1) Comment créer de manière efficace un arbre d'expression ? Pour l'instant, j'ai une autre classe ExpressionNode qui retient à chaque fois l'Expression qui lui appartient et la ou les ExpressionNode qui la précède. J'ai cependant l'impression que ce n'est pas très efficace puisque je dois du coup instancier deux classes pour chaque noeud de mon arbre...
2) Je dois pouvoir évaluer mon Expression pour plusieurs valeurs de plusieurs variables. En gros, si e est mon expression, e.eval(1, 2, 3) devra me retourner le résultat de mon expression avec x = 1, y = 2 et z =3.
Je ne vois pas comment faire ça proprement.
Soit je fais une fonction eval qui prends 3 arguments pour chacune de mes expressions et qui ne fais que de les propager jusqu'à tomber sur une variable (mais je trouve ça vraiment pas propre du tout),
Soit je passe les 3 arguments à mes ExpressionNode pour les propager jusqu'aux feuilles et je fais une fonction eval pour chaque Expression qui prend un ou deux double en fonction de si c'est un UnaryOperator ou un BinaryOperator.
Mais je ne trouve aucune de ces deux méthodes très élégantes.
Voila, si vous avez de bons conseils à me donner, n'hésitez pas !
Un grand merci d'avance et bonne journée :-)