问题标签 [nom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
311 浏览

rust - 如何用 nom 解析一段 u16 输入?

给定一个原始输入流,&[u16]考虑到 nom 期望&str作为输入,我如何使用 nom 来解析它?

例如,给定以下数据:

我想把它解析成字符串“foo”。

0 投票
1 回答
390 浏览

rust - 如何使用 nom 执行简单的 while 循环并解析二进制数据块?

考虑以数据段组织的二进制文件,其中前 4 个字节是段类型,接下来的 4 个字节是段长度,其余字节是原始数据。我可以解析第一段,如:

如何重复该步骤直到到达文件末尾?

0 投票
0 回答
192 浏览

rust - 在 nom 的 `named_args` 中指定生命周期(预期的具体生命周期,找到边界)

我是 Rust 初学者,正在编写一个可以解析冒号分隔KEY: VALUE的行的 nom 解析器。我制作了一个可以解析键值对的基本kv解析器:named_args

我把生命周期放在那里是为了取悦编译器。

我用它制作了这两个解析器:

为了测试这些,我正在编写一个通用包装器,它使用KEY: {YOUR_VALUE}字符串调用其中一个函数,并期望YOUR_VALUE返回:

这工作正常:

但不是name解析器:

编译器给了我:

这让我很困惑。不 Result<&str, &str>适合Result<&str, _>

由于它适用于map_res'd 版本,我假设它map_res返回不同的值,可能具有不同的生命周期。

我想我可能不得不更改kv解析器的生命周期定义,但我完全不知道如何选择/选择哪些。

0 投票
1 回答
518 浏览

parsing - Nom 5:多次使用另一个解析器创建组合器

假设我想创建一个组合器,它多次使用另一个解析器,例如,解析由两种引号分隔的字符串:

正如预期的那样,此解析器无法编译并出现“使用移动值”错误:

但是,我不能只添加CopyorCloneF边界:很多解析器,特别是由 Nom 的内置函数返回的解析器,既不实现Clone也不实现Copy。我也不能&f用作 的参数tuple,因为那将是一个借用检查错误(f是一个临时的本地值,因此不可能返回用它构造的解析器)。

我看到这样做的唯一方法实际上是alt直接在函数中重新实现逻辑,通过在一系列嵌套match语句中展开它,但这似乎真的不是最理想的。或者也许我错过了一些简单的东西,实际上可以只使用组合器来做我想做的事情?

我很确定有更好的方法来专门编写quoted如上所述的组合器,如果有人展示它会很好,但我的问题更笼统 - 我如何编写重用相同解析器的组合器?

0 投票
1 回答
290 浏览

parsing - 如何解析 Nom 中的大写字符串?

我在 Nom 5 中使用函数而不是宏编写解析器。我的目标是编写一个能够识别完全由大写字符组成的字符串的解析器。理想情况下,它将具有与alpha1相同的返回签名。

尽管可以编译,但我编写的简单单元测试失败了:

失败输出为

0 投票
1 回答
112 浏览

rust - 如何使用命名参数解析 &str?

我试图找到解析 a&str并提取出COMMAND_TYPE和命名参数的最佳方法。命名参数可以是任何东西。

这是建议的字符串(可以更改)。

我一直在尝试几种方法来提取COMMAND_TYPE,这似乎相当简单:

从括号中提取参数似乎很简单:

我一直在看nom crate,它看起来相当强大(而且很复杂),所以我不确定我是否真的需要使用它。

如何将括号之间的命名参数提取到 a 中HashMap

0 投票
1 回答
511 浏览

parsing - nom 解析一个单独的列表

我正在尝试使用 nom5.0 解析以下备用字符串

或者

我尝试了以下但无济于事

版本 2。

我可以得到第一个或第二个来解析,但不能同时解析。有没有办法表达这个?

0 投票
1 回答
357 浏览

rust - nom如何区分负号和负数?

使用解析器生成器nom1-2 ,我如何编写一个解析器来提取术语和中减号的差异1*-2

在第一个示例中,我期望标记1和。在第二个中,“减号”表示负数。预期的标记是和。不是,和。_-21*-21*-2

如何使用用户定义的状态使 nom 有状态,例如expect_literal: bool

0 投票
1 回答
697 浏览

rust - Rust Nom:输入的多和结尾

我正在尝试熟悉 Nom,目前是第 5 版,其中没有CompleteStr其他内容,因此相关问题没有太大帮助。

我怎样才能解析类似的东西

进入

?

@前置字符串称为“字段标识符”;下一个子字符串是描述;两者都称为“场”

这是我成功解析一个字段的方法:

当我按照开头所述将其包装many1并提供输入时,我收到了Err(Incomplete(Size(1))),但是如果我将其放在@输入的末尾,它就可以工作。如何在输入结束时将其标记为已完成?

0 投票
2 回答
524 浏览

rust - 在以 nom 分隔的标签之间捕获字符串

我正在尝试学习使用 nom (5.0.1) 并希望获取两个标签之间的字符串:

但这给了我错误

我在这里做错了什么?我对 Rust 还很陌生,而且是 nom 的初学者,所以我希望它最终会变得非常明显:)