470 likes | 708 Views
ANALIZA SKŁADNIOWA. ANALIZA SKŁADNIOWA. Analiza składniowa stanowi kolejny, po analizie leksykalnej etap kompilacji; Analiza składniowa jest przeprowadzana przez analizator składniowy; Do analizatora składniowego dostarczane są dane w postaci symboli leksykalnych;
E N D
ANALIZA SKŁADNIOWA • Analiza składniowa stanowi kolejny, po analizie leksykalnej etap kompilacji; • Analiza składniowa jest przeprowadzana przez analizator składniowy; • Do analizatora składniowego dostarczane są dane w postaci symboli leksykalnych; • Analizator po zakończeniu pracy zwraca tzw. drzewo rozbioru lub jego uproszczoną wersję (abstrakcyjne drzewo składniowe) 2
ANALIZA SKŁADNIOWA Strumień danych wejściowych Analizator leksykalny Symbole leksykalne Analizator składniowy Drzewo wyprowadzenia 3
GRAMATYKA BEZKONTEKSTOWA • Inną metodą tworzenia języków formalnych jest generowanie ich za pomocą tzw. gramatyki bezkontekstowej; • Pierwowzorem gramatyk bezkontekstowych były reguły powstawania zdań w językach naturalnych, czyli po prostu gramatyki języków naturalnych; 4
GRAMATYKA BEZKONTEKSTOWA • płot szybki przeskoczył pies • szybki pies przeskoczył płot • Podstawowe pytanie: W jaki formalny sposób zweryfikować poprawność zdania? 5
GRAMATYKA BEZKONTEKSTOWA zdanie podmiot orzeczenie przymiotnik rzeczownik czasownik dopełnienie rzeczownik Szybki pies przeskoczył płot 6
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 7
GRAMATYKA BEZKONTEKSTOWA Za pomocą tych reguł możemy stworzyć zdanie: szybki pies przeskoczył płot: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki pies czasownik dopełnienie =>szybki pies przeskoczył dopełnienie =>szybki pies przeskoczył płot 8
GRAMATYKA BEZKONTEKSTOWA Za pomocą reguł tej gramatyki można jeszcze utworzyć trzy inne zdania: Szybki płot przeskoczył pies Szybki płot przeskoczył płot Szybki pies przeskoczył pies 9
GRAMATYKA BEZKONTEKSTOWA Szybki płot przeskoczył pies: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki płot czasownik dopełnienie =>szybki płot przeskoczył dopełnienie =>szybki płot przeskoczył pies 10
GRAMATYKA BEZKONTEKSTOWA Szybki płot przeskoczył płot: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki płot czasownik dopełnienie =>szybki płot przeskoczył dopełnienie =>szybki płot przeskoczył płot 11
GRAMATYKA BEZKONTEKSTOWA Szybki pies przeskoczył pies: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki pies czasownik dopełnienie =>szybki pies przeskoczył dopełnienie =>szybki pies przeskoczył pies 12
GRAMATYKA BEZKONTEKSTOWA • Zauważmy iż zdania płot szybki przeskoczył pies nie można wyprowadzić za pomocą reguł powyższej gramatyki, gdyż nie znajdziemy takiego wyprowadzenia, po którym rzeczownik byłby na początku zdania. Nie ma produkcji: Podmiot -> rzeczownik przymiotnik 13
GRAMATYKA BEZKONTEKSTOWA • Gramatyka bezkontekstowa, jest przydatnym sposobem do opisania języków programowania; • Skonstruujmy teraz gramatykę bezkontekstową, którą będzie można opisać niektóre konstrukcje występujące w językach programowania; • Opisujemy konstrukcje: if, begin, while, • Zakładamy, że I1,I2 są instrukcjami, E,D –wyrażeniami; 14
GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji: • Zdanie -> if zdanie • Zdanie -> begin zdanie • Zdanie -> while zdanie • Zdanie -> then zdanie • Zdanie -> else zdanie • Zdanie -> do • Zdanie -> instrukcja zdanie 15
GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji cd: • Zdanie -> wyrażenie zdanie • Zdanie -> instrukcja • Instrukcja -> I1 • Instrukcja -> I2 • Wyrażenie -> E • Wyrażenie -> D 16
GRAMATYKA BEZKONTEKSTOWA Za pomocą tych reguł możemy z łatwością stworzyć instrukcję: if E then I1 else I2 zdanie =>if zdanie =>if wyrażenie zdanie =>if wyrażenie then zdanie => if wyrażenie then instrukcja zdanie => if wyrażenie then instrukcja else zdanie =>if wyrażenie then instukcja else instrukcja =>ifEthen instrukcja else instrukcja =>ifEthenI1else instrukcja =>ifEthenI1elseI2 17
GRAMATYKA BEZKONTEKSTOWA while D do I2 zdanie =>while zdanie =>while wyrażenie zdanie =>while wyrażenie do zdanie => while wyrażenie do instrukcja =>whileDdo instrukcja =>whileDdoI2 18
GRAMATYKA BEZKONTEKSTOWA • Gramatyką bezkontekstową (GBK) - nazywamy układ G=(V,Σ,P,S) składający się z następujących elementów: • V – zbiór skończony, którego elementy nazywamy zmiennymi lub symbolami nieskończonymi; • Σ={a1,…,an} – zbiór skończony zwany alfabetemgramatyki, którego elementy nazywamy symbolami końcowymi; 19
GRAMATYKA BEZKONTEKSTOWA • P V x (V Σ)* – skończony zbiór elementów zwanych produkcjami; • S є V– wyróżniona zmienna zwana zmienną początkową lub symbolem startowym. 20
GRAMATYKA BEZKONTEKSTOWA • Zbiór produkcji P – są to pary (X,α), gdzie X є V jest pewna zmienną, a αє (VU Σ)* jest słowem utworzonym ze zmiennych i symboli końcowych (np.: α=aXYb); • produkcja (X,α), wskazuje, że w trakcie konstruowania słów z Σ na każdym etapie możemy za zmienną X podstawić α; • Produkcje oznaczmy: X -> α; • Przykład: Zdanie -> wyrażenie zdanie 21
GRAMATYKA BEZKONTEKSTOWA • Niech G=(V,Σ,P,S) będzie dowolną gramatyką bezkontekstową. Jeśli α1 є (VU Σ)* jest słowem utworzonym ze zmiennych i symboli końcowych i w słowie występuje pewna zmienna X, i do P należy produkcja X->β, to jeśli w miejsce X podstawimy β i tak otrzymane słowo oznaczymy przez α2, tzn. α2= γ1 βγ2, to zapisujemy to w następujący sposób: α1 => α2 22
GRAMATYKA BEZKONTEKSTOWA • Mówimy, że słowo αkє (VU Σ)* jest wyprowadzalne z α1є (VU Σ)*, gdy istnieje skończony ciąg słów α2,α3,..., αk-1є (VU Σ)* taki, że: α1=>α2=>α3=>...=>αk-1=>αk; • Piszemy wtedy: α1=>*αk; • Przyjmujemy dodatkowo, że zawsze α=>*α; 23
Przykład • Niech ={a,b} i w gramatyce G mamy produkcje: P={S=>aX, X->bYa, X->bYbZ, X->bY, Y->bZa, Y->bZb, Y->bZ, Z->aW, W->b, W->a}. Czy zdanie =abbabbab daje się wyprowadzić ze zdania =abYbz? 1=abbZbZ; 2=abbaWbaW; =>1=>2=>
GRAMATYKA BEZKONTEKSTOWA • Jeśli słowo α є (VU Σ)* składa się wyłącznie z symboli końcowych i jest wyprowadzalne z S, to α nazywamy słowem generowanym przez gramatykę G; • Językiem generowanym przez gramatykę G nazywamy zbiór słów L(G) generowanych przez G, tzn: L(G):={ єΣ* : S=>* }; 25
GRAMATYKA BEZKONTEKSTOWA Język L nazywamy językiem bezkontekstowym, gdy L=L(G) dla pewnej gramatyki bezkontekstowej G; • Zbiór wszystkich języków bezkontekstowych oznaczamy przezJBK; 26
GRAMATYKA BEZKONTEKSTOWA • Załóżmy, że mamy daną gramatykę bezkontekstową G oraz dowolną produkcje tej gramatyki. Wówczas każdy symbol użyty po lewej stronie produkcji nazywany jest nieterminalnym (nieterminalem); • Pozostałe symbole są symbolami terminalnymi (terminalami); 27
GRAMATYKA BEZKONTEKSTOWA W omówionym przykładzie zaznaczamy: • Zdanie -> ifzdanie • Zdanie -> beginzdanie • Zdanie -> whilezdanie • Zdanie -> thenzdanie • Zdanie -> elsezdanie • Zdanie -> dozdanie • Zdanie -> instrukcjazdanie 28
GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji cd: • Zdanie -> wyrażenie zdanie • Zdanie -> instrukcja • Instrukcja -> I1 • Instrukcja -> I2 • Wyrażenie -> E • Wyrażenie -> D nieterminaleterminale 29
GRAMATYKA BEZKONTEKSTOWA • Niech G będzie gramatyką bezkontekstową. Niech 1=>2=>3=>...=>k, 1,2,...,kє (VU Σ)* będzie wyprowadzeniem w G. Wyprowadzenie to nazywamy lewym 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 lewej strony; 30
GRAMATYKA BEZKONTEKSTOWA • 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; 31
Przykład • Jeśli =abcXcaYdaXa i w G mamy produkcję X->aYb, to: • abcXcaYdaXa => abcaYbcaYdaXa – jest lewym wyprowadzeniem; • abcXcaYdaXa => abcXcaYdaaYb – jest prawym wyprowadzeniem; 32
GRAMATYKA BEZKONTEKSTOWA 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 formą zdaniową, która nie zawiera nieterminali; 33
GRAMATYKA BEZKONTEKSTOWA • Niech G będzie gramatyką bezkontekstową. Wówczas: • G jest gramatyką rekursywną (rekurencyjną), gdy: X=>X; • G jest gramatyką lewostronnie rekursywną, gdy: X=>X; • G jest gramatyką prawostronnie rekursywną, gdy: X=>X; 34
DRZEWO WYPROWADZENIA • Niech G=(V,,P,S) będzie dowolna gramatyką, słowa A* będzie dowolnym słowem. Wówczas A możemy przyporządkować graf zwany drzewem wyprowadzenia A w G. • Wierzchołkami drzewa wyprowadzenia są pewne elementy zbioru V{}. • Zasady konstrukcji drzewa są następujące: 35
DRZEWO WYPROWADZENIA • Zmienna początkowa S jest korzeniem drzewa; • Jeśli XV{} jest wierzcholkiem, to: • Jeśli XV i w G mamy produkcję X->X1...Xk gdzie X1...XkV{} to nowymi wierzchołkami są X1...Xk .Od X prowadzimy krawędzie skierowane do tych wierzchołków: X ... X1 X2 Xk 36
DRZEWO WYPROWADZENIA • Jeśli X{} (jest symbolem końcowym lub pustym) to X nie jest początkiem żadnej krawędzi skierowanej wtedy X jest końcowym wierzchołkiem drzewa; • Gdy wszystkie wierzchołki końcowe są oznaczone symbolami końcowymi, to słowo z nich utworzone, czytane od lewej do prawej, będzie słowem generowanym przez tę gramatykę; 37
DRZEWO WYPROWADZENIA W języku terminali zasady te możemy sformułować następująco: • Każdy węzeł wewnętrzny drzewa odpowiada nieterminalowi; • Dzieci węzła drzewa są prawymi stronami produkcji; • Liście w drzewie wyprowadzenia odpowiadają terminalom; 38
Przykład • Narysujmy drzewo wyprowadzenia słów bba, aaaba w gramatyce o produkcjach P={S->aS | bS | a}; • Zauważmy, że słowo bba ma wyprowadzenie: =>bS =>bbS =>bba S 39
Przykład Drzewo wyprowadzenia dla słowa bba: S S b S b a 40
Przykład S =>aS =>aaS =>aaaS =>aaabS =>aaaba S a S S a S a S b a 41
Przykład • Niech produkcje pewnej gramatyki G, będą postaci: P={ S -> S + S S -> S * S S -> ( S ) S -> a } Wyprowadźmy wyrażenie a * a + a 42
Przykład S =>S*S =>S*S+S S =>S+S =>S*S+S =>a*S+S =>a*a+S =>a*S+S =>a*a+S =>a*a+a =>a*a+a S S * S S S + S a + S S S a S * a a a a 43
GRAMATYKA BEZKONTEKSTOWA Definicja Gramatyka, w której słowo ma więcej niż jedno drzewo wyprowadzenia nazywamy gramatyką niejednoznaczną. Definicja Dwie gramatyki generujące ten sam język nazywamy gramatykami równoważnymi. 44
Przykład • Zauważmy, iż dla gramatyki G, rozważanej w poprzednim przykładnie ze zbiorem produkcji P={S -> S + S; S -> S * S; S -> ( S ); S -> a} Możemy stworzyć gramatykę równoważną, która nie będzie już niejednoznaczna: P={ S -> S + T; S -> T; T -> T * U; T -> U; U -> ( S ); U -> a } 45
Przykład S =>S*T =>T*T =>U*T =>a*T =>a*T+U =>a*U+U =>a*a+U =>a*a+a S S T * T T + U U U a a a 46
KONIEC KONIEC WYKŁADU CZWARTEGO