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