Pok-10-wyk-Slajd7

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

Zmienne globalne(2)

Zmienne globalne(2)


Analizator składniowy tworzony z wykorzystaniem YACCa można oczywiście zapisać na różne sposoby. Sam fakt powtarzania się liczb i znaków dodawania możemy opisać za pomocą rekurencji lewostronnej bądź prawostronnej. Obie przedstawione w przykładzie gramatyki poprawnie opisują język wejściowy i bez problemów można je wykorzystać w metodzie LR (co nie znaczy, że definicje sterowane składnią wykorzystujące zmienne globalne będą dawać poprawne rezultaty).

W obu przykładowych rozwiązaniach do akumulowania wartości sumy w trakcie obliczeń wykorzystamy zmienną globalną y typu całkowitego (int ).

W obu rozwiązaniach rekurencyjny opis wejścia składa się z przypadku bazowego – pojedynczej liczby oraz z przypadku ogólnego (w rekurencji lewostronnej: przetworzone wyrażenie, znak ‘+’ i kolejna liczba; w rekurencji prawostronnej: liczba, znak ‘+’ i przetworzone wyrażenie).

Akcje związane z produkcjami mają za zadanie:

  • w przypadku ogólnym zwiększyć zakumulowaną w zmiennej y sumę o atrybut bieżącej jednostki leksykalnej (czyli wartość liczby),
  • w przypadku bazowym zainicjalizować zmienną y wartością rozpoznanej pojedynczej liczby,
  • po rozpoznaniu ciągu liczb rozdzielonych znakami dodawania i napotkaniu na wejściu znaku równości wypisać na wyjście rezultat znajdujący się w zmiennej y .

Na marginesie warto zwrócić uwagę, że jeżeli nie ma innych istotnych powodów do wymuszenia określonej sekwencji ewaluacji atrybutów efektywniej jest wykorzystać lewostronną rekurencję ze względu na mniejszą zajętość stosu oraz mniejszą wrażliwość na ograniczenia konkretnej implementacji (zazwyczaj wygenerowane analizatory składniowe mają statycznie ograniczoną wielkość stosu)


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