#lexer #regex #regular #expression #derive-debug

relex

基于正则表达式的词法分析器库

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解析器工具

MIT 协议

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