一组不以 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 也是一个数字)
从那以后,你只需要确保第一个数字不是
在尝试解决以下编程语言主题练习时,我知道我的答案无法创建字符串 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 也是一个数字) 从那以后,你只需要确保第一个数字不是