Sunteți pe pagina 1din 48

Limbaje Formale, Automate s i Compilatoare

Curs 4
2013-14

LFAC (2013-14)

Curs 4

1 / 39

Curs 4

i de Proprietat nchidere pentru clasa limbajelor de tip 3 Expresii regulate Automatul echivalent cu o expresie regulata Algoritm Gramatici s i limbaje independente de context

LFAC (2013-14)

Curs 4

2 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Curs 4

i de Proprietat nchidere pentru clasa limbajelor de tip 3 Expresii regulate Automatul echivalent cu o expresie regulata Algoritm Gramatici s i limbaje independente de context

LFAC (2013-14)

Curs 4

3 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Inchiderea la intersect ie
L1 , L2 L3 , atunci L1 L2 L3 Daca Fie A1 = (Q1 , 1 , 1 , q01 , F1 ) s i A2 = (Q2 , 2 , 2 , q02 , F2 ) automate L1 = L(A1 ) s deterministe astfel ncat i L2 = L(A2 ). Automatul A (determinist) care recunoas te L1 L2 : A = (Q1 Q2 , 1 2 , , (q01 , q02 ), F1 F2 )
, q ) ddaca ((q1 , q2 ), a)) = (q1 2 1 (q1 , a) = q1 2 (q2 , a) = q2

LFAC (2013-14)

Curs 4

4 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Inchiderea la diferent a
L L3 atunci L = ( \ L) L3 Daca Fie A = (Q , , , q0 , F ) automat cu L(A) = L. Automatul A care recunoas te L = L(A): A = (Q , , , q0 , Q \ F )

LFAC (2013-14)

Curs 4

5 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Inchiderea la diferent a
L L3 atunci L = ( \ L) L3 Daca Fie A = (Q , , , q0 , F ) automat cu L(A) = L. Automatul A care recunoas te L = L(A): A = (Q , , , q0 , Q \ F )

L1 , L2 L3 atunci L1 \ L2 L3 : L1 \ L2 = L1 L2 Daca

LFAC (2013-14)

Curs 4

5 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Inchiderea la produs
Fie A1 = (Q1 , , 1 , q01 , {f1 }) s i A2 = (Q2 , , 2 , q02 , {f2 }) stare nala astfel L1 = L(A1 ) s automate cu o singura ncat i L2 = L(A2 ). Automatul A (cu -tranzit ii) care recunoas te L1 L2 : A = (Q1 Q2 , , , q01 , {f2 })

LFAC (2013-14)

Curs 4

6 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Inchiderea la reuniune
Fie A1 = (Q1 , 1 , 1 , q01 , {f1 }) s i A2 = (Q2 , 2 , 2 , q02 , {f2 }) stare nala astfel L1 = L(A1 ) s automate cu o singura ncat i L2 = L(A2 ). Automatul A (cu -tranzit ii) care recunoas te L1 L2 : A = (Q1 Q2 {q0 , f }, 1 2 , , q0 , {f })

LFAC (2013-14)

Curs 4

7 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Inchiderea la iterat ie
stare nala astfel Fie A = (Q , , , q01 , {f }) automat cu o singura L(A) = L. ncat Automatul A (cu -tranzit ii) care recunoas te L (= L(A) ): A = (Q {q0 , f }, , , q0 , {f })

LFAC (2013-14)

Curs 4

8 / 39

i de Proprietat nchidere pentru clasa limbajelor de tip 3

Inchiderea la operat ia de oglindire


stare nala. Fie A = (Q , , , q0 , {qf }) automat cu o singura R Automatul A (cu -tranzit ii) care recunoas te L(A) : }, , , q , {q }): A = (Q {q0 0 0
(q2 , a) = q1 (inversarea arcelor (q1 , a) = q2 ddaca n graful de tranzit ie) (q0 , ) = qf L(A), atunci (q0 daca , ) = q0

LFAC (2013-14)

Curs 4

9 / 39

Expresii regulate

Curs 4

i de Proprietat nchidere pentru clasa limbajelor de tip 3 Expresii regulate Automatul echivalent cu o expresie regulata Algoritm Gramatici s i limbaje independente de context

LFAC (2013-14)

Curs 4

10 / 39

Expresii regulate

Expresii regulate - denit ie


Reprezentarea limbajelor de tip 3 prin expresii algebrice Denit ie 1 este un alfabet atunci o expresie regulata peste se denes Daca te inductiv astfel: , , a (a ) sunt expresii regulate ce descriu respectiv limbajele , {}, {a}. E , E1 , E2 sunt expresii regulate atunci: Daca
ce descrie limbajul L(E1 ) L(E 2) (E1 |E2 ) este expresie regulata ce descrie limbajul L(E1 )L(E2 ) (E1 E2 ) este expresie regulata ce descrie limbajul L(E ) (E ) este expresie regulata

LFAC (2013-14)

Curs 4

11 / 39

Expresii regulate

Expresii regulate - denit ie


Reprezentarea limbajelor de tip 3 prin expresii algebrice Denit ie 1 este un alfabet atunci o expresie regulata peste se denes Daca te inductiv astfel: , , a (a ) sunt expresii regulate ce descriu respectiv limbajele , {}, {a}. E , E1 , E2 sunt expresii regulate atunci: Daca
ce descrie limbajul L(E1 ) L(E 2) (E1 |E2 ) este expresie regulata ce descrie limbajul L(E1 )L(E2 ) (E1 E2 ) este expresie regulata ce descrie limbajul L(E ) (E ) este expresie regulata

Ordinea de prioritate a operatorilor este , , |


LFAC (2013-14) Curs 4 11 / 39

Expresii regulate

Exemple
(a|b )|(c |d ) {a, b , c , d } (0|1) (0|1) {00, 01, 10, 11} a b {an b k |n, k 0} (a|b ) {a, b } a semn (0|1|2|...|9)(0|1|2...|9) descrie mult imea ntregilor far (a|b |c |...|z )(a|b |c |...|z |0|1|2...|9) descrie mult imea identicatorilor expresii regulate E1 , E2 sunt echivalente, s Doua i scriem E1 = E2 daca L(E1 ) = L(E2 )

LFAC (2013-14)

Curs 4

12 / 39

Expresii regulate

i Proprietat
(p |q )|r = p |(q |r ) (pq )r = p (qr ) p |q = q |p p =p =p p | = p |p = p p =p = p (q |r ) = pq |pr (p |q )r = pr |qr |pp = p |p p = p
LFAC (2013-14) Curs 4 13 / 39

Expresii regulate

la automatul nit De la o expresie regulata


Teorema 1 E peste exista un automat nit (cu Pentru orice expresie regulata L(A) = L(E ). tranzit ii) A, astfel ncat Demonstratie: induct ie structurala. E {, , a} (a ) atunci automatul corespunzator Daca este respectiv:

LFAC (2013-14)

Curs 4

14 / 39

Expresii regulate

Demonstrat ie
E = E1 |E2

E = E1 E2

E = E1

LFAC (2013-14)

Curs 4

15 / 39

Expresii regulate

de Reprezentarea expresiilor regulate sub forma arbore


E = e 0 e 1 . . . e n 1 Intrare: Expresia regulata Precedent a operatorilor: prec(|) = 1, prec() = 2, prec() = 3 (prec(()= 0). Ies ire: Arborele asociat: t . doua stive: Metoda: Se considera
STIVA1 stiva operatorilor STIVA2 stiva operanzilor (care va cont ine arborii part iali construit i) Metoda tree(op, tS , tD )

LFAC (2013-14)

Curs 4

16 / 39

Expresii regulate

Algoritm
i = 0; while(i < n) { c = ei ; switch(c) { case ( : { STIVA1.push(c); break; } case operand : { STIVA2.push(tree(c,NULL,NULL)); break; } case operator : { while (prec(STIVA1.top())>=prec(c)) build tree(); STIVA1.push(c); break; } case ) : { do { build tree();} while(STIVA1.top()!= ( ); STIVA1.pop(); break; } } i++; } while(STIVA1.not empty()) build tree(); t = STIVA2.pop();

LFAC (2013-14)

Curs 4

17 / 39

Expresii regulate

Algoritm

build tree() op = STIVA1.pop(); tD = STIVA2.pop(); switch (op) { case : { t = tree(op, tD, NULL); STIVA2.push(t); break; } case | , : { tS = STIVA2.pop(); t = tree(op, tS, tD); STIVA2.push(t); break; } }

LFAC (2013-14)

Curs 4

18 / 39

Expresii regulate

Exemplu

a b |a (b |c )

LFAC (2013-14)

Curs 4

19 / 39

Automatul echivalent cu o expresie regulata

Curs 4

i de Proprietat nchidere pentru clasa limbajelor de tip 3 Expresii regulate Automatul echivalent cu o expresie regulata Algoritm Gramatici s i limbaje independente de context

LFAC (2013-14)

Curs 4

20 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Automatul echivalent cu o expresie regulata

E = E1 |E2

E = E1 E2

E = E1
LFAC (2013-14) Curs 4 21 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Observat ii
s pentru orice aparit ie a unui simbol din , cat i pentru , daca acesta apare explicit n E , este nevoie de 2 stari n automatul construit. E ecare din aparit iile operatorilor | s i dintr-o expresie regulata noi stari introduce doua n automatul construit operatorul nu introduce alte stari n este numarul daca de simboluri din E iar m este numarul de cu aparit paranteze mpreuna iile simbolului , atunci numarul starilor automatului echivalent cu E este p = 2(n m).

LFAC (2013-14)

Curs 4

22 / 39

Automatul echivalent cu o expresie regulata

Algoritm

tranzit din orice stare i a automatului, se fac cel mult doua ii:
(i , a) = j ( (i , ) = ) (i , ) = {j } ( (i , a) = ) (i , ) = {j , k } ( (i , a) = )

LFAC (2013-14)

Curs 4

23 / 39

Automatul echivalent cu o expresie regulata

Algoritm

tranzit din orice stare i a automatului, se fac cel mult doua ii:
(i , a) = j ( (i , ) = ) (i , ) = {j } ( (i , a) = ) (i , ) = {j , k } ( (i , a) = )

se reprezentarea automatului echivalent cu o expresie regulata poate face cu 3 tablouri de dimensiune p , unde p este numarul starilor (acestea sunt numerotate de la 1 la p ):
simbol [i ] = a: din starea i se face o tranzit ie cu simbolul a (daca simbol [i ] = , (i , a) = ) next 1[i ] = j : din starea i se face o tranzit ie catre starea j ( (i , a) = j , simbol [i ] = a, altfel j (i , )) daca next 2[i ] = k : din starea i se face o - tranzit ie catre k ( (i , ) = {j , k } s i next 1[i ] = j ) .

LFAC (2013-14)

Curs 4

23 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Algoritm
E cu n simboluri dintre care m sunt Intrare: Expresia regulata paranteze s i aparit ii ale operatorului produs; Ies ire: Vectorii simbol , next 1, next 2 de dimensiune p = 2(n m) f; ce descriu automatul cu - tranzit ii echivalent cu E , starea nala Metoda: 1. Se construies te arborele atas at expresiei E ; nodurilor 2. Se parcurge arborele n preordine s i se atas eaza vizitate, exceptand pe cele etichetate cu produs , respectiv numerele 1, 2, . . . , n m;

LFAC (2013-14)

Curs 4

24 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Exemplu

E = a|b c

LFAC (2013-14)

Curs 4

25 / 39

Automatul echivalent cu o expresie regulata

Algoritm

ecarui 3. Se parcurge arborele n postordine s i se atas eaza nod N starea init o pereche de numere (N .i , N .f ) care reprezinta iala a automatului echivalent cu expresia respectiv nala acina corespunzatoare subarborelui cu rad N , astfel:
nodul are numarul Daca k (de la pasul 2) atunci: N .i = 2k 1, N .f = 2k ; nodul este etichetat cu produs s al lui N, iar Daca i S este ul stang D ul drept, atunci: N .i = S .i iar N .f = D .f

LFAC (2013-14)

Curs 4

26 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Exemplu

E = a|b c

LFAC (2013-14)

Curs 4

27 / 39

Automatul echivalent cu o expresie regulata

Algoritm

4. for(j = 1..2(n m)) {simbol [j ] = , next 1[j ] = next 2[j ] = 0}

LFAC (2013-14)

Curs 4

28 / 39

Automatul echivalent cu o expresie regulata

Algoritm

4. for(j = 1..2(n m)) {simbol [j ] = , next 1[j ] = next 2[j ] = 0} 5. Se parcurge din nou arborele obt inut n postordine. N este nodul curent iar S si D sunt i sai, atunci, Daca n funct ie de eticheta lui N, se execut a urmatoarele:

LFAC (2013-14)

Curs 4

28 / 39

Automatul echivalent cu o expresie regulata

Algoritm

4. for(j = 1..2(n m)) {simbol [j ] = , next 1[j ] = next 2[j ] = 0} 5. Se parcurge din nou arborele obt inut n postordine. N este nodul curent iar S si D sunt i sai, atunci, Daca n funct ie de eticheta lui N, se execut a urmatoarele: N este etichetat cu a (deci este frunza): (N .i , a) = N .f Daca simbol [N .i ] = a, next 1[N .i ] = N .f

LFAC (2013-14)

Curs 4

28 / 39

Automatul echivalent cu o expresie regulata

Algoritm

4. for(j = 1..2(n m)) {simbol [j ] = , next 1[j ] = next 2[j ] = 0} 5. Se parcurge din nou arborele obt inut n postordine. N este nodul curent iar S si D sunt i sai, atunci, Daca n funct ie de eticheta lui N, se execut a urmatoarele: N este etichetat cu a (deci este frunza): (N .i , a) = N .f Daca simbol [N .i ] = a, next 1[N .i ] = N .f N este etichetat cu |: (N .i , ) = {S .i , D .i }, (S .f , ) = N .f , (D .f , ) = N .f Daca next 1[N .i ] = S .i , next 2[N .i ] = D .i , next 1[S .f ] = N .f , next 1[D .f ] = N .f

LFAC (2013-14)

Curs 4

28 / 39

Automatul echivalent cu o expresie regulata

Algoritm

4. for(j = 1..2(n m)) {simbol [j ] = , next 1[j ] = next 2[j ] = 0} 5. Se parcurge din nou arborele obt inut n postordine. N este nodul curent iar S si D sunt i sai, atunci, Daca n funct ie de eticheta lui N, se execut a urmatoarele: N este etichetat cu a (deci este frunza): (N .i , a) = N .f Daca simbol [N .i ] = a, next 1[N .i ] = N .f N este etichetat cu |: (N .i , ) = {S .i , D .i }, (S .f , ) = N .f , (D .f , ) = N .f Daca next 1[N .i ] = S .i , next 2[N .i ] = D .i , next 1[S .f ] = N .f , next 1[D .f ] = N .f N este etichetat cu : (S .f , ) = D .i Daca next 1[S .f ] = D .i

LFAC (2013-14)

Curs 4

28 / 39

Automatul echivalent cu o expresie regulata

Algoritm

4. for(j = 1..2(n m)) {simbol [j ] = , next 1[j ] = next 2[j ] = 0} 5. Se parcurge din nou arborele obt inut n postordine. N este nodul curent iar S si D sunt i sai, atunci, Daca n funct ie de eticheta lui N, se execut a urmatoarele: N este etichetat cu a (deci este frunza): (N .i , a) = N .f Daca simbol [N .i ] = a, next 1[N .i ] = N .f N este etichetat cu |: (N .i , ) = {S .i , D .i }, (S .f , ) = N .f , (D .f , ) = N .f Daca next 1[N .i ] = S .i , next 2[N .i ] = D .i , next 1[S .f ] = N .f , next 1[D .f ] = N .f N este etichetat cu : (S .f , ) = D .i Daca next 1[S .f ] = D .i N este etichetat cu (D nu exist Daca a n acest caz): (N .i , ) = {S .i , N .f }, (S .f , ) = {S .i , N .f } next 1[N .i ] = S .i , next 2[N .i ] = N .f , next 1[S .f ] = S .i , next 2[S .f ] = N .f

LFAC (2013-14)

Curs 4

28 / 39

Automatul echivalent cu o expresie regulata

Algoritm

4. for(j = 1..2(n m)) {simbol [j ] = , next 1[j ] = next 2[j ] = 0} 5. Se parcurge din nou arborele obt inut n postordine. N este nodul curent iar S si D sunt i sai, atunci, Daca n funct ie de eticheta lui N, se execut a urmatoarele: N este etichetat cu a (deci este frunza): (N .i , a) = N .f Daca simbol [N .i ] = a, next 1[N .i ] = N .f N este etichetat cu |: (N .i , ) = {S .i , D .i }, (S .f , ) = N .f , (D .f , ) = N .f Daca next 1[N .i ] = S .i , next 2[N .i ] = D .i , next 1[S .f ] = N .f , next 1[D .f ] = N .f N este etichetat cu : (S .f , ) = D .i Daca next 1[S .f ] = D .i N este etichetat cu (D nu exist Daca a n acest caz): (N .i , ) = {S .i , N .f }, (S .f , ) = {S .i , N .f } next 1[N .i ] = S .i , next 2[N .i ] = N .f , next 1[S .f ] = S .i , next 2[S .f ] = N .f 6. f este starea pentru care next1[f] = next2[f] = 0
LFAC (2013-14) Curs 4 28 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Exemplu

E = a|b c

LFAC (2013-14)

Curs 4

29 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Exemplu
1 2 3 4 5 6 7 8 9 10 a 4 b 8 c 10 {3, 5} {2} {6, 7} {9} {6, 7} {2}

LFAC (2013-14)

Curs 4

30 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Exemplu

LFAC (2013-14)

Curs 4

31 / 39

Automatul echivalent cu o expresie regulata

Algoritm

Corectitudinea algoritmului
Teorema 2 Algoritmul descris este corect: automatul cu - tranzit ii obt inut este E. echivalent cu expresia regulata Demonstrat ie: pentru ecare Modul n care au fost alese perechile (i , f ) de stari nod al arborelui construit corespunde construct iilor din teorema 1. Deasemenea, tranzit iile care se denesc n pasul 5 al algoritmului urmaresc construct ia din teorema 1. la intrare. Automatul obt inut este echivalent cu expresia data

LFAC (2013-14)

Curs 4

32 / 39

Gramatici s i limbaje independente de context

Curs 4

i de Proprietat nchidere pentru clasa limbajelor de tip 3 Expresii regulate Automatul echivalent cu o expresie regulata Algoritm Gramatici s i limbaje independente de context

LFAC (2013-14)

Curs 4

33 / 39

Gramatici s i limbaje independente de context

Gramatici independente de context


Gramatici de tip 2 (independente de context): G = (N , T , S , P )
Ns i T sunt mult imi nevide, nite, disjuncte de neterminali (variabile), respectiv terminali S N este simbolul de start P = {x u |x N , u (N T ) } este mult imea regulilor (product iilor).

Un limbaj L este de tip 2 (independent de context: L L2 ) daca o gramatica G de tip 2 astfel L(G) = L exista ncat

LFAC (2013-14)

Curs 4

34 / 39

Gramatici s i limbaje independente de context

extrem stangi/drepte Derivari


Fie G = (N , T , S , P ) si w L(G) a pentru w : derivarea derivare extrem stang n care, la orice pas se nlocuies te cel mai din stanga neterminal din cuvantul obt inut pentru w : derivarea derivare extrem dreapta n care, la orice pas se nlocuies te cel mai din dreapta neterminal din cuvantul obt inut

LFAC (2013-14)

Curs 4

35 / 39

Gramatici s 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) 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) derivari care nu sunt nici extrem drepte nici extrem stangi! Exista
LFAC (2013-14) Curs 4 36 / 39

Gramatici s i limbaje independente de context

Arbori sintactici
Denit ie 2 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. un caz special: nodul Cazul n care regula este A reprezinta etichetat cu A are un singur descendent etichetat cu .
LFAC (2013-14) Curs 4 37 / 39

Gramatici s i limbaje independente de context

Arbori sintactici
Denit ie 3 Frontiera unui arbore de derivare este cuvantul w = a1 a2 . . . an unde ai , 1 i n sunt etichetele nodurilor frunza n ordinea de la stanga la dreapta. w : arbore de derivare cu Arbore de derivare pentru un cuvant frontiera w . Un X-arbore de derivare este un subarbore al unui arbore de acinii derivare care are eticheta rad X . Un arbore de derivare este un S-arbore de derivare.

LFAC (2013-14)

Curs 4

38 / 39

Gramatici s i limbaje independente de context

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 4

39 / 39