You are on page 1of 4

1 2

Construirea tabelelor de analiz sintactic


n varianta SLR
O gramatic pentru care se pot construi tabele de ASLR prin tehnica SLR se
numete gramatic SLR.
Se numete element LR(0) al unei gramatici G (sau, pe scurt, element), o
producie a acelei gramatici n care s-a plasat un punct ntr-o anumit poziie a
prii drepte. De exemplu, produciei AXYZ i se pot ataa urmtoarele patru
elemente.
A.XYZ AX.YZ AXY.Z AXYZ.
Produciei A i corespunde un singur element: A.
Elementele pot fi reprezentate printr-o pereche de numere ntregi
corespunztoare numrului produciei i respectiv poziiei punctului. Elementele se
utilizeaz n procesul de analiz sintactic pentru a arta ct s-a vzut, la un
moment dat, dintr-o anumit producie. De exemplu, A.XYZ arat c se ateapt
ca n intrare s existe un ir derivat din XYZ iar AX.YZ arat c tocmai s-a vzut
n intrare un ir derivabil din X i se ateapt, n continuare, un ir derivabil din YZ.
Metoda SLR de construire a tabelei de analiz se bazeaz pe construirea
prealabil, din gramatica dat, a unui AFD care s recunoasc prefixele viabile.
Strile acestui AFD sunt mulimi de elemente. Elementele individuale pot fi
considerate ca strile AFN ce recunoate, de asemenea, prefixele viabile iar
gruparea elementelor n mulimi, care trebuie efectuat aici, este similar construirii
submulimilor de la transformarea AFN n AFD.
La baza construirii tabelelor de analiz prin metoda SLR st o colecie de
mulimi de elemente LR(0) numit colecia LR(0) canonic. Aceasta se obine cu
ajutorul a dou funcii, numite nchidere i salt aplicate asupra gramaticii
augmentate, corespunztoare gramaticii iniiale.
Dac G este o gramatic avnd simbolul de start S, atunci gramatica sa
augmentat G const din gramatica G, completat cu un nou simbol de start S i
cu producia SS. Scopul introducerii acestei producii suplimentare este de a
permite oprirea analizei sintactice i anunarea acceptrii irului de intrare, atunci
cnd se efectueaz reducerea cu producia SS.

Operaia de nchidere

Dac I este o mulime de elemente pentru o gramatic G, atunci nchidere (I)
este, de asemenea, o mulime de elemente, construit din I prin urmtoarele dou
reguli:
1) Iniial, toate elementele din I se introduc n nchidere (I).
2) Dac A.B este un element din nchidere (I) i B este o producie
a gramaticii G, atunci se adaug la nchidere (I) elementul B. (dac nu
este deja prezent). Aceast regul se aplic n mod repetat pn nu se mai
adaug elemente noi la nchidere (I).
Intuitiv, prezena elementului A.B n nchidere (I) arat c, la un
moment dat n procesul de analiz ne ateptm s vedem n continuare, n intrare,
un subir derivabil din B. Dac n plus, B este o producie a gramaticii,
nseamn c s-ar putea s vedem mai nti, n acest moment, un subir derivabil din
, motiv pentru care se va include n nchidere (I) i elementul B.
.
Exemplu: Se consider gramatica augmentat pentru expresii:
EE
EE+TT
TTFF
F(E)id
i se ia I={[E.E]}
nchidere (I)={[E.E], [E.E+T], [E.T], [T.TF], [T.F],
[F.(E)], [F.id]}
Cele dou reguli de construire a funciei nchidere (I) pot fi cuprinse n urmtorul
algoritm:
function nchidere (I);
begin
J:=I;
repeat
for fiecare element [A.B] din J i fiecare producie B din G
astfel nct [B.]J do
adaug [B.] la J
until nu se mai pot aduga elemente noi la J;
return J
end;
3 4



n vederea implementrii funciei nchidere se recomand crearea unui tablou
cu elemente logice numit adugat, indexat de neterminalele gramaticii G, astfel
nct adugat [B] primete valoarea true atunci cnd se adaug elementele B.
pentru acel neterminal B.
Din modul de calcul al funciei nchidere rezult c dac se adaug o
producie B cu punct la extremitatea stng, atunci vor fi adugate toate produciile
pentru B. n concluzie, nu este necesar ca elementele de forma B. s se rein n
totalitate n nchidere (I), fiind suficient o list de neterminale B ale cror
producii trebuie adugate n acest mod. Rezult c elementele dintr-o mulime pot
fi mprite n dou clase astfel:
1) Elemente nucleu: care includ elementul iniial S.S i toate
elementele ale cror puncte nu sunt la extremitatea stng.
2) Elemente nenucleu: cele care au punctul la extremitatea stng.
Mulimile de elemente care apar n procesul de calcul prin metoda SLR se
obin ntotdeauna prin nchiderea unei mulimi de elemente nucleu iar elementele
care se adaug prin nchidere sunt elemente nenucleu. n concluzie, mulimile de
elemente care intereseaz n aceast metod pot fi reprezentate n memorie doar
prin elemente nucleu, cele nenucleu urmnd s fie regenerate ori de cte ori ar fi
necesar.
Operaia salt
Argumentele funciei salt (I,X) au urmtoarea semnificaie:
I o mulime de elemente LR(0);
X un simbol al gramaticii G(neterminal sau terminal).
Rezultatul funciei salt (I,X) este reprezentat de nchiderea mulimii tuturor
elementelor [AX.] pentru care [A.X] este n I. Intuitiv, aceasta nseamn
c, dac I este mulimea de elemente valide pentru un anumit prefix viabil , atunci
salt (I,X) este mulimea de elemente valide pentru prefixul viabil X.
Exemplu: I={[EE.], [EE.+T]}
salt (I,+)={[EE+.T], [T.TF], [T.F], [F.(E)], [F.id]}
Procedeul de calcul este urmtorul: se caut n mulimea I acele elemente
care au punctul n stnga simbolului +. Din aceste elemente se obin elemente noi
mutnd punctul n dreapta simbolului +, dup care se determin nchiderea acestei
din urm mulimi.
Construirea coleciei LR(0) canonice
Algoritmul pentru construirea coleciei LR(0) canonice, notat cu C, este urmtorul:
procedure colecie (G);
begin
C :={nchidere ({[S.S]})};
repeat
for fiecare mulime de elemente I din C i fiecare simbol
gramatical X astfel nct salt (I,X) nu e vid i
nu e prezent n C do
adaug salt (I,X) la C
until nu se mai pot aduga la C mulimi noi de elemente
end;
Exemplu: Se consider gramatica pentru expresii din exemplele anterioare.
Colecia canonic de mulimi de elemente LR(0) este urmtoarea:

I
0
=nchidere({ {{ {[E .E]} }} }) I
1
=salt(I
0
,E) I
4
=salt(I
0
,( (( ( )
E.E EE. F(.E)
element nucleu
E.E+T EE.+T E.E+T
E.T

E.T
T.TF
I
2
=salt(I
0
,T)
T.TF
T.F ET. T.F
F.(E) TT.F F.(E)
F.id

F.id
elemente
nenucleu
I
3
=salt(I
0
,F)
I
5
=salt(I
0
,id)
TF.
I
10
=salt(I
7
,F)
Fid.

TTF.

I
8
=salt(I
4
,E)

I
6
=salt(I
1
,+) F(E.) salt(I
7
,( ) I
4

EE+.T EE.+T salt(I
7
,id) I
5

T.TF
T.F salt(I
4
,T) I
2
I
11
=salt(I
8
,))
F.(E) salt(I
4
,F) I
3
F(E).
F.id salt(I
4
,( ) I
4


salt(I
4
,id) I
5
salt(I
8
,+) I
6

I
7
=salt(I
2
, ) salt(I
9
, ) I
7

TT.F I
9
=salt(I
6
,T)
F.(E) EE+T.
F.id TT.F

salt(I
6
,F) I
3

salt(I
6
,( ) I
4

salt(I
6
,id) I
5

5 6

Funcia salt pentru ntreaga colecie canonic se poate reprezenta sub forma
unui AFD ca n fig. Dac I
0
este stare iniial i orice stare a AFD este considerat
stare final, atunci automatul recunoate exact prefixele viabile ale gramaticii G.
Explicaia acestui fapt este urmtoarea: se consider un AFN ale crui stri sunt
chiar elementele individuale, nzestrat cu tranziii de la [A.X] la [AX.]
etichetate cu X i cu tranziii de la [A.B] la [B.] etichetate cu . nchidere
(I) este exact funcia -nchidere aplicat mulimii de stri corespunztoare a AFN
n procedeul de transformare a AFN n AFD echivalent. n concluzie, salt (I,X) va
furniza tranziia de ieire din starea I pentru simbolul X n AFD construit din AFN
prin aplicarea algoritmului de conversie bazat pe construirea de submulimi. n
acest context, procedura colecie (G) corespunde exact construirii funciei de
tranziie pentru AFD rezultat i echivalent cu AFN iniial, definit ca mai sus.





























Se spune c elementul A
1
.
2
este valid pentru un prefix viabil
1
dac
exist o derivare S Aw
1

2
w. n general, un element va fi valid pentru mai
multe prefixe viabile. Faptul c A
1
.
2
este valid pentru
1
indic dac trebuie
fcut deplasare sau reducere n situaia n care n stiv apare prefixul viabil
1
, i
anume:

a) dac
2
captul nu este complet deplasat n stiv deplasare
b) dac
2
= A
1
ar trebui s fie capt reducere

Dac exist dou sau mai multe elemente valide pentru acelai prefix viabil,
examinarea lor ar putea s ne duc la concluzii diferite privind operaia (deplasare
sau reducere) ce trebuie efectuat. Aceste situaii sunt conflicte de analiz
sintactic. Unele dintre aceste conflicte se pot rezolva lund n considerare
urmtorul simbol de intrare iar altele aplicnd metode de analiz mai puternice.
Pentru fiecare prefix viabil care poate aprea n stiva unui ASLR se poate
calcula mulimea de elemente valide corespunztoare. O teorem important a
teoriei ASLR, care se poate i demonstra, arat c mulimea de elemente valide
pentru un prefix viabil este chiar mulimea de elemente la care se ajunge din
starea iniial, pe un drum etichetat n AFD construit din colecia canonic de
mulimi de elemente cu tranziiile date de funcia salt. n esen, mulimea de
elemente valide cuprinde toat informaia util care poate fi culeas din stiv.


Exemplu: Se consider din nou gramatica pentru expresii, ale crei mulimi
de elemente i funcie salt au fost deja calculate. Pentru aceast gramatic, irul
E+T este un prefix viabil. Dup citirea elementelor irului, AFD ajunge din
starea I
0
n starea I
7
. Starea I
7
conine elementele TT.F F.(E) F.id
care sunt toate elementele valide pentru prefixul E+T, aa cum rezult din
urmtoarele trei derivri dreapta:

EE E+T E+TF E+Tid E+TFid
EE E+T E+TF E+T(E)
EE E+T E+TF E+Tid

Prima derivare confirm validitatea lui TT.F, cea de a doua confirm
validitatea elementului F.(E) iar a treia, validitatea lui F.id pentru prefixul
viabil E+T. Se poate i arta c pentru acest prefix viabil nu exist alte elemente
valide.

d
F
I
0
I
1
la I
7
I
6
I
9

E + T

I
5

I
4
I
8
I
11

( E )
I
3

I
2

la I
5

la I
4

I
7
I
10

T

F
(
id
(
id
F
+
la I
3

la I
4

la I
5

T
F
la I
2

la I
3

id
id
la I
6

(
7 8




Algoritmul de construire a tabelei de analiz

Din AFD care recunoate prefixele viabile se pot construi cele dou pri,
aciune i salt, ale tabelei de analiz sintactic prin metoda SLR. Algoritmul
prezentat n continuare se poate aplica unei clase destul de larg de gramatici. Sunt
ns i situaii n care el eueaz: produce tabele cu intrri multiplu definite.


Se pornete de la gramatica G, pentru care se obine gramatica augmentat
G. Din G se construiete colecia LR(0) canonic, notat C. Din colecia C, pe
baza algoritmului urmtor, se construiesc tabelele aciune i salt:

1. Se construiete colecia de mulimi de elemente
LR(0) pentru G : C={I
0
, I
1
, ..., I
n
}
2. Din mulimea I
i
, a coleciei se construiete starea i a analizorului
sintactic. Aciunile de analiz pentru starea i se determin astfel:
a) Dac [A.a] I
i
i salt(I
i
,a)=I
j
atunci aciune [i,a] se pune pe
valoare depl. j (prescurtat d
j
); aterminal.
b) Dac [A.] I
i
atunci aciune [i,a] ia valoarea reduce cu A
(prescurtat r
k
), unde aURM(A); AS.
c) Dac [SS.] I
i
atunci aciune [i,$]=accept.
Dac prin regulile de mai sus se genereaz aciuni n conflict (intrri multiplu
definite ale tabelei aciune) se spune c gramatica nu este SLR(1) iar algoritmul nu
poate construi tabela de analiz sintactic.
3. Tranziiile salt pentru starea i se vor construi pentru toate neterminalele
A, utiliznd urmtoarea regul:
Dac salt(I
i
,A)= I
j
atunci salt [i,A]=j
(funcia) (tabela)
4. Toate intrrile (elementele din tabele) nedefinite prin regulile 2) i 3) se
consider intrri de eroare.
5. Starea iniial a analizorului sintactic este construit din mulimea de
elemente care conine elementul [S.S].







Exemplu: Construirea tabelei SLR pentru gramatica
expresiilor din exemplele anterioare.

Colecia canonic de mulimi de elemente LR(0) a fost determinat
anterior. Mai nti considerm mulimea de elemente I
0
: E.E
E.E+T
E.T
T.TF
T.F
F.(E)
F.id
Elementul F.(E) d natere intrrii aciune [0,(]=d
4
(regula 2) iar
elementul F.id conduce la aciune aciune [0,id]=d
5
(regula 2). Celelalte
elemente din I
0
nu produc aciuni.
Considerm apoi I
1
: EE.
EE.+T
Primul element produce aciune [1,$]=accept (regula 2.c), prezentat
mai sus) iar al doilea determin aciune [1,+]=d
6
.
n continuare se consider I
2
: ET.
TT.F
Deoarece URM(E)={$,+ ++ +,)}, din primul element
aciune [2,$]=aciune [2,+]=aciune [2,)]=reduce ET.
Din al doilea element aciune [2,]= d
7
.
Continund n acest mod se vor obine tabelele aciune i salt.

Observaie: Orice gramatic SLR(1) este neambigu. Exist ns
multe gramatici neambigue care nu sunt SLR(1).