Przeglądane wejśca od lewej strony do prawej L (k) Odtwarzane wywodu prawostronnego Wystarcza znajomosc "k" następnych symbol łańcucha wejścowego hstor dotychczasowych redukcj, aby wyznaczyc jednoznaczne osnowe dokonac jej redukcj Odtworzene wywodu metodą wstępującą (bottom up) termnale termnale nekompletna osnowa stos k wejśce osnowa stos k wejśce shft redukcja Dla gramatyk G = <N, T, P, > G BK defnuje sę gramatykę uzupełnoną G G =<N { }, T, P { }, > nowy symbol początkowy dodatkowa produkcja mają wyłączne znaczene technczne Def. Gramatyka G jest gramatyką L(k) dla k 0 jeżel z: () () ' αaw αβw G' G' ' γbx αβy G' G' A,B N w, x, y T () FIST k (w) = FIST k (y) α, β, γ (N T) wynka, że αay = γbx tzn. α = γ; A = B; y=x G' wyprowadzene prawostronne w gramatyce uzupełnonej G
' α α A β osnowa k w FIST k (w) Przykład: S Sa a Gramatyka uzupełnona S S S Sa S a Gramatyka ta ne jest gramatyką L(0) (gramatyk L(0) mają sens w odróżnenu od gramatyk LL(0) ), bo z tego, że () S' S' S ' αaw αβw () S' ' S Sa γbx γβy () FIST 0 (ε) = FIST 0 (a)={ε} FIST 0(w) FIST 0(y) ne wynka, że S' a = S αay γbx Ne można stwerdzć, czy S jest osnową ne znając następnego symbolu (którym może być ε wtedy S będze osnową, lub a wtedy osnową ne będze S lecz Sa) Analzator (parser) L(1) jest zdetermnowanym automatem ze stosem, którego sterowane określają dwe funkcje f g: f funkcja dzałana f: I (Τ {$}) {shft j, red, err, acc} numer stanu numer produkcj
g funkcja przejśca g: I N I {err} gdze: I - zbór stanów I = {T j : j = 0, 1,..., n} = 1,,..., m m = #P m lczba produkcj gramatyk G T 0 stan początkowy, a zarazem początkowy symbol stosu stos T 0 x 1 T 1 x T... x r T r wejśce a 1... a k......... a s $ f Parser L(1) g Π 1 Π... Π p cąg numerów produkcj wyjśce Konfguracja parsera: (T 0 x 1 T 1 r T, a 1...a s $, π 1...π p ) r przy czym : x są symbolam gramatyk (netermnalam lub termnalam) Konfguracja początkowa : (T 0, a 1 a...a s $, ε)
Algorytm dzałana parsera L(1) Nech parser znajduje sę w konfguracj: (T 0 x 1 T 1 r T, a k a k+1...a s $, π) () Jeśl f( T, a r k ) = shft j to: (T 0 x 1 T 1 r () Jeśl f( T, a r k ) = red r T,a r k a k+1...a s $, π) (T 0 x 1 1 oraz A γ jest produkcją o numerze to γ = d; d r (T 0 x 1 T 1 r-d gdze T j =g( T r r d r T r d T r T r a k T j,a k+1...a s $,π) T, a k a k+1...a s $, π) (T 0 x 1 T 1 r-d zdejme sę d symbol,a) r T r d () Jeśl f( T, a r k )=acc akceptacja, parsng zakończony poprawne (v) Jeśl f( T,a r k )=err błąd syntaktyczny Przykład: Parser L(1) dla gramatyk S SaSb ε Gramatyka uzupełnona: (0) S S (1) S SaSb () S ε f AT j, a k a k+1...a s $, π) Stany A b $ S T 0 ed err red T 1 T 1 shft err acc err T red red err T 3 T 3 shft 4 shft 5 err err T 4 red red err T 6 T 5 red 1 err red 1 err T 6 shft 4 shft 7 err err T 7 red 1 red 1 err err Tablca parsera g
Przykład: parsng słowa aabb (T 0, aabb$, ε)! (T 0 ST 1, aabb$, ) (red-)! (T 0 ST 1 at, abb$, ) (shft)! (T 0 ST 1 at ST 3, abb$, ) (red-)! (T 0 ST 1 at ST 3 at 4, bb$, ) (shft)! (T 0 ST 1 at ST 3 at 4 ST 6, bb$, ) (red-)! (T 0 ST 1 at ST 3 at 4 ST 6 bt 7, b$, ) (shft)! (T 0 ST 1 at ST 3, b$, 1) (red-1)! (T 0 ST 1 at ST 3 bt 5, $, 1) (shft)! (T 0 ST 1, $, 11) (red-1) (acc) Sprawdzene (zgodne z wywodem prawostronnym): aabb Saabb Sasabb SaSaSbb SaSb S o.k. Sprawdzene powyższej redukcj: 1 S SaSb SaSaSbb SaSabb Saabb aabb o.k. 1 1 1 1 ε a ε a ε b B S a ε a ε b B 3 S a S a ε b B 4 S a S a S b B 5 S a S b 6 S formy zdanowe z zaznaczonym osnowam
WNIOSKI: 1. dzęk tablcy L(k) uzyskujemy nformacje - gdze jest osnowa (jej lewy prawy konec) - jak ją redukować. operacja shft odpowada poszukwanu końca osnowy. POBLEM: Dana jest gramatyka G G BK. Czy jest L(k)? 1. Konstruujemy tablcę L(k).Weryfkujemy, czy G jest L(k). Konstrukcja tablcy L(k) dla gramatyk G αaw αβw (A β) użyta produkcja znane: αβ oraz FIST k (w) pełna nformacja o: 1) prawym lewym końcu osnowy ) redukcj jaką należy wykonać Aktywny prefks (vable prefx) αaw αβw γ - aktywny prefks gramatyk G γ - prefks łańcucha αβ gdze: α, β, γ (N T) w T A N Jest to łańcuch będący prefksem pewnej prawostronne wyprowadzalnej formy zdanowej, ne wychodzący poza prawy konec jej osnowy. Każdy wersz tablcy L(1) (czyl stan) odpowada pewnemu aktywnemu prefksow.
L(1) sytuacja (L(1) tem) G=<N, T, P, > G BK [A β 1.β, v] L(1) sytuacja (A β 1 β ) P v T {$}. wskazuje mejsce w prawej strone produkcj L(1) sytuacja dopuszczalna (L(k) tem vald for vable prefx) [A β 1.β, v] L(1) sytuacja dopuszczalna dla aktywnego prefksu αβ 1 wywód: α Aw αβ1β w v FIST1( w) UWAGI: 1. poneważ β 1 może być ε, węc dla każdego prefksu aktywnego stneje co najmnej jedna L(k) sytuacja dopuszczalna. L(k) sytuacje postac: [A β., v] są szczególne ważne, gdyż pokazują możlwe redukcje (analza dobegła do prawego końca osnowy). Przykład: S SaSb ε analzowane słowo: aabb S S a S b S a S a S b b α Aw α β 1 β w Forma zdanowa: Stos (bez stanów) Wejśce Sytuacja SaSaSbb SaSaSbb () Aktywnemu prefksow SaSaS () SaSaS bb () SaSaSb b () Aktywnemu prefksow SaSaSb [S SaS.b, b] dopuszczalna dla aktyw. prefksu SaSaS [S SaSb., b] dopuszczalna dla aktyw. prefksu SaSaSb odpowada stan T 6 odpowada stan T 7 Domykane zboru L(1) sytuacj dopuszczalnych ałóżmy, że sytuacja [A α.bβ, a] jest dopuszczalna dla pewnego aktywnego prefksu γ, co oznacza, że stneje wyprowadzene prawostronne: δaax δαbβax, gdze γ=δα
Przypuśćmy, że β ax by (by łańcuch termnalny rozpoczynający sę symbolem b). Wtedy dla każdej produkcj B η δaax δαbβax δαηβax δαηby (γ=δα) Czyl dla aktywnego prefksu γ dopuszczalna jest także sytuacja [B.η, b], gdze: b FIST 1 (βax)=fist 1 (βa) Algorytm domykana zboru sytuacj dopuszczalnych We: bór I sytuacj dopuszczalnych dla pewnego aktywnego prefksu (w gramatyce uzupełn. G ) Wy: bór I będący domknęcem wejścowego zboru sytuacj dopuszczalnych Metodę lustruje funkcja CLOSUE(I); functon CLOSUE(I); begn repeat for każda sytuacja [A α.bβ, a] I do for każda produkcja (B η) P do for każdy b FIST 1 (βa) do I:=I {[B.η, b]}; untl nc nowego ne dodano do I; return (I); end; Funkcja GOTO GOTO: {I(γ): γ (N T), γ - aktywny prefks} {X: X (N T)} {I(γ ): γ (N T) +, γ =γx} gdze: I(γ) zbór wszystkch sytuacj dopuszczalnych dla prefksu aktywnego γ
Przykład: S SaSb ε (a) (b) S SaSaS. bb Prefksem aktywnym obu S SaSaS. abbb form zdanowych jest SaSaS I 7 ={ [S SaSb., a] [S SaSb., b]} I 7 =GOTO(I 6, b) I 7 zbór sytuacj dopuszczalnych dla prefksu aktywnego SaSaSb I 6 ={ [S SaS.b, a] [S SaS.b, b] [S S.aSb, a] [S S.aSb, b]} I 6 zbór sytuacj dopusz- I 4 =GOTO(I 6, a) czalnych dla prefksu aktywnego SaSaS I 4 ={ [S Sa.Sb, a] [S Sa.Sb, b] [S.SaSb, a] [S.SaSb, b] [S., a] I 4 [S., b]} zbór sytuacj dopuszczalnych dla prefksu aktywnego SaSaSa