2 个版本

0.1.1 2023年3月22日
0.1.0 2023年3月22日

#317 in 解析工具

26 每月下载次数

MIT 许可证

9KB
146

regex-tokenizer

Alla pugna! Crates.io (latest)

一个基于正则表达式的分词器,具有最小化 DSL 来定义它!

用法

tokenizer! {
    SimpleTokenizer

    r"[a-zA-Z]\w*" => Identifier
    r"\d+" => Number
    r"\s+" => _
}

在函数中

...
let tokenizer = SimpleTokenizer::new();
...

SimpleTokenizer 将生成一个名为 SimpleTokenyzer_types枚举,包含 IdentifierNumber。类为 _ 的正则表达式将被忽略;当找到不匹配指定正则表达式的子字符串时,分词将被视为失败。

当多个非忽略的正则表达式与输入匹配时,优先考虑定义的第一个。

调用 tokenizer.tokenize(...) 将返回一个迭代器,从查询中提取令牌。一个令牌由

{
    value: String,
    position: usize,
    type_: SimpleTokenyzer_types,
}

position 将是令牌的第一个字符在查询中的位置。调用 .next() 如果没有更多令牌可提取,将返回 None

依赖项

~2.2–3.5MB
~55K SLoC