#lexer #proc-macro #sample #lemon #procedural #parser-generator #pomelo

pm-lexer

这是一个使用过程宏crate的示例词法分析器,用于Pomelo测试

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

Download history 5/week @ 2024-03-11 34/week @ 2024-04-01 3/week @ 2024-04-22 3/week @ 2024-05-20

每月195次下载

MIT/Apache

3KB

pomelo

一个用于创建类似Lemon解析器的过程宏。

Travis-CI Status Latest version Documentation

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.0许可证定义,均应按上述方式双许可,无需任何附加条款或条件。

依赖关系

~83KB