一组不以 0 开头的正整数,除了 0

A set of positive integers that do not begin with 0, except for 0

在尝试解决以下编程语言主题练习时,我知道我的答案无法创建字符串 201,但我无法想象如何解决此异常。

问题:L(G)是一组不以0开头的正十进制数,零除外。设计语法G.

我的回答:

G is:
    S -> Digit
    NonZeroDigit -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
    Digit -> 0 | NonZeroDigit | NonZeroDigit 0 | NonZeroDigit Digit

检查正确性:

Digit => 0
Digit => NonZeroDigit => 1
Digit => NonZeroDigit Digit => 2 Digit => 20

如果我添加 Digit -> Digit Digit,它会创建 Digit => Digit Digit => Digit Digit Digit => 201,但这也可以创建 Digit => Digit Digit => Digit Digit Digit => 000。什么?

如何更改我定义的语法以满足条件?

为什么不拆分 n=0 和 n>0?

S -> 0 | posDig digit
posDig -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
digit -> digit digit | 0 | posDig | <epsilon>

除了 S 中的 (posDig digit),您还可以说例如数字(现在 1 到 9 也是一个数字) 从那以后,你只需要确保第一个数字不是