Files @ 1e7b35645ea4
Branch filter:

Location: Regular-Expresso/src/main.rs

1e7b35645ea4 1.2 KiB application/rls-services+xml Show Annotation Show as Raw Download as Raw
Laman
renamed the package to regular-expresso
use std::env;
use regular_expresso::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}");
		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;
			}
		}
	}
}

fn main() {
	let args: Vec<String> = env::args().collect();
	match args[1].as_str() {
		"test" => test(),
		"match" => {
			match RegexpDFA::new(&args[2].to_string()) {
				Ok(r) => println!("{}", r.eval(args[3].to_string())),
				Err(e) => {
					panic!("ERROR: {e}");
				}
			}
		},
		"compare" => {
			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 => {
			println!("An unknown command: \"{s}\". Use \"match\", \"compare\" or \"test\".")
		}
	}
}