Parsing 使用nom解析可变空格分隔的列表
我如何使用可能被空格分隔或不被空格分隔的令牌列表 我正试图用Parsing 使用nom解析可变空格分隔的列表,parsing,rust,nom,Parsing,Rust,Nom,我如何使用可能被空格分隔或不被空格分隔的令牌列表 我正试图用nom(6.1.2)的格式解析中文罗马拼音(拼音)。例如,“ni3hao3ma5”,由于转录中的人为错误,有时被写成“ni3hao3ma5”或“ni3hao3ma5”(注意可变间距) 我已经编写了一个解析器来处理单个音节,例如[“ni3”、“hao3”、“ma5”],我正试图使用nom::multi::separated_list0来解析它: nom::multi::separated_list0( nom::character
nom
(6.1.2)的格式解析中文罗马拼音(拼音)。例如,“ni3hao3ma5”
,由于转录中的人为错误,有时被写成“ni3hao3ma5”
或“ni3hao3ma5”
(注意可变间距)
我已经编写了一个解析器来处理单个音节,例如[“ni3”、“hao3”、“ma5”]
,我正试图使用nom::multi::separated_list0
来解析它:
nom::multi::separated_list0(
nom::character::complete::space0,
syllable,
)(i)?;
但是,在所有令牌都被消耗之后,我得到了一个错误(错误{input:,code:SeparatedList})
。使用
nom::multi::separated_list0(
nom::character::complete::space0,
syllable,
)(i)?;
space0
分隔符与空字符串匹配,因此它将到达输入字符串的末尾,separated_list0
将继续尝试使用空字符串,因此出现Err(Error(Error{input:,code:SeparatedList}))
我的解决方案是使用nom::multi::many1
并在内部解析器中处理可选空格,而不是像这样使用nom::multi::separated_list0
:
fn音节(i:&str)->IResult{
//许多