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 日

#8 in #lemon

Download history 1809/week @ 2024-03-14 1672/week @ 2024-03-21 1609/week @ 2024-03-28 1691/week @ 2024-04-04 1652/week @ 2024-04-11 1805/week @ 2024-04-18 1835/week @ 2024-04-25 1451/week @ 2024-05-02 2043/week @ 2024-05-09 2267/week @ 2024-05-16 2330/week @ 2024-05-23 2280/week @ 2024-05-30 2349/week @ 2024-06-06 3374/week @ 2024-06-13 3412/week @ 2024-06-20 2130/week @ 2024-06-27

11,687 每月下载量
15 个crate中使用(通过 pomelo

MIT/Apache

130KB
2.5K 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
~36K SLoC