У меня есть грамматика, которую я считаю неоднозначной.Я не знаю, как устранить неоднозначность и преобразовать ее в однозначную грамматику.
expr ::= num | lvalue | incrop expr | expr incrop | expr binop expr | (expr)
lvalue ::= $expr
incrop ::= ++ | --
binop ::= + | - |
num ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
И вот что я придумал:
expr ::= num expr' | lvalue expr'| incrop expr expr' | (expr) expr'
expr' ::= incrop expr' | binop expr expr' | empty
lvalue ::= $expr
incrop ::= ++ | --
binop ::= + | - |
num ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
это правильно?