/** * si l'arbre match check appelera cette fonction * * @param tree l'arbre qui correspond a la partie droite d'une regle cad la partie que doit * devenir un arbre si il correspond a la partie gauche de la regle * @param ht une hashmap qui pour chaque variable du pattern a associé une variable de l'arbre par * exemple si une rule dit que a + a = 2 * a et qu'on apelle cette rule sur l'arbre x + x avec * x = 5 la hashpam nous dit que dans l'arbre droit de la rule la est une varible qui s'apelle * x et qui vaut 5 * @return elle retourne l'arbre remplacé */ public Expression replace(Expression tree, Hashtable<Character, Expression> ht) { /** l'expression que l'on renverra a la fin, qui correspond a l'arbre quand il sera remplace */ Expression newTree = tree.copy(); if (tree.getType().contains("expressionoperator")) { int i; List<Expression> childs = tree.getChildren(); List<Expression> newChilds = new ArrayList<Expression>(); for (i = 0; i < childs.size(); i++) { newChilds.add(replace(childs.get(i), ht)); // System.out.println("HO"+childs.get(i).show()); // System.out.println("HEY"+newChilds.get(i).show()); } newTree.setChildren(newChilds); return newTree; } // si c'est une variable if (tree.getType().contains("variable")) { newTree = ht.get(tree.getName()); } return newTree; }