9个版本
0.0.8 | 2024年6月22日 |
---|---|
0.0.7 | 2024年6月12日 |
0.0.2 | 2024年5月30日 |
在进程宏类别中排名第149
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非常精简,不包括额外功能。始终存在的是Parser
、Parse
和ToTokens
traits。以下功能启用额外特质
请注意,由于我们未定义如何美化打印标记(例如,分隔符周围的空格),因此Display
有时可能令人惊讶。此外,某些std类型(例如Option
)无法实现Display
。
依赖关系
~80KB