analiza metodĄ zstepujĄcĄ -...

of 33 /33
ANALIZA METODĄ ZSTEPUJĄCĄ

Author: phungdan

Post on 28-Feb-2019

225 views

Category:

Documents


0 download

Embed Size (px)

TRANSCRIPT

ANALIZA METOD ZSTEPUJC

ANALIZA ZSTPUJCA

Dla danej gramatyki G oraz S=>*, to wwczas:Jeli zawiera tylko terminale, to

nazywamy zdaniem;Jeli zawiera terminale oraz nieterminale,

lub same nieterminale, to nazywamy form zdaniow;

WniosekZdanie jest form zdaniow, ktra nie zawiera

nieterminali;

22

ANALIZA ZSTPUJCA Analiza metoda zstpujc polega na

poszukiwaniach majcych na celu, znalezienie lewostronnego wyprowadzenia dla zdania bdcego cigiem wejciowym;

W metodzie tej przetwarzanie rozpoczynamy od symbolu startowego a nastpnie stosujemy wyprowadzenie tak dugo, a otrzymamy zdanie wejciowe. Moliwe jest oczywicie, e zdania nie da si wygenerowa. Wwczas otrzymamy tak informacje;

33

ANALIZA ZSTPUJCA

Sprawdmy, czy zdanie z poprzedniego wykadu Szybki pies przeskoczy pot naley do jzyka generowanego przez t gramatyk.Rozpoczniemy od korzenia:

zdaniezdanie

44

GRAMATYKA BEZKONTEKSTOWA

gramatyka reguy produkcji: Zdanie -> podmiot orzeczenie Podmiot -> przymiotnik rzeczownik Orzeczenie -> czasownik dopenienie Dopenienie -> rzeczownik Rzeczownik -> pot Przymiotnik -> szybki Czasownik -> przeskoczy Rzeczowniki -> pies

55

ANALIZA ZSTEPUJCA

zdanie

podmiot orzeczenie

przymiotnik rzeczownik czasownik dopenienie

rzeczownik

Szybki pies przeskoczy pot

66

ANALIZA ZSTPUJCA

W nastpnym przykadzie dana jest W nastpnym przykadzie dana jest gramatyka z produkcjami: S->(S), S->W, gramatyka z produkcjami: S->(S), S->W, gdzie W jest wyraeniem. Czy zdanie gdzie W jest wyraeniem. Czy zdanie (((W))) naley do jzyka generowanego (((W))) naley do jzyka generowanego przez t gramatyk;przez t gramatyk;

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

77

ANALIZA ZSTPUJCA

Rozwamy jeszcze jeden przykad. Niech Rozwamy jeszcze jeden przykad. Niech bdzie dana gramatyka dana przez bdzie 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

ANALIZA ZSTPUJCA

Sprawdmy, czy do jzyka generowanego, Sprawdmy, czy do jzyka generowanego, przez t gramatyk naley zdanie przez t gramatyk naley zdanie =accd=accd?? S->aAd

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

SS

aa AA dd

bb99

ANALIZA ZSTPUJCA

Sprawdmy, czy do jzyka generowanego, Sprawdmy, czy do jzyka generowanego, przez t gramatyk naley zdanie przez t gramatyk naley zdanie =accd=accd?? S->aAd

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

SS

aa AA dd

cc1010

ANALIZA ZSTPUJCA

Sprawdmy, czy do jzyka generowanego, Sprawdmy, czy do jzyka generowanego, przez t gramatyk naley zdanie przez t gramatyk naley zdanie =accd=accd?? S->aAd

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

SS

aa BB

1111

dd dd cc

ANALIZA ZSTPUJCA

Sprawdmy, czy do jzyka generowanego, Sprawdmy, czy do jzyka generowanego, przez t gramatyk naley zdanie przez t gramatyk naley zdanie =accd=accd?? S->aAd

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

SS

aa BB

1212

cc cc dd

ANALIZA ZSTPUJCA

Sprawdmy, czy do jzyka generowanego, Sprawdmy, czy do jzyka generowanego, przez t gramatyk naley zdanie przez t gramatyk naley zdanie =accd=accd?? S->aAd

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

SS

aa BB

1313

cc cc dd

GRAMATYKI LL(1) Gramatyk bezkontekstow, ktra nie zawiera

pustych produkcji (S->) oraz prawe strony dowolnego nieterminala A rozpoczynaj si od rnych symboli terminalnych nazywamy prost gramatyk LL(1);

Prosta gramatyka LL(1) jest klas gramatyk, ktre mog by automatycznie przetwarzane poprzez analizatory dziaajce na bazie metody zstpujcej;

1414

METODA ZEJ REKURENCYJNYCHImplementacja metody zstpujcej jest metoda zej

rekurencyjnych. Opiera si ona na: Dla kadego nieterminala musi by stworzona

osobna funkcja; Symbol znajdujcy si na wejciu jest podstaw

decyzji o wyborze produkcji; Dla nieterminala nastpuje wywoanie funkcji

zwizanej z tym nieterminalem; Dla terminala nastpuje sprawdzenie jego zgodnoci

z symbolami, ktrych funkcja oczekuje na wejciu; ...

1515

http://www.math.uni.lodz.pl/~robpleb/metoda_zejsc_rek.pdf

Przykad Przeledmy jeszcze jeden przykad. Niech

gramatyka bdzie zdefiniowana za pomoc produkcji: A->Ba, B->bB i B->c;

W tym przypadku produkcja rozpoczyna si od nieterminala;

W przypadkach takich gramatyk mona sobie poradzi wykorzystujc zbir FIRST;

1616

ZBIR FIRST

Zbir FIRST(X) tworzymy w oparciu o ponisze reguy:

Jeli XT, to FIRST(X)={X};Jeli X->, to FIRST(X);Jeli XN i X->Y1Y2...Yn, to wFIRST(X)

jeli istnieje istnieje i{1,2,...n} takie, e wFIRST(Yi), oraz FIRST(Yk) dla wszystkich k=1,2,...,i-1;

Jeli FIRST(Yi) dla wszystkich i, to FIRST(X); 1717

Przykad

gramatyka reguy produkcji: Zdanie -> podmiot orzeczenie Podmiot -> przymiotnik rzeczownik Orzeczenie -> czasownik dopenienie Dopenienie -> rzeczownik Rzeczownik -> pot Przymiotnik -> szybki Czasownik -> przeskoczy Rzeczowniki -> pies

1818

Przykad

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

Przykad

Rozwamy 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

METODA ZEJ REKURENCYJNYCH Zasady w oparciu o ktre pisze si analizator

wykorzystujcy metod rekurencyjnych zej:

Dla kadego nieterminala tworzymy oddzieln funkcj;

O wyborze produkcji analizator decyduje w oparciu o symbol znajdujcy si na wejciu. Produkcja jest wybrana, jeli symbol na wejciu naley do zbioru FIRST od prawej strony tej produkcji;

2121

METODA ZEJ REKURENCYJNYCH Zasady w oparciu o ktre pisze si analizator

wykorzystujcy metod rekurencyjnych zej:

Dla kadego nieterminala wywoywana jest funkcja zwizana z tym nieterminalem;

Dla kadego treminala, sprawdzana jest jego zgodno z symbolami, ktrych funkcja oczekuje na wejciu;

2222

Przykad Wrmy do naszego wczeniejszego

przykadu, gdzie gramatyka bya zdefiniowana za pomoc produkcji: A->Ba, B->bB i B->c;

Implemantacja funkcji odpowiadajcej nieterminalowi B jest prosta;

Problem pojawia si przy implementacji funkcji odpowiadajcej nieterminalowi A. Z pomoc przychodzi zdefiniowany wczeniej zbir FIRST;...

2323

http://www.math.uni.lodz.pl/~robpleb/metoda_zejsc_rek2.pdf

Przykad Zmiemy nieco gramatyk, wprowadzajc do

niej pusta produkcj. Czyli rozwamy 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

http://www.math.uni.lodz.pl/~robpleb/metoda_zejsc_rek3.pdf

LEWOSTRONNA REKURENCJA Rozwamy 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}

ELIMINACJA LEWOSTRONNEJ REKURENCJI

Metoda eliminacji lewostronnej rekurencji; Zamy e dane s produkcje:

A->A, A->

2626

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

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

Przykad W naszej gramatyce byy 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 -> BB -> B

B-> B-> B-> B bB-> B b B -> b BB -> b B

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

LEWOSTRONNA REKURENCJA Zatem implementacja funkcji nieterminala B

moe wyglda 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->

LEWOSTRONNA FAKTORYZACJA

Metoda lewostronnej faktoryzacji; Zamy e dane s produkcje:

A-> 1, A-> 2

2929

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

A -> A -> A AA -> A -> 11 A-> A-> 22

LEWOSTRONNA FAKTORYZACJA

Rozwamy 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

Przykad W naszej gramatyce byy 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

LEWOSTRONNA FAKTORYZACJA Zatem po lewostronnej faktoryzacji

implementacja funkcji nieterminala B moe wyglda 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*/}}}

KONIEC

KONIEC WYKADU CZWARTEGO

Slajd 1Slajd 2Slajd 3Slajd 4Slajd 5Slajd 6Slajd 7Slajd 8Slajd 9Slajd 10Slajd 11Slajd 12Slajd 13Slajd 14Slajd 15Slajd 16Slajd 17Slajd 18Slajd 19Slajd 20Slajd 21Slajd 22Slajd 23Slajd 24Slajd 25Slajd 26Slajd 27Slajd 28Slajd 29Slajd 30Slajd 31Slajd 32Slajd 33