20.11.2014 Views

Limbaje Formale, Automate şi Compilatoare

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Limbaje</strong> <strong>Formale</strong>, <strong>Automate</strong> <strong>şi</strong> <strong>Compilatoare</strong><br />

Curs 5<br />

2014-15<br />

LFAC (2014-15) Curs 5 1 / 40


Curs 5<br />

1 Gramatici <strong>şi</strong> limbaje independente de context<br />

2 Forma redusă pentru gramatici independente de context<br />

3 Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

4 Forma normală Chomsky<br />

5 Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

6 Eliminarea recursivităţii stângi în gramatici de tip 2<br />

LFAC (2014-15) Curs 5 2 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Curs 5<br />

1 Gramatici <strong>şi</strong> limbaje independente de context<br />

2 Forma redusă pentru gramatici independente de context<br />

3 Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

4 Forma normală Chomsky<br />

5 Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

6 Eliminarea recursivităţii stângi în gramatici de tip 2<br />

LFAC (2014-15) Curs 5 3 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Gramatici independente de context<br />

Gramatici de tip 2 (independente de context): G = (N, T, S, P)<br />

N <strong>şi</strong> T sunt mulţimi nevide, finite, disjuncte de neterminali<br />

(variabile), respectiv terminali<br />

S ∈ N este simbolul de start<br />

P = {x → u|x ∈ N, u ∈ (N ∪ T) ∗ } este mulţimea regulilor<br />

(producţiilor).<br />

Un limbaj L este de tip 2 (independent de context: L ∈ L 2 ) dacă<br />

există o gramatică G de tip 2 astfel încât L(G) = L<br />

LFAC (2014-15) Curs 5 4 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Derivări extrem stângi/drepte<br />

Fie G = (N, T, S, P) si w ∈ L(G)<br />

derivare extrem stângă pentru w: derivarea în care, la orice pas<br />

se înlocuieşte cel mai din stânga neterminal din cuvântul obţinut<br />

derivare extrem dreaptă pentru w: derivarea în care, la orice pas<br />

se înlocuieşte cel mai din dreapta neterminal din cuvântul obţinut<br />

LFAC (2014-15) Curs 5 5 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Exemplu<br />

G = ({E},{a, b,+,∗),(}, E, P) unde:<br />

P : E → E + E|E ∗ E|(E)|a|b<br />

Fie a+(b ∗ a)<br />

Derivare extrem stângă:<br />

E ⇒ E+E ⇒ a+E ⇒ a+(E) ⇒ a+(E∗E) ⇒ a+(b∗E) ⇒ a+(b∗a)<br />

Derivare extrem dreaptă:<br />

E ⇒ E + E ⇒ E +(E) ⇒ E +(E ∗ E) ⇒ E +(E ∗ a) ⇒<br />

E +(b ∗ a) ⇒ a+(b ∗ a)<br />

Există derivări care nu sunt nici extrem drepte nici extrem stângi!<br />

LFAC (2014-15) Curs 5 6 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Arbori sintactici<br />

Definiţie 1<br />

Un arbore sintactic (arbore de derivare, arbore de parsare) în<br />

gramatica G este un arbore ordonat, etichetat, cu următoarele<br />

proprietăţi:<br />

rădăcina arborelui este etichetată cu S ;<br />

fiecare frunză este etichetată cu un simbol din T sau cu ǫ ;<br />

fiecare nod interior este etichetat cu un neterminal;<br />

dacă A etichetează un nod interior care are n succesori etichetaţi<br />

de la stânga la dreapta respectiv cu X 1 , X 2 ,..., X n , atunci<br />

A → X 1 X 2 ...X n este o regulă.<br />

Dacă A are un succesor etichetat cu ǫ, atunci acesta este singurul<br />

său succesor.<br />

LFAC (2014-15) Curs 5 7 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Arbori sintactici<br />

Definiţie 2<br />

Frontiera unui arbore de derivare este cuvântul w = a 1 a 2 ...a n<br />

unde a i , 1 ≤ i ≤ n sunt etichetele nodurilor frunză în ordinea de la<br />

stânga la dreapta.<br />

Arbore de derivare pentru un cuvânt w: arbore de derivare cu<br />

frontiera w.<br />

Un X-arbore de derivare este un subarbore al unui arbore de<br />

derivare care are eticheta rădăcinii X. Un arbore de derivare este<br />

un S-arbore de derivare.<br />

LFAC (2014-15) Curs 5 8 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Arbori sintactici-exemplu<br />

G = ({E},{a, b,+,∗),(}, E, P) unde:<br />

P : E → E + E|E ∗ E|(E)|a|b<br />

Arbore de derivare pentru<br />

a+(b ∗ a):<br />

a+(b ∗ a)<br />

Derivare extrem stângă:<br />

E ⇒ E + E ⇒ a+E ⇒ a+(E) ⇒<br />

a+(E ∗ E) ⇒ a+(b ∗ E) ⇒ a+(b ∗ a)<br />

Derivare extrem dreaptă:<br />

E ⇒ E + E ⇒ E +(E) ⇒ E +(E ∗ E) ⇒<br />

E +(E ∗ a) ⇒ E +(b ∗ a) ⇒ a+(b ∗ a)<br />

LFAC (2014-15) Curs 5 9 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Ambiguitate<br />

Definiţie 3<br />

O gramatică G este ambiguă dacă există un cuvânt w în L(G) care are<br />

2 arbori de derivare distincţi.<br />

Echivalent: w are 2 derivări extrem stângi(drepte) distincte.<br />

LFAC (2014-15) Curs 5 10 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Ambiguitate<br />

Definiţie 3<br />

O gramatică G este ambiguă dacă există un cuvânt w în L(G) care are<br />

2 arbori de derivare distincţi.<br />

Echivalent: w are 2 derivări extrem stângi(drepte) distincte.<br />

Gramatica precedentă este ambiguă: cuvântul a+b∗ a are 2 arbori de<br />

derivare:<br />

LFAC (2014-15) Curs 5 10 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Ambiguitate<br />

Definiţie 3<br />

O gramatică G este ambiguă dacă există un cuvânt w în L(G) care are<br />

2 arbori de derivare distincţi.<br />

Echivalent: w are 2 derivări extrem stângi(drepte) distincte.<br />

Problema ambiguităţii gramaticilor de tip 2 este nedecidabilă: nu<br />

există un algoritm care pentru o gramatică oarecare G să testeze<br />

dacă G este sau nu ambiguă<br />

LFAC (2014-15) Curs 5 10 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Exemplu: o gramatică echivalentă neambiguă<br />

G = ({E, T, F},{a, b,+,∗),(}, E, P) unde P:<br />

Arbore de derivare pentru<br />

a+b ∗ a:<br />

E → E + T<br />

E → T<br />

T → T ∗ F<br />

T → F<br />

F → (E)<br />

F → a|b<br />

LFAC (2014-15) Curs 5 11 / 40


Gramatici <strong>şi</strong> limbaje independente de context<br />

Problema recunoaşterii în gramatici independente de<br />

context<br />

Problema recunoaşterii în gramatici independente de context:<br />

Dată o gramatică G = (N, T, S, P) <strong>şi</strong> un cuvânt w ∈ T ∗ , să se<br />

decidă dacă w ∈ L(G)<br />

Problema parsării (analizei sintactice) este problema recunoaşterii<br />

la care se adaugă: dacă w ∈ L(G), se cere arborele sintactic (o<br />

reprezentare a sa) pentru w.<br />

LFAC (2014-15) Curs 5 12 / 40


Forma redusă pentru gramatici independente de context<br />

Curs 5<br />

1 Gramatici <strong>şi</strong> limbaje independente de context<br />

2 Forma redusă pentru gramatici independente de context<br />

3 Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

4 Forma normală Chomsky<br />

5 Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

6 Eliminarea recursivităţii stângi în gramatici de tip 2<br />

LFAC (2014-15) Curs 5 13 / 40


Forma redusă pentru gramatici independente de context<br />

Simboluri inutile<br />

Un simbol X din N ∪ T este accesibil dacă există o derivare de<br />

forma S ⇒ + αXβ<br />

Un simbol A din N este productiv dacă există o derivare de forma<br />

A ⇒ + w, w ∈ T ∗<br />

Un simbol este inutil dacă este inaccesibil sau neproductiv<br />

LFAC (2014-15) Curs 5 14 / 40


Forma redusă pentru gramatici independente de context<br />

Gramatici în formă redusă<br />

Definiţie 4<br />

O gramatică este în formă redusă, dacă nu conţine simboluri inutile.<br />

Orice limbaj independent de context poate fi generat de o<br />

gramatică în formă redusă.<br />

LFAC (2014-15) Curs 5 15 / 40


Forma redusă pentru gramatici independente de context<br />

Eliminarea simbolurilor inutile<br />

Pentru orice gramatică independentă de context G există o<br />

gramatică G ′ de acela<strong>şi</strong> tip în formă redusă echivalentă cu G.<br />

Pentru eliminarea simbolurilor inutile:<br />

Se determină <strong>şi</strong> apoi se elimină simbolurile neproductive <strong>şi</strong> toate<br />

regulile ce conţin măcar unul dintre acestea.<br />

Se determină apoi se elimină simbolurile inaccesibile <strong>şi</strong> toate<br />

regulile aferente.<br />

LFAC (2014-15) Curs 5 16 / 40


Forma redusă pentru gramatici independente de context<br />

Eliminarea simbolurilor neproductive - algoritm<br />

Intrare: G = (N, T, S, P)<br />

Ie<strong>şi</strong>re: G ′ = (N ′ , T, S, P ′ ), L(G ′ ) = L(G), N ′ conţine doar simboluri productive<br />

N 0 = ∅; i = 0;<br />

do {<br />

i = i + 1;<br />

N i = N i−1 ∪{A|A → α ∈ P,α ∈ (N i−1 ∪ T) ∗ };<br />

} while N i ≠ N i−1 ;<br />

N ′ = N i ;<br />

P ′ = {A → α ∈ P|A ∈ N ′ ,α ∈ (N ′ ∪ T) ∗ };<br />

Un simbol A este productiv ddacă A ∈ N ′<br />

Consecinţă: L(G) ≠ ∅ ddacă S ∈ N ′<br />

LFAC (2014-15) Curs 5 17 / 40


Forma redusă pentru gramatici independente de context<br />

Exemplu<br />

G = ({S, A, B, C},{a, b, c}, S, P), unde P este:<br />

S → a|aA|bC<br />

A → aAB<br />

B → bac<br />

C → aSb<br />

Gramatica G ′ cu toate simbolurile productive:<br />

G ′ = ({S, B, C},{a, b, c}, S, P ′ ), unde P ′ este:<br />

S → a|bC<br />

B → bac<br />

C → aSb<br />

LFAC (2014-15) Curs 5 18 / 40


Forma redusă pentru gramatici independente de context<br />

Eliminarea simbolurilor inaccesibile<br />

Intrare: G = (N, T, S, P)<br />

Ie<strong>şi</strong>re: G ′ = (N ′ , T ′ , S, P ′ ), L(G ′ ) = L(G), N ′ , T ′ conţin doar simboluri accesibile<br />

V 0 = {S}; i = 0;<br />

do {<br />

i = i + 1;<br />

V i = V i−1 ∪{X|X ∈ N ∪ T, ∃A → αXβ ∈ P, A ∈ (V i−1 ∩ N)};<br />

} while V i ≠ V i−1 ;<br />

N ′ = V i ∩ N;<br />

T ′ = V i ∩ T;<br />

P ′ = {A → α ∈ P|A ∈ N ′ ,α ∈ (N ′ ∪ T ′ ) ∗ };<br />

X accesibil ddacă X ∈ V i<br />

LFAC (2014-15) Curs 5 19 / 40


Forma redusă pentru gramatici independente de context<br />

Exemplu<br />

G = ({S, A, B, C},{a, b, c}, S, P), unde P este:<br />

S → a|aA|bC<br />

A → aAB<br />

B → bac<br />

C → aSb<br />

Eliminarea simbolurilor neproductive duce la:<br />

G ′ = ({S, B, C},{a, b, c}, S,{S → a|bC, B → bac, C → aSb})<br />

Eliminarea simbolurilor inaccesibile duce la:<br />

G ′ = ({S, C},{a, b}, S,{S → a|bC, C → aSb})<br />

Ce se întâmplă dacă se aplică algoritmii în ordinea inversă?<br />

LFAC (2014-15) Curs 5 20 / 40


Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

Curs 5<br />

1 Gramatici <strong>şi</strong> limbaje independente de context<br />

2 Forma redusă pentru gramatici independente de context<br />

3 Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

4 Forma normală Chomsky<br />

5 Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

6 Eliminarea recursivităţii stângi în gramatici de tip 2<br />

LFAC (2014-15) Curs 5 21 / 40


Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

Eliminarea regulilor de ştergere<br />

Intrare: G = (N, T, S, P)<br />

Ie<strong>şi</strong>re: G ′ = (N, T, S, P ′ ), L(G ′ ) = L(G), P ′ nu conţine reguli de ştergere<br />

(reguli de forma A → ǫ)<br />

N 0 = {A|A ∈ N, A → ǫ ∈ P}; i = 0;<br />

do {<br />

i = i + 1;<br />

N i = N i−1 ∪{X|X ∈ N, ∃X → α ∈ P,α ∈ N ∗<br />

i−1};<br />

} while N i ≠ N i−1 ;<br />

N ǫ = N i ;<br />

LFAC (2014-15) Curs 5 22 / 40


Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

Eliminarea regulilor de ştergere<br />

Intrare: G = (N, T, S, P)<br />

Ie<strong>şi</strong>re: G ′ = (N, T, S, P ′ ), L(G ′ ) = L(G), P ′ nu conţine reguli de ştergere<br />

(reguli de forma A → ǫ)<br />

N 0 = {A|A ∈ N, A → ǫ ∈ P}; i = 0;<br />

do {<br />

i = i + 1;<br />

N i = N i−1 ∪{X|X ∈ N, ∃X → α ∈ P,α ∈ N ∗<br />

i−1};<br />

} while N i ≠ N i−1 ;<br />

N ǫ = N i ;<br />

Are loc:<br />

N 0 ⊆ N 1 ... ⊆ N i ⊆ N i+1 ⊆ ...N ǫ ⊆ N<br />

A ∈ N ǫ ⇐⇒ A⇒ + ǫ<br />

LFAC (2014-15) Curs 5 22 / 40


Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

Eliminarea regulilor de ştergere<br />

P ′ se obţine din P astfel:<br />

în fiecare regulă A → α ∈ P se pun în evidenţă simbolurile din N ǫ<br />

ce apar în α:<br />

α = α 1 X 1 α 2 X 2 ...α n X n α n+1 , X i ∈ N ǫ<br />

se înlocuieşte fiecare regulă de acest fel cu mulţimea de reguli de<br />

forma<br />

A → α 1 Y 1 α 2 Y 2 ...α n Y n α n+1 unde Y i = X i sau Y i = ǫ<br />

în toate modurile posibile (2 n )<br />

se elimină toate regulile de ştergere<br />

pentru a obţine cuvântul nul (dacă S este în N ǫ ) se adaugă S ′<br />

simbol de start nou <strong>şi</strong> regulile S ′ → S, S ′ → ǫ<br />

LFAC (2014-15) Curs 5 23 / 40


Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

Exemplu<br />

G = ({S, A, B, C},{a, b, c}, S, P), unde P:<br />

S → aAbC|BC<br />

A → aA|aB<br />

B → bB|C<br />

C → cC|ǫ<br />

G ′ = ({S ′ , S, A, B, C},{a, b, c}, S ′ , P ′ ) unde P ′ :<br />

S ′ → S|ǫ<br />

S → aAbC|aAb|B|C<br />

A → aA|aB|a<br />

B → bB|b|C<br />

C → cC|c<br />

LFAC (2014-15) Curs 5 24 / 40


Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

Eliminarea redenumirilor (A → B, A, B ∈ N)<br />

Intrare: G = (N, T, S, P)<br />

Ie<strong>şi</strong>re: G ′ = (N, T, S, P ′ ), L(G ′ ) = L(G), P ′ nu conţine redenumiri<br />

for(A ∈ N){<br />

N 0 = {A}; i = 0;<br />

do{<br />

i = i + 1;<br />

N i = N i−1 ∪{C|C ∈ N, ∃B → C ∈ P, B ∈ N i−1 };<br />

} while N i ≠ N i−1 ;<br />

N A = N i ;//N A = {X ∈ N|A ⇒ + X}<br />

}<br />

P ′ = {X → α ∈ P|α ∉ N}<br />

for(X → α 1 |α 2 |...|α n ∈ P ′ )<br />

for(A ∈ N && X ∈ N A , X ≠ A)<br />

P ′ = P ′ ∪{A → α 1 |α 2 |...|α n}<br />

LFAC (2014-15) Curs 5 25 / 40


Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

Exemplu<br />

G = ({x, y, z},{a, b, c}, x, P), unde P:<br />

x → y|ax|a<br />

y → z|by|b<br />

z → cz|c<br />

N x = {x, y, z}, N y = {y, z}, N z = {z}<br />

Gramatica echivalentă fără redenumiri G ′ = ({x, y, z},{a, b, c}, x, P ′ )<br />

unde P ′ :<br />

x → ax|a|by|b|cz|c<br />

y → by|b|cz|c<br />

z → cz|c<br />

LFAC (2014-15) Curs 5 26 / 40


Forma normală Chomsky<br />

Curs 5<br />

1 Gramatici <strong>şi</strong> limbaje independente de context<br />

2 Forma redusă pentru gramatici independente de context<br />

3 Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

4 Forma normală Chomsky<br />

5 Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

6 Eliminarea recursivităţii stângi în gramatici de tip 2<br />

LFAC (2014-15) Curs 5 27 / 40


Forma normală Chomsky<br />

Forma normală Chomsky<br />

Definiţie 5<br />

O gramatică este în formă normală Chomsky dacă regulile sale au<br />

forma:<br />

A → BC, A → a ( <strong>şi</strong> eventual S → ǫ) (A, B, C ∈ N <strong>şi</strong> a ∈ T ).<br />

Teorema 1<br />

Orice limbaj independent de context poate fi generat de o gramatică în<br />

formă normală Chomsky.<br />

LFAC (2014-15) Curs 5 28 / 40


Forma normală Chomsky<br />

Demonstraţie<br />

Se elimină regulile de ştergere <strong>şi</strong> redenumirile<br />

LFAC (2014-15) Curs 5 29 / 40


Forma normală Chomsky<br />

Demonstraţie<br />

Se elimină regulile de ştergere <strong>şi</strong> redenumirile<br />

Se elemină regulile care nu sunt în formă normală Chomsky:<br />

Dacă A → x 1 x 2 ...x n , n > 1 este o astfel de regulă atunci o<br />

înlocuim cu A → Y 1 Y 2 ...Y n unde:<br />

Y i = x i , dacă x i ∈ N (neterminalii rămân la fel)<br />

Y i = x a dacă x i = a ∈ T (x a este neterminal nou) <strong>şi</strong> se adaugă<br />

regula x a → a<br />

LFAC (2014-15) Curs 5 29 / 40


Forma normală Chomsky<br />

Demonstraţie<br />

Se elimină regulile de ştergere <strong>şi</strong> redenumirile<br />

Se elemină regulile care nu sunt în formă normală Chomsky:<br />

Dacă A → x 1 x 2 ...x n , n > 1 este o astfel de regulă atunci o<br />

înlocuim cu A → Y 1 Y 2 ...Y n unde:<br />

Y i = x i , dacă x i ∈ N (neterminalii rămân la fel)<br />

Y i = x a dacă x i = a ∈ T (x a este neterminal nou) <strong>şi</strong> se adaugă<br />

regula x a → a<br />

O regulă de forma A → Y 1 Y 2 ...Y n , dacă n > 2, o înlocuim cu:<br />

A → Y 1 Z 1<br />

Z 1 → Y 2 Z 2<br />

......<br />

Z n−3 → Y n−2 Z n−2<br />

Z n−2 → Y n−1 Y n ,<br />

unde Z 1 , Z 2 ,...,Z n−2 sunt neterminali noi.<br />

LFAC (2014-15) Curs 5 29 / 40


Forma normală Chomsky<br />

Exemplu<br />

G = ({S, A},{a, b, c}, S, P), unde P:<br />

S → aSb|cAc<br />

A → cA|c<br />

Gramatica echivalentă în formă normală Chomsky<br />

G = ({S, A, x a , x b , Z 1 , Z 2 },{a, b, c}, S, P ′ ), unde P ′ :<br />

S → x a Z 1 |x c Z 2<br />

Z 1 → Sx b<br />

Z 2 → Ax c<br />

A → x c A|c<br />

x a → a<br />

x b → b<br />

x c → c<br />

LFAC (2014-15) Curs 5 30 / 40


Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

Curs 5<br />

1 Gramatici <strong>şi</strong> limbaje independente de context<br />

2 Forma redusă pentru gramatici independente de context<br />

3 Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

4 Forma normală Chomsky<br />

5 Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

6 Eliminarea recursivităţii stângi în gramatici de tip 2<br />

LFAC (2014-15) Curs 5 31 / 40


Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

Algoritmul Cocke Younger Kasami (CYK)<br />

Problema recunoaşterii în gramatici în formă normală Chomsky se<br />

poate rezolva cu algoritmul CYK în timp O(n 3 ).<br />

Dacă w = a 1 a 2 ...a n atunci se constuiesc mulţimile<br />

V ij = {A|A ⇒ + a i a i+1 ...a i+j−1 }<br />

inductiv pentru j = 1,...,n<br />

w ∈ L(G) ⇔ S ∈ V 1n<br />

LFAC (2014-15) Curs 5 32 / 40


Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

Algoritmul Cocke Younger Kasami<br />

Pentru j = 1:<br />

V i1 = {A|A ⇒ + a i } = {A|∃A → a i ∈ P}<br />

Pentru j > 1, V ij :<br />

Dacă A ⇒ + a i a i+1 ...a i+j−1 :<br />

A ⇒ BC ⇒ + a i a i+1 ...a i+j−1 <strong>şi</strong><br />

B ⇒ + a i a i+1 ...a i+k−1 (B ∈ V ik )<br />

C ⇒ + a i+k a i+k+1 ...a i+j−1 (C ∈ V i+k j−k )<br />

unde 1 ≤ i ≤ n+1−j, 1 ≤ k ≤ j − 1<br />

V ij = ⋃ j−1<br />

k=1 {A|A → BC ∈ P, B ∈ V ik, C ∈ V i+k j−k }<br />

LFAC (2014-15) Curs 5 33 / 40


Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

Algoritmul Cocke Younger Kasami<br />

Notaţie:<br />

{A|A → BC ∈ P, B ∈ V ik , C ∈ V i+k j−k } = V ik ◦ V i+k j−k<br />

Atunci:<br />

pentru 2 ≤ j ≤ n, 1 ≤ i ≤ n+1−j :<br />

V ij =<br />

j−1<br />

⋃<br />

(V ik ◦ V i+k j−k )<br />

k=1<br />

LFAC (2014-15) Curs 5 34 / 40


Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

Algoritmul Cocke Younger Kasami<br />

Intrare: G = (N, T, S, P) în formă normală Chomsky, w = a 1 a 2 ...a n<br />

Ie<strong>şi</strong>re: w ∈ L(G)?<br />

for(i=1; i


Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

Exemplu<br />

G = ({S, X, Y, Z},{a, b, c}, S, P), unde P:<br />

S → XY<br />

X → XY|a<br />

Y → YZ|a|b<br />

Z → c<br />

w = abc<br />

LFAC (2014-15) Curs 5 36 / 40


Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

Exemplu<br />

G = ({S, X, Y, Z},{a, b, c}, S, P), unde P:<br />

S → XY<br />

X → XY|a<br />

Y → YZ|a|b<br />

Z → c<br />

w = abc<br />

V 11 = {X, Y} V 12 = {S, X} V 13 = {S, X}<br />

V 21 = {Y} V 22 = {Y}<br />

V 31 = {Z}<br />

S ∈ V 13 ⇔ abc ∈ L(G)<br />

LFAC (2014-15) Curs 5 36 / 40


Eliminarea recursivităţii stângi în gramatici de tip 2<br />

Curs 5<br />

1 Gramatici <strong>şi</strong> limbaje independente de context<br />

2 Forma redusă pentru gramatici independente de context<br />

3 Eliminarea regulilor de ştergere <strong>şi</strong> a redenumirilor<br />

4 Forma normală Chomsky<br />

5 Problema recunoaşterii: algoritmul Cocke Younger Kasami<br />

6 Eliminarea recursivităţii stângi în gramatici de tip 2<br />

LFAC (2014-15) Curs 5 37 / 40


Eliminarea recursivităţii stângi în gramatici de tip 2<br />

Recursivitate stângă<br />

Un neterminal A este recursiv dacă există măcar o derivare<br />

A⇒ + αAβ.<br />

Dacă α = ǫ atunci A se numeşte stâng recursiv,<br />

dacă β = ǫ atunci A se numeşte drept recursiv.<br />

Dacă gramatica G conţine cel puţin un neterminal stâng recursiv,<br />

G este stâng recursivă<br />

Un neterminal A este stâng recursiv imediat dacă există o regulă<br />

A → Aα ∈ P.<br />

LFAC (2014-15) Curs 5 38 / 40


Eliminarea recursivităţii stângi în gramatici de tip 2<br />

Eliminarea recursivitatii stângi imediate<br />

Fie G = (N, T, S, P) în formă redusă<br />

Fie A ∈ N, A stâng recursiv imediat.<br />

Fie A → Aα 1 |Aα 2 ...|Aα k |β 1 |...β n toate regulile care încep cu A<br />

(β 1 ,...,β n nu încep cu A). Fie P A mulţimea acestor reguli.<br />

Gramatica G ′ în care A nu este stâng recursiv imediat:<br />

G ′ = (N ∪{A ′ }, T, S, P ′ )<br />

P ′ = P \ P A ∪{A ′ → α 1 A ′ |...α k A ′ |ǫ, A → β 1 A ′ |...β n A ′ }<br />

LFAC (2014-15) Curs 5 39 / 40


Eliminarea recursivităţii stângi în gramatici de tip 2<br />

Exemplu<br />

G = ({S, A},{a, b, c}, S, P) unde P este:<br />

S → Ac|c<br />

A → Aa|Ab|a|b|Sc<br />

G ′ = (S, A, A ′ , a, b, c, S, P ′ ) unde P ′ este:<br />

S → Ac|c<br />

A → aA ′ |bA ′ |ScA ′<br />

A ′ → aA ′ |bA ′ |ǫ<br />

Observaţie: A, S stâng recursive<br />

LFAC (2014-15) Curs 5 40 / 40

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!