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

时间:2017-10-21 09:57:58

标签: bnf

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

问题:L(G)是一组正十进制数,除0以外不以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。什么?

如何更改我定义的语法,以便符合条件?

1 个答案:

答案 0 :(得分:1)

为什么不拆分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数字),你也可以说,例如数字(从1到9现在也是一个数字) 从那以后,你只需要确保第一个数字不是