1 / 50

GRAMATIKY LR(k)

GRAMATIKY LR(k). Umo žňujú deterministickú syntaktickú analýzu (SA) Každý krok SA pozostáva z: Nájdenia jadra vetnej formy (JVF) Redukcie podľa zodpovedajúceho pravidla gramatiky. Vlastnosti. Robí sa Pravá derivácia – pravé VF Nech v pravej derivácii S = α 0 => r α 1 => r … => r α m

miya
Télécharger la présentation

GRAMATIKY LR(k)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GRAMATIKY LR(k)

  2. Umožňujú deterministickú syntaktickú analýzu (SA) Každý krok SA pozostáva z: Nájdenia jadra vetnej formy (JVF) Redukcie podľa zodpovedajúceho pravidla gramatiky Vlastnosti

  3. Robí sa Pravá derivácia – pravé VF Nech v pravej derivácii S = α0 =>r α1 =>r … =>r αm Je αi-1 = αAw a αi = αβw kde βje JVF a αβ = X1 X2 … Xn Potom pre LR(k) G sa požaduje Podmienenie determinizmu

  4. Podmienenie determinizmu • Zo znalosti X1 X2 … Xj • A znalosti prvých k symbolov reťazca Xj+1 Xj+2 … Xnw Vieme jednoznačne určiť pravý okraj JVF (nemôže to byť skôr ako j=n) • Zo znalosti αβ • A nie viac ako k symbolov reťazca w možno určiť β ako JVF - možno redukovať podľa Aβ • Ak αi-1 = S potom možno určiť , že vstupný reťazec je vetou jazyka

  5. Gramatika LR(k) – def G = (N, T, P, S) je BKG a G’ = (N’, T, P’, S’) je jej zodpovedajúca rozšírená G. Potom G je LR(k), ak z podmienok • S’ r* α A w r α β w • S’ r* γBx r α β y • FIRSTk(w) = FIRSTk(y) Vyplýva, že α A y = γ B x t.j. α = γ, A = B, x = y (Ak FIRSTk(w) = FIRSTk(y) potom posledné použité pravidlo bolo A  β. A teda dostaneme αAy)

  6. Syntaktická analýza LR(k) G • Základ – 2 funkcie • Funckia akcií f • Funckia prechodu g • f : T*k {presun, redukcia, prijatie, chyba} • g : N T  J  {chyba} J je tzv. Množina LR tabuliek

  7. Činnosť algoritmu - konfigurácia • Konfigurácia (z, x, π) Kde z je obsah zásobníka s tvarom T0Z1T1 ... ZiTi ZjN  T Tj sú LR(k) tabuľky x je doteraz nespracovaná časť vstupu π je pravý rozbor doteraz spracovanej časti vstupu

  8. Činnosť algoritmu – začiatočná a koncová konfigurácia • Začiatočná konfigurácia (T0, w, e) - T0 je začiatočná LR(k) tabuľka • Koncová konfigurácia (T0STk, e, π) kde S je začiatočný symbol gramatiky, Tk, obsahuje v časti akcií prvok „prijatie“ π je pravý rozbor vstupu w • Algoritmus môže skončiť „s chybou“, ak f alebo g dáva hodnotu „chyba“

  9. Algoritmus SA LR(k) gramatík • Vstup: Množina J LR(k) tabuliek pre gramatiku G vstup w • Výstup: pravý rozbor ak w je z L(G), inak chyba

  10. Algoritmus SA LR(k) gramatík – Cont. • Opakuj kroky 1 a 2 dovtedy, kým sa nenarazí na koncovú alebo chybovú konfiguráciu • Urči vopred prezretý reťazec u ( k nasledujúcich symbolov zo vstupu – ak toľko ešte má) • Aplikuj f z tabuľky, ktorá je na vrchu zásobníka (Z) na u a podľa hodnoty f(u)vykonaj:

  11. Algoritmus SA LR(k) gramatík – Cont. • f(u) = presun – ak vstup má tvar xv, x  T , v  T*, tak presuň x do Z a funkciu g vrchnej položky zo Z aplikuj na x. Ak g(x) = Ti , presuň LR(k) tabuľku Ti do Z . Ak g(x) = chyba – STOP s chybovým zastavením • f(u) = redukcia i – potom aki-te pravidlo je A α , tak zo Z vylúč 2α symbolov a k výstupu pridaj i. Ak teraz je na vrchu Z tabuľka Tk a jej funkcia prechodu je g, tak na vrch Z vlož A a tabuľku Tj,, ktorú dostaneme aplikáciou g(A). Pokračuj krokom 1. Ak g(A) = chyba tak STOP s chybovým zastavením.

  12. Algoritmus SA LR(k) gramatík – Cont. c. f(u) = chyba - STOP s chybovým zastavením. d. f(u) = prijatie – STOP s prijatím, výstup je pravým rozborom vstupu.

  13. LR(k) tabuľky – aktívny prefix Nech S =>r* α A w =>r α β w je pravá derivácia v G. Potom γ budeme nazývať aktívnym prefixom gramatiky G, ak γ je prefixom reťazca α β , t.j. γ je prefixom niektorej pravej VF , ktorý nepresahuje jadro danej VF [A β1 . β 2 , u ] nazývame LR(k) položkou BKG G a dané k, ak A -> β1β 2 P a u  T*k [Aβ1 . β 2 , u ] nazývame prípustná LR(k) položka pre aktívny prefix αβ1 , ak existuje taká deriváciaS =>r* α A w =>r α β1β 2w , že u  FIRSTk(w)

  14. Funkcia EFF Nech G je BKG a α ( N U T )*. Potom • Ak α sa začína terminálom, tak EFFk(α) = FIRSTk(α), • Ak α sa začína neterminálom, tak EFFk(α) = { w / w FIRSTk(α) a existuje derivácia α =>r* β =>r*wx , kde β  Awx pre A  N}

  15. LR(k) Gramatika – def. G je LR(k) iff ak pre každé u  T*k platí: Nech αβ je aktívny prefix pravej FV αβw rozšírenej gramatiky G’ . Potom ak LR(k) položka [Aβ . , u ] je prípustná pre αβ, neexistuje iná LR(k) položka [Aβ1 . β 2 , v], ktorá by bola prípustná pre αβ a u  EFFk(β 2v)

  16. Súbor množín prípustných položiek Nech G je BKG, γ jej aktívnym prefixom, Vk( γ) množina prípustných LR(k) položiek pre γ. Potom L = { M / M = Vk( γ) pre nejaký aktívny prefix γ gramatiky G} nazývame súbor množín prípustných LR(k) položiek gramatiky G.

  17. Konštrukcia Vk( γ) Vstup: Gramatika G, γ( N U T )*. Výstup: Vk( γ) Nech γ = X1X2 ... Xn , potom Vk( γ) konštruujeme pomocou Vk(e) , Vk(X1) , ..., Vk(X1X2 ... Xn ) takto:

  18. Konštrukcia Vk( e) • Ak S α P, doVk(e) pridáme [S. α , e], • Ak [A. B α , u] Vk(e) a B β vP, tak pre každý reťazec x  FIRSTk(αu ) pridáme do Vk(e) položku [B. β , x] , ak tam taká položka už nie je. • Opakuj krok 2. dovtedy, kým možno do Vk(e) pridať novú položku.

  19. Konštrukcia Vk(X1X2 ... Xi ) Predpokladajme, že sme už skonštruovali Vk(X1X2 ... Xi-1 ) pre i ≤n. Potom Vk(X1X2 ... Xi ) konštruujeme takto: • Ak [Aα. Xi β, u ] Vk(X1X2 ... Xi-1 ) tak pridaj do Vk(X1X2 ... Xi ) položku[Aα Xi. β, u ] • Ak [Aα . Bβ, u ] Vk(X1X2 ... Xi ) a B δP, tak pridaj do Vk(X1X2 ... Xi ) položku [B . δ, x] pre každé x FIRSTk(βu), ak tam taká položka nie je. • Opakuj krok 2. dovtedy, kým možno do Vk(X1X2 ... Xi ) pridať novú položku

  20. Funkcia GOTO Nech G je BKG , Ð = Vk( γ) je množina prípustných LR(k) položiek pre nejakéγ( N U T )* a nech X ( N U T )*. Potom GOTO (Ð, X) je taká množina Ð’, že Ð’= Vk( γX) . Alebo rozpísaním Vk(X1X2 ... Xi ) = GOTO (Vk(X1X2 ... Xi-1 ) , Xi)

  21. Súbor množín prípustných LR(k) položiek pre G - konštrukcia Vstup : BKG G a celé číslo k Výstup : Ħ = {Ð / Ð = Vk( γ), γ je aktívny prefix gramatiky G }

  22. Súbor množín prípustných LR(k) položiek pre G – konštrukcia Na začiatku je Ħ prázdne • Vlož Vk( e) do Ħ . Množina Vk( e) je na začiatku neoznačená • Ak množina položiek Ð súboru Ħ je neoznačená, označ ju a vypočítaj GOTO (Ð, X) pre každé X ( N U T ). Ak je GOTO (Ð, X) neprázdna a nie je ešte v Ħ, pridáme ju do Ħ ako neoznačenú množinu položiek Opakuj krok 2 dovtedy, kým nebudú všetky položky označené

  23. Kanonický súbor množín položiek LR(k) • Ak G je BKG, potom súbor množín prípustných LR(k) položiek pre rozšírenú gramatiku pre G nazývame kanonický súbor množín LR(k) položiek pre gramatiku G

  24. Neprotirečivosť množín položiek LR(k) Nech G je BKG a k celé číslo. Potom množinu Ð LR(k) položiek pre G nazývame neprotirečivou, ak neobsahuje dve rôzne položky [A -> β. u ] , [B -> β1 . β 2 , v], kde u EFFk(β 2v)

  25. LR(k) tabuľka Nech G je BKG a Ħ je súbor množín LR(k) položiek pre G. Potom LR(k) tabuľkou T(Ð) zodpovedajúcou množine položiek Ð z Ħ nazveme dvojicu funkcií (f, g), kde f je funkcia akcií a g je funkcia prechodov definovaných takto:

  26. LR(k) tabuľka – Cont. • f :T*k -> {presun, prijatie, chyba} U { redukcia i, i je číslo pravidla z P, pričom • f(u) = presun, ak [A -> β1 . β 2 , v] Ð,β 2  ekde u EFFk(β 2v) • f(u) = redukcia i, [A -> β. u ] Ð , A -> βP s číslom i. • f(u) = prijatie, ak [S’ -> S. , e] Ð • f(u) = chyba, v ostatných prípadoch

  27. LR(k) tabuľka – Cont. 2. g : N U T -> J U {Chyba} Hodnotou g(X) je tabuľka zodpovedajúca množine GOTO(Ð, X). Ak GOTO(Ð, X) je prázdna množina, potom g(X) = chyba

  28. Kanonický súbor LR (k) tabuliek Kanonickým súborom LR (k) tabuliek pre LR (k) gramatiku G nazývame dvojicu (τ, T0), kde τ je množina LR (k) tabuliek zodpovedajúca kanonickému súboru množín LR(k) položiek pre G a T0 je LR(k) tabuľka zodpovedajúca množine Vk( e)

  29. Jednoduchá LR(k) gramatika – SLR(k) Nech G je BKG, Ħ0je kanonická množina LR(0) položiek pre G a Ð je množina položiek v Ħ0, [A ->α . β , e] , [B -> γ . δ , e] sú dve rôzne položky v Ð. Potom G nazývame jednoduchou LR(k), ak platí: • Ani β, ani δ nie sú prázdne reťazce • β e, δ= e a FOLLOWk(B) ∩ EFFk(β FOLLOWk(A) ) = φ • β=e, δe a FOLLOWk(A) ∩ EFFk(δ FOLLOWk(B) ) = φ • β= e, δ= e a FOLLOWk(A) ∩ FOLLOWk(B) = φ

  30. Príklad G pre jednoduchý AV • E’ -> E • E -> E + T • E -> T • T -> T * F • T -> F • F -> (E) • F -> a

  31. Kanonická množina LR (0) • Keďže ide o LR (0) – druhú časť položiek vynecháme Ð0 : E’ -> . E E -> . E + T E -> . T T -> . T * F T -> . F F -> . (E) F -> . a Vypočítame GOTO (Ð0, X) pre X = E, T, F, (, a

  32. GOTO (Ð, X) je taká množina Ð’, že Ð’= Vk( γX) . Alebo rozpísaním Vk(X1X2 ... Xi ) = GOTO (Vk(X1X2 ... Xi-1 ) , Xi) Výpočet GOTO (Ð0, X) Ð0 : E’ -> . E E -> . E + T E -> . T T -> . T * F T -> . F F -> . (E) F -> . a GOTO (Ð0, E) = Ð1 Ð1 : E’ -> E. E -> E. + T GOTO (Ð0,T) = Ð2 Ð2 : E -> T. T -> T. * F GOTO (Ð0, F) = Ð3 Ð3 :T -> F. GOTO (Ð0, a) = Ð4 Ð4 : F -> a.

  33. GOTO (Ð0, X) Cont. GOTO (Ð0, () = Ð5 Ð5:F -> (. E) – neterminál je za „.“, preto pridáme položky E -> . E + T E -> . T T -> . T * F T -> . F F -> . (E) F -> . a

  34. Výpočet GOTO (Ði, X).Cont. GOTO (Ð1, +) = Ð6Ð1 : E’ -> E. E -> E. + T Ð6 : E -> E +. T– za bodkou je netrminál, pridáme príslušné položky pre T T -> . T * F T -> . F F -> . (E) F -> . a GOTO (Ð2,*) = Ð7Ð2: E -> T. T -> T. * F Ð7 : T -> T *. F F -> . (E) F -> . a

  35. Výpočet GOTO (Ði, X).Cont. Teraz môžeme pridávať z Ð5 GOTO (Ð5, E) = Ð8Ð5:F -> (. E) E -> . E + T E -> . T T -> . T * F T -> . F F -> . (E) F -> . a Ð8 : F -> (E.) E -> E. + T GOTO (Ð5, T) už také položky máme vÐ7 teda = Ð7 GOTO (Ð5, F) už také položky máme vÐ3 teda = Ð3 GOTO (Ð5, () už také položky máme vÐ5 teda = Ð5 GOTO (Ð5, a) už také položky máme vÐ4 teda = Ð4

  36. Výpočet GOTO (Ði, X).Cont. GOTO (Ð6, T) = Ð9 Ð6 : E -> E +. T T -> . T * F T -> . F F -> . (E) F -> . a Ð9: E -> E + T. T -> T.* F GOTO (Ð7, F) = Ð10 Ð7 : T -> T *. F F -> . (E) F -> . a Ð10 : T -> T *F.

  37. Výpočet GOTO (Ði, X).Cont. GOTO (Ð8, )) = Ð11 Ð8 : F -> (E.) E -> E. + T Ð11 : F -> (E).

  38. Konštrukcia množiny LR(k) pre SLR(k) gramatiku Vstup: SLR(k) gramatika G a Ħ0, kanonická množina LR(0) položiek pre G. Výstup: Množina SLR(k) tabuliek pre G Nech Ð je množina LR(0) položiek v Ħ0. Potom LR(k) tabuľka priradená Ð je dvojica, konštruovaná takto:

  39. Konštrukcia množiny LR(k) pre SLR(k) gramatiku Cont. 1.Pre všetky u  T*k • f(u) = presun – ak [A -> β1 . β 2 , e] Ð,β 2  e, u EFFk(β 2 FOLLOWk(A)) • f(u) = redukcia i, [A -> β. e] Ð , A -> βP s číslomi,e  FOLLOWk(A) • f(u) = chyba, v ostatných prípadoch 2.Pre všetky X( N U T ), g(X) je tabuľka konštruovaná pomocou funkcie GOTO (Ð, X) T0 je začiatočná tabuľka priradená množine položiek obsahujúcej položku [S’ -> .S, e]

  40. Príklad G pre jednoduchý AV • E’ -> E • E -> E + T • E -> T • T -> T * F • T -> F • F -> (E) • F -> a

  41. Funkcia prechodov g Vypočítame GOTO (Ð0 , X) pre X = E, T, F, (, a • GOTO (Ð0 , E) = Ð1 GOTO (Ð0 ,T) = Ð2 • GOTO (Ð0 , F) = Ð3 GOTO (Ð0 , a) = Ð4 • GOTO (Ð0 , () = Ð5 GOTO (Ð1 , +) = Ð6 • GOTO (Ð2 ,*) = Ð7 GOTO (Ð5 , E) = Ð8 • GOTO (Ð5 , T) = Ð7 GOTO (Ð5 , F) = Ð3 • GOTO (Ð5 , () = Ð5 GOTO (Ð6 , T) = Ð9 • GOTO (Ð7 , F) = Ð10 GOTO (Ð8 , )) = Ð11

  42. Funkcia prechodov g – tabuľka

  43. Množina SLR(1) tabuliek T0 = (f0, g0) je začiatočná tabuľka. Je priradená množine položiek obsahujúcej položku [S’ -> .S, e]. Zodpovedá Ð0 Pretože k = 1 berieme do úvahy T*1 t.j. {a, +, *, (, ), e} Ð0 : E’ -> . E E -> . E + T E -> . T T -> . T * F T -> . F F -> . (E) F -> . a

  44. Ð1 : E’ -> E. E -> E. + T Ð2 : E -> T. T -> T. * F Potrebujeme FOLLOW pre E . Dostaneme + , ) Analogicky možno pokračovaťďalej. Dostaneme nasledujúcu množinu SLR(1) tabuliek, v ktorej • P – presun • i – redukcia i • A – prijatie • Prazdne poličko – chyba

  45. Množina SLR(1) tabuliek

  46. OK

More Related