问题标签 [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 投票
1 回答
177 浏览

regex - How to match regular expression but return the remaining part of the input in Rust Nom?

I am trying to use Nom 6.1.2 to parse a relatively simple Lisp like language, where I need to capture identifiers of the form [a-z][a-zA-Z0-9_\-\.]. I tried to use re_match but this is expecting the whole input to match not just the first part of the string. I want to be able to match these identifiers as part of a larger context, so I want it to return the remaining part of the input to be passed on to other parsers, in a parser combinator fashion.

The test I want this to pass is the following:

The last assertion in the above test fails.

If I was using something like the alphanumeric function this would work fine, but this doesn't capture the regular expression I want.

I could hand code this myself and somehow check the first character and the subsequent ones, but I have several other situations where I need to parse different regular expressions, and it will become unmaintainable.

What is the right way to take the part that matches a regular expression and continue with parsing the rest of the larger input?

0 投票
1 回答
207 浏览

rust - 如何在 nom 的解析器中使用解析器?

我正在尝试解析包含一些压缩格式数据的格式。如何将解压缩的部分作为常规解析的一部分进行解析?目前我遇到了借用检查器的问题,因为错误部分nom希望compressed_data在从返回时引用该部分parse_header,这将超出范围。

0 投票
1 回答
112 浏览

parsing - 用 nom 解析可变空格分隔的列表

如何使用可能由空格分隔或不分隔的令牌列表?

我正在尝试使用(6.1.2)以cedict格式解析中文罗马化(拼音)。nom例如"ni3 hao3 ma5",由于转录中的人为错误,有时写为"ni3hao3ma5""ni3hao3 ma5"(注意可变间距)。

我已经编写了一个解析器来处理单个音节,例如["ni3", "hao3", "ma5"],我正在尝试使用 anom::multi::separated_list0来解析它,如下所示:

Err(Error(Error { input: "", code: SeparatedList }))但是,在所有代币都被消耗后,我得到了一个。

0 投票
1 回答
226 浏览

rust - 使用 Rust NOM 解析库迭代多行

我正在尝试为 Rust 中的一个项目学习 NOM。我有一个文本文件,其中包括: [tag="#43674"]char[/tag]每行有多个标签背靠背。我正在尝试提取“#43674”和“char”,将它们存储在一个元组中(x, y),然后将它们推送到Vec<(x, y)>文本文件每一行的向量中。到目前为止,我已经成功地将解析器组合成两个函数;一个用于“#43674”,一个用于“char”,然后我将它们组合在一起返回<IResult<&str, (String, String)>。这是代码:

如何在文本文件的给定行上迭代此函数?我已经有一个将文本文件迭代成行的函数,但是我需要color_char为该行中的每个闭包重复。我完全错过了重点吗?

0 投票
1 回答
318 浏览

rust - 如何使用 Rust nom 为这种结构文本编写解析器?

我有以下数据

基本上它代表三个条目:

每个条目都有一个标题和一个正文。标题使用单行(不包括行尾),正文使用所有后续行,直到遇到分隔线 ( sep/)。我想要的结果是一个条目向量。如何使用 nom 来解析它?我对 nom 很陌生,我不能让这些部分一起工作并形成一个工作解析器。以下是我所拥有的:

0 投票
1 回答
193 浏览

parsing - 如何强制 nom 解析整个输入字符串?

我正在使用 nom 版本 6.1.2,我正在尝试解析字符串,例如 A 2 1 2.

目前,我很乐意至少区分符合要求的输入和不符合要求的输入。(之后我想将输出更改为一个元组,其中“A”作为第一个值,第二个值是 u16 数字的向量。)

字符串总是必须以大写字母 A 开头,之后至少应该有一个空格,然后是一个数字。此外,可以有任意多的额外空格和数字。以数字结尾而不是空格很重要。所有数字都将在 u16 的范围内。我已经写了以下函数:

另外我想提一下,对于使用 CompleteStr 的此类问题有一些答案,但这不再是一个选项,因为它已在一段时间前被删除。

人们解释说我的行为的原因是 nom 不知道字符串的切片何时结束,因此我得到parse_and: Err(Incomplete(Size(1)))作为输入示例的答案。

0 投票
0 回答
63 浏览

parsing - 在 Rust nom 中选择函数特征和解析器特征

我有使用 Haskell parsec 库的经验,在 Haskell 中,我们只是在任何地方都使用函数。

Rust nom 提供Parsertrait 并且任何实现它的类型都可以像instance.parse(intput).

但是像map不返回的组合器Parser

我想知道,什么时候我们应该更喜欢Parsertrait,什么时候应该更喜欢impl FnMut(I) -> IResult<I, O2, E>.

我的猜测是,我们总是更喜欢使用Parsertrait 作为参数(所以我们对参数的限制较少)和impl FnMut返回(这样用户使用起来更方便)。

0 投票
1 回答
181 浏览

rust - 如何使用 Rust 的解析器库 nom 正确解析这个程序

我想解析一个由这个 BNF 表示的程序:

这个 BNF 解析小程序。log_and 表示逻辑与。

我使用解析器库 nom 编写了 Rust 程序:

此代码输出 parse 的结果a && blog_and_expression解析程序。

我想要的结果是a LogAnd b。但结果是:

这意味着a And &b

如何使用 nom 正确解析该程序?

0 投票
2 回答
177 浏览

parsing - 使用 nom 解析带有反斜杠转义的单引号的单引号字符串

这是Parsing single-quoted string with escaped quotes with Nom 5Parse string with escaped single quotes的变体。我想将'1 \' 2 \ 3 \\ 4'(原始字符序列)之类的字符串解析为(Rust 字符串),所以除了字符串内部的"1 \\' 2 \\ 3 \\\\ 4"可能性之外,我不关心任何转义。\'尝试使用链接问题中的代码:

只有前 3 个案例按预期工作。

0 投票
0 回答
59 浏览

regex - 模式 /.*foobar/ 的等效 `nom` 解析器/组合器是什么?

我一直在阅读6.2.1的文档nom并且正在尝试构建一个解析器,它将匹配任意数量的字符(包括零),后跟单词 foobar: /.*foobar/

nom::bytes::complete::take_until("foobar")几乎做了我想要的,但它不会消耗foobar自己,所以我不得不这样做:

我倾向于根据传统的正则表达式语法进行思考,然后必须将其映射到提供的可用构造nom。我越来越善于注意到nom结构更适合的场景,但是是否有 regex-to-nom 备忘单?