我是nom的新手(通常是解析器组合器)。 我希望使用以下内容来解析浮动行:
named!(
get_four_floats<(f32, f32, f32, f32)>,
ws!(do_parse!(
r1: float
>> r2: float
>> r3: float
>> t: float
>> opt!(complete!(line_ending))
>> (r1, r2, r3, t)
))
);
但是,解析具有4个浮点数的行会返回Incomplete(Size(1))
。
但是,解析具有5个浮点数的行是可行的(我希望它实际上会失败,但这是我认为的另一件事)。
这是一个小单元测试:
#[test]
fn failure_four_floats() {
assert!(Parser::get_four_floats(b"asd").is_err());
assert!(Parser::get_four_floats(b" 1.0 1.0 1.0 1.0 1.0").is_err());
assert!(Parser::get_four_floats(b" 1.0 1.0 1.a 1.0").is_err());
assert!(Parser::get_four_floats(b" | 1.0 1.0 1.0 1.0").is_err());
}
#[test]
fn success_four_floats() {
let values = vec![
("1.0 1.0 1.0 1.0", (1.0, 1.0, 1.0, 1.0)),
("\t123.0 --1.234 1.0 1.0 \t\t", (123.0, 1.234, 1.0, 1.0)),
(" 1.0 1.0 1.0 1.0", (1.0, 1.0, 1.0, 1.0)),
(" \t 1.0 1.0 1.0 -1.0", (1.0, 1.0, 1.0, -1.0)),
];
for (line, floats) in values {
let parse_res = Parser::get_four_floats(line.as_bytes());
assert!(parse_res.is_ok());
assert_eq!(parse_res.unwrap().1, floats);
}
}
两个测试都在第一个断言处失败。