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.
