2个版本
| 0.1.2 | 2023年11月9日 |
|---|---|
| 0.1.1 | 2023年10月24日 |
| 0.1.0 |
|
#298 in 解析工具
105KB
2.5K SLoC
Pegy - Rust中的基于derive的解析器
特性
- 基于derive的解析生成
- 异步解析API
- 解析来自str、异步读取器或自定义输入类型的输入
- 运行时生成AST
- 语法定义错误的有意义错误信息
- 支持no_std
MSRV
当前支持的MSRV是1.75
示例
use pegy::Parse;
#[derive(Debug, Default, Parse)]
#[grammar($item0:['a'-'z''A'-'Z''0'-'9'])]
pub struct AlphaDigit(char);
#[derive(Debug, Default, Parse)]
#[grammar($item0:['0'-'9'])]
pub struct Digit(char);
#[derive(Debug, Default, Parse)]
#[grammar(!Digit $item0:AlphaDigit+)]
pub struct Ident(Vec<AlphaDigit>);
pub fn main(){
let re: pegy::Result<Ident> = pegy::parse_blocking::<Ident, _>("myIdent");
assert!(re.is_ok());
}
与类似特质的比较
| crate | 操作代码 | 集成 | 输入类型 | 流式输入 |
|---|---|---|---|---|
| pegy | 在语法中 | 过程宏(derive) | &str, AsyncRead, 自定义 |
是 |
| peg | 在语法中 | 过程宏(block) | &str, &[T], 自定义 |
否 |
| pest | 外部 | 过程宏(file) | &str |
否 |
表达式参考
项
"some string"- 字符串字面量:匹配str切片。返回&'static str。'c'- 字符字面量:匹配一个字符。返回char。Ident- 规则:匹配解析规则。它必须是一个有效的类型,并实现pegy::Parse。返回Ident类型。['a'-'z''A'-'Z''$''$']- 字符类:匹配一组字符。返回char。
量词
?- 可选:匹配零个或一个项。返回Option<T>*- 重复:匹配零个或多个项。返回Vec<T>+- 至少重复:匹配一个或多个项。返回Vec<T>。{min, max}- 重复范围:匹配至少min个且最多max个项。返回Vec<T>
特殊
$ident:term- 字段绑定:将项的结果绑定到结果的字段ident。返回()。( alternatives )- 组:匹配项并返回一个Span。terms | terms | terms- 选择:尝试匹配第一个项,如果失败,则匹配第二个,依此类推,直到找到匹配项。返回一个Span。!term- 负向前瞻:匹配项但不消耗任何字符。_ term- 静默:匹配项并返回()。
依赖项
~1–1.6MB
~34K SLoC