In: Computer Science
Q6.13) Unary minuses can be added in several ways to the arithmetic expression grammar of Figure 6.17 or Figure 6.18. Revise the BNF and EBNF for each of the cases that follow so that it satisfies the stated rule:
expr → expr + term | term
term → term * factor | factor
factor → ( expr ) | number
number → number digit | digit
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
[Figure 6.17. Revised grammar for simple integer arithmetic expressions]
expr → term { + term }
term → factor { * factor }
factor → ( expr ) | number
number → digit { digit }
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
[Figure 6.18 EBNF rules for simple integer arithmetic expressions]
(a) At most, one unary minus is allowed in each expression, and it must come at the beginning of an expression, so -2 + 3 is legal (and equals 1) and -2 + (-3) is legal, but -2 + -3 is not.
(b) At most, one unary minus is allowed before a number or left parenthesis, so -2 + -3 and -2 * -3 are legal, but --2 and -2 + --3 are not.
(c) Arbitrarily many unary minuses are allowed before numbers and left parentheses, so everything above is legal.
Hello student, here is your detailed answer. I hope it helps.
A)
BNF
unaryminus → – expr |
term
expr → expr + term | term
term → term * factor | factor
factor → ( expr ) | number
number → number digit | digit
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9
EBNF
unaryminus → – expr |
term
expr → term { + term }
term → factor { * factor }
factor → ( expr ) | number
number → digit { digit }
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9
B)
BNF
expr → expr + term |
term
unaryminus → expr + term | term
term → term * factor | factor
unaryminsus → term * factor | factor
factor → ( expr ) | number
number → number digit | digit
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9
EBNF
expr → term { + term }
term → factor { * factor }
factor → ( expr ) | number
unaryminsus → ( - expr ) | number
number → digit { digit }
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9
C)
BNF
unaryminus → ( – expr) |
number
expr → expr + term | term
term → term * factor | factor
factor → ( expr) | number
number → number digit | digit
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9
EBNF
unaryminus → ( – expr ) |
number
expr → term { + term }
term → factor { * factor }
factor → ( expr ) | number
number → digit { digit }
digit → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8| 9
THANK YOU