Gramatyki Formalne cz II 3

Gramatyki Formalne cz II 3



Pary    S    X

(stan na wierzchołku stosu, symbol wejściowy)

są używane do indeksowania tablicy parsera dla wyznaczenia bieżącej akcji.

Akcja rnoże rnieć jedną z czterech postaci:

1.    shift s — przejście sterowane stanem s (do stanu s)

2.    reduce A □ B — redukcja przy użyciu produkcji A □ B

3.    accept — akceptacja wyrażenia wejściowego

4.    erroe — wykrycie błędu

Na podstawie każdej z tych wartości parser wykonuje pewną akcję na wejściu i na stosie, po czyrn sytuacja się powtarza. Konfiguracja parsera to para (cała zawartość stanu, niewczytane wejście)

Początkowa konfiguracja to (So, wejście! — wszystko, co na wejściu). Następna czynność to wyznaczenie konkretnej akcji będącą wartością elementu tablicy:

akcja [Sm,aj], gdzie Sm to stan na wierzchołku stosu, a aj pierwszy niewczytany symbol z wejścia.

Jeśli akcja [Sm, aj] = shift s, to następuje przejście do konfiguracji

(So Xi S-j... Xm Sm ajS, <lj+i <ln$)

So Xi S-i... Xm Sm ajS — na stosie aj+i an$ — na wejściu

czyli dopisanie do stosu symbolu z wejścia aj i symbolu stanu s. Jeśli akcja [Sm, aj] = reduce A =* B porser zmienia konfigurację na: {So X1 S-j... Xm.r Sm.r As, «ij+i «in $1

gdzie s = go to [Sm.r, A], zaś r jest długością ES czyli prawej strony produkcji, co oznacza cofnięcie się na stosie o r i dopisaniu As na stosie: Jeśli akcja [Sm.f, A] = accept — porser kończy pracę Jeśli akcja [Sm.r, A] = error— porser zgłasza błąd i woła procedury obsługi błędu

Akcja trwa dopóki całe wejście nie zostanie zaakceptowane lub zostanie znaleziony błąd!

Po zbudowaniu parsera dla danej gramatyki, budowa kompilatora jest już łatwa. Poniższy schemat ukazuje fazy pracy współczesnego kompilatora (opcjonalne!):

program źródłowy

program wynikowy

Początkowo, problem stworzenia kompilatora uważano za zbyt trudny do realizowania. Implementacja pierwszego kompilatora Fortranu zajęła 13 lat pracy. Dziś do generowania lub pomocy w generowaniu kompilatorów służą specjalne programy, niektóre z nich potrafią wygenerować cały kompilator. Przedstawiony powyżej parser reprezentuje tzw. automat skończony. W następnym rozdziale poświęconym teorii automatów przyjrzymy się bliżej automatom skończonym. Także takie elementy komputera jak jednostka centralna czy urządzenia peryferyjne można rozpatrywać jako automaty skończone. Teorię automatów skończonych używa się do projektowania komputerów i mikroprocesorów.


Wyszukiwarka