Pok-11-wyk-Slajd8

Z Studia Informatyczne
Wersja z dnia 19:13, 30 sie 2006 autorstwa Complak (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Gramatyka niejednoznaczna(1)

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.


<< Poprzedni slajd | Spis treści | Następny slajd >>