- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Rust 的新手,三个小时以来我一直在努力思考这个问题,我想我快要疯了。我想要的只是一个接受字符串 "true"
并返回枚举 Value::Const(true)
的解析器。这是我目前所拥有的:
// parser.rs
use nom::*;
#[derive(PartialEq, Debug, Clone)]
pub enum Value {
Const(bool),
}
fn true_value<T>(_: T) -> Value { Value::Const(true) }
fn false_value<T>(_: T) -> Value { Value::Const(false) }
named!(literal_true<&[u8]>, map_res!(tag!("true"), true_value));
named!(literal_false<&[u8]>, map_res!(tag!("false"), false_value));
但我得到的是:
error[E0308]: mismatched types
--> src/parser.rs:25:1
|
25 | named!(literal_true<&[u8], Result<Value, String>>, map_res!(tag!("true"), true_value));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected enum `parser::Value`, found enum `std::result::Result`
|
= note: expected type `parser::Value`
found type `std::result::Result<_, _>`
= note: this error originates in a macro outside of the current crate
我不知道这里发生了什么。我试图找到示例或教程来获得有关如何执行此操作的微小提示,但出于某种原因,这一定是以前没有其他人尝试过的罕见边缘事情。
最佳答案
您有两个问题:传递给 map_res
的函数(如 map 结果)必须返回一个 Result
,以及您传递给 named
的函数签名必须指明输入和输出类型。如果不想返回结果,可以使用 map
宏观
#[derive(PartialEq, Debug, Clone)]
pub enum Value {
Const(bool),
}
fn true_value<T>(_: T) -> Value { Value::Const(true) }
fn false_value<T>(_: T) -> Value { Value::Const(false) }
// input type and output type
named!(literal_true<&[u8], Value>, map!(tag!("true"), true_value));
// input type can be omitted if it's &[u8]
named!(literal_false<Value>, map!(tag!("false"), false_value));
关于types - 使用 nom 解析字面量和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44090979/
鉴于吃掉异常总是糟糕的 juju 并且重新抛出异常会丢失调用堆栈,重构以下内容的正确方法是什么? 饮食异常(exception): try { … do something meaningful
我尝试为 PanierModel 的属性赋值,但在图片上收到此错误 NoSuchMethodError:在 null 上调用 getter 'nom'。接收者; null 尝试调用:nom class
我正在尝试使用 nom5.0 解析以下备用字符串 "A-Za-z0-9" 或 "A-Z|a-z|0-9" 我尝试了以下但无济于事 pub enum Node { Range(Vec), } f
我想将像 "ParseThis" 或 "parseThis" 这样的字符串解析成像 ["Parse", "This"], map_res!( take_till!(
我有这个使用 nom 4.2.2 的 Rust 程序。 (我冒昧地扩展了 nom 解析器功能。) extern crate failure; extern crate nom; use failure
tl;dr:我正在努力寻找需要使用 nom 进行前瞻的文本解析器的文档或示例。 长版 我正在使用 nom 来解析 6502 程序集。我正在努力创建一个可以解析各种寻址模式的解析器。任何给定的操作码都将
我试图使用nom::bits::bits从&[u8]向量中提取7位,但是我发现剩余数据不正确,似乎它必须是4/8的整数倍,但我不是当然。 像这样的一些代码(标称值= 5.12): fn take_7_
我正在尝试为一种简单的查询语言实现一个解析器。目标是从文本生成操作,然后在将它们向上传递到树之前评估它们。如果我理解正确,我将不得不实现一些 nom 特征(InputLength、InputTake、
我正在尝试编写一个识别多行注释的 nom 解析器... /* yo! */ ...并消耗/丢弃(同样的事情,对吧?)结果: use nom::{ bytes::complete::{tag, ta
我想通过nom库解析四种形式的YMD日期(“20190919”、“2019.09.19”、“2019-09-19”和“2019/09/19”) . 我从 iso8601 开始仅解析“YYYY-MM-D
我正在学习 nom,作为一个测试示例,我正在尝试解析字符串直到出现分隔符。如果我的定界符是 /,那么我想匹配该定界符之前的所有内容。为此,像这样的解析器可以工作: named!(gobbledygoo
我正在开发一个模板引擎,其中一些语法可能是这样的: {{ somevar|filter }} 代替 somevar 可以是任意“表达式”,也就是说,可以是像 somevar 这样的变量名,也可以是嵌套
我在 nom 中编写了一个完全无状态的解析器,现在我需要将它包装在几个有状态的层中。 我有一个名为 alt_fn 的顶级解析函数这将为我提供下一个解析输出作为枚举变体,其细节可能并不重要。 我需要做三
我正在尝试使用 nom 创建一个解析器,它将解析一些可能是许多选项之一的文本。名称有 alt!因为当值在编译时已知,但我的值不会。 这是我尝试创建自己的解析器,它可以接受 Vec匹配,我遇到了几个问题
我是 Rust 的新手,三个小时以来我一直在努力思考这个问题,我想我快要疯了。我想要的只是一个接受字符串 "true" 并返回枚举 Value::Const(true) 的解析器。这是我目前所拥有的:
我需要从一个 u8 数组中解析一个 32 位整数数组(小端),但是下一个整数只有在当前整数的第 31 位被设置时才存在。如果其余部分不存在,则应将数组的其余部分设置为零。我不确定如何有条件地解析下一个
我想用 nom 恰好匹配一个字母字符 (a-zA-Z)。 我知道我可以使用 take_while! 贪婪地匹配这样的东西: // match one or more alphabetical char
我已经在 nom 中创建了一些重要的解析器,所以我现在对它非常熟悉。到目前为止,我创建的所有解析器始终将整个输入切片提供给解析器。 我想创建一个流解析器,我假设这意味着我可以继续将字节输入解析器,直到
我正在尝试使用 nom 解析一个字符串,该字符串要么被换行符终止,要么在使用后到达输入末尾。我有以下似乎应该编译的代码: named!(am_implied , do_parse!(
我正在使用 nom解析一些二进制 65c816 汇编数据。我的解析器结构的一部分将操作码拆分为单独的形式,然后获取它们的参数(如果有的话)。一个示例解析器目前看起来像这样: named!(absolu
我是一名优秀的程序员,十分优秀!