Pok-11-wyk-Slajd8
Gramatyka niejednoznaczna(1)
W trakcie generowania analizatora składniowego przez YACCa otrzymujemy informację o pojedynczym konflikcie przesuń/redukuj. Jeżeli użyjemy opcji –v w wywołaniu generatora otrzymamy plik Y.OUT , który zawiera szczegółowe informacje o stanach i akcjach parsera, a w szczególności o tym, jakie konflikty występują w gramatyce.
Dla przykładowej gramatyki konflikt wystąpił w stanie 5. Gdy głowica czytająca znajduje się za symbolem E, a na wejściu widoczny jest znak odejmowania, parser może:
- wykonać przesunięcie znaku odejmowania i przejść do stanu 4. albo
- dokonać redukcji zgodnie z produkcją 2. (E -> E - E)
Dokładniej oznacza to, że na stosie znajduje się już ciąg symboli E-E i parser musi podjąć decyzję o tym, czy zredukować trzy symbole z wierzchołka stosu (i przy okazji wykonać ewentualną akcję skojarzoną z 2. produkcją), czy też kontynuować przesuwając symbol terminalny ‘-’ na stos.
Konflikt – z powodu braku jakichkolwiek innych wskazówek – zostaje rozstrzygnięty w oparciu o domyślne reguły na korzyść przesunięcia.