Pok-6-wyk-Slajd44

Z Studia Informatyczne
Wersja z dnia 19:17, 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

Rozwiązywanie konfliktów – przykład użycia %if(1)

Rozwiązywanie konfliktów – przykład użycia %if(1)


W analizatorze składniowym deklarujemy pomocniczą zmienną typu całkowitego int parity, która będzie przechowywać informację o wczytanej ostatnio cyfrze binarnej.

Zgodnie z deklaracją:

%start parse, S ;

nieterminal S jest aksjomatem gramatyki, a jego implementacja zostanie umieszczona w funkcji języka C o nazwie parse.

Całe wejście (S) składa się z cyfry binarnej 0 lub 1 (informację o tym, która to była cyfra wpisujemy do zmiennej parity) oraz reszty.

Reszta może być albo ciągiem pustym albo dalszym ciągiem liczby.

Jeżeli jest to ciąg pusty, to może on nastąpić albo po cyfrze 0 albo po cyfrze 1 – konflikt alternatyw zostaje rozstrzygnięty za pomocą słowa kluczowego %if i warunku w którym sprawdzamy jaka ostatnio wystąpiła cyfra. Jeśli w zmiennej parity jest 0 wybrana zostanie pierwsza alternatywa i wypisany napis „even”, a w przeciwnym razie – napis „odd”. Jeżeli na wejściu znajdują się dalsze cyfry powracamy do rozwijania nieterminala S.


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