4个版本 (1个稳定版)
1.0.0 | 2021年5月23日 |
---|---|
0.1.2 | 2021年5月20日 |
0.1.1 | 2021年5月20日 |
0.1.0 | 2021年5月17日 |
#206 在 解析器工具
18KB
376 行
relex (正则 lexer)
此软件包提供创建基于正则表达式的词法分析器的几个实用工具。词法分析器使用 regex crate 中的 RegexSet 以实现最高效率。当您需要快速启动词法分析器时,请使用此工具。
以下是一个快速入门示例
use relex::*;
#[derive(Debug, Clone, PartialEq)]
enum MyToken {
Whitespace,
ID,
Float,
Eof,
Unrecognized,
}
impl TokenKind for MyToken {
fn eof() -> Self { MyToken::Eof }
fn unrecognized() -> Self { MyToken::Unrecognized }
}
let lex = LexerBuilder::new()
.token(Rule::new(MyToken::Whitespace, r"\s+").unwrap().skip(true))
.token(Rule::new(MyToken::ID, r"[A-Za-z]+").unwrap())
.token(Rule::new(MyToken::Float, r"(\d+)(?:\.(\d+))?").unwrap().capture(true)) // this one captures groups
// because it calls `.capture(true)`
.build();
let mut scanner = lex.iter(" abc", 0);
let token = scanner.next().unwrap();
assert_eq!(token.kind, MyToken::ID);
assert_eq!(token.text, "abc");
assert_eq!(token.skipped[0].kind, MyToken::Whitespace);
收集代码覆盖率
❯ cargo test
Finished test [unoptimized + debuginfo] target(s) in 0.01s
Running unittests (target/debug/deps/relex-f41d18d0b3597fac)
... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-- note this executable and then run:
❯ kcov target/cov --include-pattern=relex/src ./target/debug/deps/relex-f41d18d0b3597fac
...
❯ open target/cov/index.html
许可协议 (MIT)
MIT 许可协议 (MIT)
版权所有 © 2021 Jonathan Apodaca [email protected]
任何人获得此软件及其相关文档的副本(“软件”),均免费获得在此软件上不受限制地处理软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,以及允许向软件提供方提供软件的人这样做,前提是遵守以下条件
上述版权声明和本许可协议应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些索赔、损害或其他责任是由于合同、侵权或其他方式引起的,与软件或软件的使用或其他交易有关。
依赖关系
~2–3MB
~53K SLoC