resharp 0.5.2

high-performance regex engine with intersection and complement operations
Documentation
use resharp_algebra::RegexBuilder;

fn main() {
    let pattern = std::env::args()
        .nth(1)
        .expect("usage: test_date <pattern> [input]");
    let input = std::env::args().nth(2).unwrap_or_default();
    let t0 = std::time::Instant::now();
    let mut b = RegexBuilder::new();
    let t1 = std::time::Instant::now();
    let node = resharp_parser::parse_ast(&mut b, &pattern).unwrap();
    let t2 = std::time::Instant::now();
    eprintln!(
        "builder: {:?}  parse: {:?}  nodes={}",
        t1 - t0,
        t2 - t1,
        b.num_nodes()
    );

    let _rev = b.reverse(node).unwrap();
    let t3 = std::time::Instant::now();
    eprintln!("reverse: {:?}  nodes={}", t3 - t2, b.num_nodes());

    let re = resharp::Regex::from_node(b, node, resharp::RegexOptions::default()).unwrap();
    let t4 = std::time::Instant::now();
    eprintln!("compile: {:?}", t4 - t3);
    if !input.is_empty() {
        match re.find_all(input.as_bytes()) {
            Ok(matches) => {
                let t5 = std::time::Instant::now();
                eprintln!("match: {:?}  {} matches", t5 - t4, matches.len());
            }
            Err(e) => eprintln!("match err: {}", e),
        }
    }
}