ANALIZA METOD WSTPUJC ANALIZA WSTPUJCA Dla danej gramatyki

  • Slides: 52
Download presentation
ANALIZA METODĄ WSTĘPUJĄCĄ

ANALIZA METODĄ WSTĘPUJĄCĄ

ANALIZA WSTĘPUJĄCA Dla danej gramatyki G oraz S=>* , to wówczas: Ø Jeśli zawiera

ANALIZA WSTĘPUJĄCA Dla danej gramatyki G oraz S=>* , to wówczas: Ø Jeśli zawiera tylko terminale, to nazywamy zdaniem; Ø Jeśli zawiera terminale oraz nieterminale, lub same nieterminale, to nazywamy formą zdaniową; Wniosek Zdanie jest forma zdaniowa, która nie zawiera nieterminali;

ANALIZA WSTĘPUJĄCA W analizie zstępującej przetwarzanie rozpoczynamy od symbolu startowego a następnie stosujemy wyprowadzenie

ANALIZA WSTĘPUJĄCA W analizie zstępującej przetwarzanie rozpoczynamy od symbolu startowego a następnie stosujemy wyprowadzenie tak długo, aż otrzymamy zdanie wejściowe. Możliwe jest oczywiście, że zdania nie da się wygenerować. Wówczas otrzymamy taką informacje; W analizie wstępującej mamy odwrotny schemat działania. Zaczynamy tu pracę od analizowanego zdania i poprzez konsekwentne stosowanie redukcji próbujemy dojść do symbolu startowego 3 gramatyki;

ANALIZA ZSTĘPUJĄCA Sprawdźmy, w jaki sposób działa metoda wstępująca na przykładzie z wcześniejszych wykładów.

ANALIZA ZSTĘPUJĄCA Sprawdźmy, w jaki sposób działa metoda wstępująca na przykładzie z wcześniejszych wykładów. Dane jest zdanie =Szybki pies przeskoczył płot 4

GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji: Zdanie -> podmiot orzeczenie Podmiot -> przymiotnik rzeczownik

GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji: Zdanie -> podmiot orzeczenie Podmiot -> przymiotnik rzeczownik Orzeczenie -> czasownik dopełnienie Dopełnienie -> rzeczownik Rzeczownik -> płot Przymiotnik -> szybki Czasownik -> przeskoczył Rzeczowniki -> pies 5

ANALIZA ZSTEPUJĄCA zdanie podmiot przymiotnik rzeczownik orzeczenie czasownik dopełnienie rzeczownik Szybki pies przeskoczył płot

ANALIZA ZSTEPUJĄCA zdanie podmiot przymiotnik rzeczownik orzeczenie czasownik dopełnienie rzeczownik Szybki pies przeskoczył płot

ANALIZA WSTEPUJĄCA zdanie podmiot przymiotnik rzeczownik orzeczenie czasownik dopełnienie rzeczownik Szybki pies przeskoczył płot

ANALIZA WSTEPUJĄCA zdanie podmiot przymiotnik rzeczownik orzeczenie czasownik dopełnienie rzeczownik Szybki pies przeskoczył płot

Przykład Rozważmy gramatykę o następujących produkcjach: S-> a. ABe, A->Abc | b, B->d; Zastanówmy

Przykład Rozważmy gramatykę o następujących produkcjach: S-> a. ABe, A->Abc | b, B->d; Zastanówmy się nad zdaniem =abbcde; abbcde a. Ade a. ABe S S=>a. ABe=>a. Ade=>a. Abcde=>abbcde 8

PRAWE WYPROWADZENIE Niech G będzie gramatyką bezkontekstową. Niech 1=> 2=> 3=>. . . =>

PRAWE WYPROWADZENIE Niech G będzie gramatyką bezkontekstową. Niech 1=> 2=> 3=>. . . => k, 1, 2, . . . , k є (VU Σ)* będzie wyprowadzeniem w G. Wyprowadzenie to nazywamy prawym wyprowadzeniem, gdy każde pojedyncze wyprowadzenie i-1=> i w tym łańcuchu wyprowadzeń polega na zastosowaniu produkcji z G do pierwszej zmiennej w i-1 liczonych od prawej strony; 9

ANALIZA WSTĘPUJĄCA Uchwyt ciągu – to podciąg, który pasuje do prawej strony produkcji i

ANALIZA WSTĘPUJĄCA Uchwyt ciągu – to podciąg, który pasuje do prawej strony produkcji i którego redukcja do nieterminala po lewej stronie produkcji reprezentuje jeden krok wzdłuż odwrotności prawostronnego wyprowadzenia; 10

ANALIZA WSTĘPUJĄCA Formalnie uchwyt prawostronnej formy zdaniowej , to produkcja A-> i pozycja w

ANALIZA WSTĘPUJĄCA Formalnie uchwyt prawostronnej formy zdaniowej , to produkcja A-> i pozycja w , na której znajduje się ciąg symboli , który w celu otrzymania poprzedniej prawostronnej formy zdaniowej w prawostronnym wyprowadzeniu , należy zastąpić przez A; S=> Aw=> w A-> na pozycji po jest uchwytem w 11

Przykład Rozważmy gramatykę o następujących produkcjach: S-> a. ABe, A->Abc | b, B->d; abbcde

Przykład Rozważmy gramatykę o następujących produkcjach: S-> a. ABe, A->Abc | b, B->d; abbcde a. Abcde jest prawostronną formą zdaniową, której uchwytem jest A->b na pozycji 2 jest prawostronną forma zdaniowa, której uchwytem jest A->Abc 12 na pozycji 2

PRZYCINANIE UCHWYTÓW Przycinanie uchwytów jest metodą dzięki której możemy uzyskać odwrotność prawostronnego wyprowadzenia; Załóżmy

PRZYCINANIE UCHWYTÓW Przycinanie uchwytów jest metodą dzięki której możemy uzyskać odwrotność prawostronnego wyprowadzenia; Załóżmy że mamy daną gramatykę i dane zdanie w, utworzone w tej gramatyce. Zatem w= n gdzie n jest n-tą prawostronną formą zdaniowa, w pewnym prawostronnym wyprowadzeniu; S= 0 => 1 => 2 =>. . . => n-1 => n =w 13

PRZYCINANIE UCHWYTÓW W celu odtworzenia tego wyprowadzenia od końca, wyszukujemy uchwyt n w n

PRZYCINANIE UCHWYTÓW W celu odtworzenia tego wyprowadzenia od końca, wyszukujemy uchwyt n w n i zastępujemy go lewą stroną produkcji A-> n. W ten sposób otrzymujemy (n-1) –szą prawostronną formę zdaniową; Wyszukujemy następnie uchwyt n-1 w n-1 i redukujemy ten uchwyt i otrzymujemy prawostronną formę n-2; Jeśli po skończonej ilości powtórzeń takiej czynności otrzymamy prawostronną formę zdaniową składającą się z symbolu startowego S, to kończymy analizę; 14

Przykład Rozważmy przykład. Niech będzie dana gramatyka dana przez produkcje: Ø S -> (S);

Przykład Rozważmy przykład. Niech będzie dana gramatyka dana przez produkcje: Ø S -> (S); Ø S -> *; Rozważamy zdanie =(((*))) 15

Przykład Rozważmy następująca gramatykę: E>E+E, E->E*E, E->(E), E->w; P. F. Z w+w*w E+E*w E+E*E

Przykład Rozważmy następująca gramatykę: E>E+E, E->E*E, E->(E), E->w; P. F. Z w+w*w E+E*w E+E*E E+E E UCHWYT w w w E*E E+E PRODUKCJA E->w E->E*E E->E+E 17

IMPLEMANTACJA ANALIZY REDUKCYJNEJ Jeśli chcemy dokonywać analizy tekstów, za pomocą przycinania uchwytów, musimy pokonać

IMPLEMANTACJA ANALIZY REDUKCYJNEJ Jeśli chcemy dokonywać analizy tekstów, za pomocą przycinania uchwytów, musimy pokonać dwa główne problemy: Ø Pierwszym problemem jest znalezienie podciągu w prawostronnej formie zdaniowej, który trzeba zredukować (uchwytu); Ø Gdy jest więcej niż jedna produkcja, w której po prawej stronie występuje nasz podciąg (uchwyt), należy wybrać jedną z nich, odpowiednią; 18

IMPLEMENTACJA ANALIZY REDUKCYJNEJ Kolejnym istotnym pytaniem jest pytanie o rodzaj struktur danych, które będzie

IMPLEMENTACJA ANALIZY REDUKCYJNEJ Kolejnym istotnym pytaniem jest pytanie o rodzaj struktur danych, które będzie wygodnie używać, przy implementacji analizatora; Wygodna metodą jest użycie stosu do pamiętania symboli gramatyki, oraz bufora wejściowego do pamiętania tekstu w, przeznaczonego do analizy; stos wejście $ w$ 19

OPIS STOSU Na starcie na wejściu jest napis w, a stos jest pusty; Analizator

OPIS STOSU Na starcie na wejściu jest napis w, a stos jest pusty; Analizator przesuwa symbole z wejścia na stos, aż na wierzchołku znajdzie się uchwyt ; analizator redukuje do lewej strony odpowiedniej produkcji; Powtarza ten proceder, aż do wystąpienia błędu, lub sytuacji gdy na stosie będzie symbol startowy; Gdy na stosie będzie tylko symbol startowy analizator kończy pracę; 20

Operacje Mamy cztery operacje analizatora: Przesuniecie – powoduje wstawienie kolejnego symbolu z wejścia na

Operacje Mamy cztery operacje analizatora: Przesuniecie – powoduje wstawienie kolejnego symbolu z wejścia na wierzchołek stosu; Redukcja – analizator wie, że prawy koniec uchwytu jest na wierzchołku stosu, szuka na stosie lewy koniec uchwytu, i zastępuje uchwyt odpowiednim nieterminalem (sam decyduje, którym); 21

Operacje Pozostałe operacje analizatora: Akceptowanie – pomyślne zakończenie analizy; Błąd – oznacza, że wystąpił

Operacje Pozostałe operacje analizatora: Akceptowanie – pomyślne zakończenie analizy; Błąd – oznacza, że wystąpił błąd składniowy i analizator wywołuje procedurę obsługi błędu; 22

Przykład )$ S-> ( S ) $ ) S ( $ 26

Przykład )$ S-> ( S ) $ ) S ( $ 26

Przykład $ sukces analizy-akceptacja S $ 27

Przykład $ sukces analizy-akceptacja S $ 27

Przykład Wróćmy do naszego przykładu nr 2 z produkcjami: E->E+E, E->E*E, E_>(E), E>(w) Ponownie

Przykład Wróćmy do naszego przykładu nr 2 z produkcjami: E->E+E, E->E*E, E_>(E), E>(w) Ponownie rozważamy zdanie =w+w*w Prześledźmy sekwencje operacji wykonywanych przez analizator: 28

Przykład STOS $ $w $E $E+w $E+E WEJŚCIE w+w*w *w *w OPERACJA przesunięcie redukcja

Przykład STOS $ $w $E $E+w $E+E WEJŚCIE w+w*w *w *w OPERACJA przesunięcie redukcja E->w przesunięcie 29

Przykład STOS WEJŚCIE OPERACJA $E+E*w $E+E*E $E+E w $ $ przesunięcie $ redukcja E->E+E

Przykład STOS WEJŚCIE OPERACJA $E+E*w $E+E*E $E+E w $ $ przesunięcie $ redukcja E->E+E $E $ Akceptacja wejścia redukcja E->w redukcja E->E*E

PROBLEMY Problemy przycinaniu uchwytów: Znalezienie odpowiedniego uchwytu (w analizatorach redukujących zawsze jest na szczycie

PROBLEMY Problemy przycinaniu uchwytów: Znalezienie odpowiedniego uchwytu (w analizatorach redukujących zawsze jest na szczycie stosu); Wybranie odpowiedniej produkcji, jeśli może być wykorzystana więcej niż jedna (konstrukcja tablicy LR); 31

ANALIZATOT LR Wydajna metodą analizy wstępującej jest analiza LR(k), gdzie „L” oznacza przeglądanie wejścia

ANALIZATOT LR Wydajna metodą analizy wstępującej jest analiza LR(k), gdzie „L” oznacza przeglądanie wejścia od lewej do prawej, „R” (rightmost) oznacza budowę prawostronnego wyprowadzenia od końca, a k oznacza liczbę symboli podglądanych podczas podejmowania decyzji w trakcie analizy; Gdy pominiemy (k), przyjmujemy, że k=1; 32

ANALIZATOT LR Zalety analizatorów LR: Można zbudować analizatory LR do prawie wszystkich konstrukcji języków

ANALIZATOT LR Zalety analizatorów LR: Można zbudować analizatory LR do prawie wszystkich konstrukcji języków programowania, dla których można znaleźć gramatykę bezkontekstową; Metoda LR jest najogólniejszą nie wracającą metodą analizy redukującej. Analizatory działające tą metodą można zaimplementować tak wydajnie, jak działające innymi metodami redukcyjnymi; 33

ANALIZATOT LR Zalety analizatorów LR: Klasa gramatyk które można analizować, używając metody LR jest

ANALIZATOT LR Zalety analizatorów LR: Klasa gramatyk które można analizować, używając metody LR jest właściwym nadzbiorem klasy gramatyk, które można analizować analizatorami przewidującymi; Analizator LR może wykrywać błędy tak wcześnie, jak jest to możliwe podczas przeglądania wejścia, od lewej do prawej strony; 34

ANALIZATOR LR wejście Sm Xm Sm-1 Xm-1 a 1. . . ai . .

ANALIZATOR LR wejście Sm Xm Sm-1 Xm-1 a 1. . . ai . . . an $ Program analizatora LR wyjście . . . S 0 stos akcja przejście 35

ANALIZATOR LR Działanie analizatora LR: Program sterujący jest taki sam dla wszystkich analizatorów LR,

ANALIZATOR LR Działanie analizatora LR: Program sterujący jest taki sam dla wszystkich analizatorów LR, różne są jedynie tablice analizatora; Program analizatora wczytuje pojedyncze symbole z bufora wejściowego; 36

ANALIZATOR LR Używa on stosu do zapamiętywania ciągu postaci s 0 X 1 s

ANALIZATOR LR Używa on stosu do zapamiętywania ciągu postaci s 0 X 1 s 1 X 2 s 2. . . Xm na wierzchołku, gdzie każde Xi jest symbolem z gramatyki a si jest symbolem nazywanym stanem; Każdy symbol stanu podsumowuje informacje zawarte na stosie pod nim, a kombinacja symbolu stanu i aktualnego symbolu wejściowego jest używana do indeksowania tablicy analizatora oraz do podejmowania decyzji o przesunięciu lub redukcji; 37

TABLICA ANALIZATORA LR Tablice analizatora zawierają wytyczne dla programu sterującego. Wytyczne te dotyczą między

TABLICA ANALIZATORA LR Tablice analizatora zawierają wytyczne dla programu sterującego. Wytyczne te dotyczą między innymi tego w jakim stanie i pod wpływem jakich symboli ma wystąpić akcja (action lub przejście (goto); Tablice analizatora można tworzyć na różne sposoby; Metody tworzenia tablic decydują o sile analizatora (tzn. o liczbę przetwarzanych gramatyk); 38

TABLICA ANALIZATORA LR Metody konstrukcji tablicy analizatorów: SLR (prosty LR) – najłatwiejsza w implementacji

TABLICA ANALIZATORA LR Metody konstrukcji tablicy analizatorów: SLR (prosty LR) – najłatwiejsza w implementacji ale najsłabsza, dla niektórych gramatyk dla których pozostałe zadziałają ta może nie dać rezultatów; Podglądający LR (LALR) – średnia pod względem możliwości, jak i kosztów; Metoda kanoniczna LR – najskuteczniejsza, ale też najdroższa; 39

TABLICA ANALIZATORA LR Tablica analizatora składa się z dwóch części : Funkcji wyznaczającej akcje,

TABLICA ANALIZATORA LR Tablica analizatora składa się z dwóch części : Funkcji wyznaczającej akcje, akcja; Funkcji wyznaczającej przejście, przejście; Funkcja przejście bierze jako argument stan i symbol z gramatyki, a zwraca stan; 40

ANALIZATOR LR Program analizatora LR sprawdza stan sm, stan leżący na wierzchołku stosu oraz

ANALIZATOR LR Program analizatora LR sprawdza stan sm, stan leżący na wierzchołku stosu oraz aktualny symbol na wejściu ai; Odczytuje następnie wartość akcja[sm, ai] w tablicy analizatora dla stanu sm i wejścia ai; Wartość akcja[sm, ai] może być: Ø przesuń s, gdzie s jest stanem; Ø redukuj zgodnie z produkcja A-> ; Ø akceptuj; Ø błąd; 41

ANALIZATOR LR Konfiguracją analizatora LR nazywamy parę, której pierwszym elementem jest zawartość stosu, a

ANALIZATOR LR Konfiguracją analizatora LR nazywamy parę, której pierwszym elementem jest zawartość stosu, a drugim niewykorzystane wejście; (s 0 X 1 s 1 X 2 s 2. . . Xm sm , ai ai+1. . . an$) Powyższa konfiguracja przedstawia formę zdaniowa: X 1 X 2. . . Xmai ai+1. . . an 42

ANALIZATOR LR Konfiguracje, które mogą wystąpić po każdym z czterech typów akcji: Ø akcja[sm,

ANALIZATOR LR Konfiguracje, które mogą wystąpić po każdym z czterech typów akcji: Ø akcja[sm, ai]=przesuń s – analizator wykonuje przesunięcie przechodząc do konfiguracji: (s 0 X 1 s 1 X 2 s 2. . . Xm smais, ai+1. . . an$) Ø akcja[sm, ai]=redukuj wg A-> - analizator wykonuje redukcje przechodząc do konfiguracji: (s 0 X 1 s 1 X 2 s 2. . . Xm-r sm-r A s, ai+1. . . an$), gdzie s=przejście[sm-r, A], a r jest długością ; 43

akcja[sm, ai]=redukuj wg A-> Analizator zdejmuje ze stosu 2 r symboli (po r symboli

akcja[sm, ai]=redukuj wg A-> Analizator zdejmuje ze stosu 2 r symboli (po r symboli stanu i gramatyki), odkrywając stan s. Następnie wstawia na stos A – lewa stronę użytej produkcji i s – wartość przejście[s, A]. Aktualny symbol wejściowy w wyniku redukcji nie jest zmieniany; Ø akcja[sm, ai]=akceptuj – analiza jest zakończona; Ø akcja[sm, ai]= błąd - analizator wykrył błąd i wywołuje procedurę obsługi błędu; 44

ANALIZA LR Podsumujmy krótko algorytm analizy LR: Ø Wejście: ciąg wejściowy w i tablica

ANALIZA LR Podsumujmy krótko algorytm analizy LR: Ø Wejście: ciąg wejściowy w i tablica analizatora LR z funkcjami akcja i przejście dla gramatyki G; Ø Wyjście jeśli w jest w L(G) –występuje wyprowadzenie dla w, w przeciwnym przypadku – informacja o błędzie; Ø Metoda: początkowo na stosie analizatora jest s 0, czyli stan początkowy, a na wejściu jest w$. Dalsze kroki analizatora zaobserwujmy na przykładzie; 45

Przykład Rozważmy następującą gramatykę bezkontekstową, daną zbiorem produkcji: E -> E+T; E->T; T->T*F; T->F;

Przykład Rozważmy następującą gramatykę bezkontekstową, daną zbiorem produkcji: E -> E+T; E->T; T->T*F; T->F; F->(E); F->id; 46

Przykład W naszym algorytmie wprowadźmy następujące oznaczenia: si oznacza przesuniecie i wstawiany na stos

Przykład W naszym algorytmie wprowadźmy następujące oznaczenia: si oznacza przesuniecie i wstawiany na stos stan i; rj oznacza redukcję według produkcji o numerze j; akc oznacza akceptuj; Puste miejsce oznacza błąd; . . . 47

Przykład ST AN Id 0 s 5 1 2 3 4 s 5 5

Przykład ST AN Id 0 s 5 1 2 3 4 s 5 5 6 s 5 + s 6 r 2 r 4 akcja * ( s 4 ) $ akc r 2 R 2 r 4 s 7 r 4 s 4 r 6 przejście E T F 1 2 3 r 6 8 r 6 s 4 2 3 9 3 R 6

Przykład ST AN Id 7 s 5 8 9 10 11 + s 6

Przykład ST AN Id 7 s 5 8 9 10 11 + s 6 r 1 r 3 r 5 akcja * ( s 4 s 7 r 3 r 5 ) s 11 r 3 r 5 $ przejście E T F 10 r 1 r 3 r 5

DZIAŁANIA ANALIZATORA Nr 1 2 3 4 5 6 7 STOS 0 0 id

DZIAŁANIA ANALIZATORA Nr 1 2 3 4 5 6 7 STOS 0 0 id 5 0 F 3 0 T 2*7 0 T 2 * 7 id 5 0 T 2 * 7 F 10 WEJŚCIE id *id+id$ id+id$ AKCJA przesunięcie redukcja wg F->id redukcja wg T->F przesunięcie redukcja wg F->id redukcja wg T->T*F 50

DZIAŁANIA ANALIZATORA Nr 7 8 9 10 11 12 13 14 STOS 0 T

DZIAŁANIA ANALIZATORA Nr 7 8 9 10 11 12 13 14 STOS 0 T 2 * 7 F 10 0 T 2 0 E 1+6 0 E 1 + 6 id 5 0 E 1+6 F 3 0 E 1+6 T 9 0 E 1 WEJŚCIE +id$ $ $ AKCJA redukcja wg T->T*F redukcja wg E->T przesunięcie redukcja wg F->id redukcja wg T->F redukcja wg E->E+T akceptacja

KONIEC WYKŁADU SIÓDMEGO

KONIEC WYKŁADU SIÓDMEGO