Sunteți pe pagina 1din 23

Curs 8

Analiz sintactic
LR(k)

S.Motogna - LFTC
Termeni
Predicie vezi LL(1)
Mana = simboluri din vrful stivei de lucru care formeaz (n ordine) pdp

Analizor de tip deplasare - reducere:


deplaseaz simboluri pentru a forma mana
cnd s-a format partea dreapt a unei producii - reduce la partea stng
corespunztoare

S.Motogna - LFTC
LR(k)
L = left - secvena este procesat de la stnga la dreapta
R = right - folosirea derivrilor de dreapta
k = lungimea prediciei

Gramatic mbogit

G = (N, ,P,S)
G =(N {S},,P {S S},S), S N S nu apare n partea dreapt
a nici unei producii

S.Motogna - LFTC
Definiie: Dac ntr-o gramatic G = (N, , P, S) avem
*
S => Aw w, unde (N ) ,A N,w , atunci
dr dr
orice prefix al secvenei se numete prefix viabil n G.
Definiie: Elementul de analiz LR(k) se definete ca fiind [A
.,u], unde A e o producie a gramaticii, u k i descrie
stadiul n care, avnd n vedere producia A , a fost detectat (
e n vrful stivei) i se ateapt s fie detectat .
Definiie: Elementul de analiz LR(k) este valid pentru prefixul viabil
dac:
*
Sdr Aw dr w
u = FIRSTk(w)

S.Motogna - LFTC

S.Motogna - LFTC
[A .,u] - s-a detectat pdp - se poate face reducere
stare
[A .,u] - deplasare
decide

Stiva de lucru:
aciunea
$sinitX1s1 . . . Xmsm

unde: $ - marcaj stiv vid


Xi N
si - stri
S.Motogna - LFTC
Principiul LR(k)
starea curent
simbolul curent
predicia
Determin n mod unic:
aciunea care se aplic
tranziia n alt stare

=> Tabel LR(k) 2 pri: parte de aciune + parte de goto


S.Motogna - LFTC
Stri
Ce conine o stare? Cte stri sunt? Cum se trecere dintr-o
stare n alt stare
Elemente de analiz goto
nchidere - closure

S.Motogna - LFTC
[A .B,u] valabil pentru prefixul viabil =>

B P =>

=> [B .,u] valabil pentru prefixul viabil

S.Motogna - LFTC
Analiz sintactic LR(k):
LR(0), SLR, LR(1), LALR
definirea elementului de analiz
construirea mulimii de stri
construirea tabelului de analiz
Analiza secvenei de baza tranziiilor ntre configuraii

S.Motogna - LFTC
Analizor sintactic LR(0)
Predicie de lungime 0 (se ignor predicia)

1. Element de analiz LR(0): [A .]

S.Motogna - LFTC
2. Construirea mulimii de stri
Ce conine o stare closure_LR0
Cum se trece dintr-o stare n alt stare goto_LR0
Construirea mulimii de stri ColCan_LR0

Colecie canonic

S.Motogna - LFTC
Algoritm Closure

S.Motogna - LFTC
Funcia goto
goto : P(0) (N ) P(0)
unde 0 = mulimea de elemente LR(0)

goto(s, X) = closure({[A X.]|[A .X] s})

S.Motogna - LFTC
Algoritm ColCan_LR(0)

S.Motogna - LFTC
3. Construirea tabelului de analiz
cte o linie pentru fiecare stare

2 pri:
De aciune: o coloan(pentru o anumit stare aciunea este unic deoarece
nu se ine cont de predicie)
De goto: cte o coloan pentru fiecare simbol al gramaticii X N

S.Motogna - LFTC
Reguli tabel LR(0)
1. dac [A .] si atunci aciune(si)=shift
2. dac [A .] si i A S atunci aciune(si)=reduce l, unde l -
numrul produciei A
3. dac [S S.] si atunci aciune(si)=acc
4. dac goto(si, X) = sj atunci goto(si, X) = sj
5. toate celelalte valori = eroare

S.Motogna - LFTC
Observaii
1) starea iniial a analizorului = starea care conine [S .S]
2) Din starea de acceptare nu exist deplasare: dac s e stare de
acceptare,
goto(s, X) = , X N .
3) Dac ntr-o anumit stare s aciunea este de reducere, atunci
goto(s, X) = , X N .
4) Argument G: fie G = ({S},{a,b,c},{S aSbS,S c},S)
strile [S aSbS.] i [S c.] acceptare / reducere ?

S.Motogna - LFTC
Observaii (cont)
5) O gramatic nu este de tip LR(0) dac tabelul de analiz conine
conflicte:
conflict deplasare - reducere: cnd o stare include elemente de
analiz de forma [A .] i [B .], ceea ce ar implica dou
aciuni diferite pentru aceast stare

conflict reducere - reducere: cnd o stare include elemente de


analiz de forma [A .] i [B .], n care aciunea este de
reducere, dar se creeaz conflict relativ la producia cu care se face
reducerea

S.Motogna - LFTC
4. Analiza secvenei de baza tranziiilor ntre configuraii
INPUT:
Gramatica limbajului G = (NU{S}, , P U {S->S},S)
Tabel de analiz LR(0)
Secvena de analizat w =a1an
OUTPUT:
Dac (w L(G)) atunci ir de producii
altfel locaia erorii

S.Motogna - LFTC
Configuraii LR(0)
Configuraia iniial:
($s0,w$,)
(, , )
Unde:
= stiva de lucru
= stiva de intrare
= banda de ieire (rezultat) Configuraia final:
($sacc, $, )

S.Motogna - LFTC
Tranziii
1. Deplasare
dac actiune(sm)= shift AND head()=ai AND goto(sm,ai)=Sj atunci
($s0x1 ...xmsm,ai ...an$, ) ($s0x1 ...xmsmaisj,ai+1 ...an$, )
2. Reducere
dac actiune(sm) = reduce t AND (t) A xmp+1 ...xm AND goto(smp,A) = sj atunci
($s0 ...xmsm,ai ...an$, ) ($s0 ...xmpsmpAsj,ai ...an$,t )
3. Acceptare
dac actiune(sm) = accept atunci ($si,$, )=acc
3. Eroare - altfel

S.Motogna - LFTC
Algoritm de analiz sintactic LR(0)
AICI

S.Motogna - LFTC