7个版本
| 0.2.4 | 2022年10月27日 |
|---|---|
| 0.2.3 | 2022年10月21日 |
| 0.1.1 | 2022年10月14日 |
#2811 在 解析器实现
22 每月下载
44KB
1.5K SLoC
parseal
解析和处理不同文件格式
这是一个以简单方式创建解析器的库。
示例
快速入门
假设你想解析一个点,例如 (10, 14),这样做的简单方法是
// some code
#[derive(Parsable, Debug)]
struct Point {
x: Number,
y: Number
}
pub fn some_func(buffer: &mut CharStream) {
let value = Point::parse(buffer);
println!("value: {:#?}", value);
}
请注意,点的属性类型是 Number,而不是类似 u32 的东西。这是因为 Number 存储了用于抽象语法树的额外解析信息,例如 span。
类型
以下是你可以从此库中使用的类型列表,以及每个类型的说明。
CharStream
来自 Parse 特性的 parse 函数使用此类型,而不是字符串。
CharStream 结构体具有一些额外的功能来处理解析
- 它有多个选项来处理空白。
- 它跟踪缓冲区的当前位置。
- 可以跳转到缓冲区中的特定位置(但前提是新位置必须在当前位置之后)。
创建
要创建一个 CharStream,你可以这样做
let value = "Hello, World!"
let stream = CharStream::new(value).build();
我们在这里调用 build,因为 new 函数返回一个 CharStreamBuilder
函数
| 名称 | 描述 | 参数 |
|---|---|---|
new |
创建一个 CharStreamBuilder |
value:用于创建 CharStream 的 String 缓冲区 |
set_whitespace |
设置空白模式 | type:要设置的流 WhitespaceType |
position |
返回当前位置 | |
indent |
返回当前缩进级别(只有当 WhitespaceType 设置为 Indent 时才会跟踪缩进) |
位置
这是一个结构体,用于在 CharStream 缓冲区中存储位置。
跨度
这是一个存储从CharStream缓冲区开始的Position结构的结构体。
CharStreamBuilder
这是用于创建CharStream的结构体。
ParseError
解析过程中可能返回的任何错误。
特质
这是您可以从此库中使用的特质的列表。
Parse
用于任何可解析值。
函数
| 名称 | 描述 | 参数 | 返回类型 |
|---|---|---|---|
parse |
尝试解析实现了该特质的类型的值 | 值: &mutCharStream |
Result<Self,ParseError> |
span |
获取当前对象的Span |
&self |
跨度 |
依赖关系
~245–530KB
~10K SLoC