Sunteți pe pagina 1din 33

Limbaje Formale, Automate şi Compilatoare

Curs 5

2017-18

LFAC (2017-18) Curs 5 1 / 27


Curs 5

1 Gramatici şi limbaje independente de context

2 Eliminarea regulilor de ştergere şi a redenumirilor

3 Forma normală Chomsky

4 Problema recunoaşterii: algoritmul Cocke Younger Kasami

LFAC (2017-18) Curs 5 2 / 27


Gramatici şi limbaje independente de context

Curs 5

1 Gramatici şi limbaje independente de context

2 Eliminarea regulilor de ştergere şi a redenumirilor

3 Forma normală Chomsky

4 Problema recunoaşterii: algoritmul Cocke Younger Kasami

LFAC (2017-18) Curs 5 3 / 27


Gramatici şi limbaje independente de context

Gramatici independente de context

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


N şi T sunt mulţimi nevide, finite, disjuncte de neterminali
(variabile), respectiv terminali
S ∈ N este simbolul de start
P = {x → u|x ∈ N, u ∈ (N ∪ T )∗ } este mulţimea regulilor
(producţiilor).

Un limbaj L este de tip 2 (independent de context: L ∈ L2 ) dacă


există o gramatică G de tip 2 astfel ı̂ncât L(G) = L

LFAC (2017-18) Curs 5 4 / 27


Gramatici şi limbaje independente de context

Derivări extrem stângi/drepte

Fie G = (N, T , S, P) si w ∈ L(G)

derivare extrem stângă pentru w: derivarea ı̂n care, la orice pas


se ı̂nlocuieşte cel mai din stânga neterminal din cuvântul obţinut

derivare extrem dreaptă pentru w: derivarea ı̂n care, la orice pas


se ı̂nlocuieşte cel mai din dreapta neterminal din cuvântul obţinut

LFAC (2017-18) Curs 5 5 / 27


Gramatici şi limbaje independente de context

Exemplu

G = ({E}, {a, b, +, ∗), (}, E, P) unde:


P : E → E + E|E ∗ E|(E)|a|b

Fie a + (b ∗ a)
Derivare extrem stângă:
E ⇒ E+E ⇒ a+E ⇒ a+(E) ⇒ a+(E∗E) ⇒ a+(b∗E) ⇒ a+(b∗a)

Derivare extrem dreaptă:


E ⇒ E + E ⇒ E + (E) ⇒ E + (E ∗ E) ⇒ E + (E ∗ a) ⇒
E + (b ∗ a) ⇒ a + (b ∗ a)

Există derivări care nu sunt nici extrem drepte nici extrem stângi!
LFAC (2017-18) Curs 5 6 / 27
Gramatici şi limbaje independente de context

Arbori sintactici

Definiţie 1
Un arbore sintactic (arbore de derivare, arbore de parsare) ı̂n
gramatica G este un arbore ordonat, etichetat, cu următoarele
proprietăţi:
rădăcina arborelui este etichetată cu S ;
fiecare frunză este etichetată cu un simbol din T sau cu ǫ ;
fiecare nod interior este etichetat cu un neterminal;
dacă A etichetează un nod interior care are n succesori etichetaţi
de la stânga la dreapta respectiv cu X1 , X2 ,..., Xn , atunci
A → X1 X2 . . . Xn este o regulă.
Cazul ı̂n care regula este A → ǫ reprezintă un caz special: nodul
etichetat cu A are un singur descendent etichetat cu ǫ.
LFAC (2017-18) Curs 5 7 / 27
Gramatici şi limbaje independente de context

Arbori sintactici

Definiţie 2
Frontiera unui arbore de derivare este cuvântul w = a1 a2 . . . an
unde ai , 1 ≤ i ≤ n sunt etichetele nodurilor frunză ı̂n ordinea de la
stânga la dreapta.

Arbore de derivare pentru un cuvânt w: arbore de derivare cu


frontiera w.

LFAC (2017-18) Curs 5 8 / 27


Gramatici şi limbaje independente de context

Exemplu

G = ({E}, {a, b, +, ∗), (}, E, P) unde: Arbore de derivare pentru


P : E → E + E|E ∗ E|(E)|a|b a + (b ∗ a):

a + (b ∗ a)
Derivare extrem stângă:
E ⇒ E + E ⇒ a + E ⇒ a + (E) ⇒
a + (E ∗ E) ⇒ a + (b ∗ E) ⇒ a + (b ∗ a)
Derivare extrem dreaptă:
E ⇒ E + E ⇒ E + (E) ⇒ E + (E ∗ E) ⇒
E + (E ∗ a) ⇒ E + (b ∗ a) ⇒ a + (b ∗ a)

LFAC (2017-18) Curs 5 9 / 27


Gramatici şi limbaje independente de context

Ambiguitate

Definiţie 3
O gramatică G este ambiguă dacă există un cuvânt w ı̂n L(G) care are
2 arbori de derivare distincţi.

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

LFAC (2017-18) Curs 5 10 / 27


Gramatici şi limbaje independente de context

Ambiguitate

Definiţie 3
O gramatică G este ambiguă dacă există un cuvânt w ı̂n L(G) care are
2 arbori de derivare distincţi.

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


Gramatica precedentă este ambiguă: cuvântul a + b ∗ a are 2 arbori de
derivare:

LFAC (2017-18) Curs 5 10 / 27


Gramatici şi limbaje independente de context

Ambiguitate

Definiţie 3
O gramatică G este ambiguă dacă există un cuvânt w ı̂n L(G) care are
2 arbori de derivare distincţi.

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

Problema ambiguităţii gramaticilor de tip 2 este nedecidabilă: nu


există un algoritm care pentru o gramatică oarecare G să testeze
dacă G este sau nu ambiguă

LFAC (2017-18) Curs 5 10 / 27


Gramatici şi limbaje independente de context

Exemplu: o gramatică echivalentă neambiguă

Arbore de derivare pentru


a + b ∗ a:

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

E →E +T
E →T
T →T ∗F
T →F
F → (E)
F → a|b

LFAC (2017-18) Curs 5 11 / 27


Eliminarea regulilor de ştergere şi a redenumirilor

Curs 5

1 Gramatici şi limbaje independente de context

2 Eliminarea regulilor de ştergere şi a redenumirilor

3 Forma normală Chomsky

4 Problema recunoaşterii: algoritmul Cocke Younger Kasami

LFAC (2017-18) Curs 5 12 / 27


Eliminarea regulilor de ştergere şi a redenumirilor

Eliminarea regulilor de ştergere

Intrare: G = (N, T , S, P)
Ieşire: G′ = (N, T , S, P ′ ), L(G′ ) = L(G), P ′ nu conţine reguli de ştergere
(reguli de forma A → ǫ)

N0 = {A|A ∈ N, A → ǫ ∈ P}; i = 0;
do {
i = i + 1;

Ni = Ni−1 ∪ {X |X ∈ N, ∃X → α ∈ P, α ∈ Ni−1 };
} while Ni 6= Ni−1 ;
Nǫ = Ni ;

LFAC (2017-18) Curs 5 13 / 27


Eliminarea regulilor de ştergere şi a redenumirilor

Eliminarea regulilor de ştergere

Intrare: G = (N, T , S, P)
Ieşire: G′ = (N, T , S, P ′ ), L(G′ ) = L(G), P ′ nu conţine reguli de ştergere
(reguli de forma A → ǫ)

N0 = {A|A ∈ N, A → ǫ ∈ P}; i = 0;
do {
i = i + 1;

Ni = Ni−1 ∪ {X |X ∈ N, ∃X → α ∈ P, α ∈ Ni−1 };
} while Ni 6= Ni−1 ;
Nǫ = Ni ;

Are loc:
N0 ⊆ N1 . . . ⊆ Ni ⊆ Ni+1 ⊆ . . . Nǫ ⊆ N
A ∈ Nǫ ⇐⇒ A⇒+ ǫ
LFAC (2017-18) Curs 5 13 / 27
Eliminarea regulilor de ştergere şi a redenumirilor

Eliminarea regulilor de ştergere

P ′ se obţine din P astfel:


ı̂n fiecare regulă A → α ∈ P se pun ı̂n evidenţă simbolurile din Nǫ
ce apar ı̂n α:

α = α1 X1 α2 X2 . . . αn Xn αn+1 , Xi ∈ Nǫ

se ı̂nlocuieşte fiecare regulă de acest fel cu mulţimea de reguli de


forma

A → α1 Y1 α2 Y2 . . . αn Yn αn+1 unde Yi = Xi sau Yi = ǫ

ı̂n toate modurile posibile (2n )


se elimină toate regulile de ştergere
pentru a obţine cuvântul nul (dacă S este ı̂n Nǫ ) se adaugă S ′
simbol de start nou şi regulile S ′ → S, S ′ → ǫ
LFAC (2017-18) Curs 5 14 / 27
Eliminarea regulilor de ştergere şi a redenumirilor

Exemplu

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


S → aAbC|BC
A → aA|aB
B → bB|C
C → cC|ǫ
G = ({S ′ , S, A, B, C}, {a, b, c}, S ′ , P ′ ) unde P ′ :

S ′ → S|ǫ
S → aAbC|aAb|B|C
A → aA|aB|a
B → bB|b|C
C → cC|c

LFAC (2017-18) Curs 5 15 / 27


Eliminarea regulilor de ştergere şi a redenumirilor

Eliminarea redenumirilor (A → B, A, B ∈ N)

Intrare: G = (N, T , S, P)
Ieşire: G′ = (N, T , S, P ′ ), L(G′ ) = L(G), P ′ nu conţine redenumiri

for(A ∈ N){
N0 = {A}; i = 0;
do{
i = i + 1;
Ni = Ni−1 ∪ {C|C ∈ N, ∃B → C ∈ P, B ∈ Ni−1 };
} while Ni 6= Ni−1 ;
NA = Ni ; //NA = {X ∈ N|A ⇒∗ X }
}
P ′ = {X → α ∈ P|α 6∈ N}
for(X → α1 |α2 | . . . |αn ∈ P ′ )
for(A ∈ N && X ∈ NA , X 6= A)
P ′ = P ′ ∪ {A → α1 |α2 | . . . |αn }
LFAC (2017-18) Curs 5 16 / 27
Eliminarea regulilor de ştergere şi a redenumirilor

Exemplu

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


x → y|ax|a
y → z|by|b
z → cz|c
Nx = {x, y, z}, Ny = {y, z}, Nz = {z}

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


unde P ′ :
x → ax|a|by|b|cz|c
y → by|b|cz|c
z → cz|c

LFAC (2017-18) Curs 5 17 / 27


Forma normală Chomsky

Curs 5

1 Gramatici şi limbaje independente de context

2 Eliminarea regulilor de ştergere şi a redenumirilor

3 Forma normală Chomsky

4 Problema recunoaşterii: algoritmul Cocke Younger Kasami

LFAC (2017-18) Curs 5 18 / 27


Forma normală Chomsky

Forma normală Chomsky

Definiţie 4
O gramatică este ı̂n formă normală Chomsky dacă regulile sale au
forma:
A → BC, A → a ( şi eventual S → ǫ) (A, B, C ∈ N şi a ∈ T ).

Teorema 1
Orice limbaj independent de context poate fi generat de o gramatică ı̂n
formă normală Chomsky.

LFAC (2017-18) Curs 5 19 / 27


Forma normală Chomsky

Demonstraţie

Se elimină regulile de ştergere şi redenumirile

LFAC (2017-18) Curs 5 20 / 27


Forma normală Chomsky

Demonstraţie

Se elimină regulile de ştergere şi redenumirile


Se elemină regulile care nu sunt ı̂n formă normală Chomsky:
Dacă A → x1 x2 . . . xn , n > 1 este o astfel de regulă atunci o
ı̂nlocuim cu A → Y1 Y2 . . . Yn unde:
Yi = xi , dacă xi ∈ N (neterminalii rămân la fel)
Yi = xa dacă xi = a ∈ T (xa este neterminal nou) şi se adaugă
regula xa → a

LFAC (2017-18) Curs 5 20 / 27


Forma normală Chomsky

Demonstraţie

Se elimină regulile de ştergere şi redenumirile


Se elemină regulile care nu sunt ı̂n formă normală Chomsky:
Dacă A → x1 x2 . . . xn , n > 1 este o astfel de regulă atunci o
ı̂nlocuim cu A → Y1 Y2 . . . Yn unde:
Yi = xi , dacă xi ∈ N (neterminalii rămân la fel)
Yi = xa dacă xi = a ∈ T (xa este neterminal nou) şi se adaugă
regula xa → a
O regulă de forma A → Y1 Y2 . . . Yn , dacă n > 2, o ı̂nlocuim cu:
A → Y1 Z1
Z1 → Y2 Z2
......
Zn−3 → Yn−2 Zn−2
Zn−2 → Yn−1 Yn ,
unde Z1 , Z2 , . . . , Zn−2 sunt neterminali noi.
LFAC (2017-18) Curs 5 20 / 27
Forma normală Chomsky

Exemplu

G = ({S, A}, {a, b, c}, S, P), unde P:


S → aSb|cAc
A → cA|c
Gramatica echivalentă ı̂n formă normală Chomsky
G = ({S, A, xa , xb , Z1 , Z2 }, {a, b, c}, S, P ′ ), unde P ′ :
S → xa Z1 |xc Z2
Z1 → Sxb
Z2 → Axc
A → xc A|c
xa → a
xb → b
xc → c
LFAC (2017-18) Curs 5 21 / 27
Problema recunoaşterii: algoritmul Cocke Younger Kasami

Curs 5

1 Gramatici şi limbaje independente de context

2 Eliminarea regulilor de ştergere şi a redenumirilor

3 Forma normală Chomsky

4 Problema recunoaşterii: algoritmul Cocke Younger Kasami

LFAC (2017-18) Curs 5 22 / 27


Problema recunoaşterii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami (CYK)

Problema recunoaşterii ı̂n gramatici ı̂n formă normală Chomsky se


poate rezolva cu algoritmul CYK ı̂n timp O(n3 ).

Dacă w = a1 a2 . . . an atunci se constuiesc mulţimile

Vij = {A|A ⇒+ ai ai+1 . . . ai+j−1 }

inductiv pentru j = 1, . . . , n

w ∈ L(G) ⇔ S ∈ V1n

LFAC (2017-18) Curs 5 23 / 27


Problema recunoaşterii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami

Pentru j = 1:
Vi1 = {A|A ⇒+ ai } = {A|∃A → ai ∈ P}

Pentru j > 1, Vij :


Dacă A ⇒+ ai ai+1 . . . ai+j−1 :
A ⇒ BC ⇒+ ai ai+1 . . . ai+j−1 şi
B ⇒+ ai ai+1 . . . ai+k−1 (B ∈ Vik )
C ⇒+ ai+k ai+k+1 . . . ai+j−1 (C ∈ Vi+k j−k )

unde 1 ≤ i ≤ n + 1 − j, 1 ≤ k ≤ j − 1
Sj−1
Vij = k=1 {A|A → BC ∈ P, B ∈ Vik , C ∈ Vi+k j−k }

LFAC (2017-18) Curs 5 24 / 27


Problema recunoaşterii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami

Notaţie:

{A|A → BC ∈ P, B ∈ Vik , C ∈ Vi+k j−k } = Vik ◦ Vi+k j−k

Atunci:
pentru 2 ≤ j ≤ n, 1 ≤ i ≤ n + 1 − j :

[
j−1
Vij = (Vik ◦ Vi+k j−k )
k =1

LFAC (2017-18) Curs 5 25 / 27


Problema recunoaşterii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami

Intrare: G = (N, T , S, P) ı̂n formă normală Chomsky, w = a1 a2 . . . an


Ieşire: w ∈ L(G)?

for(i=1; i<=n; i++)


Vi1 = {A|∃A → ai ∈ P};
for(j=2; j<=n; j++)
for (i=1; i<=n+1-j; i++){
Vij = ∅;
for(k=1; k<=j-1; k++)
Vij = Vij ∪ (Vik ◦ Vi+k j−k );
}
if(S ∈ V1n ) w ∈ L(G) else w 6∈ L(G)

LFAC (2017-18) Curs 5 26 / 27


Problema recunoaşterii: algoritmul Cocke Younger Kasami

Exemplu

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


S → XY
X → XY |a
Y → YZ |a|b
Z →c
w = abc

LFAC (2017-18) Curs 5 27 / 27


Problema recunoaşterii: algoritmul Cocke Younger Kasami

Exemplu

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


S → XY
X → XY |a
Y → YZ |a|b
Z →c
w = abc
V11 = {X , Y } V12 = {S, X } V13 = {S, X }
V21 = {Y } V22 = {Y }
V31 = {Z }
S ∈ V13 ⇔ abc ∈ L(G)

LFAC (2017-18) Curs 5 27 / 27

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