9个版本

0.0.8 2024年6月22日
0.0.7 2024年6月12日
0.0.2 2024年5月30日

进程宏类别中排名第149


用于unsynn-rust

MIT/Apache

81KB
1.5K SLoC

unsynn(来自德语“unsinn”,意为荒谬)是一个极简主义Rust解析库。它通过省略实际的语法实现并妥协于简单的错误报告来实现这一点。作为交换,它提供了简单的可组合解析器和直观的解析器构建。语法将在自己的crates(见unsynn-rust)中实现。

其主要用途是当一个人想要创建定义自己语法的Rust进程宏或只需要稀疏的Rust解析器时。

示例

# use unsynn::*;
let mut token_iter = quote::quote!{ foo ( bar, baz, barf ) }.into_iter();

// Composition
let ast =
    Cons::<Ident, ParenthesisGroupContaining::<CommaDelimitedVec<Ident>>>
        ::parse(&mut token_iter).unwrap();

// The same defining a custom type, the macro will generate the `Parser` and `ToToken` impls.
unsynn!{
    struct IdentThenParenthesisedIdents {
        ident: Ident,
        pidents: ParenthesisGroupContaining::<CommaDelimitedVec<Ident>>,
    }
}

let mut token_iter = quote::quote!{ foo ( bar, baz, barf ) }.into_iter();

let ast = IdentThenParenthesisedIdents::parse(&mut token_iter).unwrap();

功能

默认情况下,unsynn非常精简,不包括额外功能。始终存在的是ParserParseToTokens traits。以下功能启用额外特质

  • impl_debug
    为泛型unsynn类型添加Debug实现。

  • impl_display
    为泛型unsynn类型添加Display实现。

请注意,由于我们未定义如何美化打印标记(例如,分隔符周围的空格),因此Display有时可能令人惊讶。此外,某些std类型(例如Option)无法实现Display

依赖关系

~80KB