#递归 #语法 #抽象 #解析器 #AST # #语法树

nightly astray_macro

轻松从 Rust 结构构建 AST

8 个版本

0.2.5 2023 年 7 月 30 日
0.2.4 2023 年 7 月 29 日
0.2.3 2023 年 6 月 27 日
0.1.1 2023 年 5 月 18 日
0.1.0 2023 年 2 月 16 日

#134 in #抽象


用于 astray

MIT 许可证

76KB
1K SLoC

待办事项

-[X] Box -[X] Vec -[ ] 函数式方法 -[ ] 无字段变体的枚举(检查 Operator @ tests/std_types/box.rs) -[ ] 正确的文档

生成内容

// /** // * impl Parsable<#Token> for #Type { // * fn parse(iter: &mut TokenIter) -> Result<#Type, ParseError<#Token>> { // * ( // * // 在 case it is a struct Node // * let #field_name = iter.parse().map_err(|err| ParseError::from_conjunct_error(err))?; // * // 在 case it is an enum Node // * let #field_name ## _err = iter.parse()?.map(|result: #field_type |#Type::#field_name(result)).hatch()?; // * ) * // repeat for each field // * // * // if struct Node // * Ok(#Type {#(#field_name)}) // * // else if enum Node // * Err(ParseError::from_disjunct_errors(#(#field_name##_err))) // * } // * } // */

依赖项

~2MB
~44K SLoC