Curs 5
2017-18
Curs 5
Exemplu
Fie a + (b ∗ a)
Derivare extrem stângă:
E ⇒ E+E ⇒ a+E ⇒ a+(E) ⇒ a+(E∗E) ⇒ a+(b∗E) ⇒ 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.
Exemplu
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)
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.
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.
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.
E →E +T
E →T
T →T ∗F
T →F
F → (E)
F → a|b
Curs 5
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 ;
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
α = α1 X1 α2 X2 . . . αn Xn αn+1 , Xi ∈ Nǫ
Exemplu
S ′ → S|ǫ
S → aAbC|aAb|B|C
A → aA|aB|a
B → bB|b|C
C → cC|c
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
Curs 5
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.
Demonstraţie
Demonstraţie
Demonstraţie
Exemplu
Curs 5
inductiv pentru j = 1, . . . , n
w ∈ L(G) ⇔ S ∈ V1n
Pentru j = 1:
Vi1 = {A|A ⇒+ ai } = {A|∃A → ai ∈ P}
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 }
Notaţie:
Atunci:
pentru 2 ≤ j ≤ n, 1 ≤ i ≤ n + 1 − j :
[
j−1
Vij = (Vik ◦ Vi+k j−k )
k =1
Exemplu
Exemplu