Struct egg::Extractor [−][src]
pub struct Extractor<'a, CF: CostFunction<L>, L: Language, N: Analysis<L>> { /* fields omitted */ }
Expand description
Extracting a single RecExpr
from an EGraph
.
use egg::*;
define_language! {
enum SimpleLanguage {
Num(i32),
"+" = Add([Id; 2]),
"*" = Mul([Id; 2]),
}
}
let rules: &[Rewrite<SimpleLanguage, ()>] = &[
rewrite!("commute-add"; "(+ ?a ?b)" => "(+ ?b ?a)"),
rewrite!("commute-mul"; "(* ?a ?b)" => "(* ?b ?a)"),
rewrite!("add-0"; "(+ ?a 0)" => "?a"),
rewrite!("mul-0"; "(* ?a 0)" => "0"),
rewrite!("mul-1"; "(* ?a 1)" => "?a"),
];
let start = "(+ 0 (* 1 10))".parse().unwrap();
let runner = Runner::default().with_expr(&start).run(rules);
let (egraph, root) = (runner.egraph, runner.roots[0]);
let mut extractor = Extractor::new(&egraph, AstSize);
let (best_cost, best) = extractor.find_best(root);
assert_eq!(best_cost, 1);
assert_eq!(best, "10".parse().unwrap());
Implementations
impl<'a, CF, L, N> Extractor<'a, CF, L, N> where
CF: CostFunction<L>,
L: Language,
N: Analysis<L>,
impl<'a, CF, L, N> Extractor<'a, CF, L, N> where
CF: CostFunction<L>,
L: Language,
N: Analysis<L>,
Create a new Extractor
given an EGraph
and a
CostFunction
.
The extraction does all the work on creation, so this function performs the greedy search for cheapest representative of each eclass.
Find the cheapest (lowest cost) represented RecExpr
in the
given eclass.
Find the cheapest e-node in the given e-class.
Find the cost of the term that would be extracted from this e-class.