1 个不稳定版本
0.1.0 | 2019年5月12日 |
---|
#334 在 解析工具
63KB
1.5K SLoC
Pegcel:Syn的PEG解析生成器
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::Parse
和 quote::ToTokens
的实现,因此您可以像使用Syn提供的正常AST类型一样使用它们。
Pegcel是自托管的,因此请查看元语法在 pegcel/macros/tests/meta.rs 以及生成的输出在 pegcel/macros/src/grammar.rs。
注意事项
Pegcel期望您有 syn:^0.15.34
,quote:^0.6.12
,以及 proc-macro2:^0.4.27
作为Cargo依赖项。它们不能通过Cargo重命名。显然,如果导出AST类型,syn
和 quote
成为您的crate的公共依赖项。
Pegcel会生成一个Token
宏,以支持在您的语法中使用的任何自定义令牌,以及Syn提供的那些令牌。由于当前对proc-macro
仓库的限制,此宏是pub(crate)
的,并且默认情况下无法使其更公开。未来将提供一种选择,使其公开。
教程
依赖项
约4.5MB
约86K SLoC