analiza metodĄ zstepujĄcĄ -...

33
ANALIZA METODĄ ZSTEPUJĄCĄ

Upload: phungdan

Post on 28-Feb-2019

231 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA METODĄ ZSTEPUJĄCĄ

Page 2: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘ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ą;

WniosekZdanie jest formą zdaniową, która nie zawiera

nieterminali;

22

Page 3: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA● Analiza metoda zstępującą polega na

poszukiwaniach mających na celu, znalezienie lewostronnego wyprowadzenia dla zdania będącego ciągiem wejściowym;

● W metodzie tej 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;

33

Page 4: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

● Sprawdźmy, czy zdanie z poprzedniego wykładu „Szybki pies przeskoczył płot” należy do języka generowanego przez tę gramatykę.Rozpoczniemy od korzenia:

zdaniezdanie

44

Page 5: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

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

55

Page 6: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTEPUJĄCA

zdanie

podmiot orzeczenie

przymiotnik rzeczownik czasownik dopełnienie

rzeczownik

Szybki pies przeskoczył płot

66

Page 7: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

W następnym przykładzie dana jest W następnym przykładzie dana jest gramatyka z produkcjami: S->(S), S->W, gramatyka z produkcjami: S->(S), S->W, gdzie W jest wyrażeniem. Czy zdanie gdzie W jest wyrażeniem. Czy zdanie (((W))) należy do języka generowanego (((W))) należy do języka generowanego przez tę gramatykę;przez tę gramatykę;

SS =>(S)=>(S) => ((S))=> ((S)) =>(((S)))=>(((S))) =>((( W )))=>((( W )))

77

Page 8: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

Rozważmy jeszcze jeden przykład. Niech Rozważmy jeszcze jeden przykład. Niech będzie dana gramatyka dana przez będzie dana gramatyka dana przez produkcje: produkcje:

SS -> a -> aAAd;d; SS -> a -> aBB;; AA -> b; -> b; AA -> c; -> c; BB -> ddc; -> ddc; BB -> ccd; -> ccd;

88

Page 9: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

Sprawdźmy, czy do języka generowanego, Sprawdźmy, czy do języka generowanego, przez tę gramatykę należy zdanie przez tę gramatykę należy zdanie αα=accd=accd?? S->aAd

S->aBA->bA->cB->dccB->ccd

SS

aa AA dd

bb99

Page 10: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

Sprawdźmy, czy do języka generowanego, Sprawdźmy, czy do języka generowanego, przez tę gramatykę należy zdanie przez tę gramatykę należy zdanie αα=accd=accd?? S->aAd

S->aBA->bA->cB->ddcB->ccd

SS

aa AA dd

cc1010

Page 11: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

Sprawdźmy, czy do języka generowanego, Sprawdźmy, czy do języka generowanego, przez tę gramatykę należy zdanie przez tę gramatykę należy zdanie αα=accd=accd?? S->aAd

S->aBA->bA->cB->ddcB->ccd

SS

aa BB

1111

dd dd cc

Page 12: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

Sprawdźmy, czy do języka generowanego, Sprawdźmy, czy do języka generowanego, przez tę gramatykę należy zdanie przez tę gramatykę należy zdanie αα=accd=accd?? S->aAd

S->aBA->bA->cB->ddcB->ccd

SS

aa BB

1212

cc cc dd

Page 13: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ANALIZA ZSTĘPUJĄCA

Sprawdźmy, czy do języka generowanego, Sprawdźmy, czy do języka generowanego, przez tę gramatykę należy zdanie przez tę gramatykę należy zdanie αα=accd=accd?? S->aAd

S->aBA->bA->cB->ddcB->ccd

SS

aa BB

1313

cc cc dd

Page 14: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

GRAMATYKI LL(1)● Gramatykę bezkontekstową, która nie zawiera

pustych produkcji (S->Λ) oraz prawe strony dowolnego nieterminala A rozpoczynają się od różnych symboli terminalnych nazywamy prostą gramatyką LL(1);

● Prosta gramatyka LL(1) jest klasą gramatyk, które mogą być automatycznie przetwarzane poprzez analizatory działające na bazie metody zstępującej;

1414

Page 15: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

METODA ZEJŚĆ REKURENCYJNYCHImplementacja metody zstępującej jest metoda zejść

rekurencyjnych. Opiera się ona na:● Dla każdego nieterminala musi być stworzona

osobna funkcja;● Symbol znajdujący się na wejściu jest podstawą

decyzji o wyborze produkcji;● Dla nieterminala następuje wywołanie funkcji

związanej z tym nieterminalem;● Dla terminala następuje sprawdzenie jego zgodności

z symbolami, których funkcja oczekuje na wejściu; ...

1515

Page 16: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład● Prześledźmy jeszcze jeden przykład. Niech

gramatyka będzie zdefiniowana za pomocą produkcji: A->Ba, B->bB i B->c;

● W tym przypadku produkcja rozpoczyna się od nieterminala;

● W przypadkach takich gramatyk można sobie poradzić wykorzystując zbiór FIRST;

1616

Page 17: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ZBIÓR FIRST

Zbiór FIRST(X) tworzymy w oparciu o poniższe reguły:

Jeśli X∈T, to FIRST(X)={X};Jeśli X->Λ, to Λ ∈FIRST(X);Jeśli X∈N i X->Y1Y2...Yn, to w∈FIRST(X)

jeśli istnieje istnieje i∈{1,2,...n} takie, że w∈FIRST(Yi), oraz Λ∈FIRST(Yk) dla wszystkich k=1,2,...,i-1;

Jeśli Λ∈FIRST(Yi) dla wszystkich i, to Λ∈FIRST(X); 1717

Page 18: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład

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

1818

Page 19: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład

● FIRST(przeskoczył)={przeskoczył};● FIRST(pies)={pies};

FIRST(zdanie)FIRST(zdanie)=FIRST(podmiot orzeczenie)=FIRST(podmiot orzeczenie)=FIRST(przymiotnik rzeczownik orzeczenie)=FIRST(przymiotnik rzeczownik orzeczenie)=FIRST(szybki rzeczownik orzeczenie)=FIRST(szybki rzeczownik orzeczenie)={szybki}={szybki}

1919

Page 20: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład

● Rozważmy gramatykę zadaną produkcjami: S->S+P, S->P, P->P*Q, P->Q, Q->(S), Q->id;

FIRST(P)FIRST(P)=FIRST(P*Q)=FIRST(P*Q)∪∪FITRST(Q)FITRST(Q)

=FIRST((S))=FIRST((S))∪∪FIRST(id)FIRST(id) ={ ( , id }={ ( , id }

2020

Page 21: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

METODA ZEJŚĆ REKURENCYJNYCH● Zasady w oparciu o które pisze się analizator

wykorzystujący metodę rekurencyjnych zejść:

Dla każdego nieterminala tworzymy oddzielną funkcję;

O wyborze produkcji analizator decyduje w oparciu o symbol znajdujący się na wejściu. Produkcja jest wybrana, jeśli symbol na wejściu należy do zbioru FIRST od prawej strony tej produkcji;

2121

Page 22: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

METODA ZEJŚĆ REKURENCYJNYCH● Zasady w oparciu o które pisze się analizator

wykorzystujący metodę rekurencyjnych zejść:

Dla każdego nieterminala wywoływana jest funkcja związana z tym nieterminalem;

Dla każdego treminala, sprawdzana jest jego zgodność z symbolami, których funkcja oczekuje na wejściu;

2222

Page 23: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład● Wróćmy do naszego wcześniejszego

przykładu, gdzie gramatyka była zdefiniowana za pomocą produkcji: A->Ba, B->bB i B->c;

● Implemantacja funkcji odpowiadającej nieterminalowi B jest prosta;

● Problem pojawia się przy implementacji funkcji odpowiadającej nieterminalowi A. Z pomocą przychodzi zdefiniowany wcześniej zbiór FIRST;...

2323

Page 24: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład● Zmieńmy nieco gramatykę, wprowadzając do

niej pusta produkcję. Czyli rozważmy gramatykę o produkcjach:

A-> B a, B->b B, B->ε;

● Zmiana ta spowoduje zmianę zbioru FIRST (B a) (poprezdnio FIRST(B a)={b,c} teraz FIRST(B a)={b,a}), a to z kolei wymusi niewielka modyfikację kodu;...

2424

Page 25: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

LEWOSTRONNA REKURENCJA● Rozważmy gramatykę zadaną produkcjami:

A-> a B a, B->ε, B-> B b;

void B(){if (biezacy == ‘b’){B();Wczytaj(‘b’);}else{/*epsilon*}} 2525

FIRST(B b)={FIRST(B b)={εε,b},b}

Page 26: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

ELIMINACJA LEWOSTRONNEJ REKURENCJI

● Metoda eliminacji lewostronnej rekurencji;● Załóżmy że dane są produkcje:

A->Aα, A->β

2626

A->AA->AααA->A->ββ

A -> A -> ββ A’ A’A’ -> A’ -> αα A’ A’A’-> A’-> εε

Page 27: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład● W naszej gramatyce były produkcje:

A->a B a, B->ε, B->B b;● Po eliminacji lewostronnej rekurencji:

2727

A-> a B aA-> a B aB-> B-> εε

A -> a B aA -> a B aB -> B’B -> B’

B’-> B’-> εεB-> B bB-> B b B’ -> b B’B’ -> b B’

A-> a B aA-> a B aB-> b BB-> b BB-> B-> εε

Page 28: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

LEWOSTRONNA REKURENCJA● Zatem implementacja funkcji nieterminala B

może wyglądać teraz: A-> a B a, B-> b B, B->ε,;

void B(){if (biezacy == ‘b’){Wczytaj(‘b’);}B();else{/*epsilon*}} 2828

A-> a B aA-> a B aB-> b BB-> b B

B-> B-> εε

Page 29: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

LEWOSTRONNA FAKTORYZACJA

● Metoda lewostronnej faktoryzacji;● Załóżmy że dane są produkcje:

A->α β1, A-> α β2

2929

A->A->αα ββ11

A-> A-> αα ββ22

A -> A -> αα A’ A’A’ -> A’ -> ββ11 A’-> A’-> ββ22

Page 30: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

LEWOSTRONNA FAKTORYZACJA

● Rozważmy gramatykę zadaną produkcjami:A-> a B a, B->b, B-> b B;

void B( ){if (biezacy == ‘b’){Wczytaj(‘b’);} else if (biezacy == ‘b’){Wczytaj(‘b’);B ( );}else{Sygnalizuj_blad();}} 3030

Page 31: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

Przykład● W naszej gramatyce były produkcje:

A->a B a, B->b, B->B b;● Po lewostronnej faktoryzacji:

3131

A-> a B aA-> a B aB-> bB-> b

A -> a B aA -> a B aB -> b B1B -> b B1

B1-> B1-> εεB-> b BB-> b BB1 -> BB1 -> B

Page 32: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

LEWOSTRONNA FAKTORYZACJA● Zatem po lewostronnej faktoryzacji

implementacja funkcji nieterminala B może wyglądać teraz: A-> a B a, B-> b B1, B1->ε, B1->B;

void B( ){if (biezacy == ‘b’){Wczytaj(‘b’);}B1( );else{Sygnalizuj_blad();}} 3232

void B1( ){void B1( ){if (biezacy == ‘b’){if (biezacy == ‘b’){Wczytaj(‘b’);}Wczytaj(‘b’);}B( );B( );else{else{/*epsilon*/}/*epsilon*/}}}

Page 33: ANALIZA METODĄ ZSTEPUJĄCĄ - math.uni.lodz.plmath.uni.lodz.pl/~robpleb/uml_cwiczenia/Wyklad_5.pdfMETODA ZEJŚĆ REKURENCYJNYCH Implementacja metody zstępującej jest metoda zejść

KONIEC

KONIEC WYKŁADU CZWARTEGO