Pok-11-wyk-Slajd27
Z Studia Informatyczne
Gramatyka niejednoznaczna – unarny minus
Większość języków programowania przewiduje również unarny (jednoargumentowy) minus służący do zmiany znaku wyrażenia, przed którym jest umieszczony.
Poprawne obsłużenie go w gramatyce wymaga jednak specjalnych zabiegów. Nie wystarczy dodanie produkcji:
E : '-' E { $$ = -$2; }
Co prawda, w wyniku dodania tej produkcji nie powstaną konflikty, ale zostaną zaburzone wzajemne relacje priorytetów operatorów (unarny minus musi mieć inny priorytet niż binarny minus).
Może się wydawać, że kalkulator działa poprawnie, ale można znaleźć wyrażenia, dla których daje złą odpowiedź, np.:
- 8 / - 4 / - 2 powinno dać (- 8 / - 4) / - 2, czyli 1, a otrzymujemy rezultat -4.