The ambiguity arises due to the fact that you allow unary operators ( - expr
), so 2 - 2
you can analyze it either as a simple subtraction (giving 0) or as an implicit product (2 and -2, yielding - 4).
, ( ), expr: expr expr
, expr
.
(, , ), , , .
, : , /, . , ab/cd
. , , , .
, . , -ab
(-a)b
, -(ab)
( , ). .
term: NUM
| '(' expr ')'
unop: term
| '-' unop
| '+' unop
conc: unop
| conc term
prod: conc
| prod '*' conc
| prod '/' conc
expr: prod
| expr '+' prod
| expr '-' prod