laps_regex/lib.rs
1//! # laps_regex
2//!
3//! Tools for generating NFAs, DFAs and state-transition tables from
4//! regular expressions.
5//!
6//! This library is built for crate [`laps`](https://crates.io/crates/laps).
7//!
8//! ## Example: Matching UTF-8 Strings
9//!
10//! ```
11//! use laps_regex::re::{RegexBuilder, CharsMatcher};
12//!
13//! #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
14//! enum Token {
15//! Keyword,
16//! Identifier,
17//! Number,
18//! }
19//!
20//! let matcher: CharsMatcher<_> = RegexBuilder::new()
21//! .add("if|else|while", Token::Keyword)
22//! .add("[_a-zA-Z][_a-zA-Z0-9]*", Token::Identifier)
23//! .add("[0-9]|[1-9][0-9]+", Token::Number)
24//! .build()
25//! .unwrap();
26//!
27//! assert_eq!(matcher.is_str_match("if"), Some(&Token::Keyword));
28//! assert_eq!(matcher.is_str_match("while1"), Some(&Token::Identifier));
29//! assert_eq!(matcher.is_str_match("42"), Some(&Token::Number));
30//! assert_eq!(matcher.is_str_match("?"), None);
31//! ```
32//!
33//! ## Example: Matching Bytes
34//!
35//! ```
36//! use laps_regex::re::{RegexBuilder, BytesMatcher};
37//!
38//! let matcher: BytesMatcher<_> = RegexBuilder::new()
39//! .add("hello|hi", 0)
40//! .add("goodbye|bye", 1)
41//! .build_bytes()
42//! .unwrap();
43//!
44//! assert_eq!(matcher.is_match("hello".as_bytes()), Some(&0));
45//! assert_eq!(matcher.is_match(&[0x62, 0x79, 0x65]), Some(&1));
46//! ```
47
48pub mod dfa;
49pub mod fa;
50pub mod mir;
51pub mod nfa;
52pub mod re;
53pub mod table;