Pok-10-wyk-Slajd23

Z Studia Informatyczne
Wersja z dnia 19:09, 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(18)

Zmienne globalne(18)


Na stos przesuwana jest kolejna liczba (3) z wejścia. Zmienna x przyjmuje wartość 3.

Ta wersja analizatora składniowego (z prawostronną rekurencją) osiągnęła teraz maksymalną zajętość stosu dla przykładowego wejścia – 5 komórek.

Warto zauważyć, że zajętość stosu przy prawostronnej rekurencji jest większa i liniowo zależna od liczby liczb na wejściu (w analizatorze opartym o lewostronną rekurencję maksymalna zajętość stosu była stała i nie zależała od rozmiaru wejścia).

Na przykład dla 100 liczb na wejściu zajętość stosu wzrosłaby do 199 symboli – (100 liczb + 99 znaków).

Jeżeli koniecznie chcemy użyć prawostronnej rekurencji i zredukować zajętość stosu można modyfikować gramatykę, na przykład w następujący sposób:


Zastąpić w produkcji E ? n ‘+’ E dwie jednostki leksykalne pomocniczym nieterminalem o nazwie np. Nplus co pozwoli LR-parserowi wykonać redukcję po każdym przesunięciu znaku dodawania i zaoszczędzić prawie połowę stosu.

Zmodyfikowany fragment gramatyki będzie miał wówczas następującą postać:

Nplus –> n ‘+’

E : Nplus E

| n


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