Sunteți pe pagina 1din 5

  168

Definiție
Un alfabet G=(V, ∑,P,S) este LR(0) doar dacă sunt îndeplinite condițiile:

(a) G nu conține niciun simbol inutil.


(b) Simbolul de început S nu apare în partea dreaptă a niciunui produs.

(c) Pentru toate prefixele viabile ϒ, dacă A -> α . Este un obiect complet pentru ϒ, atunci niciun obiect
complet sau orie alt obiect cu un terminal aflat la dreapta lui . nu este valid pentru ϒ.

Cum parsăm folosind Knuth DFA? Un convertor LR(0) este un determinist PDA care generează derivare
dreapta. O stivă a DPDA ține un prefix viabil a formei de enunț α, incluzând toate variabilele ale acestuia.
De fapt , stiva conține acest prefix viabil împreună cu stadiul Knuth DFA intercalat între simbourile prefixului
viabil. Ce rămâne din acest alfa apare ca input neașteptat.
Inițial, convertorul LR(0) este într-o configurație (q,w,q0) unde q0 înseamnă stadiul inițial al Knuth DFA
corespunzător pentru gramatică. (Descrierea noastră folosește doar un stadiu q, dar permite PDA să
introducă simboluri multiple într-un singur par. Orice implementare făcută de un PDA standard ar necesita
stadiuri adiționale pentru a se ocupa de aceste inserări.)
La fiecare pas, convertorul are 2 alegeri:
(i) De a muta simbolul din input în stivă, schimbând stadiul Knuth DFA

(ii) De a reduce sau de a insera 2 | α | din stivă, unde A -> α . Este un obiect bomplet
deasupra stivei, apoi punându-l pe A și stadiul Knuth DFA înapoi în capul stivei. Din acest
motiv, convertorii LR se mai numesc uneori și convertori shift-reduce.

Mai formal, un convertor LR(0) se comportă în felul următor: o configurație tipică înainte de mutare
arată așa:
(q,atat+1...an, qkXkqk-1Xk-1...q1X1q0),

unde x=a1...an este data de intrare, X1...X katat+1...an este forma de enunț dreaptă și qj=δ(q j-
1,Xj),1<=j<=k, unde δ este transiția funcției Knuth DFA. Dacă q k conține un obiect complet al formei

A -> α . , atunci α=X i+1…Xk pentru i>=0 și noua configurație este:


(q,atat+1...an,q’AqiXiqi-1...q1X1q0),

unde q’=δ(qi,A). Altfel, noua configurație este :


(q,at+1...an,q’atqkXkqk-1Xk-1...q1X1q0),

Unde q’=δ(qk,at).

Acceptăm faptul că există un obiect complet S -> α . în vârful stivei prin golirea acesteia.
169
Vom demonstra că metoda de parsare LR(0)  funcționează.  Primul pas constă în demnstrația ur
mătoarei teoreme. 
 
Teoremă 

G este un LR(0),  x ∈ L(G), și α  ≠ S să fie


⇒ α*⇒ x de o derivare de dreapta.
o formă ce apare ca derivare a lui x, presupunând că S *

Apoi există o formă de enunț unică β ca S⇒ β*⇒ α*⇒ x.

Demonstrația

Să presupunem că forma dreaptă a enunțului este α=X1X2…Xky ,y ∈ ∑*, și o derivare dreaptă este
S *⇒  X1X2…XjAy ⇒ α= X1X2…Xky * ⇒ x, folosing produsul A -> Xj+1… Xk.
Presupunând că există o altă posibilă formă de enunț înainte de α și considerând capătul drept al
operației în α. Există 3 posibilități:
(i) Operația se termină în dreptul lui Xk;
(ii) Operația se termină la Xk
(iii) Operația se termină la Xt pentru care t < k.

Considerând s=δ(q0, X1X2…Xk) în Knuth DFA pentru G. Apoi s conține un obiect complet, ma iexact A ->

Xj+1… Xk . .Dar după regulile LR(0), asta înseamnă că s nu mai conține alt obiect complet(excludem
cazul 2) și nici obiecte cu un terminal în vecinătatea dreptului punctului(excludem primul caz).

În final, avem de exclus și cazul 3. Pentru a face asta, să considermă că este o derivare de
dreapta :
X1X2…XrBXt+1…XKY ⇒ X1X2…Xky

Folosing un produs B -> Xr+1 … Xt. Din moment ce derivarea este de dreapta, atunci fiecare Xt+1,
…,Xk este un terminal.

Acum obiectul complet B -> Xr+1… Xt . este valid pentru un prefix viabil X1…Xt, dar din moment ce
X1,X2…Xk este de asemenea un prefix viabil, trebuie să existe un alt obiect valid pentru X1…X2…Xk.
Și prin (5,13) acest obbiect trebuie să conțină un terminal la dreapta punctului sau să fie complet.
Dar asta ar încălca regulile LR(0) , fiind o contradicție.

Completare

Dacă G este LR(0), atunci este ambiguu.

Demonstrație
Pentru fiecare formă dreaptă de enunț în derivarea lui w ∈  L(G), atunci există doar o formă de enunț
dreaptă anterioară. Acum vom demonstra că algoritmul LR(0) funcționează.

170

Teorema 5.5.6

M este DPDA specificat anterior, bazat pe gramatica LR(0) G. Apoi L(G)=Le(M), Le însemnând că
acceptăm golind stiva.

Demonstrație

Prima dată demonstrăm că Le(M) ⊆ L(G).

Presupunând că x ∈ Le(M). Vom demonstra că x ∈ L(G) producând o derivare dreaptă a lui x.

Definim αi , forma de enunț dreaptă reprezentată de configurația DPDA M la pasul I, fiind șirul
de caractere X1,X2,Xky dacă DPDA la pasul i are configurația
(q,y,skXksk-1…s1X1s0)

Vom demonstra următoarele două afirmații prin inducție pe i. Fie α-1 = α0.

1. δ(q0,X1X2...Xj)=sj pentru toate j, 0<=j<=k, unde δ este tranziția funcției asociate Knuth DFA.
2. Sau αi ⇒ rm αi-1 sau αi= αi-1

Pentru i=0, ambele afirmații de mai sus sunt adevărate. Prima este adevărată din moment ce
configurația inițială a DPDA este q,x,q0) și δ(q0,ϵ)=q0.
Cea de-a doua este adevărată din moment ce α0= α-1 =x.
Acum să presupunem că cele două afirmații sunt adevărate pentru pașii <i ; le vom demonstra
pentru i.
Să presupunem că avem o configurație DPDA înainte de pasul i care este (q,y,skXksk-1…s1X1s0) .La
pasul I DPDA fie va reduce fie va muta.

(A) Mișcarea de reducere: Dacă DPDA face o mișcare de reducere, atunci știm că sk conține un

. .Prin inducție s =δ(q0,X1,X2…Xk).Din moment ce δ este tranziția funcției


obiect complet A -> ϒ k

pentru automatonul Knuth, știm că A -> ϒ. este valid pentru prefixul viabil X1,X2…Xk. Cu alte
cuvinte, există o derivare dreaptă

S *⇒βAz ⇒βϒz,
Unde βϒ = X1,X2…Xk.
ϒ este un sufix X1,X2,…Xk și de aceea, atunci când vor apărea 2|ϒ| simboluri din stivă, vom
rămâne cu
sjXjsj-1…s1X1s0
pentru j, cu X1….Xj=β,Xj+1…Xk=ϒ. Apoi dăm mai departe A și δ(sj,A) menținânt invarianta 1.
Pe de altă parte, invarianta (2) este păstrată deoarece avem
Αi=X1X2…XjAy ⇒ X1X2…Xjϒy=X1X2…Xky=αi-1.
(B) Mișcarea de mutare: Dacă DPDA face o mișcare de mutare, atunci invarianta(1) este trivial
păstrată și invarianta (2) este păstrată pentru că α i = αi-1.

 171

În final, din moment ce x ϵ Le(M), știm că DPDA va goli eventual stiva și va accepta introducerea
de date. Asta se va întâmpla doar dacă este prezentă configurația(q, ϵ,s kXk-1…s1X1s0) și sk conține un
obiect complet de forma S -> ϒ●. În acest caz, prin afirmația anterioară, derivarea dreaptă este

S* ⇒ βSz ⇒βϒz,
cu X1X2…Xk= βϒ. Totuși, din moment ce S nu apare în partea dreaptă a oricărui produs, trebuie să
existe S= βSz, așa că β=ϵ și z= ϵ. De aici rezultă X1X2…Xk=ϒ. Acum definim α n+1=S. Apoi avem αi* ⇒ αi-1
pentru 1<=i<=n+1. Din moment ce α0=x, asta îi oferă lui x o derivare în G.

Acum vom arăta că L(G) ⊆ Le(M) . Fie x ϵ L(G). La fel cum am văzut în teorema 5.5.4, există doar
o derivare dreaptă S* ⇒x. Să presupunem că derivarea este de mărimea n și
S= αn⇒ αn-1⇒... α0=x

Vrem să argumentăm faptul că M, căruia dacă îi este dat x, își va trage stiva și se va opri.Pentru a face
asta, trebuie să creăm o măsură de “progress” îndreptată către acceptarea calculului.

Să presupunem că C=(q,y, skXksk-1... s1X1s0) este o configurație a lui M pe data de intrare x. Dacă

X1X2…Xky= αi, atunci definim dificultatea lui C să fie n -1 + |y|. Apoi putem argument că fiecare mișcare
a DPDA este corectă și se reduce dificultatea configurației sale.

Dacă M reduce, atunci trebuie să existe un obiect complet în capul stivei. Conform teoremei
5.5.4, există doar un mod de a prelucra în X1… Xky și trebuie să fie Xj+1… Xk cu produsul corespunzător

A-> Xj+1 … Xk. Mașina acum face o mișcare de reducere și dificultatea corespunzătoare se reduce cu 1.

Dacă M mută, atunci nu există nici un obiect complet în capul stivei. Acum vom argumenta că
mutarea este pasul corect care trebuie făcut. Să presupunem că a existat un obiect complet A -> ϒ în
interiorul stivei, fiind acoperit. Atunci acest obiect ar fi fost adăugat la un moment dat. Considerăm
următorul pas. Din moment ce obiectul complet este deasupra, am fi făcut o mișcare de reducere,
adăugând 2 simboluri|ϒ| din stivă., deci dacă ϒ ≠ ϵ, atunc acest obiect ar fi ieșit din stivă și nu ar mai fi
putut fi acoperit. Dacă ϒ = ϵ, atunci A și δ(sk,A) sunt puse deasupra A -> ● în stivă. Dacă, într-un viitor
pas, X1X2…Xk nu a ajuns deasupra stivei, atunci va exista o variabilă deasupra X 1X2…Xk. Dar atunci ϵ(via
A=> ϵ) nu poate prelucra nicio formă de enunț dreaptă X1X2…Xkϵβ , unde β conține o variabilă, deoarece

atunci X1X2…XkAβ ⇒ X1X2…Xkβ nu ar mai fi o derivare dreaptă. Așadar , cel care prelucrează trebuie să
includă unele simboluri din datele de intrare, și pasul corect este mișcarea de mutare. Asta reduce
dificultatea configurației cu 1.

Eventual, dificultatea configurației devine 0. Din acest punct, i=n și y=ϵ, și DPDA își scoate stiva.

Deci x ϵ Le(M).

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