tree
evaluate (tree t) {
  if (is_atomic (t)) return t;
  cout << "Evaluate "
    // << obtain_ip (t) << " "
       << "[" << (t.operator -> ())
       << ", " << (std_env.operator -> ()) << "] "
       << t << INDENT << LF;
  memorizer mem= evaluate_memorizer (std_env, t);
  if (is_memorized (mem)) {
    cout << UNINDENT << "Memorized " << mem->get_tree () << LF;
    std_env= mem->get_environment ();
    return mem->get_tree ();
  }
  memorize_start ();
  tree r= evaluate_impl (t);
  decorate_ip (t, r);
  mem->set_tree (r);
  mem->set_environment (std_env);
  memorize_end ();
  cout << UNINDENT << "Computed " << mem->get_tree ()
    // << " at " << obtain_ip (r);
       << LF;
  return mem->get_tree ();
}
Exemple #2
0
tree
rewrite (tree t) {
    cout << "Rewrite "
         //<< "[" << (t.operator -> ())
         //<< ", " << (std_env.operator -> ()) << "] "
         << t << INDENT << LF;
    memorizer mem= rewrite_memorizer (std_env, t);
    if (is_memorized (mem)) {
        cout << UNINDENT << "Memorized " << mem->get_tree () << LF;
        std_env= mem->get_environment ();
        return mem->get_tree ();
    }
    memorize_start ();
    tree r= rewrite_impl (t);
    decorate_ip (t, r);
    mem->set_tree (r);
    mem->set_environment (std_env);
    memorize_end ();
    cout << UNINDENT << "Rewritten as " << mem->get_tree () << LF;
    return mem->get_tree ();
}