Rust 使用nom从非零数字开始?

Rust 使用nom从非零数字开始?,rust,nom,Rust,Nom,我正在尝试使用nom和所示的EBNF编写一个标记解析器。当我试图解析一个数字时,我有点被卡住了,因为如何表达是从非零数字开始的 Number = NonZeroDigit { Digit }; NonZeroDigit = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"; Digit = "0" | NonZeroDigit; TLDR:如何实现Number=NonZeroDigit{Digit} 我当前的实现看起来像 fn编号和[u8]

我正在尝试使用
nom
和所示的EBNF编写一个标记解析器。当我试图解析一个数字时,我有点被卡住了,因为如何表达是从非零数字开始的

Number = NonZeroDigit { Digit };
NonZeroDigit = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
Digit = "0" | NonZeroDigit;
TLDR:如何实现
Number=NonZeroDigit{Digit}

我当前的实现看起来像

fn编号和[u8])->IResult{
让(头)=偷看(1)(s)?
如果(是非零位数字(头[0])){
返回数字1(s)
}否则{
返回make_错误(s,种类:ErrorKind.IsA)
}    
}
这一条看起来也更简单,与
nom
一致

fn编号和[u8])->IResult{
让(头)=偷看(1)(s)?
条件(是非零位数字(头[0]),数字1)(s)
}

我不确定是否要抛出某种错误?因为这可能不是一个数字,而是某种字符串,比如日期或时间。也许在标记语法中包含
数字的概念是没有意义的?

问题是什么?EBNF不起作用吗?你抛出错误有困难吗?@ForceBru具体来说,我如何表达:Number=NonZeroDigit{Digit};