Sunteți pe pagina 1din 29

1

Curs 5 - plan
Gramatici i limbaje independente de context
Arbori de derivare, ambiguitate, problema recunoaterii
Eliminarea simbolurilor inutile
Forma redusa pentru gramatici independente de context
Forma normal Chomsky pentru gramatici independente
de context
Algoritmul CYK
Gramatici i limbaje independente de context
G = (N, T, S, P)
N i T sunt mulimi nevide, finite, disjuncte de
neterminali (variabile), respectiv terminali,
E = N T se numete vocabularul gramaticii,
S e V este o variabil special numit simbol de start
P _ N (N T)* este mulimea regulilor
(produciilor).

Limbajul generat de gramatica G (notat L(G)) este
L(G)= {w| w e T*, S
+
w }.

2
Derivri extrem stngi/drepte
Fie G = (N, T, S, P) i w e L(G);
exist o derivare extrem stng pentru w:
derivarea n care, la orice pas se rescrie
(nlocuiete) cel mai din stnga neterminal din
cuvntul obinut

exist o derivare extrem dreapt pentru w:
derivarea n care, la orice pas se rescrie
(nlocuiete) cel mai din dreapta neterminal
din cuvntul obinut

3
Exemplu
G=({E},{a,b,+,*),( },E,P) unde
P: E E+E |E*E|(E) | a|b

Fie a+(b*a)
Derivare extrem stng:
EE+E a+E a+(E) a+(E*E) a+(b*E) a+(b*a)
Derivare extrem dreapt:
EE+E E+(E) E+(E*E) E+(E*a) E+(b*a) a+(b*a)

Exist derivri care nu sunt nici extrem drepte nici extrem stngi!
4
Gramatici i limbaje independente de context
Un arbore sintactic (arbore de derivare, arbore de parsare) n gramatica G
este un arbore ordonat,etichetat, cu urmtoarele proprieti:
rdcina arborelui este etichetat cu S ;
fiecare frunz este etichetat cu un simbol din T sau cu c ;
fiecare nod interior este etichetat cu un neterminal;
dac A eticheteaz un nod interior care are n succesori etichetai de la
stnga la dreapta respectiv cu X
1
, X
2
, , X
n
, atunci A X
1
X
2
X
n
este o
regul. Cazul n care regula este A c reprezint un caz special: nodul
etichetat A are un singur descendent etichetat c.

Frontiera unui arbore de derivare este cuvntul w = a
1
a
2
a
n
unde a
i
, 1 s i
s n sunt etichetele nodurilor frunz n ordinea de la stnga la dreapta.
Un X-arbore de derivare este un subarbore al unui arbore de derivare care
are eticheta rdcinii X. Un arbore de derivare este astfel un S-arbore de
derivare
5
Exemplu
Fie G=(N, T, E, P) unde N = {E} ,
T ={a,b,+,*,(,)} iar P const din
regulile: Ea, Eb, EE+E,
EE*E, E(E)
O derivare extrem stng:
EE+E a+E a+(E) a+(E*E)
a+(b*E) a+(b*a)
O derivare extrem dreapt:
EE+E E+(E) E+(E*E) E+(E*a)
E+(b*a) a+(b*a)






Un arbore de derivare
pentru a+(b*a):

6
E
E + E
a E ( )
E *
E
b
a
Ambiguitate
O gramatic G este ambigu dac exist un cuvnt w n L(G) care are 2 arbori
de derivare distinci.
Echivalent: w are 2 derivri extrem stngi(drepte) distincte.
Gramatica precedenta este ambigu: cuvntul a+b*a are 2 arbori de derivare:







7
E
E + E
a * E E
b a
E
E * E
E
a
E
+
b
a
Exemplu: o gramatic echivalent neambigu
1. E E+T
2. E T
3. T T*F
4. T F
5. F (E)
6. F a
7. F b


w = a+b*a
8
E
E + T
T
F
a
* T F
F
b
a
Problema ambiguitii gramaticilor de tip 2
este nedecidabil: nu exist un algoritm care
pentru o gramatica oarecare G s testeze dac
G este sau nu ambigu

Exist mcar un limbaj de tip 2 inerent
ambiguu: orice gramatic ce genereaz acest
limbaj este ambigu:
{ a
m
b
m
a
n
| m, n 0} { a
m
b
n
a
n
| m, n 0}
9
Gramatici i limbaje independente de context
Problema recunoaterii n gramatici independente
de context:
Dat o gramatic G = (N, T, S, P) i un cuvnt w e T*,
care este rspunsul la ntrebarea w e L(G)?

Problema parsrii (analizei sintactice) este problema
recunoaterii la care se adaug: dac rspunsul la
ntrebarea w e L(G) este afirmativ, se cere arborele
sintactic (o reprezentare a sa) pentru w.



10
Eliminarea simbolurilor inutile
Un simbol X din NT este inaccesibil dac nu exist
nici o derivare de forma S
+
oX|

Un simbol A din N este neproductiv dac nu exist
nici o derivare de forma A
+
w, w eT*

Un simbol este inutil dac este inaccesibil sau
neproductiv

Pentru orice gramatic independent de context G
exist o gramatic G de acelai tip, fr simboluri
inutile, echivalent cu G
11
Eliminarea simbolurilor inutile
Pentru eliminarea simbolurilor inutile:
Se determin i apoi se elimin simbolurile
neproductive i toate regulile ce conin mcar
unul dintre acestea
Se determin apoi se elimin simbolurile
inaccesibile i toate regulile aferente

12
Eliminarea simbolurilor neproductive
Intrare: G = (N, T, S, P)
Ieire: G = (N, T, S, P) L(G) = L(G), N conine doar simboluri productive
Metoda:
N0 = u; i=0;
do
{
i = i+1;
N
i
= N
i-1
{ A| A o e P, o e (N
i-1
T)*}

} while N
i
= N
i-1

N = N
i

P = {A o e P| A e N, o e (NT)*}

Un simbol A este productiv ddac A e N
Consecin: L(G) = u ddac S e N
13
Eliminarea simbolurilor inaccesibile
Intrare: G = (N, T, S, P)
Ieire: G = (N, T, S, P) L(G) = L(G), n G toate simbolurile sunt accesibile
Metoda:
V
0
= {S}; i=0;
do
{
i=i+1;
V
i
= V
i-1
{ X| X e NT, - A oX| e P, A e V
i-1
N }
} while V
i
= V
i-1

N = N V
i

T = T V
i

P = { A o e P | A e N, o e (NT)*}

Se dovedete uor c algoritmul este corect
14
Exemplu
G = ({S, A, B}, {a,b}, S, {S a|aA, A aAB, B ba})

Eliminarea simbolurilor neproductive duce la:
G = ({S, B}, {a,b}, S, {S a, B ba})

Eliminarea simbolurilor inaccesibile duce la:
G = ({S}, {a}, S, {S a})

Ce se intmpl dac se aplic algoritmii n ordinea invers?

15
Gramatici in form redus
O gramatic este n form redus, dac:
nu conine simboluri inutile
nu conine reguli de tergere (cu excepia
eventual a regulii S c)
nu conine redenumiri.
Orice limbaj independent de context poate fi
generat de o gramatic n forma redus.


16
Eliminarea regulilor de tergere
Intrare: G = (N, T, S, P)
Ieire: G = (N, T, S, P) L(G) = L(G) {c}, P nu are reguli de
tergere
N
0
= {A| A e N, A c e P}; i=0;
do
{
i=i+1;
N
i
= N
i-1
{ X| X e N, - X o e P, o e N
i-1
* }
} while N
i
= N
i-1

Fie N = N
i

Are loc: N
0
_ N
1
... _ N
i
_ N
i+1
_ .N _ N
A e N ddac A
+
c


17
Eliminarea regulilor de tergere
P se obine din P astfel:

- n fiecare regul A o e P se pun n eviden
simbolurile din N ce apar n o:
o = o
1
X
1
o
2
X
2...
o
n
X
n
o
n+1
, X
i
e N

- Se nlocuiete fiecare regul de acest fel cu
mulimea de reguli de forma
A o
1
Y
1
o
2
Y
2...
o
n
Y
n
o
n+1
unde Y
i
= X
i
sau Y
i
= c
n toate modurile posibile (2
n
)

- Se elimin toate regulile de tergere

- Pentru a obine cuvntul nul (dac S este n N) se
adaug S S i S c
18
Exemplu
G = ({S, A, B, C}, {a, b, c}, S, P)
unde P:
S aAbC |A
A aA|B
B bB|C
C cC|c

G = ({S, S, A, B, C}, {a, b, c}, S, P)
unde P:
S S|c
S aAbC|abC|aAb| ab|A
A aA|a|B
B bB | b|C
C cC | c

19
Eliminarea redenumirilor A B
Intrare: G = (N, T, S, P) fr simboluri inutile
Ieire: G = (N, T, S, P) L(G) = L(G), G fr redenumiri
Metoda:
for(A e N)
{
N
0
= {A}; i=0;
do
{
i++;
N
i
= N
i-1
{ C| B C e P, B e N
i-1
}
} while N
i
= N
i-1

N
A
= N
i
;
}
P = u;
for(A o e P| o e N)
for(X e N && A e N
X
)
P = P {X o}
20
Recursivitate stng
Un neterminal A este recursiv dac exist
mcar o derivare A
+
oA|.
Dac o = c atunci A se numete stng recursiv,
dac | = c atunci A se numete drept recursiv.
Dac gramatica G conine cel puin un
neterminal stng recursiv, G este stng
recursiv
Un neterminal A este stng recursiv imediat
dac exist o regul AAo eP.
21
Eliminarea recursivitii stngi
imediate
Fie G = (N, T, S, P) n form redus
Fie A eN, A stng recursiv imediat.
Fie AAo
1
|Ao
2
|Ao
k
||
1
| |
n
toate regulile care
ncep cu A ( |
1
, ,|
n
nu ncep cu A). Fie P
A
mulimea
acestor reguli.
Gramatica G n care A nu este stng recursiv imediat:
G=(N {A}, T, S, P)
P=P- P
A
{A o
1
A|o
k
A|c, A |
1
A| |
n
A }

22
Exemplu
G =({S,A},{a,b,c},S,P) unde P este:
S Ac|c
A Aa|Ab|a|b|Sc
G= ({S,A,A},{a,b,c},S,P) unde P este:
S Ac|c
A aA|bA|ScA
A aA|bA|c
Observaie: A, S stng recursive

23
Eliminarea recursivitii stngi

Intrare: G = (N, T, S, P) n forma redus
Ieire: G = (N, T, S, P) fr recursie stng, echivalent
Metoda:
1. Se ordoneaz N; fie N = N = { A
1
, A
2
, , A
n
}
2. for(i = 1; i <=n; i++){
3. for(j=1; j<=i-1; j++)
4. for(A
i
A
j
o e P) {
5. P = P-{A
i
A
j
o};
6. for(A
j
| e P) P = P {A
i
|o}
}
7. Se elimina recursia stanga directa pentru A
i

}
8. N este obtinuta din N prin adaugarea tuturor
neterminalilor nou introdusi iar P este noua multime de
reguli

24 24
Exemplu
G=({A
1
,A
2
,A
3
},{a,b,c},A
1
,P), unde P:
A
1
A
2
a|b
A
2
A
3
b
A
3
A
1
c | c
Gramatica echivalent care nu este stng recursiv:
G=({A
1
,A
2
,A
3
, A
3
},{a,b,c},A
1
,P), unde P:
A
1
A
2
a|b
A
2
A
3
b
A
3
bcA
3
|cA
3

A
3
bacA
3
|c

27
Forma normal Chomsky
Se pot construi diverse forme normale (restricii asupra regulilor)
pentru gramaticile de tip 2:

Forma normal Chomsky:
A BC, A a ( i eventual S c )
(A,B,C eN i a e T)

Teorem: Orice limbaj independent de context poate fi generat de
o gramatic n forma normal Chomsky.

Fie L limbaj generat de o gramatic independent de context
redus. Va trebui s transformm regulile ce nu sunt n form
normal Chomsky:
29 29
Forma normal Chomsky
- Se elimina regulile de tergere i redenumirile
- Se elemin regulile care nu sunt n form normal Chomsky:
- Dac A x
1
x
2
x
n
, n > 1 este o astfel de regul atunci o nlocuim
cu A Y
1
Y
2
Y
n
unde:
Y
i
= x
i
, dac x
i
eN (neterminalii rmn la fel)
Y
i
= x
a
dac x
i
= a eT (x
a
este neterminal nou)
i se adaug regula x
a
a

- O regul de forma A Y
1
Y
2
Y
n
, dac n > 2, o nlocuim cu:
A Y
1
Z
1

Z
1
Y
2
Z
2


Z
n-3
Y
n-2
Z
n-2

Z
n-2
Y
n-1
Y
n


unde Z
1
, Z
2
, , Z
n-2
sunt neterminali noi.

30 30
Forma normal Chomsky

Se transform n acest mod toate regulile care nu sunt
n form normal Chomsky: aceste transformri nu
schimb limbajul generat i gramatica obinut este n
form normal Chomsky.


31 31
Algoritmul Cocke Younger Kasami
Problema recunoaterii n gramatici n forma
normal Chomsky se poate rezolva cu
algoritmul CYK n timp O(n
3
).
Dac w = a
1
a
2
a
n
atunci se constuiesc
mulimile
V
ij
= {A | A
+
a
i
a
i+1
a
i+j-1
}
inductiv pentru j = 1,,n
w e L(G) S e V
1n

32