7个版本
0.1.5 | 2021年1月8日 |
---|---|
0.1.4 | 2020年3月17日 |
0.1.3 | 2019年8月21日 |
0.1.2 | 2019年7月12日 |
0.0.1 | 2019年6月12日 |
#43 in 解析器工具
11,663 每月下载量
用于 14 个crate(4个直接使用)
135KB
2K SLoC
pomelo
创建类似Lemon解析器的过程宏。
Pomelo是将Lemon解析器生成器(从现在起称为Lemon_C)移植到Rust的语言,最初由D. Richard Hipp为其SQLite解析器编写。它基于将Lemon移植到Rust的早期尝试(Lemon_Rust),但现在它被编写为一个Rust过程宏,因此不包含任何原始C代码(尽管它使用了相同的算法)。因此,名称更改为一个不同的柑橘类水果。
入门
建议前往 crates.io 以获取最新发布的版本,以及指向最新文档构建的链接。
只需在您的Cargo清单中添加以下依赖项
[dependencies]
pomelo = "*"
示例
use pomelo::pomelo;
pomelo! {
%type input Vec<i32>;
%type numbers Vec<i32>;
%type Number i32;
input ::= numbers?(A) { A.unwrap_or_else(Vec::new) };
numbers ::= Number(N) { vec![N] }
numbers ::= numbers(mut L) Comma Number(N) { L.push(N); L }
}
fn main() -> Result<(), ()> {
use parser::{Parser, Token};
//Real world code would use a tokenizer
let tokens = vec![
Token::Number(1),
Token::Comma,
Token::Number(2),
Token::Comma,
Token::Number(3),
];
let mut p = Parser::new();
for tok in tokens.into_iter() {
p.parse(tok)?;
}
let data = p.end_of_input()?;
assert_eq!(data, vec![1, 2, 3]);
Ok(())
}
在 github存储库文件夹 中查看更多示例。
许可证
根据您的选择,许可如下
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确表示,否则您有意提交给工作并由您定义的Apache-2.0许可证包含的任何贡献,将按上述方式双重许可,而无需任何额外的条款或条件。
依赖项
~1.5MB
~34K SLoC