1 个不稳定版本

0.1.0 2019年5月12日

#334解析工具

MIT 许可证

63KB
1.5K SLoC

Pegcel:Syn的PEG解析生成器

Chat on Discord Travis status

Pegcel为您处理从语法生成Syn风格的语法树类型(Syn-style Syntax tree types)的枯燥部分,同时仍然允许您拥有手动实现解析的所有功能。

简而言之,Pegcel接受如下输入 例如这样

use syn
use crate::manual_grammar::UnnamedItem

Grammar: {
    kind: GrammarUse
    uses: {&"use" Use}*
    items: NamedItem*
}

GrammarUse: {
    / Syn: {"use" "syn"}
}

Use: {
    r#use: "use"
    anchor: "::"?
    tree: syn::UseTree
}

Item: {
    / Named: {&{syn::Ident !"::" ":"} NamedItem}
    / Unnamed: UnnamedItem
}

NamedItem: {
    name: syn::Ident
    colon: ":"
    item: UnnamedItem
}

生成 所有描述的类型,以及 syn::parse::Parsequote::ToTokens 的实现,因此您可以像使用Syn提供的正常AST类型一样使用它们。

Pegcel是自托管的,因此请查看元语法在 pegcel/macros/tests/meta.rs 以及生成的输出在 pegcel/macros/src/grammar.rs

注意事项

Pegcel期望您有 syn:^0.15.34quote:^0.6.12,以及 proc-macro2:^0.4.27 作为Cargo依赖项。它们不能通过Cargo重命名。显然,如果导出AST类型,synquote 成为您的crate的公共依赖项。

Pegcel会生成一个Token宏,以支持在您的语法中使用的任何自定义令牌,以及Syn提供的那些令牌。由于当前对proc-macro仓库的限制,此宏是pub(crate)的,并且默认情况下无法使其更公开。未来将提供一种选择,使其公开。

教程

实际上,我不确定如何解释如何使用Pegcel!在#1Discord上联系我并提问,然后我们可以一起编写文档。

依赖项

约4.5MB
约86K SLoC