Nom指南中文版

原文https://tfpk.github.io/nominomicon/introduction.html,使用Google进行机翻 nominomicon 欢迎阅读这本关于Nom的书;使用 Nom 解析器发挥巨大作用的指南。本指南将向您介绍使用 Nom 的理论和实践。 本指南仅假设您: 想学习Nom, 已经熟悉 Rust。 Nom 是一个解析器组合器库。换句话说,它为您提供了定义以下内容的工具: “解析器”(接受输入并返回输出的函数),以及 “组合器”(采用解析器并将它们组合在一起的函数!)。 通过将解析器与组合器相结合,您可以从简单的解析器构建复杂的解析器。这些复杂的解析器足以理解 HTML、mkv 或 Python! 在我们出发之前,列出一些注意事项很重要: 本指南适用于 Nom7。 Nom 发生了重大变化,因此如果您正在搜索文档或 StackOverflow 答案,您可能会找到较旧的文档。一些常见的表明它是旧版本的指标是: 2021 年 8 月 21 日之前的文档 named! 宏的使用 使用 CompleteStr 或 CompleteByteArray 。 Nom 可以解析(几乎)任何东西;但本指南几乎完全专注于将完整的 &str 解析为事物。 第一章:Nom 方式 首先,我们需要了解 nom 思考解析的方式。正如简介中所讨论的,nom 让我们构建简单的解析器,然后组合它们(使用“组合器”)。 让我们讨论一下“解析器”实际上是做什么的。解析器接受输入并返回结果,其中: Ok 表示解析器成功找到了它要查找的内容;或者 Err 表示解析器找不到它要查找的内容。 如果解析器成功,它将返回一个元组。元组的第一个字段将包含解析器未处理的所有内容。第二个将包含解析器处理的所有内容。这个想法是解析器可以愉快地解析输入的第一部分,而无法解析整个内容。 如果解析器失败,则可能会返回多个错误。然而,为了简单起见,在接下来的章节中,我们将不对这些进行探讨。 ┌─► Ok( │ what the parser didn't touch, │ what matched the regex │ ) ┌─────────┐ │ my input───►│my parser├──►either──┤ └─────────┘ └─► Err(....