ANALIZA SKADNIOWA ANALIZA SKADNIOWA Analiza skadniowa stanowi kolejny

  • Slides: 47
Download presentation
ANALIZA SKŁADNIOWA

ANALIZA SKŁADNIOWA

ANALIZA SKŁADNIOWA Analiza składniowa stanowi kolejny, po analizie leksykalnej etap kompilacji; Analiza składniowa jest

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

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

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

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 przymiotnik rzeczownik orzeczenie czasownik dopełnienie rzeczownik Szybki pies przeskoczył płot

GRAMATYKA BEZKONTEKSTOWA zdanie podmiot przymiotnik rzeczownik orzeczenie czasownik dopełnienie rzeczownik Szybki pies przeskoczył płot

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 7

GRAMATYKA BEZKONTEKSTOWA Za pomocą tych reguł możemy stworzyć zdanie: szybki pies przeskoczył płot: zdanie

GRAMATYKA BEZKONTEKSTOWA Za pomocą tych reguł możemy stworzyć zdanie: szybki pies przeskoczył płot: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki pies czasownik dopełnienie =>szybki pies przeskoczył płot 8

GRAMATYKA BEZKONTEKSTOWA Za pomocą reguł tej gramatyki można jeszcze utworzyć trzy inne zdania: Szybki

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 czasownik dopełnienie =>szybki

GRAMATYKA BEZKONTEKSTOWA Szybki płot przeskoczył pies: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki płot czasownik dopełnienie =>szybki płot przeskoczył pies 10

GRAMATYKA BEZKONTEKSTOWA Szybki płot przeskoczył płot: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki

GRAMATYKA BEZKONTEKSTOWA Szybki płot przeskoczył płot: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki płot czasownik dopełnienie =>szybki płot przeskoczył płot 11

GRAMATYKA BEZKONTEKSTOWA Szybki pies przeskoczył pies: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki

GRAMATYKA BEZKONTEKSTOWA Szybki pies przeskoczył pies: zdanie =>podmiot orzeczenie =>przymiotnik rzeczownik czasownik dopełnienie =>szybki rzeczownik czasownik dopełnienie => szybki pies czasownik dopełnienie =>szybki pies przeskoczył pies 12

GRAMATYKA BEZKONTEKSTOWA Zauważmy iż zdania płot szybki przeskoczył pies nie można wyprowadzić za pomocą

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ę

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 I 1, I 2 są instrukcjami, E, D – wyrażeniami; 14

GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji: Zdanie -> if zdanie Zdanie -> begin zdanie

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

GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji cd: Zdanie -> wyrażenie zdanie Zdanie -> instrukcja Instrukcja -> I 1 Instrukcja -> I 2 Wyrażenie -> E Wyrażenie -> D 16

GRAMATYKA BEZKONTEKSTOWA Za pomocą tych reguł możemy z łatwością stworzyć instrukcję: if E then

GRAMATYKA BEZKONTEKSTOWA Za pomocą tych reguł możemy z łatwością stworzyć instrukcję: if E then I 1 else I 2 zdanie =>if zdanie=>if wyrażenie zdanie =>if wyrażenie then zdanie => if wyrażenie then instrukcja else zdanie =>if wyrażenie then instukcja else instrukcja =>if E then instrukcja else instrukcja =>if E then I 1 else instrukcja=>if E then I 1 else I 2

GRAMATYKA BEZKONTEKSTOWA while D do I 2 zdanie =>while wyrażenie do zdanie => while

GRAMATYKA BEZKONTEKSTOWA while D do I 2 zdanie =>while wyrażenie do zdanie => while wyrażenie do instrukcja =>while D do I 2 18

GRAMATYKA BEZKONTEKSTOWA Gramatyką bezkontekstową (GBK) nazywamy układ G=(V, Σ, P, S) składający się z

GRAMATYKA BEZKONTEKSTOWA Gramatyką bezkontekstową (GBK) nazywamy układ G=(V, Σ, P, S) składający się z następujących elementów: 1. V – zbiór skończony, którego elementy nazywamy zmiennymi lub symbolami nieskończonymi; 2. Σ={a 1, …, an} – zbiór skończony zwany alfabetem gramatyki, którego elementy nazywamy symbolami końcowymi; 19

GRAMATYKA BEZKONTEKSTOWA 3. P V x (V Σ)* – skończony zbiór elementów zwanych produkcjami;

GRAMATYKA BEZKONTEKSTOWA 3. P V x (V Σ)* – skończony zbiór elementów zwanych produkcjami; 4. 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 є

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. : α=a. XYb); 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

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

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=>a. X, X->b. Ya,

Przykład Niech ={a, b} i w gramatyce G mamy produkcje: P={S=>a. X, X->b. Ya, X->b. Yb. Z, X->b. Y, Y->b. Za, Y->b. Zb, Y->b. Z, Z->a. W, W ->b, W->a}. Czy zdanie =abbabbab daje się wyprowadzić ze zdania =ab. Ybz? 1=abb. Z; 2=abba. W; => 1=> 2=>

GRAMATYKA BEZKONTEKSTOWA Jeśli słowo α є (VU Σ)* składa się wyłącznie z symboli końcowych

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;

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 przez JBK; 26

GRAMATYKA BEZKONTEKSTOWA Załóżmy, że mamy daną gramatykę bezkontekstową G oraz dowolną produkcje tej gramatyki.

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 -> if zdanie Zdanie -> begin zdanie

GRAMATYKA BEZKONTEKSTOWA W omówionym przykładzie zaznaczamy: Zdanie -> if zdanie Zdanie -> begin zdanie Zdanie -> while zdanie Zdanie -> then zdanie Zdanie -> else zdanie Zdanie -> do zdanie Zdanie -> instrukcja zdanie 28

GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji cd: Zdanie -> wyrażenie zdanie Zdanie -> instrukcja

GRAMATYKA BEZKONTEKSTOWA gramatyka – reguły produkcji cd: Zdanie -> wyrażenie zdanie Zdanie -> instrukcja Instrukcja -> I 1 Instrukcja -> I 2 Wyrażenie -> E Wyrażenie -> D nieterminale 29

GRAMATYKA BEZKONTEKSTOWA Niech G będzie gramatyką bezkontekstową. Niech 1=> 2=> 3=>. . . =>

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=>. . . =>

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 =abc. Xca. Yda. Xa i w G mamy produkcję X->a. Yb, to:

Przykład Jeśli =abc. Xca. Yda. Xa i w G mamy produkcję X->a. Yb, to: abc. Xca. Yda. Xa => abca. Yda. Xa – jest lewym wyprowadzeniem; abc. Xca. Yda. Xa => abc. Xca. Ydaa. Yb – jest prawym wyprowadzeniem; 32

GRAMATYKA BEZKONTEKSTOWA Dla danej gramatyki G oraz S=>* , to wówczas: Ø Jeśli zawiera

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ą),

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

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 X V { } jest

DRZEWO WYPROWADZENIA Zmienna początkowa S jest korzeniem drzewa; Jeśli X V { } jest wierzcholkiem, to: Ø Jeśli X V i w G mamy produkcję X>X 1. . . Xk gdzie X 1. . . Xk V { } to nowymi wierzchołkami są X 1. . . Xk. Od X prowadzimy krawędzie skierowane do tych wierzchołków: X X 1 X 2. . . Xk 36

DRZEWO WYPROWADZENIA Ø Jeśli X { } (jest symbolem końcowym lub pustym) to X

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

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->a. S |

Przykład Narysujmy drzewo wyprowadzenia słów bba, aaaba w gramatyce o produkcjach P={S->a. S | b. S | a}; Zauważmy, że słowo bba ma wyprowadzenie: S =>bba 39

Przykład Drzewo wyprowadzenia dla słowa bba: S S b b S a 40

Przykład Drzewo wyprowadzenia dla słowa bba: S S b b S a 40

Przykład S =>aaab. S=>aaaba S S a b S a 41

Przykład S =>aaab. S=>aaaba S S a b S a 41

Przykład Niech produkcje pewnej gramatyki G, będą postaci: P={ S -> S + S

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 =>a*a+S =>a*a+a S S * S a S + a S

Przykład S =>S*S+S =>a*a+S =>a*a+a S S * S a S + a S =>S+S =>S*S+S =>a*a+S =>a*a+a S S S a a S + S * S a a 43

GRAMATYKA BEZKONTEKSTOWA Definicja Gramatyka, w której słowo ma więcej niż jedno drzewo wyprowadzenia nazywamy

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

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+U =>a*U+U =>a*a+U=>a*a+a S S T * T T

Przykład S =>S*T =>T*T =>U*T =>a*T+U =>a*U+U =>a*a+U=>a*a+a S S T * T T U U a a + U a 46

KONIEC WYKŁADU CZWARTEGO

KONIEC WYKŁADU CZWARTEGO