相关疑难解决方法(0)

使用nom解析整数会导致不完整

我尝试的一切都给了我Incomplete(Size(1)).我现在最好的猜测是:

named!(my_u64(&str) -> u64,
    map_res!(recognize!(nom::digit), u64::from_str)
);
Run Code Online (Sandbox Code Playgroud)

测试:

#[cfg(test)]
mod test {
    #[test]
    fn my_u64() {
        assert_eq!(Ok(("", 0)), super::my_u64("0"));
    }
}
Run Code Online (Sandbox Code Playgroud)

有时在我的变体(例如添加complete!)中,如果我在最后添加一个字符,我已经能够解析它.

我想得到一个工作解析(最终我希望这将允许我为u64包装类型创建一个解析器)但更大的图片我想了解如何正确地自己构建一个解析器.

rust nom

3
推荐指数
2
解决办法
857
查看次数

为什么在我通过CompleteStr时nom期望&str?

解析器按预期工作,直到我要解析h:始终是字符串中最后一位的数字,并且编译器给了我

^ expected &str, found struct `nom::types::CompleteStr`
Run Code Online (Sandbox Code Playgroud)

我认为这是因为解析器正在向前看。我该如何停止,或如何表示已完成?

#[macro_use]
extern crate nom;

use nom::digit;
use nom::types::CompleteStr;
use std::str::FromStr;

#[derive(Debug, PartialEq)]
pub struct Order {
    pub l: u64,
    pub w: u64,
    pub h: u64,
}

named!(order_parser<CompleteStr, Order>,
    do_parse!(
        l: map_res!(digit, u64::from_str) >>
        tag!("x") >>
        w: map_res!(digit, u64::from_str) >>
        tag!("x") >>
        h: map_res!(digit, u64::from_str) >>
        (Order {l:  l, w: w, h: h })
    )
);

pub fn wrap_order(order: &str) -> Result<(CompleteStr, Order), nom::Err<&str>> {
    order_parser(order)
}

#[test]
fn test_order_parser() { …
Run Code Online (Sandbox Code Playgroud)

rust nom

0
推荐指数
1
解决办法
292
查看次数

标签 统计

nom ×2

rust ×2