Documente Academic
Documente Profesional
Documente Cultură
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
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
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
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
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
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
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
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
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
LFAC (2013-14)
Curs 4
11 / 39
Expresii regulate
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
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
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
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
Algoritm
E = E1 |E2
E = E1 E2
E = E1
LFAC (2013-14) Curs 4 21 / 39
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
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
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
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
Algoritm
Exemplu
E = a|b c
LFAC (2013-14)
Curs 4
25 / 39
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
Algoritm
Exemplu
E = a|b c
LFAC (2013-14)
Curs 4
27 / 39
Algoritm
LFAC (2013-14)
Curs 4
28 / 39
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
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
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
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
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
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
Algoritm
Exemplu
E = a|b c
LFAC (2013-14)
Curs 4
29 / 39
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
Algoritm
Exemplu
LFAC (2013-14)
Curs 4
31 / 39
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
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
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
LFAC (2013-14)
Curs 4
35 / 39
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
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
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
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