问题标签 [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 回答
71 浏览

rust - Rust 编译器无法识别为结构实现的通用特征绑定

我正在使用解析器组合器Nom来编写 TOML 解析器。我遇到问题的解析器函数使用chrono crate 解析日期时间字符串。

操场

在上面的代码中,我使用 解析一个字符串切片chrono::DatetTime::parse_from_rfc3339,它返回一个chrono::format::ParseResult. 然后,我正在匹配它,以便将其转换为正确的nom::IResult. ParseResult::Ok手臂很好,但我无法为ParseResult::Err. 这是我在编译上面的代码片段时遇到的错误:

ErrorfromError::from_error_kind是 Nom 自己的结构之一,它确实实现trait ParseError,就像E泛型指定的那样。为什么编译器不能识别这个?

0 投票
1 回答
63 浏览

rust - 使用 nom 解析时无法推断类型参数的类型错误

我对nom7.1 版进行了这个测试:

运行cargo test

它建议我指定tag::<T, Input, Error>()

我该如何处理?我还没有完全理解为什么会出现这个问题。

我尝试从以下指定一些类型nom

0 投票
1 回答
62 浏览

rust - 如何使用 nom 进行解析,直到找到一个字符串?

使用 nom 很容易解析一个字符串,直到找到一个字符。如何使用 nom 吞噬字符串直到分隔符或结尾?处理这个。

如何对字符串(多个字符)而不是单个分隔符执行相同操作?

例如,要解析abchello,我想解析所有内容,直到hello找到为止。

0 投票
1 回答
77 浏览

rust - 如何在 nom 中有一个带有可选终止分隔符的分隔符?

我想用 nom 解析这两个:

目前我有这段代码解析第一个但不是第二个(第一个函数是来自 nom 文档的配方,它只解析空格):

我是 nom 的新手,对当前的代码没有任何效忠,很高兴告诉我我做错了......

谢谢!

0 投票
1 回答
112 浏览

rust - 解析允许在 nom 中嵌套括号

我用的是名。我想解析一个被括号包围的字符串,并允许在字符串中添加额外的嵌套括号。

所以(a + b)会解析为a + b,并且((a + b))会解析为(a + b)

这适用于第一种情况,但不适用于嵌套情况:

我尝试使用rest,但这不尊重 final )

谢谢!

0 投票
1 回答
53 浏览

rust - 带有 nom (>5) 和 `alt` 的状态

在 Rust 中尝试了一些树结构之后,我最终决定构建一个线性化树,例如

因此,在解析表达式(例如"+ + 3 4 1")时,解析器需要改变AST,通过将新表达式推入其中并使用ExprReffor 进一步的表达式。

所以,我想到了类似的东西

这有效,只要我不使用分支组合器,因为,你可能已经猜到了,需要多个可变借用ast!例如

我尝试用 实现对这种类型的解析ASTnom因此我愿意接受任何正确方向的建议,即使这意味着我必须使用解析器走不同的路线。但似乎无论如何都涉及到某些状态。

0 投票
1 回答
62 浏览

parsing - 使用 nom 和 nom_locate 有简短的错误消息

我正在尝试按照本教程使用 nom 和 nom_locate 进行解析。我只想要以下格式的输出:

但目前我得到:

相关代码:

main中的相关错误代码:

我需要做什么才能获得简短的错误消息而不是广泛的错误消息?

编辑:我从自定义 ParseError 中删除了 span 属性,然后错误输出变为:

好多了,但问题仍然存在:我可以得到除消息本身之外的所有内容吗?