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).