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