0% au considerat acest document util (0 voturi)
19 vizualizări23 pagini

Lfac 8

Documentul prezintă noțiuni de bază despre analiza sintactică ascendentă și gramatici LR(k). Sunt definite parserul ascendent general, configurațiile și tranzițiile acestuia, precum și conflictele care pot apărea. De asemenea, sunt prezentate caracterizările gramaticilor LR(0) și proprietățile analizei sintactice LR.

Încărcat de

Ionel Popescu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
19 vizualizări23 pagini

Lfac 8

Documentul prezintă noțiuni de bază despre analiza sintactică ascendentă și gramatici LR(k). Sunt definite parserul ascendent general, configurațiile și tranzițiile acestuia, precum și conflictele care pot apărea. De asemenea, sunt prezentate caracterizările gramaticilor LR(0) și proprietățile analizei sintactice LR.

Încărcat de

Ionel Popescu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Cursul 8

Analiza sintactic ascendent


Parser (Analizor de sintax) ascendent
general
Gramatici LR(k)
Definiie
Proprieti
Gramatici LR(0)
Teorema de caracterizare LR(0)
Automatul LR(0)

lfac Gh Grigoras 1
Parser (Analizor de sintax) ascendent
general
Intrare

a1 ai an #

Stiva

TABELA
ym CONTROL DE
PARSARE

ym-1

.
.

p1 p2

y0
Ieire

Gh. Grigoras 2
Configuraii

O configuraie ( #, u#, ) este interpretat n


felul urmtor:
# este coninutul stivei cu simbolul # la baza ei, iar
ultimul simbol din # este topul stivei.
u# este coninutul benzii de intrare, unde #
marcheaz sfritul cuvntului de analizat.
este coninutul benzii de ieire
C0 = {(#, w#, )|w T*} mulimea configuraiilor
iniiale.

Gh. Grigoras 3
Tranziii
Parserul ascendent ataat gramaticii G este
perechea (C0, ) unde C0 este mulimea
configuraiilor iniiale, iar este o relaie de tranziie
pe C definit prin:
(#, au#, ) (#a, u#, ) (tranziie de tip deplasare)
pentru orice *, a T, u T*, P*.
(#, u#, ) (#A, u#, r) dac r = A (tranziie
de tip reducere).
Configuraia (#S, #, ) unde , se numete
configuraie de acceptare.
Orice configuraie, diferit de cea de acceptare, care
nu este n relaia cu nici o alt configuraie,
spunem c este o configuraie eroare.
Parserele de acest fel se numesc parsere de
deplasare/reducere.

Gh. Grigoras 4
Exemplu
Fie gramatica S aSb| . Tranziiile sunt:
(#, u#, ) (#S, u#, 2), unde 2 este regula S
(#aSb, u#, ) (#S, u#, 1), unde 1 este regula S
aSb
(#, au#, ) (#a, u#, )
(#, bu#, ) (#b, u#, )
unde *, u T*, P*.
O succesiune de tranziii o vom numi calcul
Iat nite calcule pentru exemplul de mai sus:
(#, #, ) (#S, #, 2)
(#, aabb#, ) (#a, abb#, ) (#aa, bb, ) (#aaS, bb, #,
2)
(#aaSb, b#, 2) (#aS, b#, 21) (#aSb, #, 21) (#S, #,
211)
n cel de-al doilea calcul am fcut alegeri nedeterministe
ntre a aplica o tranziie de tip deplasare sau una de tip
reducere. De pild, are loc:
(#aa, bb#, ) (#aaS, bb#, 2) (reducere) dar i
(#aa, bb#, ) (#aab, b#, ) (deplasare)
Gh. Grigoras 5
Conflicte
Parserul descris funcioneaz nedeterminist din dou
motive:
Pentru orice configuraie de forma (#, au#, ) cu A P
exist cel puin dou configuraii urmtoare (relativ la relaia ) :
(#, au#, ) (#A, au#, r) ( reducere cu r = A
)
(#, au#, ) (#a, u#, ) (deplasare)
Este posibil ca pentru o configuraie de forma (#, u#, ) s
avem = 11 = 22 astfel ca A 1 P, B 2 P, nct au
loc:
(#11, u#, ) (#A, u#, r1) ( reducere cu r1 = A 1) i
(#22, u#, ) (#B, u#, r2) ( reducere cu r2 = A 2).

n primul caz spunem c avem de-a face cu un conflict


de deplasare/reducere, iar n cel de-al doilea caz avem
de-a face cu un conflict de6 reducere/reducere.
Gh. Grigoras
Corectitudine
Spunem c un cuvnt w T* este acceptat de
un parser ascendent dac exist mcar un
calcul de forma
(#, w#, ) + (#S, #, )
Pentru ca parserul descris n definiia 1 s fie
corect, trebuie ca el s accepte toate cuvintele
din L(G) i numai pe acestea.

Teorema Parserul ascendent general ataat unei


gramatici G este corect: pentru orice w T*, w
L(G) dac i numai dac n parser are loc
calculul (#, w#, ) + (#S, #, ).

Gh. Grigoras 7
Analiza sintactic LR
Gramatici LR(k): Left to right scanning of the
input, constructing a Rightmost derivation in
reverse, using k symbols lookahead
Definiie O gramatic G se numete gramatic
LR(k), k 0, dac pentru orice dou derivri de
forma:
S S dr* Au dr u = u

S S dr* Au dr u = v = v
pentru care k:u = k:v,
are loc: = , A = A, = .
Gh. Grigoras 8
Analiza sintactic LR
Teorema 1 Dac G este gramatic LR(k), k 0,
atunci G este neambigu.

Teorema 2 Orice gramatic LL(k) este gramatic


LR(k).

OBS. Exist gramatici LR(0) care nu sunt LL(k).


SA|B
A aAb | c
B aBbb | d
L(G) = {ancbn | n 0 } {andb2n | n 0 }. Pentru un
cuvnt care ncepe cu (cel puin) k simboluri a, nu
putem decide n manier LL(k) dac el aparine sau
nu limbajului.
Se constat c gramatica dat este LR(0).
Gh. Grigoras 9
Analiza sintactic LR
Un limbaj L este (n clasa) LR(k) dac exist o
gramatic LR(k) ce-l genereaz
Teorema 3 Orice limbaj LR(k) este limbaj de tip
2 determinist.

Teorema 4 Orice limbaj de tip 2 determinist este


limbaj LR(1).

Teorema 5 Pentru orice limbaj LR(k), k 1,


exist o gramatic LR(1) care genereaz acest
limbaj, adic LR(0) LR(1) = LR(k), k 1.

Gh. Grigoras 10
Gramatici LR(0) - Caracterizare
Definiie Fie G = (V, T, S, P) o gramatic
independent de context redus. S presupunem c
simbolul nu este n . Un articol pentru gramatica
G este o producie A n care s-a adugat
simbolul ntr-o anume poziie din . Notm un
articol prin A dac = . Un articol n care
este pe ultima poziie se numete articol complet.

Definiie Un prefix viabil pentru gramatica G este


orice prefix al unui cuvnt dac S dr* Au dr
u. Dac = 12 i = 1 spunem c articolul
A 12 este valid pentru prefixul viabil .
Gh. Grigoras 11
Exemplu S A, A aAa | bAb | c.
Articole: S A, S A, A aAa, A aAa,
A aAa, A aAa, A bAb, A bAb, A bAb,
A bAb, A c, A c.
Dac, n plus, avem i regula A , atunci singurul articol
corespunztor acesteia este articolul (complet) A .
Exemple de articole valide pentru prefixe viabile:
Prefixul Articole valide
viabil
Derivarea corespunztoare
ab A bAb S A aAa abAba
A aAa S A aAa abAba abaAaba
A bAb S A aAa abAba abbAbba
S A SA
A bAb S A bAb
A c SAc

Gh. Grigoras 12
Lema Fie G o gramatic i A 1B2 un articol
valid pentru prefixul viabil . Atunci, oricare ar fi
producia B , articolul B este valid pentru
.

Teorema ( caracterizare LR(0) ) Gramatica G


este gramatic LR(0) dac i numai dac, oricare
ar fi prefixul viabil , sunt ndeplinite condiiile:
1. nu exist dou articole complete valide pentru .
2. dac articolul A este valid pentru , nu exist
nici un articol B 1a2, a T, valid pentru .

Gh. Grigoras 13
Teorema Fie G = (V, T, S, P) o gramatic independent
de context. Mulimea prefixelor viabile pentru gramatica
G este limbaj regulat.
Demonstraie G este G la care se adaug S S.
M = (Q, , , q0, Q), unde:
Q este mulimea articolelor gramaticii G,
= V T, q0 = S S, : Q ( {}) 2Q
definit astfel:
(A B, ) = {B | B P}.
(A X, X) = { A X}, X .
(A a, ) = , a T.
(A X, Y) = , X,Y cu X Y.
Se arat c are loc:
A ^(q0, ) este prefix viabil i
A este valid pentru .
Gh. Grigoras 14
Exemplu S S, S aSa |bSb | c
S
S S S S

S aSa S c S bSb

a b

c
S aSa S bSb

S S c S

S aSa S bSb

a b

S aSa S bSb

Gh. Grigoras 15
Teorema ( caracterizare LR(0) ) Gramatica G este gramatic
LR(0) dac i numai dac, oricare ar fi prefixul viabil , sunt
ndeplinite condiiile:
1. nu exist dou articole complete valide pentru .
2. dac articolul A este valid pentru , nu exist nici un articol
B 1a2, a T, valid pentru .
Demonstraie
G este LR(0) i, prin reducere la absurd 1 sau 2 nu are loc
1, 2 au loc si prin reducere la absurd, G nu este LR(0): exist
*

S S dr Au

dr
u = u (1)
S S Au u = v
*

dr dr
(2)
i nu are loc: = , A = A, = .

Fr a restrnge generalitatea, presupunem c n (1) i (2)


avem ndeplinit condiia || = || ||.

lfac Gh Grigoras 16
Cazul 1: || ||. Schematic acest lucru arat astfel:

Rezult de aici c = 12, v = 2u, = 1 i 2


T*. Atunci, din (1) rezult c A este articol valid
pentru iar din (2) rezult c articolul A 12 este
valid de asemenea pentru . Asta contrazice 1 dac 2 =
respectiv 2 dac 2 . Aadar, n acest caz,
presupunerea c G nu este LR(0) este fals.

lfac Gh Grigoras 17
Cazul 2: ||>||. Din nou schematic condiia arat astfel:
u

Asta nseamn c = u1, v = u1u T* (|u1| 1). n


derivarea (2), punem n eviden prima form
propoziional care are prefixul ; aceasta exist
deoarece S nu are prefixul , iar u = v are prefixul .
Rezult c exist A1 11 este articol valid pentru
(iar din (1) rezult c A este valid de asemenea
pentru )....

lfac Gh Grigoras 18
Automatul LR(0)
Algoritmul 1 (procedura nchidere(t))
Intrare: Gramatica G = (V, T, S, P);
Mulimea t de articole din gramatica G;
Ieire: t = nchidere( t ) = {q Q | p t, q (p, ) } = (t, )
Metoda:
t = t ; flag = true;
while( flag ) {
flag = false;
for ( A B t ) {
for ( B P )
if ( B t ) {
t = t {B };
flag = true;
}//endif
}//endforB
}//endforA
}//endwhile
return t;

lfac Gh Grigoras 19
Automatul LR(0)
Algoritmul 2 Automatul LR(0)
Intrare: Gramatica G = (N, T, S, P) la care s-a adugat S S;
Ieire: Automatul determinist M = (T, , g, t0, T) echivalent cu M.
Metoda:
t0=nchidere(SS); T={t0}; marcat(t0)=false;
while(tT && !marcat(t)) { // marcat(t) = false
for( X ) { // = N T
t = ;
for( A X t )
t = t {B X | B X t};
if( t ){
t = nchidere( t );
if( t T ) {
T = T { t };
marcat( t ) = false;
}//endif
g(t, X) = t;
}//endif
}//endfor
}//endfor
marcat( t ) = true;
}// endwhile

lfac Gh Grigoras 20
Automatul LR(0)
Exemplu S S, S aSa | bSb | c
S S
S aSa S
S S
S bSb
S c
a
a b
c b

S aSa c S c c S bSb
S aSa S aSa
S bSb S bSb
b
S c S c

S a S

S aSa S bSb

a b

S aSa S bSb

lfac Gh Grigoras 21
Test LR(0)
Definiie Fie G o gramatic i M automatul LR(0) ataat
lui G. Spunem c o stare a lui M are un conflict
reducere/reducere dac ea conine dou articole
complete distincte A , B . Spunem c o stare a
lui M are un conflict deplasare/reducere dac ea
conine un articol complet A i un articol cu
terminal dup punct de forma B a. Spunem c o
stare este consistent dac ea nu conine conflicte i
este inconsistent n caz contrar.
Teorema Fie G o gramatic i M automatul su LR(0).
Gramatica G este LR(0) dac i numai dac automatul
M nu conine stri inconsistente

lfac Gh Grigoras 22
Automatul LR(0)
Exemplu S aAd | bAB A cA | c Bd

S S
S aAd S S S
S bAB

a b

S aAd A cA S bAB
A cA c A c c A cA
A c A cA S c
A c

c
A A
A
S bAB
S aAd A cA B d

d B d

S aAd S bAB B d

lfac Gh Grigoras 23

S-ar putea să vă placă și