3 个稳定版本

1.0.2 2023 年 8 月 29 日
1.0.1 2023 年 8 月 28 日
1.0.0 2023 年 8 月 25 日
0.1.0 2023 年 1 月 25 日

#1338 in Rust 模式

每月下载 28

GPL-3.0 许可证

460KB
112

上下文无关语言解析器

该软件包提供解析上下文无关语言的函数,是为与 fck 一起使用而编写的。文档还将链接到一些 基准测试。这些测试是在搭载 M1 Pro CPU 的 MacBook Pro 上进行的。时间主要用于比较,不应作为绝对值使用。

用法

该软件包提供了一个用于 Parser 特性的 derive 宏。它还提供了一些与 Parser 特性一起使用的另一个特性和两个结构体。

有关如何使用 derive 宏的详细信息,请参阅 文档

示例

示例目录 examples 包含一些示例文件,其中包含生成的展开。这些文件使用 cargo-expand 生成,并进行了整理,以便更易于阅读。

所有示例的结构都是相同的

  1. 两个用于 TokenTypeToken 的枚举以及所需的特性格式化实现
  2. mod nodes 包含带有 #[derive(Parser)]
  3. mod equivalentParser 实现的展开代码

当前问题

  • 错误处理目前有点简单
    • 如果您考虑规则 (Token::T1)?, Token::T2,则第一个标记可以是 Token::T1Token::T2 中的一个。如果这两个都没有找到,则返回的错误将指出它期望 Token::T2。未来的版本将具有更好的错误,其中 expected 是一个将针对每个可能的错误位置计算的 Vec<E>,这将提供更有用的错误。
    • 在解析枚举时,如果没有可以匹配的变体,则返回的错误来自匹配第一个变体。这是一个损失性错误,未来可能会更改。
  • 非位置标记数据不会被保存(仅位置数据被保存在 NodeWrapper 中)。这是为 v1.1.0 设计的,它将在 NodeData 特性中添加一个额外的方法来返回包装在 Option 中的额外数据。然后这将包装在一个新的结构体中以包含额外数据。

依赖项