Construct Context-free Grammar for integers. Integer can begin with + or – and after that we have non-empty string of digits. Integer must not contain unnecessary leading zeros and zero should not be preceded by + or -.
For example: 0; 123; -15; +9999 are correct, but +0; 01; +-3; +09; + are incorrect.
I have something like this:
(number) ::= (unsigned number) | (sign)(unsigned number)
(sign) ::= + | –
(unsigned number) ::= (digit) | (unsigned number)(digit)
(digit) ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| – or
Is it okay? 😉
Best Answer
No.
Your syntax allows
+0
,01
, and+09
. Try this instead(number) ::= 0 | (nonzero unsigned number) | (sign)(nonzero unsigned number)
(sign) ::= + | -
(nonzero unsigned number) ::= (nonzero digit)(digits)
(nonzero digit) ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
(digit) ::= 0 | (nonzero digit)
(digits) ::= | (digits)(digit)