33
ANALIZA METODĄ ANALIZA METODĄ ZSTEPUJĄCĄ ZSTEPUJĄCĄ

ANALIZA METODĄ ZSTEPUJĄCĄ

  • Upload
    leon

  • View
    74

  • Download
    0

Embed Size (px)

DESCRIPTION

ANALIZA METODĄ ZSTEPUJĄCĄ. 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ą ; Wniosek - PowerPoint PPT Presentation

Citation preview

Page 1: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA METODĄ ANALIZA METODĄ ZSTEPUJĄCĄZSTEPUJĄCĄ

Page 2: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA ZSTĘPUJĄCA

Dla danej gramatyki G oraz S=>*Dla danej gramatyki G oraz S=>*, to , to wówczas:wówczas:

Jeśli Jeśli zawiera tylko terminale, to zawiera tylko terminale, to nazywamy nazywamy zdaniemzdaniem;;

Jeśli Jeśli zawiera terminale oraz zawiera terminale oraz nieterminale, lub same nieterminale, to nieterminale, lub same nieterminale, to nazywamy nazywamy formą zdaniowąformą zdaniową;;

WniosekWniosekZdanie jest formą zdaniową, która nie Zdanie jest formą zdaniową, która nie

zawiera nieterminali;zawiera nieterminali;22

Page 3: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA ZSTĘPUJĄCAAnaliza metoda zstępującąAnaliza metoda zstępującą polega na polega na poszukiwaniach mających na celu, poszukiwaniach mających na celu, znalezienie znalezienie lewostronnegolewostronnego wyprowadzenia wyprowadzenia dla zdania będącego ciągiem wejściowym;dla zdania będącego ciągiem wejściowym;

W metodzie tej przetwarzanie W metodzie tej przetwarzanie rozpoczynamy od symbolu startowego a rozpoczynamy od symbolu startowego a następnie stosujemy wyprowadzenie tak następnie stosujemy wyprowadzenie tak długo, aż otrzymamy zdanie wejściowe. długo, aż otrzymamy zdanie wejściowe. Możliwe jest oczywiście, że zdania nie da Możliwe jest oczywiście, że zdania nie da się wygenerować. Wówczas otrzymamy się wygenerować. Wówczas otrzymamy taką informacje; taką informacje; 33

Page 4: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA ZSTĘPUJĄCA

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

Rozpoczniemy od korzenia:Rozpoczniemy od korzenia:

zdaniezdanie

44

Page 5: ANALIZA METODĄ ZSTEPUJĄCĄ

GRAMATYKA GRAMATYKA BEZKONTEKSTOWABEZKONTEKSTOWAgramatyka – reguły produkcji:gramatyka – reguły produkcji:

Zdanie -> podmiot orzeczenieZdanie -> podmiot orzeczeniePodmiot -> przymiotnik rzeczownikPodmiot -> przymiotnik rzeczownikOrzeczenie -> czasownik dopełnienieOrzeczenie -> czasownik dopełnienieDopełnienie -> rzeczownikDopełnienie -> rzeczownikRzeczownik ->Rzeczownik -> płot płotPrzymiotnik ->Przymiotnik -> szybki szybkiCzasownik ->Czasownik -> przeskoczył przeskoczyłRzeczowniki ->Rzeczowniki -> pies pies

55

Page 6: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTEPUJĄCAANALIZA ZSTEPUJĄCA

zdanie

podmiot orzeczenie

przymiotnik rzeczownik czasownik dopełnienie

rzeczownik

Szybki pies przeskoczył płot

66

Page 7: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA 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Ą

ANALIZA ZSTĘPUJĄCAANALIZA 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Ą

ANALIZA ZSTĘPUJĄCAANALIZA 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->aB

A->b

A->c

B->dcc

B->ccd

SS

aa AA dd

bb

99

Page 10: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA 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->aB

A->b

A->c

B->ddc

B->ccd

SS

aa AA dd

cc

1010

Page 11: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA 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->aB

A->b

A->c

B->ddc

B->ccd

SS

aa BB

1111

dd dd cc

Page 12: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA 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->aB

A->b

A->c

B->ddc

B->ccd

SS

aa BB

1212

cc cc dd

Page 13: ANALIZA METODĄ ZSTEPUJĄCĄ

ANALIZA ZSTĘPUJĄCAANALIZA 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->aB

A->b

A->c

B->ddc

B->ccd

SS

aa BB

1313

cc cc dd

Page 14: ANALIZA METODĄ ZSTEPUJĄCĄ

GRAMATYKI LL(1)GRAMATYKI LL(1)

Gramatykę bezkontekstową, która nie Gramatykę bezkontekstową, która nie zawiera pustych produkcji (S->zawiera pustych produkcji (S->) oraz ) oraz prawe strony dowolnego nieterminala A prawe strony dowolnego nieterminala A rozpoczynają się od różnych symboli rozpoczynają się od różnych symboli terminalnych nazywamy terminalnych nazywamy prostą gramatyką prostą gramatyką LL(1);LL(1);

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

1414

Page 15: ANALIZA METODĄ ZSTEPUJĄCĄ

METODA ZEJŚĆ METODA ZEJŚĆ REKURENCYJNYCHREKURENCYJNYCH

Implementacja metody zstępującej jest metoda Implementacja metody zstępującej jest metoda zejść rekurencyjnych. Opiera się ona na:zejść rekurencyjnych. Opiera się ona na:Dla każdego nieterminala musi być stworzona Dla każdego nieterminala musi być stworzona osobna funkcja;osobna funkcja;Symbol znajdujący się na wejściu jest podstawą Symbol znajdujący się na wejściu jest podstawą decyzji o wyborze produkcji;decyzji o wyborze produkcji;Dla nieterminala następuje wywołanie funkcji Dla nieterminala następuje wywołanie funkcji związanej z tym nieterminalem;związanej z tym nieterminalem;Dla terminala następuje sprawdzenie jego Dla terminala następuje sprawdzenie jego zgodności z symbolami, których funkcja zgodności z symbolami, których funkcja oczekuje na wejściu; oczekuje na wejściu; ......

1515

Page 16: ANALIZA METODĄ ZSTEPUJĄCĄ

PrzykładPrzykład

Prześledźmy jeszcze jeden przykład. Prześledźmy jeszcze jeden przykład. Niech gramatyka będzie zdefiniowana za Niech gramatyka będzie zdefiniowana za pomocą produkcji: A->Ba, B->bB i B->c;pomocą produkcji: A->Ba, B->bB i B->c;

W tym przypadku produkcja rozpoczyna W tym przypadku produkcja rozpoczyna się od nieterminala;się od nieterminala;

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

1616

Page 17: ANALIZA METODĄ ZSTEPUJĄCĄ

ZBIÓR FIRSTZBIÓR FIRST

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

Jeśli XJeśli XT, to FIRST(X)={X};T, to FIRST(X)={X};Jeśli X->Jeśli X->, to , to FIRST(X);FIRST(X);

Jeśli XJeśli XN i X->YN i X->Y11YY22...Y...Ynn, to w, to wFIRST(YFIRST(Yii), ), jeśli istnieje ijeśli istnieje i{1,2,...n} takie, że {1,2,...n} takie, że wwFIRST(YFIRST(Yii) i ) i FIRST(YFIRST(Ykk) dla wszystkich ) dla wszystkich kk{1,2,...i-1};{1,2,...i-1};Jeśli Jeśli FIRST(YFIRST(Yii) dla wszystkich i, to ) dla wszystkich i, to

FIRST(X);FIRST(X); 1717

Page 18: ANALIZA METODĄ ZSTEPUJĄCĄ

PrzykładPrzykład

gramatyka – reguły produkcji:gramatyka – reguły produkcji:Zdanie -> podmiot orzeczenieZdanie -> podmiot orzeczeniePodmiot -> przymiotnik rzeczownikPodmiot -> przymiotnik rzeczownikOrzeczenie -> czasownik dopełnienieOrzeczenie -> czasownik dopełnienieDopełnienie -> rzeczownikDopełnienie -> rzeczownikRzeczownik ->Rzeczownik -> płot płotPrzymiotnik ->Przymiotnik -> szybki szybkiCzasownik ->Czasownik -> przeskoczył przeskoczyłRzeczowniki ->Rzeczowniki -> pies pies

1818

Page 19: ANALIZA METODĄ ZSTEPUJĄCĄ

PrzykładPrzykład

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

FIRST(pies)={pies};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Ą

PrzykładPrzykład

Rozważmy gramatykę zadaną Rozważmy gramatykę zadaną produkcjami: produkcjami: S->S+P S->S+P,, S->P S->P,, P->P*Q P->P*Q,,

P->QP->Q,, Q->(S) Q->(S),, Q->id 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Ą

METODA ZEJŚĆ METODA ZEJŚĆ REKURENCYJNYCHREKURENCYJNYCH

Zasady w oparciu o które pisze się Zasady w oparciu o które pisze się analizator wykorzystujący metodę analizator wykorzystujący metodę rekurencyjnych zejść:rekurencyjnych zejść:

Dla każdego nieterminala tworzymy Dla każdego nieterminala tworzymy oddzielną funkcję;oddzielną funkcję;

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

Page 22: ANALIZA METODĄ ZSTEPUJĄCĄ

METODA ZEJŚĆ METODA ZEJŚĆ REKURENCYJNYCHREKURENCYJNYCH

Zasady w oparciu o które pisze się Zasady w oparciu o które pisze się analizator wykorzystujący metodę analizator wykorzystujący metodę rekurencyjnych zejść:rekurencyjnych zejść:

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

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

2222

Page 23: ANALIZA METODĄ ZSTEPUJĄCĄ

PrzykładPrzykładWróćmy do naszego wcześniejszego Wróćmy do naszego wcześniejszego przykładu, gdzie gramatyka była przykładu, gdzie gramatyka była zdefiniowana za pomocą produkcji: A->Ba, zdefiniowana za pomocą produkcji: A->Ba, B->bB i B->c;B->bB i B->c;

Implementacja funkcji odpowiadającej Implementacja funkcji odpowiadającej nieterminalowi B jest prosta;nieterminalowi B jest prosta;

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

Page 24: ANALIZA METODĄ ZSTEPUJĄCĄ

PrzykładPrzykładZmieńmy nieco gramatykę, wprowadzając Zmieńmy nieco gramatykę, wprowadzając do niej pusta produkcję. Czyli rozważmy do niej pusta produkcję. Czyli rozważmy gramatykę o produkcjach: gramatykę o produkcjach:

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

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

2424

Page 25: ANALIZA METODĄ ZSTEPUJĄCĄ

LEWOSTRONNA LEWOSTRONNA REKURENCJAREKURENCJA

Rozważmy gramatykę zadaną Rozważmy gramatykę zadaną produkcjami:produkcjami:

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

voidvoid B(){ B(){ifif (biezacy == ‘b’){ (biezacy == ‘b’){B();B();Wczytaj(‘b’);}Wczytaj(‘b’);}elseelse{{/*epsilon*}/*epsilon*}}}

2525

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

Page 26: ANALIZA METODĄ ZSTEPUJĄCĄ

ELIMINACJA ELIMINACJA LEWOSTRONNEJ LEWOSTRONNEJ

REKURENCJIREKURENCJI

Metoda eliminacji lewostronnej rekurencji;Metoda eliminacji lewostronnej rekurencji;

Załóżmy że dane są produkcje:Załóżmy że dane są produkcje:

A->AA->A, A->, A->

2626

A->AA->AA->A->

A -> A -> A’ A’A’ -> A’ -> A’ A’

A’-> A’->

Page 27: ANALIZA METODĄ ZSTEPUJĄCĄ

PrzykładPrzykładW naszej gramatyce były produkcje: W naszej gramatyce były produkcje:

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

Po eliminacji lewostronnej rekurencji: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 B

B-> B->

Page 28: ANALIZA METODĄ ZSTEPUJĄCĄ

LEWOSTRONNA LEWOSTRONNA REKURENCJAREKURENCJA

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

voidvoid B(){ B(){ifif (biezacy == ‘b’){ (biezacy == ‘b’){Wczytaj(‘b’);}Wczytaj(‘b’);}B();B();elseelse{{/*epsilon*}/*epsilon*}}}

2828

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

B-> B->

Page 29: ANALIZA METODĄ ZSTEPUJĄCĄ

LEWOSTRONNA FAKTORYZACJALEWOSTRONNA FAKTORYZACJA

Metoda lewostronnej faktoryzacji;Metoda lewostronnej faktoryzacji;

Załóżmy że dane są produkcje:Załóżmy że dane są produkcje:

A->A-> 11, A-> , A-> 22

2929

A->A-> 11

A-> A-> 22

A -> A -> A’ A’

A’ -> A’ -> 11

A’-> A’-> 22

Page 30: ANALIZA METODĄ ZSTEPUJĄCĄ

LEWOSTRONNA LEWOSTRONNA FAKTORYZACJAFAKTORYZACJA

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

voidvoid B( ){ B( ){ifif (biezacy == ‘b’)(biezacy == ‘b’){{Wczytaj(‘b’);} Wczytaj(‘b’);} else ifelse if (biezacy == ‘b’)(biezacy == ‘b’){{Wczytaj(‘b’);Wczytaj(‘b’);B ( );B ( );}}elseelse{{Sygnalizuj_blad();}Sygnalizuj_blad();}}}

3030

Page 31: ANALIZA METODĄ ZSTEPUJĄCĄ

PrzykładPrzykładW naszej gramatyce były produkcje: W naszej gramatyce były produkcje:

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

Po eliminacji lewostronnej faktoryzacji:Po eliminacji 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Ą

LEWOSTRONNA FAKTORYZACJALEWOSTRONNA FAKTORYZACJA

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

voidvoid B( ){ B( ){ifif (biezacy == ‘b’){ (biezacy == ‘b’){Wczytaj(‘b’);}Wczytaj(‘b’);}B1( );B1( );elseelse{{Sygnalizuj_blad();}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Ą

KONIECKONIEC

KONIEC WYKŁADU KONIEC WYKŁADU CZWARTEGOCZWARTEGO