[Math] Context Free Grammar for integers

computer sciencecontext-free-grammar

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)

Related Question