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

Download history 1808/week @ 2024-03-14 1662/week @ 2024-03-21 1602/week @ 2024-03-28 1691/week @ 2024-04-04 1640/week @ 2024-04-11 1790/week @ 2024-04-18 1832/week @ 2024-04-25 1448/week @ 2024-05-02 2041/week @ 2024-05-09 2267/week @ 2024-05-16 2328/week @ 2024-05-23 2280/week @ 2024-05-30 2340/week @ 2024-06-06 3370/week @ 2024-06-13 3405/week @ 2024-06-20 2127/week @ 2024-06-27

11,663 每月下载量
用于 14 个crate(4个直接使用)

MIT/Apache

135KB
2K SLoC

pomelo

创建类似Lemon解析器的过程宏。

Travis-CI Status Latest version Documentation

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-2.0许可证包含的任何贡献,将按上述方式双重许可,而无需任何额外的条款或条件。

依赖项

~1.5MB
~34K SLoC