36 个版本
0.13.7 | 2024 年 6 月 14 日 |
---|---|
0.13.4 | 2024 年 1 月 4 日 |
0.13.3 | 2023 年 9 月 21 日 |
0.13.1 | 2023 年 1 月 27 日 |
0.1.1 | 2018 年 12 月 18 日 |
#44 在 解析工具
7,589 每月下载量
在 6 crates 中使用
505KB
11K SLoC
lrlex
lrlex
是 lex
/ flex
的部分替代品。它接受一个输入字符串,并根据 .l
文件将其分割成 词素。不幸的是,许多现实世界的语言都有一些超出 lrlex
能力范围的边缘情况。然而,当它适用时,它是一种非常方便的表示词法分析的方法。
lrlex
还有一个简单的命令行界面,允许您检查您的词法规则是否按预期工作
$ cat C.java
class C {
int x = 0;
}
$ cargo run --lrlex java.l /tmp/C.java
Finished dev [unoptimized + debuginfo] target(s) in 0.18s
Running `target/debug/lrlex ../grammars/java7/java.l /tmp/C.java`
CLASS class
IDENTIFIER C
LBRACE {
INT int
IDENTIFIER x
EQ =
INTEGER_LITERAL 0
SEMICOLON ;
RBRACE }
lib.rs
:
lrlex
是 lex
/ flex
的部分替代品。它接受一个 .l
文件并将其静态编译成 Rust 代码。生成的 [LRNonStreamingLexerDef] 可以接受一个输入字符串,并从中实例化一个 [LRNonStreamingLexer]。这提供了一个迭代器,可以生成该输入的 lrpar::Lexeme 序列,以及回答有关 cfgrammar::Span 的基本查询(例如提取子字符串,计算行和列号)。
依赖关系
~4–13MB
~147K SLoC