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日

#38 in #strategy

每月41次下载
用于 pest_tree

MIT 协议

49KB
1K SLoC

Pest Tree

使用宏将动态类型的pest树转换为静态类型的替代方案 pest_ast

此文档目前未完成,部分内容可能已过时。如有任何问题,请直接在GitHub issues中提问!

目标

  • 直观
  • 明确
  • 易于初学者学习

非目标

  • 快速
  • 适用于所有情况
  • 支持定制

此crate围绕可以派生的特质 PestTree 展开,该特质适用于Struct和Enum。

选项

基本

名称 参数 目的
strategy(...) 一个 strategy,例如 DirectSequential 指定结构体/枚举的匹配策略。
require(...) 一个 Requirement,例如 Rule(...) 定义结构体规则/策略未涵盖的要求。
convert(...) 一个 Converter,例如 auto Pairs 转换为结构体中的 i32

策略

名称 参数 目的
Direct None 匹配类似于 inlet 等的标记。
Sequential None 匹配一系列标记,例如 let a = 3;

要求

名称 参数 目的
rule(...) pest_derive 生成的 Rule 枚举变体 确认 Pairs 匹配规则。此要求应在大多数如果不在所有结构体/枚举中使用
validate(...) 闭包或函数,接受一个 Pair,如果输入被接受则返回 true 根据自定义条件进行匹配。
任何(...) 两个或更多 Requirement 只有当 or(...) 中的一个匹配时,才会接受。对于 and(...) 这样的功能,只需使用多个 require 属性即可。

转换

名称 参数 目的
custom_p(...) 闭包或函数,接收一个 Pair 并输出应转换到的类型。 将标记转换为自定义类型。
custom_s(...) 闭包或函数,接受一个 &str,如果输入被接受则返回 true 将标记转换为自定义类型。
auto None 自动将 pair 转换为基本类型之一(pest_tree 将根据您的结构体成员声明确定类型)。
chain(...) 按顺序链式连接多个函数。 链式连接将对转换对为自定义类型的函数。




PestTree 需要辅助属性来确定如何解析树。有关如何使用它们的示例,请参阅示例文件夹。

依赖关系

~1–1.5MB
~33K SLoC