13 个版本 (4 个重大变更)
0.5.0 | 2024 年 5 月 20 日 |
---|---|
0.4.0 | 2024 年 5 月 10 日 |
0.3.3 | 2024 年 4 月 28 日 |
0.3.1 | 2024 年 3 月 13 日 |
0.1.1 | 2024 年 1 月 22 日 |
#438 在 解析器实现
81KB
1.5K SLoC
####################################################################
"8.`888b ,8" d888888o. "8.`888b ,8"
"8.`888b ,8" .`8888:' `88. "8.`888b ,8"
"8.`888b ,8" 8.`8888. Y8 "8.`888b ,8"
"8.`888b .b ,8" `8.`8888. "8.`888b ,8"
"8.`888b 88b ,8" `8.`8888. "8.`888b ,8"
"8.`888b .`888b,8" `8.`8888. "8.`888b ,8"
"8.`888b8.`8888" `8.`8888. "8.`888b8"
"8.`888`8.`88" 8b `8.`8888. "8.`888"
"8.`8' `8,`" - - `8b. ;8.`8888 - - "8.`8" - -
"8.` `8" - - `Y8888P ,88P' - - "8." - -
####################################################################
ASCII 授权归 Broadway 字体所有,在 patorjk.com 上。谢谢!
简介
这个库旨在解决解析工具选择困难的问题。
WSV 是一个教育性库,展示了 Rust 生态系统中的每个解析 crate 解释的一个格式。它是一个广泛的教会,涵盖了数据摄入和持久化、编程语言词法分析和自然语言处理工具的适当方法。WSV 格式是一个金发姑娘格式,足够简单,几分钟内就可以理解,足够复杂,可以容纳一些有趣的边缘情况。
请加入我的旅程,展示 Rust 对初学者解析开发者提供的多样性。
发布说明可以在 这里 找到。关于我创建这个库的更广泛的动机,请参阅 这里。
我相信 Rust 最大的超级力量在于其教育潜力。它被设计得非常冗长、明确和有意,这不可避免地会影响到语言的教学。因此,我发现的每个解析库都有出色的文档和大量不同格式的示例,它们都能处理。然而,虽然这对提高你对单个 crate 的理解有益,但它并不能帮助你最初的选择。
这个库旨在展示我们可以使用的许多工具,它们应用于相同的数据格式,因此更容易选择。每个解决方案在全面性、可读性、可教学性和可扩展性方面都不同。这些质量在每个选项上都进行了记录。我们唯一考虑的指标是微基准测试和文件中的非空白字符计数。
请将其视为原始意义上的库。随意查看代码架上的内容并阅读简介。避免使用不提供所需所有功能的工具将自己局限在某个领域。这是一个二进制crate,因此如果您选择安装此包,您可以在WSV文件上运行它,并将其格式化输出到终端。这将使用最快的实现。
注意。目标是展示每个crate或想法的经典、“惯用”用法。如果您有一个旨在实现最快速度的想法,这将是一个受欢迎的补充。
另请注意。我还想展示如何使用此API。IO模块包含与文件系统交互的函数。
了解格式
WSV是空白分隔值文件。以下是一个有效示例,展示了每个功能。这将为您提供一个足够的基础,以便深入了解选项,但如果您需要更多,请查看规范。
Values are separated by any Unicode-defined whitespace
A "value" "surrounded by double quotes" allows for "whitespace in the value."
There are "two escape characters. "" is a double quote, "/" is a newline."
Comments are indicated with the # character.
Lines are separated by \n characters, not terminated by them. \r isn't special,
but since we ignore whitespace at the beginning and end of each row, splitting
on /n/r is still valid.
Numbers aren't special either. 3 345 546.456.
ASCII标题也是一个有效的WSV文件。如果有人知道如何让GitHub突出显示它,我将非常乐意帮助实现这一目标!
下一个目标
使用以下工具实现解析器
- 状态-like
梅雷机器摩尔机器
- 组合器-like
nom- Winnow
- serde-like
- serde
- Rkyv
- 语法-like
Pest- Oak
- Peginator
- rust-peg
贡献
此库欢迎对新实现方式的贡献。您已经可以使用现有的基准测试和测试套件进行编码。它还欢迎对现有实现进行调整,特别是来自对相关crate有深刻了解的用户,以使解决方案更符合实际使用。
序列化
目前,重点仅在于文本文件 -> Rust数据模型。反序列化,因为一些工具是单向的。此仓库欢迎序列化解决方案,但请注意,周围的测试尚不存在。
依赖项
~7.5MB
~131K SLoC