diff --git a/src/main.rs b/src/main.rs --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,22 @@ use std::env; -use regexp::RegexpNFA; +use regexp::RegexpDFA; fn test() { let tests = ["", "a", "ab", "aabb", "abab", "abcd", "abcbcdbcd"]; for pattern in ["a(b|c)", "a*b*", "(ab)*", "a((bc)*d)*", "(a|b)*a(a|b)(a|b)(a|b)", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"] { println!("# {pattern}"); - let r = match RegexpNFA::new(&pattern.to_string()) { - Ok(r1) => r1.determinize().reduce().normalize(), + match RegexpDFA::new(&pattern.to_string()) { + Ok(r) => { + for &t in tests.iter() { + println!("{t} {}", r.eval(t.to_string())); + } + println!(); + }, Err(e) => { println!("{e}"); continue; } - }; - for &t in tests.iter() { - println!("{t} {}", r.eval(t.to_string())); } - println!(); } } @@ -24,27 +25,16 @@ fn main() { match args[1].as_str() { "test" => test(), "match" => { - let r = match RegexpNFA::new(&args[2].to_string()) { - Ok(r1) => r1.determinize().reduce().normalize(), + match RegexpDFA::new(&args[2].to_string()) { + Ok(r) => println!("{}", r.eval(args[3].to_string())), Err(e) => { panic!("ERROR: {e}"); } - }; - println!("{}", r.eval(args[3].to_string())); + } }, "compare" => { - let r1 = match RegexpNFA::new(&args[2].to_string()) { - Ok(r) => r.determinize().reduce().normalize(), - Err(e) => { - panic!("ERROR: {e}"); - } - }; - let r2 = match RegexpNFA::new(&args[3].to_string()) { - Ok(r) => r.determinize().reduce().normalize(), - Err(e) => { - panic!("ERROR: {e}"); - } - }; + let r1 = RegexpDFA::new(&args[2].to_string()).unwrap_or_else(|e| panic!("ERROR: {e}")); + let r2 = RegexpDFA::new(&args[3].to_string()).unwrap_or_else(|e| panic!("ERROR: {e}")); println!("{}", r1.find_distinguishing_string(&r2).unwrap_or("None".to_string())); }, s => {