Sunteți pe pagina 1din 43

Limbaje Formale, Automate s i Compilatoare

Curs 5
2013-14

LFAC (2013-14)

Curs 5

1 / 38

Curs 5
Gramatici s i limbaje independente de context - arbori sintactici pentru gramatici independente de context Forma redusa Eliminarea regulilor de s tergere s i a redenumirilor Chomsky Forma normala Problema recunoas terii: algoritmul Cocke Younger Kasami ii stangi Eliminarea recursivitat n gramatici de tip 2

LFAC (2013-14)

Curs 5

2 / 38

Gramatici s i limbaje independente de context - arbori sintactici

Curs 5
Gramatici s i limbaje independente de context - arbori sintactici pentru gramatici independente de context Forma redusa Eliminarea regulilor de s tergere s i a redenumirilor Chomsky Forma normala Problema recunoas terii: algoritmul Cocke Younger Kasami ii stangi Eliminarea recursivitat n gramatici de tip 2

LFAC (2013-14)

Curs 5

3 / 38

Gramatici s i limbaje independente de context - arbori sintactici

Arbori sintactici
Denit ie 1 Un arbore sintactic (arbore de derivare, arbore de parsare) n gramatica G este un arbore ordonat, etichetat, cu urmatoarele i: proprietat acina cu S ; rad arborelui este etichetata este etichetata cu un simbol din T sau cu ; ecare frunza ecare nod interior este etichetat cu un neterminal; A eticheteaza un nod interior care are n succesori etichetat daca i de la stanga la dreapta respectiv cu X1 , X2 ,..., Xn , atunci A X1 X2 . . . Xn este o regula. A are un succesor etichetat cu , atunci acesta este singurul Daca succesor. sau
LFAC (2013-14) Curs 5 4 / 38

Gramatici s i limbaje independente de context - arbori sintactici

Arbori sintactici-exemplu
G = ({E }, {a, b , +, ), (}, E , P ) unde: P : E E + E |E E |(E )|a|b a + (b a ) a: Derivare extrem stang E E + E a + E a + (E ) a + (E E ) a + (b E ) a + (b a ) Derivare extrem dreapta: E E + E E + (E ) E + (E E ) E + (E a ) E + (b a ) a + (b a ) Arbore de derivare pentru a + (b a ):

LFAC (2013-14)

Curs 5

5 / 38

Gramatici s i limbaje independente de context - arbori sintactici

Ambiguitate
Denit ie 2 G este ambigua daca exista un cuvant w O gramatica n L(G) care are 2 arbori de derivare distinct i. extrem stangi(drepte) Echivalent: w are 2 derivari distincte.

LFAC (2013-14)

Curs 5

6 / 38

Gramatici s i limbaje independente de context - arbori sintactici

Ambiguitate
Denit ie 2 G este ambigua daca exista un cuvant w O gramatica n L(G) care are 2 arbori de derivare distinct i. extrem stangi(drepte) Echivalent: w are 2 derivari distincte. este ambigua: cuvantul Gramatica precedenta a + b a are 2 arbori de derivare:

LFAC (2013-14)

Curs 5

6 / 38

Gramatici s i limbaje independente de context - arbori sintactici

Ambiguitate
Denit ie 2 G este ambigua daca exista un cuvant w O gramatica n L(G) care are 2 arbori de derivare distinct i. extrem stangi(drepte) Echivalent: w are 2 derivari distincte. ii gramaticilor de tip 2 este nedecidabila: nu Problema ambiguitat un algoritm care pentru o gramatica oarecare G sa testeze exista G este sau nu ambigua daca

LFAC (2013-14)

Curs 5

6 / 38

Gramatici s i limbaje independente de context - arbori sintactici

echivalenta neambigua Exemplu: o gramatica


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 (2013-14)

Curs 5

7 / 38

Gramatici s i limbaje independente de context - arbori sintactici

Problema recunoas terii n gramatici independente de context


Problema recunoas terii n gramatici independente de context: o gramatica G = (N , T , S , P ) s w T , sa se Data i un cuvant daca w L(G) decida (analizei sintactice) este problema recunoas Problema parsarii terii daca w L(G), se cere arborele sintactic (o la care se adauga: reprezentare a sa) pentru w .

LFAC (2013-14)

Curs 5

8 / 38

pentru gramatici independente de context Forma redusa

Curs 5
Gramatici s i limbaje independente de context - arbori sintactici pentru gramatici independente de context Forma redusa Eliminarea regulilor de s tergere s i a redenumirilor Chomsky Forma normala Problema recunoas terii: algoritmul Cocke Younger Kasami ii stangi Eliminarea recursivitat n gramatici de tip 2

LFAC (2013-14)

Curs 5

9 / 38

pentru gramatici independente de context Forma redusa

Simboluri inutile

exista o derivare de Un simbol X din N T este accesibil daca + forma S X exista o derivare de forma Un simbol A din N este productiv daca + A w, w T este inaccesibil sau neproductiv Un simbol este inutil daca

LFAC (2013-14)

Curs 5

10 / 38

pentru gramatici independente de context Forma redusa

redusa Gramatici n forma


Denit ie 3 este redusa, daca nu cont O gramatica n forma ine simboluri inutile.

Orice limbaj independent de context poate generat de o redusa. gramatica n forma

LFAC (2013-14)

Curs 5

11 / 38

pentru gramatici independente de context Forma redusa

Eliminarea simbolurilor inutile


independenta de context G exista o Pentru orice gramatica G de acelas redusa echivalenta cu G. gramatica i tip n forma Pentru eliminarea simbolurilor inutile:
s simbolurile neproductive s Se determina i apoi se elimina i toate regulile ce cont in macar unul dintre acestea. apoi se elimina simbolurile inaccesibile s Se determina i toate regulile aferente.

LFAC (2013-14)

Curs 5

12 / 38

pentru gramatici independente de context Forma redusa

Eliminarea simbolurilor neproductive - algoritm


Intrare: G = (N , T , S , P ) Ies ire: G = (N , T , S , P ), L(G ) = L(G), N cont ine doar simboluri productive

N0 = ; i = 0; do { i = i + 1; Ni = Ni 1 {A|A P , (Ni 1 T ) }; } while Ni = Ni 1 ; N = Ni ; P = {A P |A N , (N T ) };

A N Un simbol A este productiv ddaca L(G) = ddaca S N Consecint a:


LFAC (2013-14) Curs 5 13 / 38

pentru gramatici independente de context Forma redusa

Exemplu
G = ({S , A, B , C }, {a, b , c }, S , P ), unde P este: S a|aA|bC A aAB B bac C aSb Gramatica G cu toate simbolurile productive: G = ({S , B , C }, {a, b , c }, S , P ), unde P este: S a|bC B bac C aSb
LFAC (2013-14) Curs 5 14 / 38

pentru gramatici independente de context Forma redusa

Eliminarea simbolurilor inaccesibile


Intrare: G = (N , T , S , P ) Ies ire: G = (N , T , S , P ), L(G ) = L(G), N , T cont in doar simboluri accesibile

V0 = {S }; i = 0; do { i = i + 1; Vi = Vi 1 {X |X N T , A X P , A (Vi 1 N )}; } while Vi = Vi 1 ; N = Vi N ; T = Vi T ; P = {A P |A N , (N T ) };

X Vi X accesibil ddaca
LFAC (2013-14) Curs 5 15 / 38

pentru gramatici independente de context Forma redusa

Exemplu
G = ({S , A, B , C }, {a, b , c }, S , P ), unde P este: S a|aA|bC A aAB B bac C aSb Eliminarea simbolurilor neproductive duce la: G = ({S , B , C }, {a, b , c }, S , {S a|bC , B bac , C aSb }) Eliminarea simbolurilor inaccesibile duce la: G = ({S , C }, {a, b }, S , {S a|bC , C aSb }) daca se aplica algoritmii Ce se ntampl a n ordinea inversa?
LFAC (2013-14) Curs 5 16 / 38

Eliminarea regulilor de s tergere s i a redenumirilor

Curs 5
Gramatici s i limbaje independente de context - arbori sintactici pentru gramatici independente de context Forma redusa Eliminarea regulilor de s tergere s i a redenumirilor Chomsky Forma normala Problema recunoas terii: algoritmul Cocke Younger Kasami ii stangi Eliminarea recursivitat n gramatici de tip 2

LFAC (2013-14)

Curs 5

17 / 38

Eliminarea regulilor de s tergere s i a redenumirilor

Eliminarea regulilor de s tergere


Intrare: G = (N , T , S , P ) Ies ire: G = (N , T , S , P ), L(G ) = L(G), P nu cont ine reguli de s 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 = Ni 1 ; N = Ni ;

LFAC (2013-14)

Curs 5

18 / 38

Eliminarea regulilor de s tergere s i a redenumirilor

Eliminarea regulilor de s tergere


Intrare: G = (N , T , S , P ) Ies ire: G = (N , T , S , P ), L(G ) = L(G), P nu cont ine reguli de s 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 = Ni 1 ; N = Ni ;

Are loc: N0 N1 . . . Ni Ni +1 . . . N N A N A+
LFAC (2013-14) Curs 5 18 / 38

Eliminarea regulilor de s tergere s i a redenumirilor

Eliminarea regulilor de s tergere


P se obt ine din P astfel: A P se pun simbolurile din N n ecare regula n evident a ce apar n : = 1 X1 2 X2 . . . n Xn n+1 , Xi N de acest fel cu mult se nlocuies te ecare regula imea de reguli de forma A 1 Y1 2 Y2 . . . n Yn n+1 unde Yi = Xi sau Yi = n toate modurile posibile (2n ) toate regulile de s se elimina tergere S este S pentru a obt ine cuvantul nul (daca n N ) se adauga simbol de start nou s i regulile S S , S
LFAC (2013-14) Curs 5 19 / 38

Eliminarea regulilor de s tergere s 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 (2013-14)

Curs 5

20 / 38

Eliminarea regulilor de s tergere s i a redenumirilor

Eliminarea redenumirilor (A B , A, B N )
Intrare: G = (N , T , S , P ) Ies ire: G = (N , T , S , P ), L(G ) = L(G), P nu cont 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 = Ni 1 ; NA = Ni ; //NA = {X N |A + X } } P = {X P | N } for(X 1 |2 | . . . |n P ) for(A N && X NA , X = A) P = P {A 1 |2 | . . . |n }
LFAC (2013-14) Curs 5 21 / 38

Eliminarea regulilor de s tergere s 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 } far a redenumiri G = ({x , y , z }, {a, b , c }, x , P ) Gramatica echivalenta unde P : x ax |a|by |b |cz |c y by |b |cz |c z cz |c
LFAC (2013-14) Curs 5 22 / 38

Chomsky Forma normala

Curs 5
Gramatici s i limbaje independente de context - arbori sintactici pentru gramatici independente de context Forma redusa Eliminarea regulilor de s tergere s i a redenumirilor Chomsky Forma normala Problema recunoas terii: algoritmul Cocke Younger Kasami ii stangi Eliminarea recursivitat n gramatici de tip 2

LFAC (2013-14)

Curs 5

23 / 38

Chomsky Forma normala

Chomsky Forma normala


Denit ie 4 este normala Chomsky daca regulile sale au O gramatica n forma forma: A BC, A a ( s i eventual S ) (A, B , C N s i a T ). Teorema 1 Orice limbaj independent de context poate generat de o gramatica n normala Chomsky. forma

LFAC (2013-14)

Curs 5

24 / 38

Chomsky Forma normala

Demonstrat ie
regulile de s Se elimina tergere s i redenumirile

LFAC (2013-14)

Curs 5

25 / 38

Chomsky Forma normala

Demonstrat ie
regulile de s Se elimina tergere s i redenumirile regulile care nu sunt normala Chomsky: Se elemina n forma A x1 x2 . . . xn , n > 1 este o astfel de regula atunci o Daca nlocuim cu A Y1 Y2 . . . Yn unde:
xi N (neterminalii ram an la fel) Yi = xi , daca xi = a T (xa este neterminal nou) s Yi = xa daca i se adauga regula xa a

LFAC (2013-14)

Curs 5

25 / 38

Chomsky Forma normala

Demonstrat ie
regulile de s Se elimina tergere s i redenumirile regulile care nu sunt normala Chomsky: Se elemina n forma A x1 x2 . . . xn , n > 1 este o astfel de regula atunci o Daca nlocuim cu A Y1 Y2 . . . Yn unde:
xi N (neterminalii ram an la fel) Yi = xi , daca xi = a T (xa este neterminal nou) s Yi = xa daca i se adauga regula xa a

de forma A Y1 Y2 . . . Yn , daca n > 2, o O regula nlocuim cu:


A Y1 Z1 Z1 Y2 Z2 ...... Zn3 Yn2 Zn2 Zn2 Yn1 Yn , unde Z1 , Z2 , . . . , Zn2 sunt neterminali noi.
LFAC (2013-14) Curs 5 25 / 38

Chomsky Forma normala

Exemplu
G = ({S , A}, {a, b , c }, S , P ), unde P: S aSb |cAc A cA|c normala Chomsky Gramatica echivalenta n forma 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 (2013-14) Curs 5 26 / 38

Problema recunoas terii: algoritmul Cocke Younger Kasami

Curs 5
Gramatici s i limbaje independente de context - arbori sintactici pentru gramatici independente de context Forma redusa Eliminarea regulilor de s tergere s i a redenumirilor Chomsky Forma normala Problema recunoas terii: algoritmul Cocke Younger Kasami ii stangi Eliminarea recursivitat n gramatici de tip 2

LFAC (2013-14)

Curs 5

27 / 38

Problema recunoas terii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami (CYK)


normala Chomsky se Problema recunoas terii n gramatici n forma 3 poate rezolva cu algoritmul CYK n timp O (n ). w = a1 a2 . . . an atunci se constuiesc mult Daca imile Vij = {A|A + ai ai +1 . . . ai +j 1} inductiv pentru j = 1, . . . , n w L(G) S V1n

LFAC (2013-14)

Curs 5

28 / 38

Problema recunoas terii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami


Pentru j = 1:
Vi 1 = {A|A + ai } = {A|A ai P }

Pentru j > 1, Vij :


A + ai ai +1 . . . ai +j 1 : Daca A BC + ai ai +1 . . . ai +j 1 s 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 Vij =
j 1 k =1 {A|A

BC P , B Vik , C Vi +k

j k }

LFAC (2013-14)

Curs 5

29 / 38

Problema recunoas terii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami


Notat 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 =
k =1

(Vik Vi +k

j k )

LFAC (2013-14)

Curs 5

30 / 38

Problema recunoas terii: algoritmul Cocke Younger Kasami

Algoritmul Cocke Younger Kasami


normala Chomsky, w = a1 a2 . . . an Intrare: G = (N , T , S , P ) n forma Ies ire: w L(G)?

for(i=1; i<=n; i++) Vi 1 = {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 L(G)

LFAC (2013-14)

Curs 5

31 / 38

Problema recunoas 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 (2013-14)

Curs 5

32 / 38

Problema recunoas 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 } V21 = {Y } V31 = {Z } S V13 abc L(G) V12 = {S , X } V22 = {Y } V13 = {S , X }

LFAC (2013-14)

Curs 5

32 / 38

ii stangi Eliminarea recursivitat n gramatici de tip 2

Curs 5
Gramatici s i limbaje independente de context - arbori sintactici pentru gramatici independente de context Forma redusa Eliminarea regulilor de s tergere s i a redenumirilor Chomsky Forma normala Problema recunoas terii: algoritmul Cocke Younger Kasami ii stangi Eliminarea recursivitat n gramatici de tip 2

LFAC (2013-14)

Curs 5

33 / 38

ii stangi Eliminarea recursivitat n gramatici de tip 2

a Recursivitate stang
exista macar Un neterminal A este recursiv daca o derivare + A A . = atunci A se numes Daca te stang recursiv, = atunci A se numes daca te drept recursiv. gramatica G cont Daca ine cel put in un neterminal stang recursiv, G este stang recursiva exista o regula Un neterminal A este stang recursiv imediat daca A A P .

LFAC (2013-14)

Curs 5

34 / 38

ii stangi Eliminarea recursivitat n gramatici de tip 2

Eliminarea recursivitatii stangi imediate


redusa Fie G = (N , T , S , P ) n forma Fie A N , A stang recursiv imediat. Fie A A1 |A2 . . . |Ak |1 | . . . n toate regulile care ncep cu A (1 , . . . , n nu ncep cu A). Fie PA mult imea acestor reguli. Gramatica G n care A nu este stang recursiv imediat:
G = (N {A }, T , S , P ) P = P \ PA {A 1 A | . . . k A |, A 1 A | . . . n A }

LFAC (2013-14)

Curs 5

35 / 38

ii stangi Eliminarea recursivitat n gramatici de tip 2

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 | Observat ie: A, S stang recursive

LFAC (2013-14)

Curs 5

36 / 38

ii stangi Eliminarea recursivitat n gramatici de tip 2

ii stangi Eliminarea recursivitat


redusa Intrare: G = (N , T , S , P ) n forma a recursie stang a Ies ire: G = (N , T , S , P ), L(G ) = L(G), far

1. Se ordoneaz a N ; fie N = N = {A1 , A2 , . . . , An } 2. for(i = 1; i <=n; i++){ 3. while( Ai Aj P : j <= i 1) { 4. P = P {Ai Aj }; 5. for(Aj P ) P = P {Ai }; 6. } 7. Se elimin a recursia st ang a imediat a pentru Ai 8. } augarea tuturor a din N prin ad 10. N este obt inut neterminalilor nou introdus i iar P este noua mult ime de reguli

LFAC (2013-14)

Curs 5

37 / 38