/**
   * La methode principale qui renvoie l'arbre remplace si il y a matching et null sinon
   *
   * @param rule la rule qui va nous permettre de tester notre arbre.
   * @param arbre l'arbre a tester
   * @return le return qui vaut null si ça ne match pas, et qui vaut l'arbre remplacé sinon
   */
  public Expression check(Rule rule, Expression arbre) {
    boolean check;
    // ici on recupere le pattern de la rule et l'arbre
    Expression pattern = rule.getLeft();

    // Maintenant on homogeneise les noms de variable
    Hashtable<Character, Expression> ht = new Hashtable<Character, Expression>();

    check = this.compareExpressions(pattern, arbre, ht);
    if (check == false) return null;

    return replace(rule.getRight(), ht);
  }