7个不稳定版本 (3个重大变更)
0.4.3 | 2023年9月27日 |
---|---|
0.4.2 | 2023年9月27日 |
0.3.0 | 2023年9月26日 |
0.2.0 | 2023年9月26日 |
0.1.0 | 2023年9月26日 |
#386 在 过程宏
每月下载 31次
40KB
798 行
害虫树
将动态类型 pest 树转换为静态类型树的一种替代方案,使用宏实现
此文档目前尚未完成,其中一些可能已过时。如果您有任何问题,请直接在GitHub issues中提问!
目标
- 直观
- 明确
- 易于初学者学习
非目标
- 快速
- 适用于所有情况
- 自定义支持
此crate围绕 PestTree
特征构建,可以为结构体和枚举派生。
选项
基本
名称 | 参数 | 用途 |
---|---|---|
strategy(...) | 一个 strategy ,例如 Direct 或 Sequential |
指定结构体/枚举的匹配策略。 |
require(...) | 一个 Requirement ,例如 Rule(...) |
定义结构体规则/策略未涵盖的要求。 |
convert(...) | 一个 Converter ,例如 auto |
将 Pairs 转换为结构体中的类似 i32 |
策略
名称 | 参数 | 用途 |
---|---|---|
直接 |
无 | 匹配像 in 、let 等标记。 |
顺序 |
无 | 匹配一系列标记,例如 let a = 3; |
要求
名称 | 参数 | 用途 |
---|---|---|
规则(...) |
由 pest_derive 生成的 Rule 枚举变体 |
确认 Pairs 是否匹配规则。这个要求应该在大多数(如果不是所有)结构体/枚举中使用 |
验证(...) |
一个闭包或接受 Pair 并返回 true (如果输入被接受)的函数 |
根据自定义条件进行匹配。 |
任何(...) |
两个或更多 需求 |
只需在 或(...) 中匹配 1 个需求即可接受。对于类似 与(...) 的功能,只需使用多个 require 属性 |
转换
名称 | 参数 | 用途 |
---|---|---|
custom_p(...) |
一个闭包或函数,它接受一个 Pair 并输出它应该转换到的类型。 |
将标记转换为自定义类型。 |
custom_s(...) |
一个闭包或函数,它接受一个 &str 并在输入被接受时返回 true |
将标记转换为自定义类型。 |
auto |
无 | 自动将 pair 转换为基本类型之一(pest_tree 将根据您的结构体成员声明确定类型) |
chain(...) |
按顺序链式连接许多函数 | 链式连接将一对转换为自定义类型的函数 |
PestTree 需要辅助属性来确定如何解析树。有关它们如何使用的示例,请查看示例文件夹。
lib.rs
:
一种简单的方法,将您的动态 [pest] 树转换为由结构和枚举构建的 AST。
此 crate 以 pest_tree_derive::PestTree
derive 宏为中心。该宏使用 pest_tree
属性宏来帮助为相关结构体/枚举推导出 pest_tree_derive::PestTree
特性。
依赖项
~4MB
~77K SLoC