#parser #data #values #data-processing #format #character #whitespace-separated

bin+lib wsv

根据 Stenway 定义的空白分隔值(Whitespace-separated values)实现集合。请参考 https://honestlysam.uk 的发布说明。

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解析器实现

MIT 许可证

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突出显示它,我将非常乐意帮助实现这一目标!

下一个目标

使用以下工具实现解析器

  1. 状态-like
    1. 梅雷机器
    2. 摩尔机器
  2. 组合器-like
    1. nom
    2. Winnow
  3. serde-like
    1. serde
    2. Rkyv
  4. 语法-like
    1. Pest
    2. Oak
    3. Peginator
    4. rust-peg

贡献

此库欢迎对新实现方式的贡献。您已经可以使用现有的基准测试和测试套件进行编码。它还欢迎对现有实现进行调整,特别是来自对相关crate有深刻了解的用户,以使解决方案更符合实际使用。

序列化

目前,重点仅在于文本文件 -> Rust数据模型。反序列化,因为一些工具是单向的。此仓库欢迎序列化解决方案,但请注意,周围的测试尚不存在。

依赖项

~7.5MB
~131K SLoC