6个版本
0.1.4 | 2020年3月17日 |
---|---|
0.1.3 | 2019年8月21日 |
0.1.2 | 2019年7月12日 |
0.1.1 | 2019年6月23日 |
0.0.1 | 2019年6月12日 |
#228 in 解析器工具
每月195次下载
3KB
pomelo
一个用于创建类似Lemon解析器的过程宏。
Pomelo是D. Richard Hipp为其SQLite解析器编写的Lemon解析器生成器(Lemon_C)的Rust版本(从现在开始,Lemon_C)。它基于将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许可证第2版(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您提交给工作的任何贡献,根据Apache-2.0许可证定义,均应按上述方式双许可,无需任何附加条款或条件。
依赖关系
~83KB