3 个稳定版本
1.0.2 | 2023 年 8 月 29 日 |
---|---|
1.0.1 | 2023 年 8 月 28 日 |
1.0.0 | 2023 年 8 月 25 日 |
0.1.0 |
|
#1338 in Rust 模式
每月下载 28 次
460KB
112 行
上下文无关语言解析器
该软件包提供解析上下文无关语言的函数,是为与 fck 一起使用而编写的。文档还将链接到一些 基准测试。这些测试是在搭载 M1 Pro CPU 的 MacBook Pro 上进行的。时间主要用于比较,不应作为绝对值使用。
用法
该软件包提供了一个用于 Parser
特性的 derive 宏。它还提供了一些与 Parser
特性一起使用的另一个特性和两个结构体。
有关如何使用 derive 宏的详细信息,请参阅 文档
示例
示例目录 examples 包含一些示例文件,其中包含生成的展开。这些文件使用 cargo-expand
生成,并进行了整理,以便更易于阅读。
所有示例的结构都是相同的
- 两个用于
TokenType
和Token
的枚举以及所需的特性格式化实现 mod nodes
包含带有#[derive(Parser)]
mod equivalent
是Parser
实现的展开代码
当前问题
- 错误处理目前有点简单
- 如果您考虑规则
(Token::T1)?, Token::T2
,则第一个标记可以是Token::T1
或Token::T2
中的一个。如果这两个都没有找到,则返回的错误将指出它期望Token::T2
。未来的版本将具有更好的错误,其中expected
是一个将针对每个可能的错误位置计算的Vec<E>
,这将提供更有用的错误。 - 在解析枚举时,如果没有可以匹配的变体,则返回的错误来自匹配第一个变体。这是一个损失性错误,未来可能会更改。
- 如果您考虑规则
- 非位置标记数据不会被保存(仅位置数据被保存在
NodeWrapper
中)。这是为 v1.1.0 设计的,它将在NodeData
特性中添加一个额外的方法来返回包装在Option
中的额外数据。然后这将包装在一个新的结构体中以包含额外数据。