Gramatiky lr k
This presentation is the property of its rightful owner.
Sponsored Links
1 / 50

GRAMATIKY LR(k) PowerPoint PPT Presentation


  • 68 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Gramatiky lr k

GRAMATIKY LR(k)


Vlastnosti

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


Podmienenie determinizmu

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


Podmienenie determinizmu1

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


Gramatika lr k def

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)


Syntaktick anal za lr k g

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


Innos algoritmu konfigur cia

Č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


Innos algoritmu za iato n a koncov konfigur cia

Č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“


Algoritmus sa lr k gramat k

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


Algoritmus sa lr k gramat k cont

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:


Algoritmus sa lr k gramat k cont1

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.


Algoritmus sa lr k gramat k cont2

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.


Lr k tabu ky akt vny prefix

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)


Funkcia eff

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}


Lr k gramatika def

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)


S bor mno n pr pustn ch polo iek

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.


Kon trukcia v k

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:


Kon trukcia v k e

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.


Kon trukcia v k x 1 x 2 x i

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


Funkcia goto

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)


S bor mno n pr pustn ch lr k polo iek pre g kon trukcia

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 }


S bor mno n pr pustn ch lr k polo iek pre g kon trukcia1

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é


Kanonick s bor mno n polo iek lr k

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


Neprotire ivos mno n polo iek lr k

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)


Lr k tabu ka

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:


Lr k tabu ka cont

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


Lr k tabu ka cont1

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


Kanonick s bor lr k tabuliek

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)


Jednoduch lr k gramatika slr k

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) = φ


Pr klad g pre jednoduch av

Príklad G pre jednoduchý AV

  • E’ -> E

  • E -> E + T

  • E -> T

  • T -> T * F

  • T -> F

  • F -> (E)

  • F -> a


Kanonick mno ina lr 0

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


V po et goto 0 x

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.


Goto 0 x cont

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


V po et goto i x cont

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


V po et goto i x cont1

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


V po et goto i x cont2

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.


V po et goto i x cont3

Výpočet GOTO (Ði, X).Cont.

GOTO (Ð8, )) = Ð11

Ð8 : F -> (E.)

E -> E. + T

Ð11 : F -> (E).


Kon trukcia mno iny lr k pre slr k gramatiku

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:


Kon trukcia mno iny lr k pre slr k gramatiku cont

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]


Pr klad

Príklad

G pre jednoduchý AV

  • E’ -> E

  • E -> E + T

  • E -> T

  • T -> T * F

  • T -> F

  • F -> (E)

  • F -> a


Funkcia prechodov g

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) = Ð3GOTO (Ð0 , a) = Ð4

  • GOTO (Ð0 , () = Ð5GOTO (Ð1 , +) = Ð6

  • GOTO (Ð2 ,*) = Ð7GOTO (Ð5 , E) = Ð8

  • GOTO (Ð5 , T) = Ð7GOTO (Ð5 , F) = Ð3

  • GOTO (Ð5 , () = Ð5GOTO (Ð6 , T) = Ð9

  • GOTO (Ð7 , F) = Ð10GOTO (Ð8 , )) = Ð11


Funkcia prechodov g tab u ka

Funkcia prechodov g – tabuľka


Mno ina slr 1 tabuliek

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


Gramatiky lr k

Ð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


Mno ina slr 1 tabuliek1

Množina SLR(1) tabuliek


Gramatiky lr k

OK


  • Login