#lexer #regex #automata #parser #generate #laps

laps_regex

从正则表达式生成NFA、DFA和状态转换表的工具

4个版本

0.1.1 2023年12月24日
0.1.0 2023年12月17日
0.0.2 2023年12月10日
0.0.1 2023年6月17日

#197 in 解析器工具


2 个crate中使用(通过 laps_macros

MIT/Apache

69KB
1.5K SLoC

laps_regex

从正则表达式生成NFA、DFA和状态转换表的工具。

此库是为crate laps 构建的。

示例:匹配UTF-8字符串

use laps_regex::re::{RegexBuilder, CharsMatcher};

#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
enum Token {
  Keyword,
  Identifier,
  Number,
}

let matcher: CharsMatcher<_> = RegexBuilder::new()
  .add("if|else|while", Token::Keyword)
  .add("[_a-zA-Z][_a-zA-Z0-9]*", Token::Identifier)
  .add("[0-9]|[1-9][0-9]+", Token::Number)
  .build()
  .unwrap();

assert_eq!(matcher.is_str_match("if"), Some(&Token::Keyword));
assert_eq!(matcher.is_str_match("while1"), Some(&Token::Identifier));
assert_eq!(matcher.is_str_match("42"), Some(&Token::Number));
assert_eq!(matcher.is_str_match("?"), None);

示例:匹配字节

use laps_regex::re::{RegexBuilder, BytesMatcher};

let matcher: BytesMatcher<_> = RegexBuilder::new()
  .add("hello|hi", 0)
  .add("goodbye|bye", 1)
  .build_bytes()
  .unwrap();

assert_eq!(matcher.is_match(b"hello"), Some(&0));
assert_eq!(matcher.is_match(&[0x62, 0x79, 0x65]), Some(&1));

许可证

版权 (C) 2022-2023 MaxXing。根据您的选择,许可协议为Apache 2.0或MIT。

依赖项

~3MB
~74K SLoC