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