解析eof或nom中的字符



我正在使用nom库进行解析。我想匹配一些后面跟着"结束"的东西,而不消耗它。

对我来说,结束要么是eof,要么是满足函数f: Fn(char) -> bool的字符。

我可以将fnom::character::complete::satisfynom::bytes::take_while或许多其他nom函数一起使用。

eoff之间的不兼容性使我无法用nom组合子或我自己的组合子进行组合。

这是非法的,因为不透明类型:

fn end(i: &str) -> IResult<&str, &str> {
match eof(i) {
o @ Ok(_) => o,
e @ Err(_) => peek(satisfy(f)),
}
}

这也是非法的:

alt((eof, satisfy(f)))

我甚至无法做到这一点:

alt((eof, char(' ')))

我甚至不能让THIS工作:(因为匹配武器有不兼容的类型?(

fn end(i: &str) -> IResult<&str, ()> {
match eof(i) {
o @ Ok((sur, res)) => Ok((i, ())),
e @ Err(_) => match satisfy(f) {
Ok(_) => Ok((i, ())),
e @ Err(_) => e,
},
}
}

我自己提供了一个错误:

fn end(i: &str) -> IResult<&str, ()> {
match eof::<&str, ()>(i) {
o @ Ok((_, _)) => Ok((i, ())),
e @ Err(_) => match satisfy::<_, _, ()>(is_url_terminative)(i) {
Ok(_) => Ok((i, ())),
Err(_) => Err(nom::Err::Error(Error {
input: i,
code: nom::error::ErrorKind::Permutation,
})),
},
}
}

最新更新