gramatiky lr k
Download
Skip this Video
Download Presentation
GRAMATIKY LR(k)

Loading in 2 Seconds...

play fullscreen
1 / 50

GRAMATIKY LR(k) - PowerPoint PPT Presentation


  • 112 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'GRAMATIKY LR(k)' - miya


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

slide44
Ð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