Sunteți pe pagina 1din 94

UNIVERSITATEA SPIRU HARET Facultatea de Matematic-Informatic Platforma BLACKBOARD

Codul cursului: Denumirea cursului: Limbaje formale si automate Tip curs: Obligatoriu Durata cursului / Nr. Credite: semestrul 1 / 4 credite Perioada de accesare a cursului: 1 oct 2006 - 1 oct 2007 Manualul recomandat: G. Albeanu, Limbaje formale si automate, Editura FRM, 2005 Obiectivul principal al cursului: Dobandirea de cunostinte si competene privind generarea i recunoaterea limbajelor, operaiile cu limbaje si analiza sintactica. Modul de stabilire a notei finale: 6u x 3p + 10m x 5p + 4d x 8p = 100p. In final se imparte numrul de puncte la 10 i se rotujete la ntreg. ZI - Verificare, se ia n considerare i activitatea desfsurat la seminar (50%) FR,ID - examen la calculator (6 ntrebri uoare, 10 ntrebri de nivel mediu i 4 ntrebri dificile) cu ponderile de mai sus. Consultaii pentru studeni: Mari, 7.30-16 Adrese e-mail responsabil pentru contactul cu studenii: info@spiruharet.ro Titularul/titularii cursului / serie: ZI, FR, ID Prof. Univ. Dr. Albeanu Grigore galbeanu@fmi.unibuc.ro Str. Ion Ghica, Facultatea de matematic-informatic 7.30-16 2. Coninutul tematic al cursului
1. 1.1 1.2 1.3 2. 2.1 2.2 2.3 2.4 2.5 3. 3.1 3.2 3.3 3.4 3.5 4. 4.1 4.2 4.3 5. 5.1 5.2 Limbaje i expresii regulate Alfabet. Cuvnt. Limbaj Operaii cu limbaje Mulimi regulate i expresii regulate Mecanisme generative fundamentale Sisteme de rescriere Gramatici formale Clase de gramatici Arbori de derivare, ambiguitate i recursivitate Complexitatea sintactic a gramaticilor i limbajelor Mecanisme pentru recunoaterea automat a mulimilor regulate Automatul finit determinist (AFD) Automatul finit nedeterminist (AFN) Puterea de acceptare a sistemelor AFD i AFN Automate cu l-deplasri sau sisteme tranziionale Sistemele AFN i expresiile regulate Optimizarea automatelor finite Stri accesibile. Stri utile Congruene i limbaje regulate Lema de pompare pentru limbaje regulare. Aplicaii Transformri asupra gramaticilor formale Transformri elementare Redenumiri i l-producii

5.3 6. 6.1 6.2 6.3 7. 7.1 7.2 7.3 7.4 8. 8.1 8.2 9. 9.1 9.2 9.3 10. 10.1 10.2 10.3

Simboluri utile Forme normale. Lema Bar-Hillel Forma normal Chomsky Forma normal Greibach Lema Bar-Hillel Gramatici i automate Gramatici liniare i limbaje regulate Automate pushdown Limbaje independente de context i automate pushdown Maini Turing i automate liniar mrginite Proprieti de nchidere Familia limbajelor regulate Familia limbajelor independente de context Specificarea sintaxei limbajelor de programare Limbajul C++ Limbajul Prolog Limbajul XML Introducere n analiza sintactic Problema recunoaterii Analiza sintactic descendent Analiza sintactic ascendent

3. Bibliografie minim obligatorie 1. G. Albeanu, Limbaje formale si automate, Editura FRM, 2005. 4. Bibliografie facultativ 2. Jucan Toader, Andrei Stefan, Limbaje formale i teoria automatelor, Universitatea Al. I. Cuza, Iai, 2002. 3. Atanasiu A., Mateescu Al., Limbaje formale, Culegere de probleme, Universitatea din Bucureti, 1990. 4.Hopcroft, J.E., Ullman, J.D., Introduction to Automata Theory, Languages and Computation, Addison Wesley Publishing Company, 1979. 5. Prezentarea leciei: Materialul este organizat n 10 capitole, conform programei 6. Aplicaii: Seciunea de aplicaii este constituita din toate exemplele, observaiile i comentariile prezente n manual. 7. Exemple de teste de autoevaluare: Testele de autoevaluare conin exerciii i probleme precum in LFA_teste_autoevaluare.pdf 8. Evaluarea computerizat sub forma de teste de tip gril: Se vor include teste similare celor prezentate in cadrul seciunilor de aplicaii, teste de autoevaluare i LFA_lista_probleme_propuse.pdf.

1. Limbaje i expresii regulate


1.1 Alfabet. Cuvnt. Limbaj Definiia 1.1 [Alfabet] Un alfabet este o mulime finit i nevid ale crei elemente sunt numite simboluri (litere). Notaie Alfabetele se vor nota prin semne precum: V, VN, VT, etc. Definiia 1.2 [Cuvnt] Fie = {a1, a2, ..., an} un alfabet, unde n este un numr natural nenul (n 1). Orice secven x = ai1ai2...air, aij , 1 j r, se numete cuvnt (ir, fraz) peste . Lungimea cuvntului x se noteaz cu |x| i este egal cu r. Convenim s considerm i cuvntul format cu zero simboluri pe care-l notm cu i l numim cuvntul vid sau irul nul. Notaii Mulimea tuturor cuvintelor peste se noteaz cu *, iar mulimea tuturor cuvintelor nenule, *-{}, se noteaz cu +. Observaia 1.1 Mulimea * este monoid n raport cu operaia de concatenare a cuvintelor definit prin xy = ai1ai2...airaj1aj2...ajs, dac x = ai1ai2...air, y = aj1aj2...,ajs, aip (1 p r) i ajq (1 q r). Observaia 1.2 Dac 0 = {}, 2 = (mulimea cuvintelor de lungime 2), 3 = 2 (mulimea cuvintelor de lungime 3), n = n-1 (mulimea cuvintelor de lungime n; n>1), atunci a) * = U k ;
k 0

b) + =

U
k 1

Definiia 1.3 Orice submulime L de cuvinte peste , L *, se numete limbaj peste . 1.2 Operaii cu limbaje Limbajele fiind mulimi, operaiile obinuite ale teoriei mulimilor acioneaz i asupra acestora. Pentru alfabetul fixat, au sens reuniunea, intersecia, complementara (fa de *) i diferena limbajelor. Aceste operaii vor fi notate, n mod uzual, prin , , C i -. Definiia 1.4 [Concatenarea, Produsul] Fie L1 (peste 1) i L2 (peste 2) limbaje . Atunci L1L2 = {uv| u L1, v L2 } se numete concatenarea sau produsul limbajelor L1 i L2. Observaia 1.3 L{}={}L=L; L = L = , pentru oricare limbaj L, unde este limbajul vid.

Definiia 1.5 [nchiderea Kleene] Fie L *. nchiderea Kleene a limbajului L este limbajul L* = U Lk ,
k 0

unde L0 = {}, Ln+1 = Ln L, n0. Notaie [nchiderea pozitiv] L+ = U Lk .


k 1

Observaia 1.4 Dac L este un limbaj -liber (nu conine cuvntul vid) atunci L+=L*-{}. Definiia 1.6 [Subcuvnt, Prefix, Sufix, Rsturnat] Fie irurile x, y * i x = ai1ai2...air. Dac exist u, v * astfel nct y = uxv, spunem c x este subcuvnt (subir) al lui y. Dac exist v * astfel nct y = xv atunci x este prefix al lui y, iar dac exist u * astfel nct y = ux, atunci x este sufix al lui y. irul Rsturnat(x) = air...ai2ai1, se numete rsturnatul (oglinditul) lui x. Notaii Pentru un ir y *, notm prin Sub(y), Pref(y), Suf(y) mulimea subcuvintelor, prefixelor i, respectiv, a sufixelor cuvntului y. Definiia 1.7 [Extinderea operaiilor Sub, Pref i Suf asupra limbajelor] Fie L *. Atunci Sub(L) = U Sub( x) ; Pref(L) = U Pref ( x) ; Suf(L) = U Suf ( x) .
xL

xL

xL

Observaia 1.5 n mod similar, se poate defini rsturnatul (oglinditul) limbajului L. Definiia 1.8 [Substituia] Fie ansamblul (U, V, s), unde U, V sunt alfabete, iar s : V P(U*) este o aplicaie oarecare. Aplicaia s extins la V* prin s()={}, s(xy)=s(x)s(y), x, y V*, iar apoi la limbaje, se numete substituie. Definiia 1.9 [Substituia finit. Homomorfismul] n condiiile definiiei 1.8, a) dac s(a) este o mulime finit, pentru orice a V, atunci s se numete substituie finit. b) dac s(a) are exact un element pentru fiecare a din V, atunci s este un homomorfism i scriem s(a) = x, n loc de s(a) = {x}. c) dac s(a) nu conine cuvntul vid, pentru orice a din V, atunci s este substituie -liber, sau homomorfism -liber (cnd este cazul). Dac h:V*U* este un homomorfism, atunci aplicaia g: U*V*, definit prin g(y)={xV*|h(x)=y}, pentru oricare yU*, este homomorfism invers pentru h. Propoziia 1.1 [Levi] Fie un alfabet i x, y, u, v *. Dac xy = uv atunci a) |x| > |u| exist w *, x = uw i v = wy; b) |x| = |u| x = u i y = v; c) |x| < |v| exist w *, u = xw i y = wv. Propoziia 1.2 [* este mulime numrabil] Dac este un alfabet, atunci * este mulime numrabil.

Definiia 1.10 [Mulimi nchise la operaii] Fie U o mulime univers i funcia f : U U. O mulime A U este nchis fa de f, sau n raport cu f, dac i numai dac pentru oricare x A rezult f(x) A. Propoziia 1.3 [nchiderea unei mulimi B n raport cu o operaie f cea mai mic mulime nchis la operaia f i care conine mulimea B]. Fie mulimea univers U, funcia f : U U i B U . Construim, n mod inductiv, irul de mulimi: A0 = B; Ak+1 = Ak {f(x) | x Ak}, k N i A = U Ak . Atunci:
kN

a) A este nchis fa de f;

b) Dac mulimea C este astfel nct B C U i este nchis fa de f atunci AC.

1.3 Mulimi regulate i expresii regulate Definiia 1.11 [Mulimi regulate] Fie un alfabet. Familia mulimilor regulate peste este definit recursiv astfel: (1) (L) ((L* i card L < ) L este mulime regulat peste ). Se includ aici mulimea vid i mulimea format doar cu irul nul . (2) Dac A i B sunt mulimi regulate peste atunci AB (reuniunea) i AB (produsul) sunt mulimi regulate peste . (3) Dac A este mulime regulat peste atunci A* este mulime regulat peste . (4) Singurele mulimi regulate peste sunt cele obinute prin aplicarea regulilor 1)-3). Observaia 1.6 [Familie nchis la operaiile: reuniune, produs i *] Familia mulimilor regulate peste este cea mai mic clas care conine toate mulimile finite de cuvinte peste i este nchis la reuniune, produs i *. Definiia 1.12 [Mulimea expresiilor regulate] Fie un alfabet. Mulimea expresiilor regulate peste este (prin definire recursiv) compus astfel: a) i sunt expresii regulate; b) a este o expresie regulat pentru oricare a ; c) dac r i s sunt expresii regulate atunci (r+s), (rs) i (r*) sunt expresii regulate; d) singurele expresii regulate sunt cele obinute prin regulile a-c. Definiia 1.13 [Limbajul unei expresii regulate numit i limbaj regulat] Fie r o expresie regulat peste alfabetul . Limbajul L(r), desemnat de expresia r, este obinut astfel: L() = ; L()={}, L(a) = {a}; L(r+s)=L(r)L(s); L(rs)=L(r)L(s) i L(r*) =(L(r))*. Observaia 1.7 a) Dac presupunem c ordinea operaiilor (pe baza prioritii de aplicare) este *, ., + atunci se poate renuna la paranteze. b) Din definia expresiilor regulate, rezult c o mulime este regulat peste dac i numai dac coincide cu limbajul unei expresii regulate peste .

c) Pentru o mulime regulat pot exista mai multe expresii regulate echivalente. Dou expresii regulate r1 i r2 sunt echivalente (scriem r1 r2) dac i numai dac L(r1) = L(r2). Propoziia 1.4 [Identiti cu expresii regulate] Fie r, s i t expresii regulate peste . Atunci: a) r + s s + r, r + + r, r + r r, (r + s) + t r + (s + t); b) r r r, r r , (rs)t r(st); n general, comutativitatea produsului nu are loc. c) r(s + t) rs + rt, (s + t)r sr + tr; d) r* r*r* (r*)* (+r)*, * * ; e) r* + r + r2 + r3 + + rk + rk+1r*, pentru k 0. f) (r+s)* (r* +s*)* (r*s*)* (r*s)*r* r*(sr*)*. Expresiile (r+s)* i r*+s* nu sunt, n general, echivalente. g) r*r rr*, r(sr)* (rs)*r; h) (r*s)* + (r + s)*s, (rs*)* + r(r + s)*; i) Dac L(s) atunci ((r sr + t) rs*t ) i ((r rs + t) r ts*).

2. Mecanisme generative fundamentale


2.1 Sisteme de rescriere Definitia 2.1 [Sistem de rescriere] Fie V un alfabet i PV* x V* o mulime finit de perechi numite reguli de rescriere. Ansamblul SR = (V, P) se numete sistem de rescriere. Definiia 2.2 [Generare (derivare) direct, lungimea unei derivri] Fie SR = (V, P), iar i cuvinte peste V. Atunci: a) genereaz direct (i se noteaz ) dac i numai dac exist irurile u, v, x i y astfel nct u Pref() Pref(), v Suf() Suf(), = uxv, = uyv, iar (x, y) P. * ) dac i numai dac exist cuvintele b) genereaz1 (i se noteaz peste V, 0 = , 1, 2, , k-1, k = , k 0, iar i genereaz direct i+1, 0 i k-1. Se spune c irul 0, 1, 2, , k-1, k formeaz o derivare pentru pornind de la irul . Numrul k este lungimea derivrii. Definiia 2.3 [Metod generativ] Fie V o mulime de simboluri, V un alfabet, A V* o mulime de iruri peste V, numite axiome. Structura Mg(L) se numete metod generativ pentru limbajul L, peste , dac Mg(L) = (SR, A, ), unde SR = (V, P) este un sistem de rescriere, iar L = {w * | exist A astfel nct genereaz w}. 2.2. Gramatici formale Definiia 2.4 [Gramatic formal] Ansamblul G = (, , S, P) se numete gramatic formal dac este o mulime nevid i finit de simboluri, numite neterminale, este o mulime nevid i finit de simboluri, numite terminale, astfel nct = , S este un neterminal cu rol de axiom, iar P este o mulime de perechi2 (p, q), notate i * sub forma p ::= q, unde p ()*()* i q ()*. Relaiile i sunt valabile i pentru cuvintele peste . Orice cuvnt peste care poate fi generat din S, se numete form propoziional n gramatica G. Fie FP(G) mulimea formelor propoziionale ale lui G. Limbajul generat de gramatica G este L(G) = {w | * w *, S w}, adic L(G) = FP(G) *. Notaie Dac sunt mai multe reguli cu acelai cuvnt n partea stng: (p, q1), (p, q2), , (p, qm), atunci convenim s notm aceast submulime de reguli (sau p-reguli) sub forma: p ::= q1 | q2 | | qm. De asemenea, notm prin V mulimea tuturor simbolurilor gramaticii G, adic V = .

1 2

Prin s-a notat nchiderea reflexiv i tranzitiv a relaiei binare . O pereche (p, q) se numete regul de rescriere sau producie; p reprezint membrul stng, iar q este membrul drept al produciei (p, q).
*

Observaia 2.1 Ansambul SR = ( , P) este un sistem de rescriere pentru limbajul L(G) pornind de la irul S. Metoda de generare pentru L(G) poate fi specificat prin structura (SR, {S}, ). Definiia 2.5 [Gramatici echivalente] Fie Gi = (i, , Si, Pi), i = 1, 2. Spunem c G1 i G2 sunt echivalente dac L(G1) = L(G2). 2.3. Clase de gramatici Definiia 2.6 [Ierarhia lui N. Chomsky] O gramatic G = (, , S, P) este de tip i, 0 i 3, dac sunt verificate restriciile (i) asupra regulilor din P: (i) (0) (1) Caracterizarea regulilor de rescriere Nici o restricie. Conform definiiei 2.4. Regulile sunt de forma uxv ::= uyv, u, v V*, x , y V+ sau de forma S ::= , astfel nct S nu apare n membrul drept al niciunei reguli. Regulile sunt de forma x ::= y, x , y V*. Denumire Gramatici generale Dependente de context (eng. Context-sensitive) sau monotone

Independente de context (eng. Contextfree) Liniare la dreapta (eng. Regulile sunt de forma x ::= wy sau x * Right linear) (3) ::= w, unde x, y , w . Regulile sunt de forma x ::= yw sau x Liniare la stnga (eng. * Left linear) ::= w, unde x, y , w . Un limbaj L este de tipul i dac exist o gramatic G de tipul i astfel nct L= L(G). (2) Observaia 2.2 Fie i familia limbajelor de tipul i. Se observ imediat c 0 1 i 2 3. De asemenea este adevrat c 1 2, dar justificarea nu este imediat.
* Propoziia 2.1 Pentru orice gramatic de tip 2, G = (, , S, P) , dac AB w, * * w1, B w2. atunci exist w1, w2 V* astfel nct: 1) w = w1w2 i 2) A

Propoziia 2.2 Pentru orice gramatic de tip 2, G = (, , S, P), exist o gramatic echivalent G = (, , S, P), de tip 2, n care toate produciile lui P care conin terminale sunt de forma A ::= a, a . Propoziia 2.3 Orice gramatic liniar la dreapta este echivalent cu o gramatic de acelai tip, dar cu reguli de forma: A ::= aB sau A ::= a, unde A, B , iar a {}. Propoziia 2.4 Fie G o gramatic liniar la stnga, exist o gramatic liniar la stnga G astfel nct L(G) = L(G), iar regulile gramaticii G sunt numai de forma A ::= Ba i A ::= a, unde A, B , iar a {}. Propoziia 2.5 Fie G o gramatic n care produciile sunt de forma A ::= Ba i A ::= a. Atunci exist o gramatic G echivalent cu G pentru care produciile sunt de forma A ::= aB i A ::= a.

Observaia 2.3 Propoziiile anterioare arat echivalena dintre gramaticile liniare la stnga i cele liniare la dreapta. Nu trebuie crezut c dac o gramatic are pe lng reguli de tipul A ::= a, att reguli de forma A ::= aB, ct i reguli de forma C ::= Db, ea va fi echivalent cu o gramatic liniar la stnga (sau la dreapta). De exemplu, gramatica cu regulile { S ::= aA | aB; A ::= Sb; B ::= b} genereaz un limbaj de tip 2 i nu unul de tip 3 aa cum ar prea la prima vedere. 2.4 Arbori de derivare, ambiguitate i recursivitate Att pentru gramatici independente de context ct i pentru gramatici liniare (la stnga sau la dreapta) modul prin care o form propozitional poate fi obinut, prin derivare, poate fi reprezentat grafic cu ajutorul structurilor arborescente. Fie D = (X, A) un digraf (graf orientat): dac (x, y) A atunci x este predecesorul lui y, iar y este succesorul lui x. Arborii ordonai sunt digrafuri conexe i fr circuite cu proprietile: a) Exist, n D, un unic nod, numit rdcin care nu are predecesori i de la care exist un drum la fiecare nod al digrafului; b) Orice nod, altul dect rdcina, are exact un predecesor; c) Mulimea succesorilor oricrui nod este ordonat. Arborii orientai se deseneaz cu rdcina n sus, iar ordinea succesorilor unui nod este de la stnga la dreapta. Se nelege c sensul arcelor este de sus n jos; astfel nu mai este nevoie de sgei. Nodurile cu descendeni din D sunt noduri interioare, iar celelalte se numesc noduri terminale sau frunze. Definiia 2.7 [Arbore de derivare] Fie G = (, , S, P) o gramatic de tip cel puin 2. Un arbore de derivare pentru G este un arbore ordonat D = (X, A) mpreun cu o funcie de etichetare f : X {} cu proprietile: 1) f(r) = S, dac r este rdcina arborelui; 2) Dac x X atunci f(x) ; 3) Dac x are descendenii x1, x2, , xn, n aceast ordine, atunci P conine regula de rescriere f(x) ::= f(x1)f(x2)f(xn). 4) Dac f(x) = , x nu are descendeni (este frunz). Un subarbore al unui arbore de derivare, este un nod particular al arborelui (care devine rdcin pentru subarbore) mpreun cu toi descendenii lui. Dac rdcina subarborelui are eticheta A atunci acesta este numit A-arbore. Arborele de derivare pentru gramatica G este un S-arbore. Ordinea descendenilor unui nod n arborele de derivare induce o ordine n mulimea frunzelor arborelui de derivare. Cuvntul obinut din etichetele frunzelor arborelui de dervare, n ordinea indus, se numete frontiera arborelui. Frontiera unui arbore de derivare este o form propoziional a gramaticii G, mai mult, frontiera unui A-arbore este un cuvnt peste astfel nct A * . Propoziia 2.6 Fie G = (, , S, P) o gramatic independent de context. Oricare ar fi * A , ( )*, A dac i numai dac exist un A-arbore cu frontiera .

Observaia 2.4 Fie G = (, , S, P) o gramatic independent de context. Atunci * , dac i numai dac exist un arbore de derivare (S-arbore) cu L(G), adic S frontiera . Definiia 2.8 [Derivare extrem stnga/dreapta] Fie G = (, , S, P) o gramatic independent de context. Dac ntr-o derivare n gramatica G, la fiecare pas este aplicat o producie celui mai din stnga (resp. dreapta) neterminal atunci derivarea se numete extrem3 stnga (resp. dreapta). Observaia 2.5 Fie G = (, , S, P) o gramatic independent de context i w L(G), deci exist un arbore de derivare cu frontiera w. a) Evident, se poate pune n eviden o derivare extrem stnga (resp. dreapta) pentru w din S. Totui, pentru un anumit cuvnt pot exista mai multe derivri extrem stnga (resp. dreapta), ceea ce denot o ambiguitate n procesul de generare. b) Pentru orice cuvnt w L(G), numrul de derivri extrem stnga pentru w este egal cu numrul de derivri extrem dreapta. Definiia 2.9 [Gramatic ambigu] Fie G = (, , S, P) o gramatic independent de context. G se numete ambigu dac exist wL(G) cu cel puin dou derivri extrem stnga (resp. dreapta) distincte. Un limbaj L nu este ambiguu dac poate fi generat de o gramatic care nu este ambigu. Dac orice gramatic care genereaz L este ambigu atunci se spune c L este inerent ambiguu. Observaia 2.6 Orice gramatic independent de context care conine, printre regulile sale de rescriere, producii de unul din tipurile (1)-(4), cu neterminalul A util in generarea de cuvinte peste , este ambigu: (1) A ::= AA; (2) A ::= AA; (3) A ::= A | A; (4) A ::= A | AA. Definiia 2.10 [Recursivitate] Fie G = (, , S, P) o gramatic independent de context. Un neterminal A este numit recursiv la stnga (resp. dreapta) dac A * * A), ()*. O gramatic este recursiv la stnga A, (resp. A (resp. la dreapta) dac mulimea simbolurilor neterminale conine cel puin un simbol recursiv la stnga (resp. la dreapta). Propoziia 2.7 Fie G = (, , S, P) o gramatic independent de context, iar A cu proprietatea c exist o producie de forma A ::= A. Atunci exist o gramatic G echivalent cu G care pentru orice A-regul A ::= avem A Pref(). 2.5 Complexitatea sintactic a gramaticilor i limbajelor Un limbaj, n general, poate fi generat de ctre foarte multe gramatici distincte. Pentru aplicaii practice trebuie utilizate gramatici ct mai simple. n cele ce urmeaz se consider complexitatea static a gramaticilor (mrimea i structura gramaticilor.)

n unele publicaii se omite cuvntul extrem, folosindu-se noiunile de derivare stnga (resp. dreapta) n acepiunea definiiei 2.8.
3

Definiia 2.11 [Msurarea complexitii sintactice] Fie G o clas de gramatici i fie L(G) familia limbajelor generate de gramaticile din clasa G. O msur a complexitii gramaticilor din clasa G este o aplicaie : G N. Complexitatea sintactic a limbajelor din familia L(G) este (L) = min { (G) | L = L(G), G G}, L L(G). Definiia 2.12 [Msurile Var, Prod i Simb] Fie G = (, , S, P) o gramatic independent de context (G G2). Definim urmtoarele msuri de complexitate static: a) Var : G2 N, Var(G) = ||, b) Prod : G2 N, Prod(G) = |P|; c) Simb : G2 N, Simb(G) = {Simb(r) | r P}, unde Simb(r) = |x|+2, dac r este regula A ::= x. Definiia 2.13 [Indexul limbajelor independente de context] Fie Fie G = (, , S, P) o gramatic independent de context (G G2) i derivarea D: S = w0 w1 wk. Fie N(wi) numrul de apariii ale simbolurilor din n irul wi. Indexul derivrii D, n gramatica G, este Index(D, G) = max N(wi).
1i k

Fie x L(G) i D(x) mulimea derivrilor lui x din S, n gramatica G. Indexul irului x n raport cu gramatica G este Index (x, G) = min Index(D, G).
DD ( x )

Indexul gramaticii G este Index(G) = sup {Index(x, G), x L(G)}. Msurile prezentate pot fi extinse i la clase de limbaje. Asupra unei msuri a complexitii sintactice statice a gramaticilor i limbajelor, dintr-o anumit clas G, se pun, n mod natural, urmtoarele probleme. a) Pentru G oarecare din clasa G: P1: Se poate determina (G)? P2: Se poate determina (L(G))? P3: Se poate decide dac (G) = (L(G))? P4: Se poate construi o gramatic echivalent G astfel nct (G) = (L(G)) b) P5: Pentru n arbitrar, dar nenul, se poate decide algoritmic dac (L(G)) = n ? Evident, P1 are rspuns afirmativ, dar P2 P5 au rspuns negativ (conform Pun(1984).)
Propoziia 2.8 [Gruska(1967)] Pentru oricare n 1, exist Ln {a, b}*, Ln limbaj de tip 3, astfel nct Var(Ln) = n. Definiia 2.14 [Limbajul D1] Limbajul D1 este limbajul generat de gramatica4 G = ({S}, {a, b}, S, P) unde P = {(S, SS); (S, ), (S, aSb)}. Propoziia 2.9 [Salomaa(1969)] Limbajul D1 are indexul infinit n raport cu gramaticile independente de context.

Aceast gramatic este echivalent cu o gramatic G independent de context (dup eliminare produciilor).
4

3. Mecanisme pentru recunoaterea automat a mulimilor regulate


3.1 Automatul finit determinist (AFD) Definiia 3.1 [AFD] Un sistem AFD (automat finit determinist) este o structur M = (Q, , , q0, F) unde: Q este o mulime finit i nevid de elemente numite stri; este un alfabet (numit, de intrare); : Qx Q este o funcie parial (parial definit), numit funcie de tranziie; q0 Q este starea iniial a automatului M i F Q este o mulime nevid, numit mulimea strilor finale. Observaia 3.1 [Diagrama de tranziie] Unui sistem AFD i se poate asocia un digraf (o diagram de tranziie) astfel: nodurile digrafului sunt strile automatului (corespund elementelor mulimii Q); dac (q, a) = p atunci, n digraf, exist un arc de la nodul q la nodul p, etichetat cu simbolul a; digraful nu conine alte noduri i alte arce n afara celor specificate mai sus. Definiia 3.2 [Extinderea funciei ] Fie ^ : Qx* Q definit prin: ^(q,) = q, pentru oricare q Q; ^(q,a) = (q,a), pentru oricare qQ i oricare a ; ^(q, wa) = (^(q, w), a), pentru oricare q Q, a i w *. Deoarece ^(q, a) = (q, a), pentru oricare a se poate nota ^ tot cu , fr nici o confuzie. Propoziia 3.1 Cu notaiile de mai sus, (q, uv) = ((q,u), v), pentru oricare u, v *. Definiia 3.3 [Limbaj acceptat de sisteme AFD] Fie M =(Q, , , q0, F) un AFD. Limbajul acceptat de M, notat L(M), este: L(M) = {u | u *, (q0, u) F}. 3.2 Automatul finit nedeterminist (AFN) Definiia 3.4 [AFN] Un sistem AFN (automat finit nedeterminist) este o structur N = (Q, , , q0, F), unde Q, , q0 i F au semnificaia din definia 3.1, iar : Qx P(Q), unde P(Q) reprezint mulimea submulimilor lui Q (adesea notat prin 2Q). Observaia 3.2 [Diagrama de tranziie] Diagrama de tranziie (digraful asociat) se obine precum n observaia 3.1. Definiia 3.5 [Extinderea funciei de tranziie] Fie ^ : Qx* P(Q) astfel: ^(q, ) = {q}; ^(q, wa) = {p | exist r ^(q, w), p (r,a)}. Dac w = , obinem ^(q, a) = (q, a), oricare a . Astfel, se poate nota ^ tot cu , fr nici o confuzie.

Observaia 3.3 Pentru utilizarea sistemelor AFN n recunoaterea limbajelor se extinde la nivelul mulimii P(Q)x*, astfel nct pentru orice u * au loc relaiile: (, u) = ; (P, u) = U (q, u ) , oricare P Q, P .
qP

Definiia 3.6 [Limbaj acceptat de sisteme AFN] Fie N un sistem AFN ca n definiia 3.4. Limbajul acceptat de N este: L(N) = {w | w *, (q0, w) F }. 3.3 Puterea de acceptare a sistemelor AFD i AFN Propoziia 3.2 Orice limbaj acceptat de un AFD este acceptat de un AFN. Propoziia 3.3 Fie L un limbaj acceptat de un AFN. Atunci exist un AFD, notat cu M, astfel nct L(M) = L. Teorema 3.1 Automatele finite nedeterministe au aceeai putere de acceptare ca automatele finite deterministe. Sistemele AFN i AFD sunt echivalente din punct de vedere al clasei limbajelor acceptate. 3.4 Automate cu -deplasri sau sisteme tranziionale Definiia 3.7 [Sistem tranziional] Un automat cu -deplasri sau sistem tranziional, este o structur N = (Q, , , q0, F) n care Q, , q0 i F au semnificaia din definiia 3.4, iar funcia de tranziie este definit astfel: : Qx( {}) P(Q), adic maina finit permite -deplasri. Diagrama de tranziie are arcele etichetate cu elemente din {}.
* Notaie Dac p (q, ) scriem q []p. Fie [ ] , nchiderea reflexiv i tranzitiv a relaiei []. Notm prin (q) mulimea strilor n care ajunge maina * [ ] p} i efectund -deplasri, pornind din q. Mai precis, (q) = {p Q| q extindem notaia pentru mulimi de stri adic (P)= U (q ) , oricare P Q.
qP

Observaia 3.4 Fie N = (Q, , , q0, F) un sistem tranziional. Funcia poate fi extins la cuvinte peste , prin funcia ^ astfel: a) ^(s, ) = (s), oricare sQ; b) Dac * i a atunci ^(s, a) = (P), unde P = {p | exist r ^(s, ), p (r,a)}. c) (P, a)= U (q, a ) ; ^(P, ) = U (q, ) , P Q, a , *
qP qP

d) ^(s, a)=((^(q,), a), deci este necesar distincia ntre i ^. Definiia 3.8 [Limbaj acceptat de un sistem tranziional] Fie N = (Q, , , q0, F) un sistem tranziional. Limbajul acceptat de N este L(N) = { | *, ^(q0, ) F }. Propoziia 3.4 Fie L un limbaj peste acceptat de un sistem tranziional, notat cu N. Atunci exist un AFN, notat cu N, astfel nct L(N) = L (= L(N)). Reciproca este, n mod banal, adevrat.

3.5 Sistemele AFN i expresiile regulate Propoziia 3.5 Fie r o expresie regulat. Atunci exist un AFN care recunoate limbajul L(r). Propoziia 3.6 Dac L este un limbaj acceptat de un AFD atunci L este o mulime regulat. Teorema 3.2 Un limbaj este regulat dac i numai dac este recunoscut de un AFN (deci i de un AFD). Teorema 3.3 [Kleene] Familia limbajelor regulate este cea mai mic familie de limbaje care conine limbajele finite i este nchis la reuniune, produs (concatenare) i la operaia * (nchiderea Kleene).

4. Optimizarea automatelor finite


4.1 Stri accesibile. Stri utile Definiia 4.1 [Stri accesibile, stri utile] Fie M = (Q, , , q0, F) un AFD. O stare q Q este accesibil din q0 dac exist un cuvnt w * astfel nct (q0, w) = q. O stare se numete inaccesibil dac nu este accesibil. O stare q este util dac exist un cuvnt w * astfel nct (q, w) F. O stare este inutil dac nu este util. Algoritmul 4.1 [Determinarea strilor accesibile1] Prin aplicarea strategiei greedy, putem obine un ir ascendent de mulimi cu stri accesibile, majorat n sensul relaiei de incluziune de mulimea strilor automatului considerat. Fie S0 = {q0}. Pentru i 0, formm Si+1 = Si {q Q - Si| exist s Si i a astfel nct (s, a) = q}. O alt modalitate de construire a irului ascendent utilizeaz relaia de recuren: Si+1 = Si {(s, a) | s Si, a }. Este clar c trebuie s existe k0, k0 |Q| astfel nct Sk0 = Sk0+1, k0 fiind cel mai mic numr natural cu aceast proprietate; n aceste condiii Sk0+j = Sk0, oricare j 1. Mulimea strilor accesibile este Sk0. Intrare: Q, , q0, , F Ieire: Q mulimea strilor accesibile SEQ 1. i := 0; S0 := {q0}; 2. do {Si+1 := Si {(s, a) | s Si, a }; i = i+1; }while(Si Si-1 ); 3. Q = Si. END. Propoziia 4.1 Cu notaiile de mai sus, urmtoarele afirmaii sunt adevrate: a) q este stare accesibil dac i numai dac q Q; b) Dac |Q| = m, iar || = n, atunci complexitatea algoritmului 4.1 este O(mn). Algoritmul 4.2 [Determinarea strilor utile2] Prin aplicarea strategiei greedy, putem obine un ir ascendent de mulimi cu stri utile, majorat n sensul relaiei de incluziune de mulimea strilor automatului considerat. Fie U0 = F. Pentru i 0, formm Ui+1 = Ui {q Q - Ui| exist a astfel nct (q, a) Ui}. Este clar c trebuie s existe k0, k0 |Q| astfel nct Uk0 = Uk0+1, k0 fiind cel mai mic numr natural cu aceast proprietate; n aceste condiii Uk0+j = Uk0, oricare j1. Mulimea strilor utile este Uk0.

Problema determinrii strilor accesibile este echivalent cu problema determinrii vrfurilor unui digraf care sunt legate prin cel puin un drum de vrful care corespunde strii q0. Dac se determin matricea existenei drumurilor sau, echivalent, nchiderea tranzitiv a relaiei binare asociat diagramei de tranziie (de exemplu, folosind algoritmul Roy-Warshal) atunci strile accesibile corespund valorii 1 n linia strii q0 din matricea existenei drumurilor. 2 n unele lucrri, strile utile sunt denumite stri observabile.
1

Intrare: Q, , q0, , F Ieire: U mulimea strilor utile SEQ 1. i := 0; U0:= F; 2. do { for a do for q Q - Ui do if (q, a) Ui then Ui+1 = Ui {q}; i = i +1; }while(Ui Ui-1 ); 3. U = Ui. END. Propoziia 4.2 Cu notaiile de mai sus, urmtoarele afirmaii sunt adevrate: a) q este stare util dac i numai dac q U; b) Dac |Q| = m, iar || = n, atunci complexitatea algoritmului 4.2 este O(mn). 4.2 Congruene i limbaje regulate Definiia 4.2 [Relaie de echivalen. Invarian. Congruen] Fie un alfabet i o relaie binar pe *. Relaia se numete de echivalen dac este reflexiv ( , oricare *), simetric ( , oricare * i *) i tranzitiv ( i , oricare *, * i *). Relaia de echivalen , pe *, este invariant la stnga dac oricare *. Relaia de echivalen , pe *, este invariant la dreapta dac oricare *. O relaie de echivalen este numit congruen dac este invariant att la stnga ct i la dreapta. Relaia de echivalen este de indice finit dac numrul claselor de echivalen3 ale relaiei este finit. Teorema 4.1 [Myhill-Nerode] Fie L * un limbaj. Urmtoarele afirmaii sunt echivalente: 1) L este un limbaj regulat; 2) L este reuniunea unor clase de echivalen ale unei relaii de echivalen invariant la dreapta, de rang finit; 3) Relaia L *x* definit prin: u L v dac i numai dac oricare w * astfel nct uw L vw L este o relaie de echivalen invariant la dreapta, de rang finit. Demonstraie. 1 2. Dac L este limbaj regulat, atunci exist un automat finit determinist M = (Q, , , q0, F) astfel nct L(M) = L (vezi capitolul 3). Relaia M *x* definit prin u M v dac i numai dac (q0, u) = (q0, v), este o relaie de echivalen, chiar invariant la dreapta de rang finit (u M v i w * uw M vw) ale crei clase de echivalen sunt n numr cel mult egal cu numrul strilor automatului M. Deducem c L este reuniunea claselor de echivalen corespunztoare strilor finale ale automatului M.

Clasa de echivalen a unui element x este format din totalitatea elementelor echivalente cu x.

2 3. Se verific uor c L este o relaie de echivalen invariant la dreapta, de rang finit. 3 1. Se construiete automatul M = (Q, , , q0, F), unde Q este mulimea (finit) a claselor de echivalen a relaiei L, q0 este clasa de echivalen a cuvntului vid , F este mulimea claselor de echivalen a cuvintelor limbajului L, iar este definit astfel: fie [w] clasa de echivalen a cuvntului w, atunci, orice [w] Q i orice a , ([w], a)= [wa] (definire consistent). Fie w *. Atunci w L(M) dac i numai dac (q0, w) F, dac i numai dac ([], w) F, dac i numai dac [w] F, dac i numai dac w L. Deci L(M)=L. Teorema 4.2 Automatul M construit anterior (n demonstraia teoremei 4.1) este automatul minimal care accept limbajul L i el este unic pn la o redenumire a strilor (un izomorfism). Definiia 4.3 [Relaia ] Fie M = (Q, , , q0, F) un AFD. Definim, pe mulimea strilor, o relaie de echivalen, notat , astfel: Dac p, q Q atunci p q dac i numai dac pentru oricare w * avem echivalena: (p, w) F (q, w) F. Observaia 4.1 Exist o coresponden biunivoc ntre clasele de echivalen ale relaiei i strile automatului M construit prin teorema Myhill-Nerode. Pentru a determina strile automatului minimal care accept limbajul L(M) este suficient s gsim clasele de echivalen ale relaiei . Algoritmul 4.3 [Determinarea strilor echivalente] Intrare: AFD M = (Q, , , q0, F) Ieire: Mulimea perechilor de stri echivalente, mulimea perechilor de stri neechivalente. Paii: 1. Se marcheaz toate perechile (p, q), p F, q Q - F; S1 = F, S2 = Q - F. 2. Pentru fiecare pereche (p, q) SxS, unde S = S1 sau S = S2, p q, execut A. Dac exist a astfel nct ((p, a), (q, a)) este marcat atunci : i) se marcheaz (p, q); ii) se marcheaz, recursiv, toate perechile din lista lui (p, q) i din listele altor perechi marcate la acest pas. B. Dac pentru oricare a , perechea ((p, a), (q, a)) nu este marcat atunci, pentru oricare a , se adaug (p, q) n lista perechii ((p, a), (q, a)) ori de cte ori (p, a) (q, a). Observaia 4.2 Orice p, q Q, p nu este echivalent cu q (relativ la ) dac i numai dac n urma aplicrii algoritmului 4.3 perechea (p, q) este marcat. Observaia 4.3 Odat gsite perechile de stri echivalente se poate construi automatul minimal care accept limbajul supus discuiei. Fie M=(Q, , , [q0], F) unde prin [q] notm clasa de echivalen relativ la relaia care are ca reprezentant starea q. Celelalte elemente sunt: Q = {[q] | q este

stare accesibil din q0}, F = {[q] | q F}, ([q], a)= [(q, a)], oricare [q] Qi oricare a . 4.3 Lema de pompare pentru limbaje regulate. Aplicaii Teorema 4.3 [Lema de pompare] Fie L un limbaj regulat. Exist atunci un numr natural n astfel nct pentru orice cuvnt w L, |w| n, w = xyz cu proprietile: a) |xy| n; b) |y| 1; c) xyiz L pentru oricare i 0. Propoziia 4.3 Fie L un limbaj acceptat de un AFD cu n stri. Atunci L exist w L astfel nct |w| < n; Propoziia 4.4 Fie L un limbaj acceptat de un AFD cu n stri. Atunci L este infinit exist w L, n |w| < 2n. Algoritmul 4.4 Fie L un limbaj acceptat de un AFD cu n stri. Pentru a verifica dac L , se poate aplica urmtorul algoritm, cu complexitatea mult mai mic dect metoda furnizat prin propoziia 4.3. Intrare: Q, , q0, , F Ieire: DA dac L este nevid; NU n caz contrar. SEQ 1. i := 0; S0:= {q0}; 2. do {Si+1 := Si {(s, a) | s Si, a }; i = i + 1;} while(Si Si-1 ); 3. if Si F = then write NU; else write DA. END. Se observ c mulimea Si, de la pasul 3, conine strile accesibile. Este clar c dac nici o stare final nu este accesibil atunci limbajul L este vid. Algoritmul 4.5 Fie L un limbaj acceptat de un AFD cu n stri. Pentru a verifica dac L , se poate aplica urmtorul algoritm, cu complexitatea mult mai mic dect metoda furnizat prin propoziia 4.4. Intrare: Q, , q0, , F Ieire: DA dac L este infinit; NU n caz contrar. SEQ 1. i := 0; S0:= {q0}; 2. do {Si+1 := Si {(s, a) | s Si, a }; i = i + 1; }while(i < n); 3. do{ if Si F then write DA; stop. Si+1 := Si {(s, a) | s Si, a }; i = i + 1; }while(i < 2n); 4. write NU. END.

5. Transformri asupra gramaticilor formale


5.1 Transformri elementare Propoziia 5.1 [Transformare privind simbolul de start] Fie G = (, , S, P) o gramatic de tipul i (i = 1, 2, 3). Exist o gramatic G1 de acelai tip cu G, echivalent cu G, astfel nct simbolul iniial S1 al gramaticii G1 s nu apar n nici unul din cuvintele aflate n membrul al doilea al produciilor gramaticii G1. Corolarul 5.1 [Generarea limbajelor L {}, unde L] Dac L este un limbaj de tipul i (i = 1, 2, 3), atunci exist o gramatic G = (, , S, P) care genereaz limbajul L {} astfel nct: 1) Simbolul iniial S s nu apar n membrul al doilea n nici una din produciile gramaticii G. 2) n mulimea P s existe regula S ::= . 3) Gramatica G1 = (, , S, P1), unde P1 := P { S ::= } s fie de tipul i (i = 1, 2, 3) i s genereze limbajul L. Astfel putem defini limbajele de tip i (i = 1, 2, 3), precum n definiia 5.1. Definiia 5.1 [Limbaj de tip i (i = 1, 2, 3)] Limbajul L este de tip i (i = 1, 2, 3), dac limbajul L {} este generat de o gramatic de tipul i (i = 1, 2, 3). Lema 5.1 [Existena derivrilor stngi] Fie G = (, , S, P) o gramatic de tipul 2. * Atunci pentru orice A i w * cu A w, exist o derivare stng a lui w din A. 5.2 Redenumiri i -producii Propoziia 5.3 [Eliminarea redenumirilor] Fie G = (, , S, P) o gramatic de tipul 2 sau 3. Exist o gramatic G1 = (, , S, P1) de acelai tip cu G, echivalent cu G i fr redenumiri. Definiia 5.2 [Gramatici cu -producii] Fie G = (, , S, P) o gramatic cu produciile de forma (p, q) x()*. Se numete -producie orice producie de forma (X, ) i scriem X ::= (X ). Propoziia 5.4 [Determinarea simbolurilor neterminale care genereaz cuvntul vid] Fie G = (, , S, P) o gramatic cu produciile de forma (p, q) x()*. irul de mulimi generat prin: U0 = ; Um+1 = Um {X | X , exist w, w Um*, X ::= w P} are urmtoarele proprieti: a) U0 U1 Um i exist k, numr natural, astfe nct Uk = Uk+1. b) Dac Uk = Uk+1, atunci Uk = Uk+i, pentru oricare i > 0. c) Fie k* cel mai mic numr natural pentru care Uk* = Uk* +1. Atunci * Uk* = {X | X i X }.

Corolarul 5.2 [Limbaje independente de context generate de gramatici cu producii] Fie G = (, , S, P) o gramatic cu produciile de forma (p, q) x()*. Atunci L(G) este un limbaj independent de context. 5.3 Simboluri utile Propoziia 5.5 [Simboluri care genereaz cuvinte peste ] Fie G = (, , S, P) o gramatic independent de context cu L(G) . Exist o gramatic G1 = (1, , S, P1) independent de context, echivalent cu G, astfel nct pentru oricare X 1, * w} este nevid. mulimea {w * | X Corolarul 5.3 [Decidabilitatea problemei L(G) ] Exist un algoritm care pentru o gramatic independent de context stabilete dac L(G) = sau L(G) . Definiia 5.3 [Simboluri inaccesibile] Fie G = (, , S, P) o gramatic independent de context cu L(G) . A este un simbol inaccesibil dac nu exist nici o * derivare S uAv cu u, v ()*. Altfel simbolul A este accesibil. Propoziia 5.6 [Determinarea simbolurilor accesibile] Fie G = (, , S, P) o gramatic independent de context cu L(G) . Exist G1 = (1, 1, S, P1) echivalent cu G care nu are simboluri inaccesibile. Propoziia 5.7 Fie G = (, , S, P) o gramatic independent de context cu L(G) . Atunci G este echivalent cu o gramatic G1 fr simboluri neutilizabile. Definiia 5.4 [Gramatic proprie] Fie G = (, , S, P) o gramatic independent de context. G se numete gramatic proprie dac conine numai simboluri utilizabile (accesibile i productive), nu conine -producii i nu are redenumiri ntr-unul sau mai muli pai. Teorema 5.1 Fie G = (, , S, P) o gramatic independent de context cu L(G) . Exist G1 = (1, 1, S, P1) echivalent cu G care este gramatic proprie.

6. Forme normale. Lema Bar-Hillel


6.1 Forma normal Chomsky Definiia 6.1 [FNC] O gramatic G = (, , S, P) de tipul 2, fr -producii i fr redenumiri, este n forma normal Chomsky (FNC) dac produciile sale sunt de una din formele A ::= BC, A ::= a, pentru A, B, C , a . Observaia 6.1 Conform teoremei 5.1 este suficient s se lucreze cu mecanisme generative echivalente cu gramaticile proprii (obinute dup transformrile necesare). Teorema 6.1 Fie G = (, , S, P) o gramatic proprie. Atunci exist G1 gramatic n forma normal Chomsky echivalent cu G. Teorema 6.2 Fie G = (, , S, P) o gramatic de tip 2 n forma normal Chomsky. Dac derivarea A w1 wn, n 1, wn *, are proprietatea c cel mai lung lan de la rdcin la vrfurile terminale n arborele de derivare asociat ei n gramatica GA = (, , A, P) are k noduri, atunci |wn| 2k-1. 6.2 Forma normal Greibach Definiia 6.2 [FNG] O gramatic G = (, , S, P), fr -producii i fr redenumiri, este n forma normal Greibach (FNG) dac P conine producii numai de forma A ::= aW, pentru A , a i W ()*. Lema 6.1 Fie gramatica proprie G = (, , S, P) i A ::= 1B2 o A-producie i B ::= 1 | 2 | k toate B-produciile din mulimea P. Considerm G1 = (, , S, P1) unde P1 = (P {A ::= 1B2}) {A ::= 112 | 122 | | 1k2 }. Atunci G i G1 sunt gramatici echivalente. Lema 6.2 Fie gramatica fr -producii i numai cu simboluri utilizabile, G = (, , S, P) i A ::= A1 | A2 | Ak toate A-produciile recursive la stnga i A ::= 1 | 2 | m restul A-produciilor din mulimea P. Fie X un simbol nou, X , 1 = {X} i gramatica G1 = (1, , S, P1), unde P1 se obine din P prin nlocuirea tuturor A-produciilor cu regulile: A ::= 1 | 2 | m, A ::= 1X | 2X | mX i X ::= 1 | 2 | k, X ::= 1X | 2X | kX. Atunci G i G1 sunt echivalente. Teorema 6.3 Fie G = (, , S, P) o gramatic proprie. Atunci exist gramatica G*, n forma normal Greibach, echivalent cu G. Demonstraie. Asupra gramaticii G se pot aplica metodele descrise n cadrul lemelor 6.1 i 6.2. Se poate aduce ultima gramatic obinut la forma normal Chomsky. Notm aceast gramatic cu G1. Presupunem c neterminalele gramaticii G1 sunt numerotate i scriem regulile n ordine cresctoare a indicilor simbolurilor

neterminale. Aplicm un algoritm simplu prin care se obine G*, cu mulimea regulilor P*, n forma normal Greibach: Intrare: Gramatica G1 n forma normal Chomsky, nerecursiv la stnga, fr producii, 1 = {A1, A2, ., Am}, S1 A1. Ieire: Gramatica G* n forma normal Greibach. SEQ 1. P* := P1; i := m; 2. while i > 1 do SEQ i := i - 1; while (exist j, i < j m, Ai ::= Aj n P*) do P* := (P* - {Ai ::= Aj}) {Ai ::= | Aj ::= P*} END 3. for indici i ai simbolurilor Y do while (exist j, 1 j m, Yi ::= Aj P*) do P* := (P* - { Yi ::= Aj }) {Yi ::= | Aj ::= P*} END. Trebuie observat c, n general, procesul de normalizare, conduce la creterea numrului neterminalelor dar i a regulilor. Astfel cresc msurile Var i Prod. 6.3 Lema Bar-Hillel Teorema 6.4 [Lema Bar-Hillel] Fie L un limbaj independent de context oarecare. Atunci exist numerele naturale p = p(L) i q = q(L) astfel nct orice cuvnt w L cu |w| > p se poate descompune sub forma w = uvxyz, unde |vxy| q, vy i pentru oricare numr natural i, uvixyiz L. Propoziia 6.1 Fie G o gramatic independent de context. Atunci L(G) este infinit dac i numai dac exist w L(G) astfel nct p < |w| p + q, unde p i q sunt numerele furnizate de teorema 6.4.

7. Gramatici i automate
7.1 Gramatici liniare i limbaje regulate Teorema 7.1 Fie G = (, , S, P) o gramatic liniar la dreapta1. Atunci exist un automat finit nedeterminist (deci i unul determinist) M astfel nct L(M) = L(G). Teorema 7.2 Orice limbaj generat de o gramatic liniar2 este regulat. Teorema 7.3 Pentru orice limbaj regulat L exist o gramatic liniar G astfel nct L=L(G). 7.2 Automate pushdown Un automat pushdown (cu memorie local gestionat prin disciplina LIFO [eng. Last In First Out] numit memorie pushdown) citete banda de intrare (de la stnga la dreapta) folosind un numr de stri interne (ca i un AFD sau AFN), dar tranziia, n general nedeterminist, se face nu numai n raport cu starea anterioar i informaia curent de pe banda de intrare, ci i n funcie de cea mai recent informaie stocat n memoria auxiliar (prelucrat ca o stiv de capacitate infinit). Definiia 7.1 [APD] Un automat pushdown (APD) este un sistem M = (Q, , , , q0, Z0, F) unde Q, , q0, i F au semnificaiile cunoscute, este o mulime finit i nevid de simboluri care formeaz alfabetul pushdown, Z0 este simbolul pushdown iniial, iar este funcia de tranziie : Qx( {})x P(Qx*). Definiia 7.2 [Configuraie] Fie M = (Q, , , , q0, Z0, F) un APD. Orice triplet (q, w, ) Qx*x* se numete configuraie a automatului M. Elementele configuraiei au urmtoarea semnificaie: q este starea curent a unitii de comand a automatului; w este un cuvnt peste alfabetul de intrare , inclusiv , care reprezint partea necitit de pe banda de intrare3; reprezint coninutul memoriei stiv. Dac = atunci memoria stiv este vid. Definiia 7.3 [Micarea automatului] Fie q, s Q, a {}, Z , w * i , *. Configuraia (q, aw, Z) se afl n relaia |- cu configuraia (s, w, ) i se scrie (q, aw, Z) |- (s, w, ) dac i numai dac (s, ) (q, a, Z). Observaia 7.1 Micarea automatului este posibil numai dac memoria stiv este nevid.

A se vedea i propoziia 2.5. Din acest motiv gramaticile liniare se mai numesc i gramatici regulate. Rezult, de aici, c familia limbajelor de tip 3 conine limbajele finite i este nchis la operaiile de reuniune, produs i stelare (*). Astfel, limbajele de tip 3 sunt descriptibile cu ajutorul expresiilor regulate, generabile de gramatici liniare i recunoscute de sisteme tranziionale i deci de automate finite. 3 Capul de citire se gsete n dreptul primului simbol al cuvntului w. Se presupune c, la dreapta, dup ultimul caracter al cuvnului w se afl irul vid .
1 2

Definiia 7.4 [nchiderea reflexiv i tranzitiv a relaiei |-] nchiderea reflexiv i * tranzitiv a relaiei |-, notat prin , se definete astfel:
* (q1, w1, 1) (q2, w2, 2) dac (q1, w1, 1) = (q2, w2, 2)

sau exist k configuraii (pi, ui, i), i = 1, 2, , k, astfel nct (q1, w1, 1) = (p1, u1, 1), (q2, w2, 2) = (pk, uk, k) i (pi, ui, i) |- (pi+1, ui+1, i+1), i = 1, 2, , k-1. Definiia 7.5 [Cuvnt acceptat prin stare final] Fie M = (Q, , , , q0, Z0, F) un APD i w * un cuvnt. Atunci w este acceptat (recunoscut) de automatul M dac * exist q F i * astfel nct (q0, w, Z0) (q, , ). Definiia 7.6 [Limbaj acceptat prin stri finale] Fie M = (Q, , , , q0, Z0, F) un APD. Limbajul acceptat (recunoscut) de automatul M, notat L(M), este mulimea tuturor cuvintelor acceptate de M prin atingerea unei stri finale. Definiia 7.7 [Cuvnt acceptat cu memoria pushdown vid] Fie M = (Q, , , , q0, Z0, F) un APD i w * un cuvnt. Atunci w este acceptat (recunoscut) de automatul * M cu memoria pushdown vid4 dac exist q Q astfel nct (q0, w, Z0) (q, ,

). Mulimea tuturor cuvintelor acceptate de M cu memoria pushdown vid se va nota cu L(M) i este limbajul recunoscut de M cu memoria pushdown vid.
Teorema 7.4 [Un limbaj recunoscut de un APD cu stri finale poate fi recunoscut i de un APD cu memoria pushdown vid] Fie L(M) limbajul recunoscut de automatul pushdown M = (Q, , , , q0, Z0, F). Atunci exist un APD, notat M=(Q, , , , qinit, X, ), care recunoate L(M) cu memoria pushdown vid, adic L(M) = L(M). Teorema 7.5 [Un limbaj recunoscut de un APD cu memoria pushdown vid poate fi recunoscut i de un APD cu stri finale] Fie L(M) limbajul recunoscut de automatul pushdown M = (Q, , , , q0, Z0, ). Atunci exist un APD, notat M = (Q, , , , qinit, X, {qf}), care recunoate L(M) cu starea final qf, adic L(M) = L(M). 7.3 Limbaje independente de context i automate pushdown Teorema 7.6 Pentru orice gramatic independent de context G = (, , S, P) care genereaz limbajul L = L(G) exist un sistem APD care recunoate L. Teorema 7.7 Pentru orice sistem APD care recunoate limbajul L cu memoria pushdown vid, exist o gramatic independent de context care genereaz limbajul L. 7.4 Maini Turing i automate liniar mrginite Definiia 7.8 [MT] O main Turing sau sistem MT este o structur M = (Q, , , , q0, B, F) unde Q, , q0 i F au semnificaia uzual (vezi, de exemplu, sistemele AFD, AFN sau APD), este o mulime finit i nevid care conine , simbolul B (cu rol special, numit i blanc) i alte simboluri - ntreaga mulime numindu-se alfabetul de
4

Se observ c putem alege F = .

lucru, iar este funcia de tranziie definit astfel: : Qx Qxx{S, D} unde S, D nseamn stnga, respectiv dreapta. Definiia 7.9 [Configuraie] Fie M = (Q, , , , q0, B, F) un sistem MT. Se numete configuraie un cuvnt de forma q unde , *, iar q Q. Semnificaia elementelor este urmtoarea: este cuvntul de la nceput pn la capul de citirescriere, q este starea unitii de control i este cuvntul de la simbolul vizat (imediat din dreapta lui s) pn la ultimul simbol (diferit de blanc). Definiia 7.10 [Transformarea configuraiilor] Fie M = (Q, , , , q0, B, F) un sistem MT. Considerm simbolul |- pentru a descrie relaia binar definit pe mulimea configuraiilor. Fie configuraia x1x2xi-1qxixi+1xn, cu i = 1, 2, , n. Dac (q, xi) = (q, y, S) atunci: a) sufixele de blancuri dispar (se pot terge secvene de tipul BB); b) dac i = 1 atunci nu exist deplasare la stnga; c) dac i = 2, , n atunci x1x2xi-1 q xixi+1xn |- x1x2xi-2 q xi-1yxi+1xn. Dac (q, xi) = (q, y, D) atunci x1x2xi-1 q xixi+1xn |- x1x2xi-1 y q xi+1xn. * Considerm, de asemenea, simbolul pentru a descrie nchiderea reflexiv i tranzitiv a relaiei |-. Definiia 7.11 [Limbajul acceptat de un sistem MT] Fie M = (Q, , , , q0, B, F) un sistem MT. Limbajul acceptat de M, notat L(M), este definit prin: * L(M) = {w | w *, exist r F i , * astfel nct q0w r}. Observaia 7.2 Fie M = (Q, , , , q0, B, ) un sistem MT. Atunci L(M) = . Observaia 7.3 Fie M = (Q, , , , q0, B, Q) un sistem MT. Atunci L(M) = *. Observaia 7.4 Introducerea nedeterminismului asupra sistemelor MT nu crete puterea de acceptare. Mai precis, are loc teorema 7.8. Teorema 7.8 Pentru orice main Turing M exist o gramatic G, de tip 0, astfel nct L(M) = L(G). Definiia 7.12 [LBA] Un automat liniar mrginit sau sistem LBA (eng. Linear Bounded Automata) este un sistem MT, nedeterminist care satisface, n plus, urmtoarele dou condiii: a) Mulimea conine dou simboluri distincte cu semnificaie special, notate prin # i $. b) Sistemul MT nu se poate deplasa nici la stnga simbolului #, nici la dreapta simbolului $. Mai precis: (q, #) = (q, #, D) i (q, $) = (q, $, S). Definiia 7.13 [Limbajul acceptat de un sistem LBA] Fie M = (Q, , , , q0, B, F) un sistem LBA. Limbajul acceptat de M, notat L(M), este definit prin: * L(M) = {w | w *, exist r F i , * astfel nct q0#w$ r}. Definiia 7.14 [Gramatic monoton] O gramatic (formal) se numete monoton dac regulile sale u ::= v au proprietatea c |u| |v|.

Teorema 7.9 Urmtoarele afirmaiile (a) i (b) sunt adevrate: (a) Pentru orice gramatic dependent de context (de tip 1) G = (, , S, P) exist o gramatic monoton G = (, , S, P) astfel nct L(G) = L(G) {}; (b) Pentru orice automat liniar mrginit M exist o gramatic monoton G astfel nct L(M) = L(G).

8. Proprieti de nchidere
8.1 Reuniunea limbajelor Definiia 8.1 Fie L o familie oarecare de limbaje. Spunem c familia L este nchis la operaia # dac L1, L2 ( L1 L i L2 L L1 # L2 L ). n continuare se presupun cunoscute notaiile introduse n 1.2 referitor la operaiile cu limbaje. Prin Li vom desemna familia limbajelor de tipul i, n sensul definiiei 5.1. Evident L0 este familia limbajelor generate de gramatici de tip 0 (fr restricii) i recunoscute de maini Turing. Teorema 8.1 Familia limbajelor dependente de context este nchis fa de reuniune. Observaa 8.1 Enunul i demonstraia de mai sus pot fi refcute pentru a arta nchiderea la reuniune a familiilor L2 i L3. 8.2 Familia limbajelor regulate Conform teoremei 3.3, familia limbajelor regulate este cea mai mic familie de limbaje care conine limbajele finite i este nchis la reuniune, produs (concatenare) i la operaia * (nchiderea Kleene). Trebuie remarcat c familia L 3 include strict familia limbajelor finite. Teorema 8.2 Fie un alfabet i L * un limbaj regulat. Atunci * - L este un limbaj regulat Teorema 8.3 Familia limbajelor regulate este nchis la operaia de intersecie. Observaia 8.2 Familia limbajelor regulate peste un alfabet , fiind nchis la reuniune, intersecie i complementar, formeaz o algebr boolean n care suma boolean este reuniunea, produsul boolean este intersecia, iar complementul unui element este obinut prin formarea limbajului complementar (diferena pn la *.) 8.3 Familia limbajelor independente de context Teorema 8.4 Familia L Teorema 8.5 Familia L Teorema 8.6 Familia L
2

este nchis la reuniune. este nchis la concatenare (produs). este nchis la operaia * (stelare).

Observaia 8.3 Dac L este un limbaj de tip i (i = 2 sau 3) atunci L+ este de tip i. Teorema 8.7 Familia L2 nu este nchis la intersecie i complementar. Teorema 8.8 Fie L L2 i R L3, L1 = L R i L2 = L R. Atunci Li L2 (i = 1, 2).

Teorema 8.9 Considerm transformarea de substituire definit asupra limbajelor ca n definiia 1.8. Familia limbajelor independente de context este nchis la substituii. Observaia 8.4 Familia limbajelor independente de context este nchis la homomorfisme. Definiia 8.2 O main secvenial generalizat (eng. gsm: generalized sequential machine) sau traductor secvenial generalizat este sistemul M = (Q, , , , q0, F) unde Q, , q0 i F au semnificaia cunoscut, este o mulime finit i nevid, reprezentnd alfabetul de ieire, iar : Q x P(Q x *) este funcia de tranziie. Observaia 8.5 Un sistem gsm este un sistem AFN care, n plus, fa de banda de intrare (cuvinte peste ) conine i o band de ieire (pentru manipularea cuvintelor peste ). Faptul c (q2, u) (q1, a) arat trecerea din starea q1 in starea q2, cnd capul de citire a ntlnit simbolul a, dar i emiterea cuvntului u * la ieire. Funcia se extinde la *, n mod obinuit. Definiia 8.3 Fie M = (Q, , , , q0, F) un sistem gsm. Transformarea gsm definit de M este funcia gM : * P(*) definit dup cum urmeaz. Fie u * oarecare. Atunci gM(u) = {w | w *, exist q F astfel nct (q, w) (q0, u)}. 1 Dac L * atunci gM(L) = U g M (u ) . Transformarea gsm invers este g M : *
uL 1 P(*) dat de g (u) = {v | u gM(v)}. Dac L * atunci g M (L) = {v | exist u L astfel nct u gM(v)}. 1 M

Teorema 8.10 Orice clas de limbaje peste alfabetul nchis la substituii finite i intersecie cu limbaje regulate este nchis la transformri gsm. Observaia 8.6 Deoarece familiile Li ( i = 2, 3) satisfac condiille teoremei 8.10 rezult c acestea sunt nchise la transformri gsm.

9. Specificarea sintaxei limbajelor de programare i marcare


Specificarea sintaxei unui limbaj de programare contribuie alturi de specificarea semanticii acestuia la ceea ce, global, se numete specificarea limbajului. Sintaxa limbajului permite determinarea irurilor de simboluri (cuvintelor) care reprezint programe sau texte corect construite (din punct de vedere al regulilor sintactice) n limbajul respectiv. Semantica limbajului descrie nelesul asociat unui text/program pornind de la conceptele de baz ale limbajului.
De obicei, specificarea sintaxei unui limbaj artificial, n special un limbaj de programare, se face cu ajutorul unui mecanism de descriere BNF sau EBNF (Backus/Extended Backus Naur Form) care este echivalent ca putere generativ cu gramaticile independente de context.

9.1 Limbajului C++


Limbajul C++ a fost dezvoltat la nceputul anilor 80 de ctre Bjarne Stroustrup de la laboratoarele AT&T Bell. Este un supraset al limbajului C, cel care a fost creat n 1972 de ctre Dennis Ritchie. C++ pstreaz viteza, eficiena i simplitatea limbajului C pe care-l mbuntete i l completeaz cu support pentru abstractizarea datelor i proiectarea orientat obiectual. Definiiile formale, de mai jos, definesc, parial, sintaxa instruciunilor limbajului C++ (AT&T 1997).

Doi termeni: declarare i definire (prin definire se nelege declarare + iniializare) joac un rol important n specificarea programelor C/C++. n cazul definiiilor fr iniializator, variabilele primesc valori implicite, echivalente lui 0 (0 pentru tipuri numerice, cuvntul vid () pentru iruri de caractere, valoarea NULL pentru pointeri). Declaraiile introduc nume n unitile de program (blocuri/ uniti de translatare).
n general declaraiile nu sunt i definiii. Urmtoarele situaii nu constituie definiii:

(1) Se declar o funcie fr a-i specifica i corpul; (2) Declaraia conine specificatorul extern i nu are iniializare sau corp de funcie; (3) Se declar un membru static ntr-o declaraie de clas; (4) Se declar un nume de clas; (5) Se descrie o declaraie typedef. Declaraiile pentru variabile pot specifica i tipul legrii: intern sau extern (introdus prin intermediul clasei de memorare). De asemenea, declaraiile sau definiiile pot conine calificatori cv (const sau volatile) care definesc modificabilitatea obiectelor precizate. Modul de aplicabilitate al calificatorilor cv asupra pointerilor prezint o important particularitate: atributul const sau volatile prefixat cu operatorul * (derefereniere) se aplic pointerului i nu obiectului punctat de acesta. Programele C++ sunt organizate n uniti de translatare ce pot fi compilate separat, urmnd ca procesul editrii legturilor (eng. bind, make, link etc.), prin care se obine executabilul, s fie realizat ulterior. Notaie Simbolurile neterminale ncep cu liter mare. Unele neterminale se termin cu opional. Aceasta nseamn c regula care conine o astfel de construcie este o meta-regul, adic este posibil i nlocuirea neterminalului cu (cuvntul vid). Se obin, practic, mai multe producii ale gramaticii limbajului.

Instruciuni Secven-instruciuni ::= Instruciune | Secven-instruciuni Instruciune Instruciune ::= Instruciune-etichetat | Instruciune-expresie | Instruciune-compus | Selecia | Iteraia | Instruciune-salt | Instruciune-declaraie | Bloc-try Instruciune-etichetat ::= Identificator : Instruciune | case Expresie-const : Instruciune | default : Instruciune Instruciune-expresie ::= Expresie-opional Instruciune-compus ::= { Secven-instruciuni-opional } Selecia ::= if ( Condiie ) Instruciune | if ( Condiie ) Instruciune else Instruciune | switch ( Condiie ) Instruciune Condiie ::= Expresie | Specificator-tip Declarator = Expresie-atribuire Iteraia ::= while ( Condiie ) Instruciune | do Instruciune while ( Expresie ) ; | for ( Iniializare-for-opional ; Condiie-opional ; Expresie-opional ) Instruciune Iniializare-for ::= Instruciune-expresie | Declaraie-simpl Instruciune-salt ::= break; | continue; | return Expresie-opional; | goto Identificator; 9.2 Limbajul Prolog Limbajul Prolog difer de limbajul C++ foarte mult. Prolog este un limbaj declarativ pentru programare logic. Face parte din clasa limbajelor de generaia a cincea i a fost dezvoltat n perioada 1974-1979, la Universitatea din Marsilia. Este utilizat cu predilecie n inteligena artificial i lingvistica computaional1. n cele ce urmeaz descriem elementele de sintax ale dialectului SICStus2. Mai nti descriem cteva elemente ale acestui dialect. Obiectele limbajului se numesc termeni. Un termen este fie o constant, o variabil sau un termen compus. Constantele includ ntregii, numerele n virgul mobil (Floating point) i atomii. Variabilele sunt specificate prin identificatori care ncep cu liter mare sau _ (pentru variabilele anonime). Termenii compui se refer la construcii definite printr-un functor i o secven de argumente, ntre paranteze rotunde. Un atom este un functor cu aritatea zero (fr argumente). Listele sunt structuri speciale. O list nevid are un prim element (capul listei) i lista elementelor rmase i, se noteaz prin [ primul-element | Lista-elementelorrmase ]. O list de ntregi, care reprezint coduri ASCII, definete un string (ir de caractere). Unitatea de baz a unui program logic o reprezint scopul sau apelul procedural. Un program Prolog const dintr-o secven de construcii numite fraze. O fraz conine, n general, dou pri: capul i coada. Capul frazei joac rolul concluziei, iar coada frazei pe cel al ipotezei. Dac capul este nevid avem de-a face cu o clauz: P :- A, B, C.
Aceasta se poate citi astfel: P este proprietate adevrat dac sunt adevrate simultan A, B i C.
1

Pentru procesarea limbajului natural, folosind limbajul Prolog, se poate parcurge Hristea (2000). SICStus Prolog The Prolog Language, http://www.sics.se/SICS-reports/SICS-T--93-01-SE/report_9.html
2

Dac corpul clauzei este vid atunci clauza se numete atomic (sau clauz unitate). Clauza atomic este de forma P. i se citete: P este o propoziie valid (satisfcut). O fraz cu capul vid este o directiv. O categorie special de directive o reprezint ntrebrile. O ntrebare este de forma ?- P, Q. i se poate citi interogativ: Sunt P i Q adevrate? sau, procedural, Satisfacerea scopurilor P i Q. Frazele, n general, conin variabile. Variabilele aflate n fraze diferite sunt complet independente. Domeniul lexical al unei variabile se reduce la fraza n care apare. Variabilele disticte dintr-o fraz reprezint entiti sau valori arbitrare. Predicatul unui functor F este dat de secvena de clauze care au n partea de concluzie functorul F. Pentru predicatele n care apar att clauze de baz ct i clauze recursive, se recomand (chiar trebuie) scrierea clauzelor de baz mai nti i apoi scrierea celor recursive. Mai multe predicate pot avea acelai nume, dar ariti diferite. Unele predicate sunt furnizate de sistemul Prolog (se spune c sunt predicate built-in). Cele mai multe predicate traduc cunoaterea uman n fapte, reguli i ntrebri (sau scopuri).
O subgramatic formal a limbajului Prolog (dialectul SICStus) cuprinde reguli precum:

Entitate-lexical ::= Nume | Numr-natural | Flotant-fr-semn | Variabil | String | Semn-de-punctuaie | Text-format | Punct Cifr ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Caracter ::= Caracter-format | Alfa-numeric | Caracter-simbol | Caracter-solo | Semn-de-punctuaie | Caracter-citare Secven-de-cifre ::= Cifr | Cifr Secven-de-cifre Punct ::= . Text-format ::= Secven-componente-formatare Secven-componente-formatare ::= Component-formatare | Component-formatare Secven-componente-formatare Component-formatare ::= Caracter-format | Comentariu Caracter-format ::= caracterele cu codurile ASCII: 0..32 i 127..159 (ISO 8859/1) sau 0..32, 127 n Extended Unix Code. Caracter-solo ::= ! | ; (codurile ASCII 33 i 59) Semn-de-punctuaie ::= caracterele cu codurile ASCII: 37, 40, 41, 44, 91, 93 i 123..125. Caracter-citare ::= " | ' Caracter-simbol ::= caracterele cu codurile ASCII: 35, 36, 38, 42, 43, 45..47, 58, 60..64, 92, 94, 96, 126, 160..191, 215 i 247. Comentariu ::= Comentariu-bloc | Comentariu-rnd Comentariu-bloc ::= /* Secven-de-caractere */ Comentariu-rnd ::= % Secven-de-caractere Nume ::= Nume-citat | Cuvnt | Simbol | Caracter-solo | [ Format-text-opional ] Nume-citat ::= Apostrof ir-fr-apostrof Apostrof ir-fr-apostrof ::= zero, unul sau mai multe caractere diferite de Apostrof | Ghilimele Apostrof ::= ' Ghilimele ::= "

Alfa-numeric ::= Liter-mare | Liter-mic | Cifr | _ Cuvnt ::= Liter-mic ir-alfa-opional ir-alfa ::= Alfa-numeric ir-alfa Simbol ::= ir-de-semne-speciale Numr-natural ::= Secven-de-cifre | Reprezentare-bazat | Zero-cod Reprezentare-bazat ::= Baz Apostrof ir-alfa Baz ::= Numr n intervalul 2..36. Flotant-fr-semn ::= Flotant-simplu | Flotant-simplu Exp Exponent Flotant-simplu ::= Secven-de-cifre Punct Secven-de-cifre Exp ::= e | E Exponent ::= Secven-de-cifre | - Secven-de-cifre | + Secven-de-cifre Variabil ::= _ ir-alfa | Liter-mare ir-alfa String ::= " Secven-componente-string-opional " Fraz ::= Modul : Fraz | List | Clauz | Directiv | Regul-gramatical List ::= [] | [ List-expresii ] Clauz ::= Clauz-complet | Clauz-atomic Directiv ::= Comand | ntrebare Clauz-complet ::= Concluzie :- Ipotez Clauz-atomic ::= Concluzie Comand ::= :- Ipotez ntrebare ::= ?- Ipotez Concluzie ::= Modul : Concluzie | Scop Ipotez ::= Modul : Ipotez | Ipotez -> Ipotez ; Ipotez | Ipotez -> Ipotez | \+ Ipotez | Ipotez ; Ipotez | Ipotez , Ipotez | Scop Scop ::= Termen Regul-gramatical ::= Membrul-stng --> Membrul-drept Membrul-stng ::= Modul : Membrul-stng | Membrul-stng , Terminale | Neterminal Membrul-drept ::= Modul : Membrul-drept | Membrul-drept -> Membrul-drept ; Membrul-drept | Membrul-drept -> Membrul-drept | \+ Membrul-drept | Membrul-drept ; Membrul-drept | Membrul-drept , Membrul-drept | Neterminal | Terminale | Condiie-gramatical Neterminal ::= Termen Terminale ::= List | String Condiie-gramatical ::= ! | Ipotez

Modul ::= Atom Constant ::= Atom | Numr Numr ::= ntreg | Flotant Atom ::= Nume ntreg ::= Numr-natural | - Numr-natural Flotant ::= Flotant-fr-semn | - Flotant-fr-semn Functor ::= Nume Observaia 9.1 n Prolog se comunic cunotine. Determinarea efectiv a soluiei este realizat de ctre nucleul Prolog prin metode specifice: unificare, backtracking etc. Observaia 9.2 Limbajul Prolog permite att codificarea algoritmilor recursivi, ct i a celor nerecursivi. Observaia 9.3 [Gramatici n Prolog] Limbajul Prolog are mecanismul de derivare3 implementat. Cuvintele sunt liste. Gramatica G = ({S}, {a, b}, S, {(S, aSb), (S, ab)}) poate fi descris n prolog astfel (folosind --> n loc de ::= ): s --> [a],[b]. s --> [a],s,[b].
Pentru a vedea dac un cuvnt aparine sau nu limbajului generat de gramatica dat, formulm o ntrebare privitoare la simbolul de start. De exemplu

?- s([a,a,a,b,b,b], X). X = [] ?- s([a,a,b,b,x,y],Y). Y = [x, y] Dac dorim generarea tuturor cuvintelor limbajului atunci formulm ntrebarea: ?- s(Y, []). 9.3 Limbajul XML
Metalimbajul XML (eXtensible Markup Language aprut n anul 1996) a fost definit pentru a descrie limbaje de marcare. Se bazeaz pe SGML (Standard Generalized Markup Language aprut n anul 1980) i este un set de reguli, specificaii i convenii pentru structurarea datelor n fiiere text. Similar cu HTML i XHTML, metalimbajul XML utilizeaz tag-uri (cuprinse ntre caracterele "<" i ">") i atribute (de forma nume = "valoare") care apar n interiorul tag-urilor. Spre deosebire de HTML care indic modul de vizualizare a informaiei de ctre navigatoarele Web, limbajul XML folosete tag-uri doar pentru a delimita datele, iar interpretarea este dat de aplicaia care utilizeaz descrierea. Astfel, se specific doar structura documentului, nu i semantica acestuia.

Din punct de vedere formal, un document XML const din urmtoarele construcii: a) comentarii ignorate de procesoarele XML; b) referine de entiti predefinite (amp, lt, gt, apos, quot nchise ntre & i ;) i altele; c) referine de caractere;
3

n sensul gramaticilor formale

d) instruciuni de procesare (PI - Processing Instruction informaii de transmis interpretoarelor XML i altor programe); e) seciuni CDATA (o seciune CDATA este util atunci cnd se stocheaz text formatat, dar care nu trebuie interpretat, de exemplu, specificarea unui titlu: <![CDATA[<TITLE>Acesta este un titlu !</TITLE>]]> f) STag - tag-uri de nceput, de forma <numetag>; g) ETag - tag-uri de sfrit, de forma </numetag>; h) TagVid - elemente vide, de exemplu: <IMG SRC="image.jpg" />; i) declaraii pentru tipul documentului.
Folosind notaia EBNF4, gramatica limbajului XML, Versiunea 1.0, este dat prin produciile:

Caracter ::= #x09 | #x0A | #x0D | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] Comentariu ::= '<!--' ((Caracter - '-') | ('-' (Caracter- '-')))* '-->' Referin ::= Referin-entitate | Referin-caracter Referin-entitate ::= '&' Nume ';' Referin-caracter ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' S ::= (#x0020 | #x0009 | #x0000D | #x000A)+ Nume ::= (Liter | '_' | ':') (Caracter-pt-nume)* PI ::= '<?' NumePI (S (Caracter* - (Caracter* '?>' Caracter*)))? '?>' NumePI ::= Nume - (('X' | 'x') ('M' | 'm') ('L' | 'l')) CDSect ::= CDStart CData CDEnd CDStart ::= '<![CDATA[' CData ::= (Car* - (Car* ']]>' Car*)) CDEnd ::= ']]>' TagVid ::= '<' Nume (S Atribut)* S? '/>' DocumentXML ::= Parte_1 Element Diverse* Parte_1 ::= XMLDecl? Diverse* (Decl-tipdoc Diverse*)? XMLDecl ::= '<?xml' VerInfo Decl-codificare? SDDecl? S? '?>' VerInfo ::= S 'version' Eq ("'" VerNum "'" | '"' VerNum '"') Eq ::= S? '=' S?
Notaia Backus-Naur extins const din construcii de forma simbol ::= expresie (notaie utilizat, n acest document, pentru specificarea regulilor de rescriere). Pentru XML sunt utilizate urmtoarele notaii: #xNNNN - NNNN este un ntreg hexazecimal, iar expresia reprezint caracterul n formatul ISO 10646 pentru care irul de bii (UCS-4), interpretai ca un numr ntreg fr semn au valoarea indicat. [a-zA-Z], [#xNNNN-#xNNNN] - orice caracter din domeniul specificat. [^a-z], [^#xNNNN-#xNNNN] - orice caracter din afara domeniului precizat. [^abc], [^#xNNNN#xNNNN#xNNNN] - orice caracter care nu este printre caracterele date. "ir" - un literal ir de caractere ntre ghilimele. 'ir' - un literal ir de caractere ntre apostrofuri. a b - a urmat de b. a | b - a sau b, dar nu ambele. a b - mulimea de iruri reprezentate prin a, dar nu reprezentate prin b. a? - a sau nimic. a+ - una sau mai multe apariii ale lui a. a* - zero sau mai multe apariii ale lui a. %a - un parametru poate aprea n text acolo unde poate aprea a. (expresie) - scrierea unei expresii ntre paranteze impune tratarea expresiei ca o unitate i aceasta poate conine operatorul prefix % sau operatorii sufix: ?, * sau +. /* ... */ - un comentariu.
4

VerNum ::= '1.0' Diverse ::= Comentariu | PI | S Decl-tipdoc ::= '<!DOCTYPE' S Nume (S ExternID)? S? ('[' IntSubset ']' S?)? '>' Element ::= TagVid | STag Coninut ETag STag ::= '<' Nume (S Atribut)* S? '>' Atribut ::= Nume Eq Valoare-atribut ETag ::= '</' Nume S? '>' Se-ignor ::= [#x200C-#x200F] | [#x202A-#x202E] | [#x206A-#x206F] | #xFEFF Caracter-pt-nume ::= Liter | Cifr | '.' | '-' | '_' | ':' | Caracter-combinat | Se-ignor | Extensie Liter ::= Caracter-de-baz | Caracter-ideografic PCData::= [^<&]* Hexa ::= [0-9a-fA-F] ir-nume ::= Nume (S Nume)* Nmtoken ::= (Caracter-pt-nume)+ ir-Nmtoken ::= Nmtoken (S Nmtoken)* Valoare-entitate ::= '"' ([^%&"] | Referin-PE | Referin)* '"'| "'" ([^%&'] | Referin-PE | Referin)* "'" Valoare-atribut ::= '"' ([^<&"] | Referin)* '"' | "'" ([^<&'] | Referin)* "'" LiteralSalt ::= ('"' [^"]* '"') | ("'" [^']* "'") URLcar::= /* Conform W3C RFC 1738 */ Literal-sistem::= '"' URLcar* '"' | "'" (URLcar - "'")* "'" PubidLiteral ::= '"' PubidCar* '"' | "'" (PubidCar - "'")* "'" PubidCar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] CarData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) Separator-declarare ::= Referin-PE | S IntSubset ::= (Declarare-markup | Separator-declarare)* Declarare-markup ::= Declarare-element | Declarare-atribut | Declarare-entitate | Declarare-notaie | PI | Comentariu ExtSubset ::= Declarare-text? Declarare-extSubset Declarare-extSubset ::= (Declarare-markup | conditionalSect | Separator-declarare)* SDDecl ::= S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) Coninut ::= CarData? ((Element | Referin | CDSect | PI | Comentariu) CarData?)* Declarare-element ::= '<!ELEMENT' S Nume S Specificare-coninut S? '>' Specificare-coninut ::= 'EMPTY' | 'ANY' | Mixt | Fiu Fiu ::= (Alternativ | Secven) ('?' | '*' | '+')? Cp ::= (Nume | Alternativ | Secven) ('?' | '*' | '+')? Alternativ ::= '(' S? Cp ( S? '|' S? Cp )+ S? ')' Secven ::= '(' S? Cp ( S? ',' S? Cp )* S? ')' Mixt ::= '(' S? '#PCDATA' (S? '|' S? Nume)* S? ')*' | '(' S? '#PCDATA' S? ')' Declarare - atribut ::= '<!ATTLIST' S Nume Definire-atribut* S? '>' Definire -atribut ::= S Nume S Tip-atribut S Declarare-implicit Tip-atribut ::= TipString | TipLexical | TipEnumerativ TipString ::= 'CDATA' TipLexical ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'

TipEnumerativ ::=TipNotaie | Enumerare TipNotatie ::= 'NOTATION' S '(' S? Nume (S? '|' S? Nume)* S? ')' Enumerare ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' Declarare-implicit ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? Valoare-atribut) ConditionalSect ::= IncludeSect | IgnorSect IncludeSect ::= '<![' S? 'INCLUDE' S? '[' Declarare-extSubset ']]>' IgnorSect ::= '<![' S? 'IGNORE' S? '[' IgnorSectConinut* ']]>' IgnorSectConinut ::= Ignor ('<![' IgnorSectConinut ']]>' Ignor)* Ignor ::= Car* - (Car* ('<![' | ']]>') Car*) Referin-PE ::= '%' Nume ';' Declarare-entitate ::= GEDecl | PEDecl GEDecl ::= '<!ENTITY' S Nume S Definire-entitate S? '>' PEDecl ::= '<!ENTITY' S '%' S Nume S PEDef S? '>' Definire-entitate ::= Valoare-entitate | (ExternID Declarare-NData?) PEDef ::= Valoare-entitate | ExternID ExternID ::= 'SYSTEM' S Literal-sistem | 'PUBLIC' S PubidLiteral S Literal-sistem Declarare-NData ::= S 'NDATA' S Nume Declarare-text ::= '<?xml' VerInfo? Decl-codificare S? '?>' ExtTradEnt ::= Declarare-text? Coninut Decl-codificare ::= S 'encoding' Eq ('"' Nume-cod '"' | "'" Nume-cod "'" ) Nume-cod ::= [A-Za-z] ([A-Za-z0-9._] | '-')* ::= '<!NOTATION' S Nume S (ExternID | PublicID) S? '>' Declarare-notaie PublicID ::= 'PUBLIC' S PubidLiteral NumeDiverse::= '.' | '-' | '_' | Car-combinat | Ignorabil | Extindere Ignorabil::= [#x200C-#x200F] | [#x202A-#x202E] | [#x206A-#x206F] | #xFEFF Exemplu: Secvena XML urmtoare ilustreaz definirea nregistrrilor tip baz de date: <?XML version = "1.0" ?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (CLIENT)*> <!ELEMENT CLIENT (NUMESIPRENUME, DATA, COMENZI)> <!ELEMENT NUMESIPRENUME (NUME, PRENUME)> <!ELEMENT NUME (#PCDATA)> <!ELEMENT PRENUME (#PCDATA)> <!ELEMENT DATA (#PCDATA)> <!ELEMENT COMENZI (POZITIE)*> <!ELEMENT POZITIE (PRODUS, NUMAR, PRET)> <!ELEMENT PRODUS (#PCDATA)> <!ELEMENT NUMAR (#PCDATA)> <!ELEMENT PRET (#PCDATA)> ]> <DOCUMENT> <!Date despre clienti--> <CLIENT> <NUMESIPRENUME> <NUME>Ionescu</NUME>

<PRENUME>Marian</PRENUME> </NUMESIPRENUME> <DATA>Februarie 23, 2005</DATA> <COMENZI> <POZITIE> <PRODUS>CAIET DICTANDO</PRODUS> <NUMAR>15</NUMAR> <PRET>25000</PRET> </POZITIE> <POZITIE> <PRODUS>CRETA</PRODUS> <NUMAR>10</NUMAR> <PRET>15000</PRET> </POZITIE> </COMENZI> </CLIENT> <CLIENT> <NUMESIPRENUME> <NUME>Popescu</NUME> <PRENUME>Alexandru</PRENUME> </NUMESIPRENUME> <DATA>Februarie 24, 2005</DATA> <COMENZI> <POZITIE> <PRODUS>CARTE</PRODUS> <NUMAR>1</NUMAR> <PRET>500000</PRET> </POZITIE> <POZITIE> <PRODUS>CD AUDIO</PRODUS> <NUMAR>10</NUMAR> <PRET>150000</PRET> </POZITIE> </COMENZI> </CLIENT> </DOCUMENT>

10. Introducere n analiza sintactic


10.1 Problema recunoaterii Fr a face apel la sisteme LBA, putem justifica, direct, decidabilitatea problemei apartenenei pentru gramatici dependente de context. Propoziia 10.1 [Gramaticile dependente de context sunt recursive1.] Exist un algoritm care pentru orice G = (, , S, P) - gramatic dependent de context i orice w + decide dac afirmaia w L(G) este adevrat. Propoziia 10.2 Exist un algoritm care s determine, pentru o gramatic independent de context G = (, , S, P) i un cuvnt w *, dac w L(G) sau w L(G). Algoritmul Cocke-Younger-Kasami (CYK) n sprijinul demonstraiei propoziiei 10.2 se poate utiliza gramatica G = (, , S, P) n forma normal Chomsky i se obine un algoritm cu complexitate O(m3). Fie w +, w = a1a2am (|w| = m). Algoritmul CYK propus de Cocke, Younger i Kasami, n 1967, genereaz submulimile Vi,j = {X | X , X aiai+1ai+j-2ai+j-1}, j = 1, 2, , m, i = 1, 2, , m j + 1. Acestea se pot obine, inductiv, astfel: Vi,1 = {X | X , X ::= ai P}, i = 1, 2, ..., m
* Vi,j = {X | X , X YZ, Y aiai+1ai+k-1, * Z ai+kai+j-1; k = 1, 2, , j-1} = = {X | X , X YZ P, Y Vi,k, Z Vi+k, j-k; k = 1, 2, , j - 1}, j = 1, 2, , m, i = 1, 2, , m j + 1.

Aceast scriere rezult din proprietatea de localizare (propoziia 2.1) i din faptul c dac k < j i j - k < j atunci mulimile Vi,k i Vi+k, j-k sunt deja calculate.

n teoria algoritmilor, o gramatic formal G se numete recursiv dac exist un algoritm care accept, la intrare, orice cuvnt w peste vocabularul terminal i produce, la ieire, rspunsul la ntrebarea: w L(G)? Nu trebuie s confundm aceast noiune cu cea referitoare la recursivitatea la stnga (resp. dreapta) a gramaticilor, introdus prin definiia 2.10.

Obiectivul final const n obinerea muimii V1,m. ntr-adevr w * L(G) dac i numai dac S w, dac i numai dac S V1,m. Cele descrise mai sus pot fi organizate algoritmic astfel: 1. Pentru fiecare i de la 1 la m execut Vi,1 := {X | X , X ::= ai P}; 2. Pentru fiecare j de a 1 la m i pentru fiecare i de la 1 la m j + 1 execut: a) Vi,j := ; b) Pentru fiecare k de la 1 la j-1 execut Vi,j := Vi,j {X | X YZ P, Y Vi,k, Z Vi+k, j-k}; 3. Dac S V1,m atunci w L(G). Propoziia 10.3 Algoritmul CYK (Cocke, Younger i Kasami) calculeaz mulimile Vi,j (j = 1, 2, , m; i = 1, 2, , m j + 1) folosind O(m3) operaii de reuniune. Definiia 10.1 [Analiza sintactic] Fie G = (, , S, P) o gramatic independent de cotext i w L(G) . Presupunem c regulile (produciile) gramaticii G sunt numerotate2. O analiz sintactic stnga a cuvntului w L(G) este irul de numere = p1p2ph, unde h este lungimea derivrii stngi a cuvntului w din simbolul de start S, iar pi ( i = 1, 2, , h) este numrul de ordine al produciei aplicate la pasul i. Pentru obinerea analizei stngi a unui cuvnt w generat de gramatica G se poate utiliza o procedur recursiv inspirat de schema algoritmului CYK. Se presupune, n continuare, c G este n forma normal Chomsky. Urmnd descrierea algoritmilor recursivi din Albeanu(2000), procedura ANALIZA, care furnizeaz analiza stng, are urmtorul cod (n limbaj algoritmic): Integer n(100); Integer h; Procedure Analiza (i, j, A) Integer i, j; Neterminal A; SEQ if (j = 1) then SEQ h := h + 1; n[h] := #(A ::= ai); END else SEQ If (exist k astfel nct
De obicei se utilizeaz simbolul # pentru a indica indexul unui obiect. Prin urmare indexul produciei A ::= P, va fi #(A ::= ).
2

k = min{s | s = 1, 2, , j-1, A ::= BC P, B Vis , C Vi+s, js})

then SEQ h := h+1; n[h] := #(A ::= BC); if (k < j-k) then SEQ Analiza(i, k, B); Analiza(i+k, j-k, C); END else SEQ Analiza(i+k, j-k, C); Analiza(i, k, B); END; END END END Procedura este apelat prin Analiza(1, |w|, S) numai dac algoritmul CYK a furnizat rezultatul w L(G). Valoarea variabilei h va fi majorat de valoarea [log2|w|]. Fie G = (, , S, P) o gramatic independent de context. Definiia 10.1 poate fi prelungit pentru toate formele propoziionale (vezi definiia 2.4) ( )*. Se va defini analiza sintactic parial stng. Definiia 10.2. [Analiza sintactic parial stng (resp. dreapt)] Fie G = (, , S, P) o gramatic independent de context i ( )* o form propoziional. O analiz sintactic parial stng (resp. dreapt) pentru este irul de numere de producii astfel nct S (stnga3) (resp. S (dreapta4)). Prin analiza sintactic se memoreaz chiar arborele de derivare al cuvntului w sau al formei propoziionale . Practic arborele de derivare se poate obine, sistematic, n dou moduri: descendent (eng. Top-down) prin utilizarea unei derivri extrem stngi, respectiv ascendent (eng. Bottom-up) prin utilizarea unei derivri extrem drepte. 10.2 Analiza sintactic descendent
Procesarea sintactic top-down cere ca gramatica n raport cu care se face analiza s nu fie recursiv la stnga. Aceasta face ca lungimea oricrei analize sintactice s fie finit. Mai precis se poate formula:

3 4

Produciile se aplic ntr-o derivare extrem stnga (definiia 2.8). Produciile se aplic ntr-o derivare extrem dreapta (definiia 2.8).

Propoziia 10.4 Fie G = (, , S, P) o gramatic independent de context, nerecursiv la stnga i A wXu (stnga). Atunci exist o constant real pozitiv, c, astfel nct || c|w|+2. Algoritmul general de analiz sintactic descendent este de tip backtracking (ncearc s treci mai departe; dac nu se poate atunci vei reveni). Pentru descrierea acestuia, introducem cteva notaii i convenii similare celor din Atanasiu(1987): Pentru fiecare A , alternativele lui A vor fi indexate astfel: A ::= 1 | 2 | | k(A), iar indexul lui i va fi Ai, i = 1, 2, , k(A). Structura (s, i, , ) se numete configuraie a algoritmului de analiz sintactic descendent dac s {q, r, t, e} i reprezint starea algoritmului (q starea curent, r starea de revenire, t starea de terminare i e starea de eroare), i este poziia simbolului analizat (se consider c al n+1-lea symbol de intrare este $ i difer de toate simbolurile alfabetului de intrare), este o list gestionat ca o stiv cu vrful la dreapta, iar este o list gestionat ca o stiv cu vrful la stnga. Configuraia iniial a algoritmului este (q, 1, , S$). Algoritmul are la baz evoluia configuraiilor. Regulile evolutive sunt: R1 [Prima alternativ] Fie A ::= 1 P prima alternativ n cazul listei A-produciilor. Atunci: (q, i, , A) |- (q, i, A1, 1). R2 [Potrivire i nainte] Dac a = ai (i n) atunci (q, i, , a) |- (q, i+1, a, ). R3 [Nepotrivire i prima revenire] Dac a ai (i n) atunci (q, i, , a) |- (r, i, , a). R4 [Acceptare] Se ajunge la configuraia de acceptare prin tranziia: (q, n+1, , $) |- (t, n+1, , ). R5 [napoi] Pentru oricare a , (r, i, a, ) |- (r, i-1, , a). R6 [Ramificare] Celelalte situaii sunt cuprinse n urmtoarea procedur decizional: (q, i, A j +1 , j +1 ), j + 1 k[ A] (r, i, Aj, j ) |- (e, n + 1, A j , ), i = 1, A = S , j = k[ S ] (r , i, , A ), altfel.

R7 [Obinerea analizei stngi] Analiza stng a cuvntului w se obine prin aplicarea homomorfismului g(a) = , a ; g(Ai) = m unde m este indexul produciei A ::= i P.

Paii algoritmului sunt: 1. Folosind regulile R1-R6, se efectueaz tranziia * (q, 1, , S$) | (p, n+1, , $). 2. Dac p = t atunci obine g(w) Regula R7 - analiza stng a cuvntului w, STOP. 3. Dac p = e atunci EROARE i STOP. 10.3 Analiza sintactic ascendent n contextul analizei sintactice ascendente se dorete obinerea unei derivri extrem dreapta pornind de la cuvntul analizat w, napoi spre simbolul de start. La fiecare pas se ncearc identificarea poriunii (cea mai din dreapta) din forma propoziional curent care reprezint membrul drept al unei producii a gramaticii. Prin nlocuirea acesteia cu membrul stng al produciei, are loc un proces de reducere i se obine forma propoziional precedent. Dac, n final, se ajunge la S atunci cuvntul w este acceptat (a se vedea i modul de prelucrare al algoritmului CYK). Nu pentru orice gramatic independent de context se poate face acest lucru. Trebuie ca gramatica n raport cu care se face analiza s fie aciclic5 i fr -producii. Propoziia 10.5 Fie G = (, , S, P) o gramatic independent de context, fr -producii i aciclic, w *, iar A uXw (dreapta). Atunci exist o constant real pozitiv, c, astfel nct || c|w|. Algoritmul general de analiz sintactic ascendent este de tip deplasarereducere. Pentru descrierea acestuia, introducem cteva notaii i convenii similare celor din descrierea algoritmului de analiz descendent. Se presupune c fiecare producie are un index. Fie D un simbol care semnific aciunea de deplasare cu o poziie la dreapta n timpul parcurgerii cuvntului w (= a1a2...an) a crui analiz se dorete.

O gramatic este aciclic dac nu conine reguli astfel nct s fie posibile derivri de * forma A A.

Structura (s, i, , ) se numete configuraie a algoritmului de analiz sintactic ascendent dac s {q, r, t, e} i reprezint starea algoritmului (q starea curent, r starea de revenire, t starea de terminare i e starea de eroare), i este poziia simbolului analizat, este o list gestionat ca o stiv cu vrful la dreapta, iniial coninnd un simbol special, notat $ i apoi cuvinte peste {$}, numit i lista pushdown, iar este o list gestionat ca o stiv cu vrful la stnga i care conine cuvinte peste {D} { i | i = 1, 2, ..., |P|}. Configuraia iniial a algoritmului este (q, 1, $, ).

Algoritmul are la baz evoluia configuraiilor. Regulile evolutive sunt: R1 [Deplasare] Cnd nu se pot face reduceri, atunci se fac deplasri conform schemei: (q, i, , ) |- (q, i + 1, ai, D). R2 [Reducere] Dac X ::= este producia cu indexul p (cel mai mic) pentru care n lista pushdown se afl un obiect al derivrii, atunci (q, i, u, ) |- (q, i, uX, p). R3 [Eroare] (q, n + 1, , Dn) |- (e, n + 1, , Dn). R4 [Acceptare] Se ajunge la configuraia de acceptare prin tranziia: (q, n +1, $S, ) |- (t, n+1, , ). Analiza lui w este = h() unde h este homomorfismul dat de h(p) = p, p = 1, 2, .., |P|, h(D) = . R5 [Revenire] Dac nu se mai poate face nici o reducere, iar lista pushdown conine altceva dect $S, (q, n + 1, , ) |- (r, n + 1, , ). R6 [Revenire] Celelalte situaii necesit revenirea n procesul de analiz i sunt cuprinse n urmtoarea list: 1. (r, n+1, uX, pv) |- (r, n+1, u, v) dac X ::= este producia cu indexul p i mpiedic reducerile. 2. (r, i, uX, pv) |- (q, i, uX, pv) dac X ::= este producia cu indexul p i X ::= are indexul p, p > p i poate conduce la reduceri. Trebuie ca u = u, iar p este cel mai mic cu aceast proprietate. 3. (r, i, ua, Dv) |- (r, i-1, u, v), a . 4. (r, i, X, pv) |- (q, i + 1, uai, Dv) dac i n, X ::= este a p-a alternativ i ultima posibil pentru a se ncerca reduceri. Paii algoritmului sunt:

1. Folosind regulile R1-R6, se efectueaz tranziia * (q, 1, $, ) | (p, n+1, , ). 2. Dac p = t atunci obine h() analiza dreapt a cuvntului w, STOP. 3. Dac p = e atunci EROARE i STOP. Comentariu. Creterea performanelor algoritmilor de analiz sintactic se obine prin introducerea unor restricii asupra regulilor gramaticilor. Doar informativ, enumerm aici clasele speciale de gramatici LL(k) LR(k), de preceden etc. Algoritmi speciali pentru analiz sintactic sunt tratai n domeniul tehnicilor de compilare.

Limbaje formale i automate Lista problemelor propuse


1. Alegei gramatica formal G = (, , P, S) corect pentru a genera limbajul L = {anbn | n 0}. a) = {S}, = {a, b}, P = {aSb ::= S, ::= S} b) = {S}, = {a, b}, P = {S ::= aSb, S ::= } c) = {S}, = {a, b}, P = {S ::= aSb, S ::= ab} d) = {S}, = {a, b}, P = {aSb ::= S, ab ::= S} 2. Alegei gramatica formal G = (, , P, S) corect pentru a genera limbajul L = {anbn | n > 0}. a) = {S}, = {a, b}, P = {aSb ::= S, ::= S} b) = {S}, = {a, b}, P = {S ::= aSb, S ::= } c) = {S}, = {a, b}, P = {S ::= aSb, S ::= ab} d) = {S}, = {a, b}, P = {aSb ::= S, ab ::= S} 3. Alegei gramatica formal G = (, , P, S) corect pentru a genera limbajul L = {anbncmdm | n > 0, m > 0}. a) = {S, A, B}, = {a, b, c, d}, P = {aAb ::= A, ab ::= A, cBd ::= B, cd ::= B, AB ::= S, ::= S} b) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, A ::= , B ::= cBd, B ::= cd, B ::= } c) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, B ::= cBd, B ::= cd, S ::= } d) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, B ::= cBd, B ::= cd} 4. Alegei gramatica formal G = (, , P, S) corect pentru a genera limbajul L = {anbncmdm | n 0 , m 0}. a) = {S, A, B}, = {a, b, c, d}, P = {aAb ::= A, ab ::= A, cBd ::= B, cd ::= B, AB ::= S, ::= S} b) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, A ::= , B ::= cBd, B ::= cd, B ::= } c) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, B ::= cBd, B ::= cd, S ::= } d) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, B ::= cBd, B ::= cd} 5. Alegei gramatica formal G = (, , P, S) corect pentru a genera limbajul L = {anbncmdm | n 1 , m 1} {}. a) = {S, A, B}, = {a, b, c, d}, P = {aAb ::= A, ab ::= A, cBd ::= B, cd ::= B, AB ::= S, ::= S} b) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, A ::= , B ::= cBd, B ::= cd, B ::= }

c) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, B ::= cBd, B ::= cd, S ::= } d) = {S, A, B}, = {a, b, c, d}, P = {S ::= AB, A ::= aAb, A ::= ab, B ::= cBd, B ::= cd} 6. Alegei gramatica formal G = (, , P, S) corect pentru a genera limbajul L = {anbmcmdn | n 1 , m 1}. a) = {S, X}, = {a, b, c, d}, P = {bXc ::= X, bc ::= X, aSd ::= S, ad ::= S, ::= S} b) = {S, A}, = {a, b, c, d}, P = {S ::= aSd, S ::= aAd, A ::= bAc, A ::= bc} c) = {S, X, Y}, = {a, b, c, d}, P = {S ::= XY, X ::= aXb, X ::= ab, Y ::= cYd, Y ::= cd, S ::= } d) = {S, X, T}, = {a, b, c, d}, P = {S ::= XT, X ::= aXb, X ::= ab, T ::= cTd, T ::= cd} 7. Alegei gramatica formal G = (, , P, S) corect pentru a genera limbajul L format din iruri de bii (literele 0 i 1} a cror lungime este multiplu de trei. a) = {S, A, B}, = {0, 1}, P = {S ::= 0A, S ::= 1A, S ::= , A ::= 0B, A ::= 1B, B ::= 0S, B :: = 1S} b) = {S, A, B}, = {0, 1}, P = {S ::= 0A, S ::= 1A, A ::= , A ::= 0B, A ::= 1B, B ::= 0S, B :: = 1S, B ::= } c) = {S, A, B}, = {0, 1}, P = {S ::= 0A, S ::= 1A, S ::= , A ::= , A ::= 0B, A ::= 1B, B ::= 0S, B :: = 1S, B ::= } d) = {S, X, T}, = {0, 1}, P = {S ::= XT, X ::= 0X1, X ::= 01, T ::= 0T1, T ::= 01} 8. Alegei gramatica formal G = (, , P, S) corect, dar cu numr minim de simboluri neterminale, pentru a genera limbajul L format din iruri de bii (literele 0 i 1} a cror lungime este multiplu de trei. a) = {S}, = {0, 1}, P = {S ::= S000, S ::= S001, S ::= S010, S ::= 011S, S ::= 100S, S ::= S101, S :: = 110S, S ::= 111S, S ::= } b) = {S}, = {0, 1}, P = {S ::= 000S, S ::= 001S, S ::= 010S, S ::= 011S, S ::= 100S, S ::= 101S, S :: = 110S, S ::= 111S, S ::= } c) = {S, A, B}, = {0, 1}, P = {S ::= 0A, S ::= 1A, S ::= , A ::= , A ::= 0B, A ::= 1B, B ::= 0S, B :: = 1S, B ::= } d) = {S, X, T}, = {0, 1}, P = {S ::= XT, X ::= 0X1, X ::= 01, T ::= 0T1, T ::= 01} 9. Se consider variantele a) regulat b) independent de context c) dependent de context 1[]. Alegei tipul limbajului L = {anbn | n 1} 2[]. Alegei tipul limbajului L = {an| n 1} 3[]. Alegei tipul limbajului L = {anbmcmdn | n 1, m 1} 4[]. Alegei tipul limbajului L = {ab, aabb, aaabbb} 5[]. Alegei tipul limbajului L = {w | w{0, 1}*, w conine un numr egal de simboluri 0 i 1, adic N0(w) = N1(w)}. 6[]. Alegei tipul limbajului L = {w | w{0, 1}*, w nu conine subirul 011}. 7[]. Alegei tipul limbajului L = {xmyn| n<m sau 2*m<n, n, m>0}

8[]. Alegei tipul limbajului L = {ambncpdq | m+n = p+q, m, n, p, q 0} 9[]. Alegei tipul limbajului L = {ambn | n < m< 2*n, n, m > 1} 10[]. Alegei tipul limbajului L = {w {a, b}* | w = Rsturnat(w)} 11.[] Alegei tipul limbajului L = { w {a, b}* | simbolul a apare de un numr par de ori} 12[]. Alegei tipul limbajului L = { w {a, b}* | simbolul a apare de dou ori mai des dect simbolul b} 13[] Alegei tipul limbajului L = {anbncn | n 1} 14[] Alegei tipul limbajului L = {ambncmdn | m, n 1} 15[] Alegei tipul limbajului L = {anbncnd | n 1} 10. Rspunsul cerinei urmtoare poate fi adevrat sau fals. 16[]. S se verifice dac limbajul L = {anbncn| n > 0} este independent de context. 17[]. S se verifice dac limbajul L = {an | n = 2k, k>0} este independent de context. 18[]. S se verifice dac limbajul L = {anbncm | n n 2*n, n 0} este independent de context. 19[]. S se verifice dac limbajul L = {an | n = 10k, k 0} este independent de context. 20[]. S se verifice dac limbajul L = {an | n = k2, k 0} este independent de context. 21[]. S se verifice dac limbajul L = {an(bc)n | n 1} este independent de context. 22[]. S se verifice dac limbajul L = {w c Rsturnat(w) | w {a, b}+, iar c {a, b}} este independent de context. 23[] S se verifice dac limbajul L = {an | n = 10k, k 0} este de tip 3 (regulat). 24[] S se verifice dac limbajul L = {an | n = k2, k 0} este de tip 3 (regulat). 25[] S se verifice dac limbajul L = {an | n 0} este de tip 3 (regulat). 26[] S se verifice dac limbajul L = {ap | p numr prim} nu este de tip 3 (regulat). 27[] S se verifice dac limbajul L = {ambn | m i n relativ prime, adic cmmdc(m, n) =1} nu este de tip 3 (regulat). 11. Fie expresiile regulate a) (a+b)*(aa+bb)(a+b)* b) (a+b)* c) a*ba*ba* d) ba* 28[]. Se consider limbajul format din toate cuvintele peste {a, b} care ncep cu b i dup care urmeaz 0, 1, 2 sau mai multe simboluri a. Alegei expresia regulat corespunztoare. 29[]. Se consider limbajul format din toate cuvintele peste {a, b} care conin simbolul b exact de dou ori. Alegei expresia regulat corespunztoare. 30 []. Se consider limbajul format din toate cuvintele peste {a, b}. Alegei expresia regulat corespunztoare. 31[]. Se consider limbajul format din toate cuvintele peste {a, b} care conin consecutiv dou simboluri a sau dou simboluri b. Alegei expresia regulat corespunztoare. 12. Se consider gramatica G = ({S, A, B}, {a, b}, S, P), unde P = {S ::= bA | aB, A ::= bAA | aS | a, B::= aBB | bS | b}. G este n forma normal a) Chomsky b) Greibach

c) Nici una din formele menionate 13. Unui automat pushdown i corespunde o gramatic a) liniar la stnga b) liniar la dreapta c) independent de context 14. Rspunsul cerinei urmtoare poate fi adevrat sau fals. 32[] Exist un algoritm care verific dac limbajul recunoscut de un automat finit determinist este infinit. 33[] Familia limbajelor regulate nu este nchis la reuniune. 34[] Familia limbajelor independente de context este nchis la intersecie. 35[] Familia limbajelor regulate este nchis la intersecie. 36[] Un limbaj recunoscut de un sistem AFN este recunoscut i de un sistem AFD. 37[] Un limbaj recunoscut de un automat pushdown cu stiva vid este recunoscut i de un automat pushdown cu stri finale. 38[] Un limbaj recunoscut de un automat pushdown cu stri finale nu poate fi recunoscut de nici un automat pushdown cu stiva vid. 39[] Pentru orice gramatic independent de context care genereaz un limbaj L, se poate construi un automat pushdown care recunoate limbajul L. 40[] Exist limbaje recunoscute de automate pushdown care nu pot fi generate de gramatici independente de context. 15[]. Adevrat sau fals? Exist clase de limbaje peste alfabetul nchise la substituii finite i intersecie cu limbaje regulate, dar care nu sunt nchise la transformri gsm. 16. Considerm fraza C++ realizat pe baza specificaiilor sintactice: class Sistem_AFD { private: int numar_stari; int cardinal_sigma; int q0; int **delta; int *stari_accesibile; int n_accesibile; public: Sistem_AFD(); ~Sistem_AFD(); Determina_starile_accesibile(); Afisare_informatii(); } Cte cmpuri de date va avea fiecare obiect al clasei Sistem_AFD? 17. Fie declaraiile Prolog: delta(s1, a, s2). delta(s1, b, s3). delta(s2, a, s1). delta(s2, b, s4). delta(s3, a, s4).

delta(s3, b, s1). delta(s4, a, s3). delta(s4, b, s2). stare_initiala(s1). stare_finala(s1). Limbajul recunoscut de automatul specificat este format din: a) toate cuvintele cu un numr par de a i un numr par de b b) toate cuvintele cu un numr impar de a i un numr impar de b a) toate cuvintele cu un numr par de a i un numr impar de b a) toate cuvintele cu un numr impar de a i un numr par de b 18. Regulile evolutive ale algoritmului de analiz sintactica descendent sunt: a) prima alternativ, b) potrivire i nainte c) nepotrivire i prima revenire d) acceptare e) inapoi f) ramificare g) obinerea analizei stngi. Urmtoarea descriere reprezint: 1[]. Se aplic tranziia: (q, n+1, , $) |- (t, n+1, , ). 2[]. Pentru oricare a , (r, i, a, ) |- (r, i-1, , a). 3[]. Se utilizeaz procedura decizional: (q, i, A j +1 , j +1 ), j + 1 k[ A] (r, i, Aj, j ) |- (e, n + 1, A j , ), i = 1, A = S , j = k[ S ] (r , i, , A ), altfel. 4[]. Se aplic homomorfismul g(a) = , a ; g(Ai) = m unde m este indexul produciei A ::= i P. 5[]. Dac a ai (i n) atunci (q, i, , a) |- (r, i, , a). 6[]. Fie A ::= 1 P prima regul din lista A-produciilor. Atunci: (q, i, , A) |- (q, i, A1, 1). 7[]. Dac a = ai (i n) atunci (q, i, , a) |- (q, i+1, a, ). 19. Fie gramatica G = ({S, A}, {a, b}, S, {(S, AA), (S, AS), (S, b), (A, SA), (A, AS), (A, a)}) si w = abaab (|w| = 5). Algorimul CYK (Cocke, Younger, Kasami), la pasul al treilea produce: a. V[3][3]={A, S}, V[3][2]={A, S}, V[3][1]={A, S} c. V[3][3]={A, S}, V[3][2]={A, S}, V[3][1]={S} b. V[3][3]={A, S}, V[3][2]={A, S}, V[3][1]={A} d. V[3][3]={A, S}, V[3][2]={S}, V[3][1]={A} 20. Fie gramatica G = ({S}, {a, b}, S, {S ::= aSB (1) | ab (2)} i cuvntul w = aaabbb. Analiza sintactic a cuvntului w este (ntre paranteze se afl numrul produciei): a) 112 b) 121 c) 211 21. Regulile evolutive ale algoritmului de analiz sintactica ascendent sunt:

a) Deplasare b) Reducere c) Eroare d) Acceptare e) Revenire din motiv de reducere f) Revenire din alt motiv 8[]. (q, i, , ) |- (q, i + 1, ai, D). 9[]. Dac X ::= este producia cu indexul p (cel mai mic) pentru care n lista pushdown se afl un obiect al derivrii, atunci (q, i, u, ) |- (q, i, uX, p). 10[]. (q, n + 1, , Dn) |- (e, n + 1, , Dn). 11[]. (q, n +1, $S, ) |- (t, n+1, , ). 12[]. (q, n + 1, , ) |- (r, n + 1, , ). 13[]. (r, n+1, uX, pv) |- (r, n+1, u, v) dac X ::= este producia cu indexul p i mpiedic reducerile. 14[]. (r, i, uX, pv) |- (q, i, uX, pv) dac X ::= este producia cu indexul p i X ::= are indexul p, p > p i poate conduce la reduceri. Trebuie ca u = u, iar p este cel mai mic cu aceast proprietate. 15[]. (r, i, ua, Dv) |- (r, i-1, u, v), a . 16[]. (r, i, X, pv) |- (q, i + 1, uai, Dv) dac i n, X ::= este a p-a alternativ i ultima posibil pentru a se ncerca reduceri. 22. Limbajul {(ab)na | n>0} nu este ambiguu. 23. Gramatica ce contine reguli de forma S ::= if c then S else S | if c then S | a nu este
ambigua

24. Un automat liniar mrginit nu recunoate limbaje independente de context 25. O main Turing nu recunoate limbaje regulate

1. Limbaje i expresii regulate


Exemplul 1.1 Mulimile V = {a, b, c}; = {0, 1}; VT = {a1, a2, ..., an} etc. sunt alfabete. Observaia 1.1 Mulimea * este monoid n raport cu operaia de concatenare a cuvintelor definit prin xy = ai1ai2...airaj1aj2...ajs, dac x = ai1ai2...air, y = aj1aj2...,ajs, aip (1 p r) i ajq (1 q r), deoarece operaia de concatenare este asociativ, iar este element neutru. Observaia 1.2 Dac 0 = {}, 2 = (mulimea cuvintelor de lungime 2), 3 = 2 (mulimea cuvintelor de lungime 3), n = n-1 (mulimea cuvintelor de lungime n; n>1), atunci k ; a) * = b)
+

U = U
k 0 k 1

Exemplul 1.2 Urmtoarele construcii descriu limbaje: 1) = {a, b, c}, L1 = {anbncn | n 1}, L2 = {ap | p N*, p numr prim}, L3 = {xx | x*}. 2) = {0, 1}, L = { x* | x este scrierea binar a unui numr natural divizibil prin 5}. 3) L = {a3, a5}. Observaia 1.3 L{}={}L=L; L = L = , pentru oricare limbaj L, unde este limbajul vid. Observaia 1.4 Dac L este un limbaj -liber (nu conine cuvntul vid) atunci L+ = L* - {}. Cerinta 1.1 Dac este un alfabet, atunci * este mulime numrabil. Demonstraie. Presupunem card() = n i = {x1, x2, , xn}. Construim funcia bijectiv f pentru domeniul * i codomeniul N (mulimea numerelor naturale). Fie w *, atunci f(w) poate fi ales astfel:

w= 0, f ( w) = k 1 i1 + i2 n + L + ik n , w = xi1 xi2 L xik , k =| w |,1 i s n,1 s k .

Cerinta 1.2. Fie mulimea univers U, funcia f : U U i B U . Construim, n mod inductiv, irul de mulimi: A0 = B; Ak+1 = Ak {f(x) | x Ak}, k N i A = Ak . Atunci:
kN

a) A este nchis fa de f; b) Dac mulimea C este astfel nct B C U i este nchis fa de f atunci AC. Demonstraie. Fie x A. Exist k N astfel nct x Ak. Prin urmare f(x) Ak+1 A. Fie mulimea C astfel nct B C U i C nchis fa de f. Evident A0 C. Presupunem, prin inducie c Ak C. Fie y Ak+1 Cum Ak+1 = Ak {f(x) | x Ak}, atunci fie y Ak (deci i lui C), fie y = f(x) cu x Ak C. Din nchiderea lui C n raport cu f, rezult y C. Prin urmare Ak C.
kN

Exemplul 1.3 a) L(0*1*2*)={0i1j2k | i, j, k 0}. b) Expresiile b(ab)* i (ba)*b sunt echivalente. c) L(ba*) este mulimea cuvintelor, peste {a, b}, care ncep cu b i dup care urmeaz 0, 1, 2, etc. simboluri a, adic L(ba*) = {ban | n 0}. d) L(a*ba*ba*) este mulimea cuvintelor, peste {a, b}, care conin simbolul b exact de dou ori. e) L((a+b)*) reprezint mulimea tuturor cuvintelor peste alfabetul {a, b}. f) L((a+b)*(aa+bb)(a+b)*) este mulimea tuturor cuvintelor, peste {a, b}, coninnd, consecutive, doua litere a sau b. Exemplul 1.4 Urmtoarele limbaje sunt mulimi regulate: L1={an| n1}; L2 = {(ab)nc| n0}; L3 = {a,b}*, etc. Cerinta 1.3 [Identiti cu expresii regulate] Fie r, s i t expresii regulate peste . Atunci: a) r + s s + r, r + + r, r + r r, (r + s) + t r + (s + t); b) r r r, r r , (rs)t r(st); n general, comutativitatea produsului nu are loc. c) r(s + t) rs + rt, (s + t)r sr + tr; d) r* r*r* (r*)* (+r)*, * * ; e) r* + r + r2 + r3 + + rk + rk+1r*, pentru k 0. f) (r+s)* (r* +s*)* (r*s*)* (r*s)*r* r*(sr*)*. Expresiile (r+s)* i r*+s* nu sunt, n general, echivalente. g) r*r rr*, r(sr)* (rs)*r; h) (r*s)* + (r + s)*s, (rs*)* + r(r + s)*; i) Dac L(s) atunci ((r sr + t) rs*t ) i ((r rs + t) r ts*). Demonstraie. Folosind unele dintre identitile a-h, demonstrm afirmaia i). Din r s*t rezult r ( + ss*)t t + ss*t t + sr sr + t. Presupunem c L(s) i c

r sr + t . Obinem, succesiv, r sr + t s(sr + t) +t s2r + (st + t) s3r + (s2t + st + t) sk+1r + (skt + sk-1t + + st + t), pentru k 0. Artm c r s*t prin dubl incluziune. Fie x L(r) de lungime k := |x|. Deoarece r sk+1r + (skt + sk-1t + + st + t) i L(s) rezult c x sk+1r (este clar c L(sk+1) conine cuvinte cu cel puin k + 1 simboluri). Prin urmare x L(skt + sk-1t + + st + t ) L(s*t). Reciproc, fie x L(s*t), deci exist i 0 astfel nct x L(sit). Dar, identitatea r si+1r + (sit + si-1t + + st + t) arat c L(r) L(sit). Deci x L(r). Partea a doua a afirmaiei se demonstreaz similar.

2. Mecanisme generative fundamentale


Exemplul 2.1 Fie V = {S, A, B, C, a, *} i P = { (S, BAB), (BA, BC), (CA, AAC), (CB, AAB), (A, a), (B, *)}. n cadrul sistemului de rescriere (V, P) sunt posibile generri de cuvinte precum:
* a) B A 2 B B A2
k k +1

B;

b) B A B * a
2k *

2k

*; *;

c) B A B * a
2k *

2 k +1

d) S * a *.
* 2n

Observaia 2.1 Ansambul SR = ( , P) este un sistem de rescriere pentru limbajul L(G) pornind de la irul S. Metoda de generare pentru L(G) poate fi specificat prin structura (SR, {S}, ). = Exemplul 2.2 [akbk] O gramatic care genereaz limbajul {anbn | n1}. este G=({S}, {a, b}, S, {(S, aSb), (S, ab)}. Se demonstreaz, prin inducie, c FP(G) = {akSbk | k 1} {akbk | k 1}. Prin urmare L(G) = {akbk | k1}. Exemplul 2.3 [Ptrate] Fie ={S, A, B, X}, ={a, %} i P = {S ::= %% | %B% | %AABB%, %A ::= %XA, XA ::= AX, XB ::= AABX, X% ::= B%, A ::= a, B ::= a}. Gramatica G=(, , S, P) genereaz limbajul L = {% a n % | n 0}. Cerinta 2.1 * Pentru orice gramatic de tip 2, G = (, , S, P) , dac AB w, atunci * * exist w1, w2 V* astfel nct: 1) w = w1w2 i 2) A w1, B w2.
* Demonstraie. Fie n lungimea derivrii AB w. Aplicm metoda induciei * dup n. Pentru n = 0 (AB AB), lum w1 = A i w2 = B, iar afirmaia este evident. S presupunem c propoziia este adevrat pentru orice derivare de * lungime n. Fie AB w o derivare de lungime n + 1. Punem n eviden * ultimul pas al derivrii: AB w. Fie C ::= a n + 1 producie aplicat. * * Din ipoteza de inducie rezult: = 12, A 1, B 2. Neterminalul
2

C se afl fie n 1, fie n 2. S presupunem c C se afl n 1, adic 1 = 1C2. * * Prin urmare AB 1C22 122 = w. Lum A 1C2 12 = * 1 i B 2. n general 1 i 2 nu sunt determinate n mod unic. Cerinta 2.2 Pentru orice gramatic de tip 2, G = (, , S, P), exist o gramatic echivalent G = (, , S, P), de tip 2, n care toate produciile lui P care conin terminale sunt de forma A ::= a, a . Demonstraie. Pentru fiecare simbol terminal a , se introduce un neterminal nou Xa. Se consider: = {Xa | a }, iar P se obine din P nlocuind toate terminalele a cu neterminalul Xa i adugnd, n final, produciile Xa ::= a, a . Este evident c se pstreaz tipul gramaticii i c L(G) = L(G) Cerinta 2.3 Orice gramatic liniar la dreapta este echivalent cu o gramatic de acelai tip, dar cu reguli de forma: A ::= aB sau A ::= a, unde A, B , iar a {}. Demonstraie. Fie A ::= wB o regul a gramaticii iniiale, A, B , w *. Dac |w| = 1, aceasta nu sufer nici o modificare, fiind n forma cerut. Presupunem c |w| = n > 1. Atunci w = a1a2an, introducem n-1 simboluri neterminale noi B1, B2, , Bn-1 i nlocuim regula A::= wB cu mulimea de reguli {A ::= a1B1, B1 ::= a2B2, , Bn-2 ::= an-1Bn-1, Bn-1 ::= anB}. Dac n = 0 (mai spunem c avem de-a face cu o redenumire) atunci parcurgem urmtoarele etape (a se vedea i propoziia 5.3). * D}. Regula A ::= B se Iniial, se determin mulimea1 R(B) = {D | D , B nlocuiete cu mulimea de reguli {A ::= C| D ::= C P, D R(B), } {A ::= | D ::= P, D R(B)}. Fie A::= w o regul a gramaticii iniiale, A i w *. Dac n = |w| 1, aceasta rmne neschimbat, altfel se consider n-1 neterminale noi C1, C2, ,Cn-1, i dac w = a1a2an, regula se nlocuiete cu mulimea de reguli {A := a1C1, C1 ::= a2C2, , Cn-2 ::= an-1Cn-1, Cn-1 ::= an}. Se parcurg toate regulile gramaticii iniiale i se transform ca mai sus. Trebuie avut n vedere ca regulile s fie nregistrate o singur dat. Exemplul 2.4 Fie gramatica G = ({S, A, B, C, D}, {a, b, c}, S, {S ::= A | abcB, A ::= C | D, B ::= A | ab, C ::= S}). Obinem succesiv: R(S) = {A, C, D, S}, R(A) = {C, D, S, A}, R(B) = {A, C, D, S}, R(C) = {S, A, C, D}, R(D) = . Considerm regula S ::= abcB i simbolurile X1, X2. Formm mulimea S1 = {S ::= aX1, X1 ::= bX2, X2 ::= cB}. Pentru regula B ::= ab, considerm simbolul X3 i mulimea de reguli P1 = {B::=aX3, X3 ::= b}. n acest moment, regulile sunt:
1

R(B) reprezint mulimea redenumirilor directe sau prin simboluri intermediare ale neterminalului B.

S ::= A | aX1; X1 ::= bX2; A ::= C | D; X2 ::= cB; B ::= A | aX3; X3 ::= b. C ::= S; Regula S ::= A se transform n S ::= aX1 (care exist deja), regula A::= C se transform n A ::= aX1, regula A ::= D se elimin, regula B::=A se nlocuiete cu B ::= aX1, iar regula C ::=S se nlocuiete cu regula C ::= aX1. Gramatica G are mulimea neterminalelor = {S, B, X1, X2, X3}, aceeai mulime de terminale, simbolul de start S i mulimea de reguli P = { S ::= aX1, X1 ::= bX2, X2 ::= cB, B ::= aX1 | aX3, X3 ::= b}. Se observ c simbolurile A, C i D sunt inutile Regulile A ::= aX1 i C ::= aX1 pot fi adugate, dar n procesul de generare nu se vor aplica niciodat. Observaia 2.2 Fie G o gramatic liniar la stnga, exist o gramatic liniar la stnga G astfel nct L(G) = L(G), iar regulile gramaticii G sunt numai de forma A ::= Ba i A ::= a, unde A, B , iar a {}. Demonstraie. Se procedeaz ca la demonstraia propoziiei 2.3. Cerinta 2.5 Fie G o gramatic n care produciile sunt de forma A ::= Ba i A ::= a. Atunci exist o gramatic G echivalent cu G pentru care produciile sunt de forma A ::= aB i A ::= a. Demonstraie. Fie G = (, , S, P) gramatica dat. Construim G=(, , S, P), unde S este un neterminal nou, considerat ca axiom n gramatica G, = {S}, iar P se obine din P prin transformarea fiecrei producii, dup cum urmeaz: 1. A ::= a P S ::= aA P, A S; 2. S ::= a P S ::= aS P i S ::= a P; 3. A ::=Ba P B ::= aA P, A S; 4. S ::= Ba P B ::= aS P i B ::= a P. Fie wL(G). Dac |w| = 1, rezult S ::= w P, deci (regula 2) S::=w P. Prin urmare w L(G). Dac w = a1a2an, n > 1, atunci exist derivarea: S A1an A2an-1an A3an-2an-1an An-1 a2a3 an-2an-1an a1a2an. Produciile folosite au fost: S ::= A1an; A1 ::= A2an-1; , An-2 ::= An-1a2 i An-1 ::= a1. Deci, n P, se vor utiliza regulile A1 ::= an; A2 ::= an-1A1; , An-1 ::= a2An-2 i S ::= a1An-1. Rezult c w L(G). Incluziunea invers se demonstreaz similar. Observaia 2.3 Propoziiile anterioare arat echivalena dintre gramaticile liniare la stnga i cele liniare la dreapta. Nu trebuie crezut c dac o gramatic are pe lng reguli de tipul A ::= a, att reguli de forma A ::= aB, ct i reguli de forma C ::= Db, ea va fi echivalent cu o gramatic liniar la stnga (sau la dreapta). De exemplu, gramatica

cu regulile { S ::= aA | aB; A ::= Sb; B ::= b} genereaz2 un limbaj de tip 2 i nu unul de tip 3 aa cum ar prea la prima vedere. Exemplul 2.5 Urmtoarele limbaje sunt de tip 3: L1 = {an | n1}, L2 = +, unde este un alfabet finit (a se face legtura i cu elementele lexicale ale limbajelor de programare), L3 = {a(ba)n | n 0}. L1 este generat de gramatica G1 avnd regulile: P={S ::= aS | a}. Fie = {a1, a2, , an}, L2 este generat de o gramatic cu regulile: P = {S ::= aiS | i = 1, 2, , n} {S ::= ai | i = 1, 2, , n}. Limbajul L3 este generat de gramatica cu regulile P = { S := aA | a, A ::= bB, B ::= aA | a}. Exemplul 2.6 Fie gramatica G = ({E, T, F}, {(, ), +, *, a}, E, P) unde E este simbolul de start, iar P are urmtoarele elemente: E ::= E+T | T; T ::= T*F | F, F ::= (E) | a. Arborii de derivare pentru irurile a+(a*a) i (a+a)*a sunt3:
E / | \ E + T | | T F | / | \ F ( E ) | | a T / | \ T * F | | F a | a E | T | *

/ T | F / | \ ( E ) /|\ E + T | | T F | | F a | a

\ F | a

Cerinta 2.6 Fie G = (, , S, P) o gramatic independent de context. Oricare ar fi A * , ( )*, A dac i numai dac exist un A-arbore cu frontiera . Demonstraie. Fie n numrul nodurilor interioare al unui A-arbore cu frontiera . Dac n = 1 atunci, arborele are forma: A

X1
2

X2

Xk

Se demonstreaz uor c limbajul generat de gramatica de la observaia 2.3 este L = {anbn | n 1}. 3 n arbori, au fost trecute direct etichetele vrfurilor i nu elementele din mulimea X.

Prin urmare, n G exist producia A ::= X1X2Xk, Deci A X1X2Xk. S presupunem c proprietatea are loc pentru arbori cu cel mult n - 1 noduri interioare i fie un A-arbore cu n noduri interioare i frontiera (n > 1). Descendenii lui A nu pot fi toi frunze. Fie X1, X2, , Xk etichetele acestor descendeni i i frontiera Xi arborelui dac Xi i i = Xi dac Xi . Deoarece orice Xi-arbore are cel * i (evident i pentru Xi ). Prin urmare, n G mult n-1 noduri, atunci Xi * * * exist derivarea A X1X2Xk 1X2Xk 12X3 Xk 12 * k-1Xk 12 k = . * Reciproc, presupunem c derivarea A are lungimea n (n gramatica G) i procedm prin inducie dup n. Pentru n = 1, rezult c A , iar dac = X1X2Xk atunci se pune n eviden A-arborele: A

X1

X2

Xk

Presupunem c afirmaia este valabil pentru derivri de lungime cel mult n - 1 * care ncep de la un neterminal din G i fie derivarea, n n pai, A . Fie A * ::= X1X2Xk prima producie din derivare. Deci A X1X2Xk . Atunci * i (n cel mult n-1 pai). (conform propoziiei 2.1) = 12 k i Xi Dac Xi i, atunci exist un Xi arbore cu frontiera i. Dac Xi = i atunci Xi arborele este format doar din nodul etichetat cu Xi. A

X1

X2

Xk-1

Xk

k-1

Astfel, A-arborele de frontier se obine prin aezarea Xi-arborilor n ordinea X1, X2, , Xk i adugarea unui nou nod cu eticheta A i descendenii X1, X2, , Xk. Observaia 2.4 Fie G = (, , S, P) o gramatic independent de context. Atunci L(G), * adic S , dac i numai dac exist un arbore de derivare (S-arbore) cu frontiera .

Observaia 2.5 Fie G = (, , S, P) o gramatic independent de context i w L(G), deci exist un arbore de derivare cu frontiera w. a) Evident, se poate pune n eviden o derivare extrem stnga (resp. dreapta) pentru w din S. Totui, pentru un anumit cuvnt pot exista mai multe derivri extrem stnga (resp. dreapta), ceea ce denot o ambiguitate n procesul de generare. b) Pentru orice cuvnt w L(G), numrul de derivri extrem stnga pentru w este egal cu numrul de derivri extrem dreapta. Exemplul 2.7 Fie G = ({S}, {a, b}, S, {S ::= SbS | a}) i cuvntul w = (ab)3a. Se observ c: S SbS SbSbS abSbS abSbSbS ababSbS abababS abababa i S SbS SbSbS SbSbSbS abSbSbS ababSbS abababS abababa. Dac numerotm regulile de rescriere: 1. S ::= SbS, 2. S ::= a atunci derivrile cuvntului (ab)3a sunt obinute prin aplicarea secvenelor de reguli: 1,1,2,1,2,2,2 (resp. 1,1,1,2,2,2,2). Totui limbajul {(ab)na | n 1} nu este ambiguu deoarece este generat i de gramatica liniar la dreapta G1 = ({S, X, Y}, {a, b}, S, {S ::= Xa, X := aY, Y ::= bX | b}) care nu este ambigu. Observaia 2.6 Orice gramatic independent de context care conine, printre regulile sale de rescriere, producii de unul din tipurile (1)-(4), cu neterminalul A util in generarea de cuvinte peste , este ambigu: (1) A ::= AA; (2) A ::= AA; (3) A ::= A | A; (4) A ::= A | AA. Cerinta 2.7 Fie G = (, , S, P) o gramatic independent de context, iar A cu proprietatea c exist o producie de forma A ::= A. Atunci exist o gramatic G echivalent cu G care pentru orice A-regul A ::= avem A Pref(). Demonstraie. Fie A ::= Ai, i = 1, 2, , n, toate A-regulile de rescriere ale gramaticii G care au neterminalul A ca prim liter a membrului drept, iar A ::= i , i = 1, 2, , m, celelalte A-reguli. Considerm gramatica G = ( {B}, , S, P) unde B ( ) este un simbol nou, iar P se obine din P astfel: P=(P-{A :: Ai; 1in}) { A ::= iB; 1im} }) {B ::= iB | i; 1 i n}. Observm c noua gramatic nu mai este recursiv la stnga n A, dar este recursiv la dreapta n B. Echivalena celor dou gramatici rezult imediat. Exemplul 2.8 [Generarea factorialului] Urmtoarea gramatic, G = (, , S, P), prezentat n Pun(1974), genereaz factorialul numerelor naturale: = {S, A, A_, A0, A+, X, Y, Z}, = {#, a}, P = {(S, A) ; (S, aa); (S, A_S); (S, A0A0); (#A_, #A+); (A+A_, A_ZA+); (A+A0, A0ZA+); (A+#, ZX#); (A+X, XZA+); (A+Z, ZA+); (ZA_, A_Z); (X#, Y#), (A0Y, YA0), (ZY, A0Y); (XY, YA_); (#Y, #A0); (A0A_, A_A0); (#Y, #a); (aA0, aa)}

Atunci Var(G) = 7 i Prod(G) = 19. Msura Simb(G) nu poate fi evaluat deoarece G nu este o gramatic independent de context. Exemplul 2.9 Fie gramatica independent de context G = (, , S, P), unde = {S, A, B}, = {a, b} i P = {(S, aB); (S, bA); (A, a); (A, aS); (A, bAA); (B, b); (B, bS); (B, aBB)}. Atunci Var(G) = 3, Prod(G) = 8 i Simb(G) = 32. Fie derivarea D1: S aB abS abbA abba. Atunci Index(D1, G) = 1. Derivarea D2: S bA bbAA bbaSA bbaaBA bbaaaBBA bbaaabba, are indexul Index(D2, G) = 3.

3. Mecanisme pentru recunoaterea automat a mulimilor regulate


Exemplul 3.1 Fie Q = {q0, q1, q2, q3}, = {0, 1}, F = {q0}. Pentru automatul M = (Q, , , q0, F), dat prin diagrama: 1 q0 0 q2 0 1 1 funcia , definit tabelar, este: 0 q0 q2 q1 q3 q2 q0 q3 q1 1 0 q3 q1 0

1 q1 q0 q3 q2

Cerinta 3.1 Cu notaiile de mai sus, (q, uv) = ((q,u), v), pentru oricare u, v *. Demonstraie. Se utilizeaz un raionament inductiv dup lungimea cuvntului v. Dac |v| = 0 atunci (q, uv) = ((q, u), ) = (q, u). Presupunem afirmaia adevrat pentru cuvinte v de lungime cel mult n. Fie v de lungime n + 1, v = wa, unde a i w *. Obinem succesiv: (q, uv) = (q, uwa) = ((q, uw), a) = (((q, u), w), a) = ((q, u), wa) = ((q, u), v). Exemplul 3.2 Fie automatul din exemplul 3.1. Atunci: a) (q0, 10101100) = ((q0, 1), 0101100) = ((q1, 0), 101100) =

((q3, 1), 01100) = ((q2, 0), 1100) = ((q0, 1), 100)= ((q1, 1),00) = ((q0, 0),0) = ((q2, 0), )= (q2, 0) = q0 F. b) (q0, 11101001) = ((q0, 1), 1101001) = ((q1, 1), 101001) = ((q0, 1), 01001) = ((q1, 0), 1001) = ((q3, 1), 001)= ((q2, 0), 01)= ((q0, 0), 1) = ((q2, 1), ) = (q2,1) = q3 F. Exemplul 3.3 Limbajul acceptat de automatul prezentat n exemplul 3.1 este constituit din mulimea irurilor peste {0, 1} n care apar un numr par de 0 i un numr par de 1. Exemplul 3.4 Fie N = (Q, , N, q0, F) cu Q = {A, B, C}, = {a, b}, q0 = A, F = {B, C} i N dat prin tabelul: N a b A {A, B} {B} B {A, C} {C} C {B, C} {A} i w = abababb. Atunci, obinem succesiv: N(A, abababb) = N(A, bababb) N(B, bababb); N(A, bababb) = N(B, ababb) = N(A, babb) N(C, babb); N(B, bababb) = N(C, ababb) = N(B, babb) N(C, babb); N(A, babb) = N(B, abb) = N(A, bb) N(C, bb); N(B, babb) = N(C, abb) = N(B, bb) N(C, bb); N(C, babb) = N(A, abb) = N(A, bb) N(B, bb); N(A, bb) = N(B, b) = {C}; N(B, bb) = N(C, b) = {A}; N(C, bb) = N(A, b) = {B}; N(A,abababb) = {A, B, C}. Observm c F N(A, abababb) . Deci abababb L(N). Cerinta 3.2. Orice limbaj acceptat de un AFD este acceptat de un AFN. Demonstraie. Evident. Cerina 3.3. Fie L un limbaj acceptat de un AFN. Atunci exist un AFD, notat cu M, astfel nct L(M) = L. Demonstraie. Fie N = (Q, , , q0, F) un AFN astfel nct L(N) = L. Definim un AFD, notat cu M = (QM, , M, q0, F) unde: QM = P(Q); q0 = qo; F = {P | P Q, P F }, iar M(, a) = ; M(P, a)= (q, a ) ; oricare P Q, P .
qP

Este suficient s demonstrm c M({s}, w) = (s, w), oricare s Q i oricare w *. Dezvoltm un raionament inductiv. Pentru |w| = 0, afirmaia este evident. Presupunem c afirmaia este adevrat pentru orice cuvnt de lungime k. Fie w * astfel nct |w| = k + 1, w = a, || = k, a . Prin urmare: M({s}, w) = M({s}, a) = M(M({s}, )), a)= M (r , a ) = (r , a) = ({s}, a).
r M ({ s}, )

r ( s , )

n concluzie, w L(M) (q0, w) F M({q0}, w) F M(qo, w) F w L(M). Exemplul 3.5 Fie automatul finit nedeterminist din exemplul 3.4. Automatul finit determinist asociat are este caracterizat prin tabelul: QM q7 q0 q1 q2 q3 q4 q5 q6 P(Q) {A} {B} {C} {A, B} {A, C} {B, C} {A, B, C} A q7 q3 q4 q5 q6 q6 q6 q6 b q7 q1 q2 q0 q5 q3 q4 q6

deoarece: M(q0, a) = M({A}, a) = N(A, a) = {A, B} = q3; M(q0, b) = M({A}, b) = N(A, b) = {B} = q1; M(q1, a) = M({B}, a) = N(B, a) = {A, C} = q4; M(q1, b) = M({B}, b) = N(B, b) = {C} = q2; M(q2, a) = M({C}, a) = N(C, a) = {B, C} = q5; M(q2, b) = M({C}, b) = N(C, b) = {A} = q0; M(q3, a) = M({A, B}, a) = N(A, a) N(B, a) = {A, B, C} = q6; M(q3, b) = M({A, B}, b) = N(A, b) N(B, b) = {B, C} = q5; M(q4, a) = M({A, C}, a) = N(A, a) N(C, a) = {A, B, C} = q6; M(q4, b) = M({A, C}, b) = N(A, b) N(C, b) = {A, B} = q3; M(q5, a) = M({B, C}, a) = N(B, a) N(C, a) = {A, B, C} = q6; M(q5, b) = M({B, C}, b) = N(B, b) N(C, b) = {A, C} = q4; M(q6, a) = M({A, B, C},a) = N(A,a) N(B,a) N(C,a)={A, B, C} = q6; M(q6, b) = M({A, B, C},b) =N(A,b) N(B,b) N(C,b)={A, B, C} = q6, iar F = {q1, q2, q3, q4, q5, q6}. Observm c q7 este stare inutil i se poate elimina din QM.

4. Optimizarea automatelor finite


Algoritmul 4.1 [Determinarea strilor accesibile4] Prin aplicarea strategiei greedy, putem obine un ir ascendent de mulimi cu stri accesibile, majorat n sensul relaiei de incluziune de mulimea strilor automatului considerat. Fie S0 = {q0}. Pentru i 0, formm Si+1 = Si {q Q - Si| exist s Si i a astfel nct (s, a) = q}. O alt modalitate de construire a irului ascendent utilizeaz relaia de recuren: Si+1 = Si {(s, a) | s Si, a }. Este clar c trebuie s existe k0, k0 |Q| astfel nct Sk0 = Sk0+1, k0 fiind cel mai mic numr natural cu aceast proprietate; n aceste condiii Sk0+j = Sk0, oricare j 1. Mulimea strilor accesibile este Sk0. Intrare: Q, , q0, , F Ieire: Q mulimea strilor accesibile SEQ 1. i := 0; S0 := {q0}; 2. do {Si+1 := Si {(s, a) | s Si, a }; i = i+1; }while(Si Si-1 ); 3. Q = Si. END. Algoritmul 4.2 [Determinarea strilor utile5] Prin aplicarea strategiei greedy, putem obine un ir ascendent de mulimi cu stri utile, majorat n sensul relaiei de incluziune de mulimea strilor automatului considerat. Fie U0 = F. Pentru i 0, formm Ui+1 = Ui {q Q - Ui| exist a astfel nct (q, a) Ui}. Este clar c trebuie s existe k0, k0 |Q| astfel nct Uk0 = Uk0+1, k0 fiind cel mai mic numr natural cu aceast proprietate; n aceste condiii Uk0+j = Uk0, oricare j1. Mulimea strilor utile este Uk0. Intrare: Q, , q0, , F Ieire: U mulimea strilor utile SEQ 1. i := 0; U0:= F; 2. do { for a do for q Q - Ui do if (q, a) Ui then Ui+1 = Ui {q}; i = i +1; }while(Ui Ui-1 ); 3. U = Ui. END.
Problema determinrii strilor accesibile este echivalent cu problema determinrii vrfurilor unui digraf care sunt legate prin cel puin un drum de vrful care corespunde strii q0. Dac se determin matricea existenei drumurilor sau, echivalent, nchiderea tranzitiv a relaiei binare asociat diagramei de tranziie (de exemplu, folosind algoritmul Roy-Warshal) atunci strile accesibile corespund valorii 1 n linia strii q0 din matricea existenei drumurilor. 5 n unele lucrri, strile utile sunt denumite stri observabile.
4

Cerinta 4.1 [Lema de pompare] Fie L un limbaj regulat. Exist atunci un numr natural n astfel nct pentru orice cuvnt w L, |w| n, w = xyz cu proprietile: a) |xy| n; b) |y| 1; c) xyiz L pentru oricare i 0. Demonstraie. Se folosete automatul minimal care recunoate L. Rezult c n este unic determinat i depinde numai de L. Fie M = (Q, , , q0, F) astfel nct L(M) = L i M este automatul minimal. Considerm n := |Q|. Fie w L, |w| n, w L, |w| n. Atunci w = a1a2 am, m n. Fie qi = (q0, a1a2ai), i = 1, 2, , m. Deoarece w L rezult c qm F. Cum sunt evideniate m + 1 stri, iar m n, rezult c, n irul q0, q1, , qm, exist dou stri care se repet. Fie qs i qt strile care se repet (evident 0 s < t m; se poate lua chiar s minim cu aceste proprieti). Se descompune w astfel: x = a1a2as, y = as+1as+2at, z = at+1at+2am. Se observ c aceast descompunere satisface cerinele formulate. Exemplul 4.1 [ a k ] Fie L = { a k | k 1}. Vom arta c L nu este limbaj regulat. Presupunem contrariul. Fie n numrul natural dat de lema de pompare aplicat pentru presupusul limbaj regulat L i w L astfel nct w = a n , adic |w| = n2 > n pentru n > 1. Atunci w = xyz cu a) |xy| n; b) |y| 1; c) xyiz L pentru oricare i 0. Fie i = 2. Obinem |xy2z| = |xyz| + |y| = n2 + |y|. Dar n2 < |xy2z| n2 + n < (n+1)2. Deci xy2z L, contrar celor presupuse. n concluzie L nu este limbaj regulat. Exemplul 4.2 [akbk] Fie L = {akbk | k 1}. Presupunem c L este limbaj regulat i fie n numrul dat de Teorema 4.3. Fie w = anbn = xyz. Cum |y| > 0, apar trei situaii: 1. y = as, 0 < s n. Pentru i = 0 se va obine un cuvnt cu mai puine simboluri a dect b, deci xy0z L; 2. y = bt, 0 < t n. Analog, pentru i=0, rezult xy0z L; 3. y = asbt, 0 < s, t n. Pentru i = 2 se amestec literele i se obine xy2z = an-sasbtasbtbn-t = anbtasbn L. Deci L nu este limbaj regulat. Cerinta 4.2 Fie L un limbaj acceptat de un AFD cu n stri. Atunci L exist w L astfel nct |w| < n; Demonstraie. Presupunem c L este nevid. Fie w L. Notm w0 := w. Dac |w0| < n atunci stop, altfel aplicm Teorema 4.3 i rezult descompunerea w0 = xyz cu proprietile: a) |xy| n; b) |y| 1; c) xyiz L pentru oricare i 0. Pentru i = 0, formm w1 = xz L, deoarece L este acceptat de un AFD, deci este limbaj regulat. Continum cu obinerea secvenei, descresctoare n lungime, w0, w1, , wt. Ne oprim cnd |wt| < n. Implicaia invers () este evident.
2 2 2

Cerinta 4.3 Fie L un limbaj acceptat de un AFD cu n stri. Atunci L este infinit exist w L, n |w| < 2n. Demonstraie. Fie L limbajul generat de un AFD cu n stri. Dac limbajul este infinit atunci, sigur exist un cuvnt w L astfel nct |w| > n. Fie w0 := w. Conform lemei de pompare rezult c w0 = xyz cu proprietile: a) |xy| n; b) |y| 1; c) xyizL pentru oricare i 0. Dac |w0| < 2n atunci stop, altfel considerm w1 = xz L, pentru care |w1| < |w0|. Dac |w1| < 2n atunci stop, altfel relum procesul i vom obine o seven, descresctoare n lungime, w0, w1, , wt. Ne oprim cnd |wt| < n. Reciproc, dac n L exist un cuvnt w astfel nct n |w| < 2n, atunci prin aplicarea lemei de pompare i considerarea cuvintelor xyiz, i 0, obinem o mulime infinit de cuvinte ale limbajului, deci L este infinit. Algoritmul 4.3 Fie L un limbaj acceptat de un AFD cu n stri. Pentru a verifica dac L , se poate aplica urmtorul algoritm. Intrare: Q, , q0, , F Ieire: DA dac L este nevid; NU n caz contrar. SEQ 1. i := 0; S0:= {q0}; 2. do {Si+1 := Si {(s, a) | s Si, a }; i = i + 1;} while(Si Si-1 ); 3. if Si F = then write NU; else write DA. END. Se observ c mulimea Si, de la pasul 3, conine strile accesibile. Este clar c dac nici o stare final nu este accesibil atunci limbajul L este vid. Algoritmul 4.4 Fie L un limbaj acceptat de un AFD cu n stri. Pentru a verifica dac L , se poate aplica urmtorul algoritm. Intrare: Q, , q0, , F Ieire: DA dac L este infinit; NU n caz contrar. SEQ 1. i := 0; S0:= {q0}; 2. do {Si+1 := Si {(s, a) | s Si, a }; i = i + 1; }while(i < n); 3. do{ if Si F then write DA; stop. Si+1 := Si {(s, a) | s Si, a }; i = i + 1; }while(i < 2n); 4. write NU. END.

5. Transformri asupra gramaticilor formale


Cerinta 5.1 [Eliminarea redenumirilor] Fie G = (, , S, P) o gramatic de tipul 2 sau 3. Exist o gramatic G1 = (, , S, P1) de acelai tip cu G, echivalent cu G i fr redenumiri. Demonstraie. Fie G = (, , S, P) o gramatic de tipul 2 sau 3 i P := {A ::= w | w , A ::= w P} mulimea regulilor din P care nu sunt redenumiri. Fie P := { + A ::= w | A , exist B, B i A B (n G, derivare n cel puin un pas), iar B w P} o mulime de reguli care nu sunt redenumiri. Formm gramatica G1 = (, , S, P1) cu P1 := P P. Evident G1 este fr redenumiri i de acelai tip cu G. Demonstrm c G i G1 sunt echivalente. * Fie w L(G), deci S w, printr-o derivare stng (conform lemei 5.1), * * * * n G, de forma: S = w0 w1 w2 wk = w, derivrile * wi+1, i = 0, 1, 2, , k - 1 fiind de lungime nenul, iar pentru fiecare din wi ele este posibil numai una din situaiile: * a) wi wi+1 este o derivare de lungime 1 obinut prin aplicarea unei * wi+1, n gramatica G1. reguli din P. Deci wi * wi+1 este o derivare de lungime cel puin egal cu 2, astfel nct b) wi * exist v ()*, pentru care wi v (derivare stng cu redenumiri) i v wi+1, derivare printr-o regul din P. Prin aplicarea * unei reguli din P referitor la derivarea iniial wi v se poate gsi * wi v n G1. Prin cuplarea derivrilor rezult c este posibil ca S * w n G1. Reciproca este imediat. Cerina 5.2 [Determinarea simbolurilor neterminale care genereaz cuvntul vid] Fie G = (, , S, P) o gramatic cu produciile de forma (p, q) x()*. irul de mulimi generat prin: U0 = ; Um+1 = Um {X | X , exist w, w Um*, X ::= w P} are urmtoarele proprieti: a) U0 U1 Um i exist k, numr natural, astfe nct Uk = Uk+1. b) Dac Uk = Uk+1, atunci Uk = Uk+i, pentru oricare i > 0. c) Fie k* cel mai mic numr natural pentru care Uk* = Uk* +1. Atunci * Uk* = {X | X i X }. Demonstraie. Proprietatea a) rezult din construcia irului de mulimi, iar proprietatea b) se poate demonstra uor prin inducie. Vom demonstra proprietatea c). Mai general, vom arta c * }, pentru oricare m numr natural. Um {X | X i X * } i Dac m = 0, este evident. Presupunem c Um {X | X i X fie X Um+1. Dac X Um rezult c exist w, wUm*, X ::= w P. Sunt posibile dou cazuri: * Cazul 1: w = . Deci X .

Cazul 2. w . Atunci w = x1x2xr, unde xi Um, i = 1, 2, , r. Din ipoteza * * de inducie rezult c xi , i = 1, 2, , r. Deci X . * n ambele cazuri a rezultat c X {X | X i X }. * n concluzie Uk* {X | X i X }.
* Reciproc, presupunem c Uk* i artm c {X | X i X } * . Uk*, prin inducie complet n raport cu lungimea derivrii X * Dac derivarea X este de lungime 1 atunci X ::= este producie din P, deci X U1 Uk*. * Presupunem c pentru orice derivare X cu lungimea cel mult m * o derivare de lungime m+1. Punem n eviden rezult X Uk*. Fie X * primul pas al derivrii. Rezult c exist v astfel nct X ::= v i X v , * are lungimea m. Evident pentru m 0 trebuie ca v . unde derivarea v Prin urmare v = v1v2vr este o scriere a lui v cu elemente vi , i = 1, 2, , r. Dac ar exista un i pentru care vi , acesta nu ar mai putea fi eliminat pe * * , i = parcursul derivrii v . Conform propoziiei 2.1 rezult c vi 1, 2, , r. Prin aplicarea ipotezei de inducie rezult c vi Uk* i deci v Uk*. Astfel obinem X Uk*.

Cerina 5.3 [Limbaje independente de context generate de gramatici cu producii] Fie G = (, , S, P) o gramatic cu produciile de forma (p, q) x()*. Atunci L(G) este un limbaj independent de context. Demonstraie. Fie P1 = {Y ::= w1 | exist w ()+, cu Y ::= w astfel nct w1 se obine din w prin tergerea a zero, unu sau mai multor simboluri X pentru care * X } i G1 = (, , S, P1). Evident, gramatica G1 este independent de context, iar L(G1) = L(G) {}. Ceina 5.4 [Simboluri care genereaz cuvinte peste 6] Fie G = (, , S, P) o gramatic independent de context cu L(G) . Exist o gramatic G1 = (1, , S, P1) independent de context, echivalent cu G, astfel * nct pentru oricare X 1, mulimea {w * | X w} este nevid. Demonstraie. Construim irul de mulimi U0, U1, U2, folosind urmtorul algoritm: 1. U0 := ; i := 1; 2. Ui := Ui-1 {X | X ::= w P, w (Ui )*} 3. Dac Ui Ui-1 atunci i := i + 1 i se continu cu pasul 2. 4. Se consider 1 = Ui, P1 se obine din P prin eliminarea produciilor n care apare cel puin un simbol neterminal din - 1. S observm c U0 U1 Um (numrul maxim de aplicri al pasului 2 este maximum card ()), deci exist k astfel nct Uk = Uk+1 i Uk = Uk+p pentru oricare p > 0. Indicele i furnizat de algoritm corespunde celui mai mic

Acestea se mai numesc i simboluri productive. Prin analogie cu sistemele AFD, simbolurile productive vor fi numite i simboluri utile. Simbolurile care sunt n acelai timp accesibile (definiia 5.3) i productive le vom numi simboluri utilizabile, precum n Atanasiu (1987).
6

k pentru care Uk = Uk+1. Notm aceast valoare prin k*. Deci se poate scrie c U0 U1 Uk*. De asemenea, pentru oricare i = 1, 2, , k*, dac X Ui atunci exist w * * astfel nct X w. Dac i = 1, afirmaia rezult din construcia mulimii U1. Presupunem proprietatea adevrat pentru un indice i i considerm X Ui+1. Dac X Ui demonstraia este ncheiat. Considerm cazul X Ui+1 Ui, deci exist producia X ::= X1X2Xr, cu Xi Ui , i = 1, 2, , r. Dac Xi , * considerm wi = Xi; altfel, prin ipoteza de inducie exist wi astfel nct Xi * wi. Formm derivarea X X1X2Xr w1w2 wr i lum w = w1w2wr. Pentru a completa demonstraia propoziiei este suficient s artm c dac n X w (derivare n n pai) i w * atunci exist i astfel nct X Ui. Vom proceda prin inducie dup n (lungimea derivrii). Pentru n = 1, din construcie va rezulta c X U1. S presupunem afirmaia adevrat pentru derivri de lungime cel mult n i s considerm o derivare de lungime n + 1. Punem n eviden primul pas al derivrii, adic X X1X2Xr ni n wp (p = w. Conform propoziiei 2.1 rezult c w = w1w2wr cu Xp 1, 2, , r). Dac Xp (np = 0) atunci lum j[p] = 0, adic Xp U0. Dac Xp atunci, prin utilizarea ipotezei de inducie rezult c exist j[p] astfel nct Xp Uj[p]; Cum irul construit este ascendent, putem lua i = 1+ max{j[1], j[2], , j[r]} i rezult X Ui. Pe baza afirmaiilor de mai sus se deduce echivalena gramaticilor G i G1. Cerina 5.5 [Decidabilitatea problemei L(G) ] Exist un algoritm care pentru o gramatic independent de context stabilete dac L(G) = sau L(G) . Demonstraie. Se poate utiliza urmtorul algoritm: 1. U0 := ; i := 1; 2. Ui := Ui-1 {X | X ::= w P, w (Ui )*} 3. Dac Ui Ui-1 atunci i := i + 1 i se continu cu pasul 2. 4. Dac S Ui atunci L(G) altfel L(G) = . Justificarea corectitudinii algoritmului urmeaz paii prezentai n cadrul demonstraiei propoziiei 5.5. Cerina 5.6 [Determinarea simbolurilor accesibile] Fie G = (, , S, P) o gramatic independent de context cu L(G) . Exist G1 = (1, 1, S, P1) echivalent cu G care nu are simboluri inaccesibile. Demonstraie. Vom demonstra c algoritmul de mai jos va determina simbolurile accesibile. Paii algoritmului sunt: 1. U0 := {S}; i := 1; 2. Ui := Ui-1 {X | exist A ::= uXv P, astfel nct A Ui-1}. 3. Dac Ui Ui-1 atunci i:= i+1 i se continu de la pasul 2. 4. Fie k* valoarea lui i obinut la acest pas. Formm 1 := Uk*, 1 := Uk* i P1 produciile lui P care au n ambii membrii numai simboluri din Uk*. Cum Uk* , are cardinal finit, rezult c procesul descris se termin n timp finit. Se arat uor c G i G1 sunt echivalente i c pentru oricare A 1 1 * exist u i v din (11)* astfel nct S uAv.

Cerina 5.7 Fie G = (, , S, P) o gramatic independent de context cu L(G) . Atunci G este echivalent cu o gramatic G1 fr simboluri neutilizabile. Demonstraie. Asupra gramaticii G se aplic propoziia 5.5 i se determin G1 echivalent cu G care are numai simboluri neterminale care pot genera cuvinte peste alfabetul terminal (aa numitele simboluri productive sau utile). Apoi, asupra gramaticii G1 se aplic propoziia 5.6 pentru a obine G2 ce are numai simboluri accesibile din simbolul de start. Dac, gramatica nu are redenumiri i nici producii, atunci s-a obinut o gramatic proprie (definiia 5.4, teorema 5.1). Cerina 5.8 Fie G = (, , S, P) o gramatic independent de context cu L(G) . Exist G1 = (1, 1, S, P1) echivalent cu G care este gramatic proprie. Exemplul 5.1 Simbolurile neutilizabile ale gramaticii cu mulimea de reguli {(S, A), (S, B), (A, aB), (A, bS), (A, b), (B, AB), (B, Ba), (C, AS), (C, b)} sunt B, a i C. Exemplul 5.2 Dup eliminarea -produciilor, gramatica cu regulile {(S, aSbS), (S, bSaS), (S, )} devine echivalent cu gramatica cu regulile {(S, S), (S, ), (S, aSbS), (S, aSb), (S, abS), (S, ab), (S, bSaS), (S, baS), (S, bSa), (S, ba)}. Exemplul 5.3 Fie gramatica G cu mulimea de reguli P = {(S, A), (A, bS), (A, b)}. Gramatica proprie echivalent cu G are mulimea regulilor P = {(S, bS), (S, b)}, iar A este un simbol neutilizabil.

6. Forme normale. Lema Bar-Hillel


Observaia 6.1 Este suficient s se lucreze cu mecanisme generative echivalente cu gramaticile proprii (obinute dup transformrile necesare). Cerinta 6.1 Fie G = (, , S, P) o gramatic proprie. Atunci exist G1 gramatic n forma normal Chomsky echivalent cu G. Demonstraie. Prin aplicarea propoziiei 2.2 putem considera c mulimea P conine numai reguli de forma A ::= X1X2Xm (m > 1) i A ::= a, cu A, X1, , Xm , a . Regulile pentru care m = 2 rmn nemodificate n P1. Dac m > 2, considerm m - 2 neterminale noi i pentru regula curent adaugm n P1 cele m - 1 reguli: A ::= X1D1, D1 ::= X2D3, , Dm-3 ::= Xm-2Dm-2, Dm-2 ::= Xm-1Xm. Este uor de demonstrat c dup prelucrarea tuturor regulilor din P, gramatica obinut este n forma normal Chomsky i este echivalent cu G. Exemplul 6.1 Fie gramatica cu regulile S ::= bA | aB; A ::= bAA | aS | a; B ::= aBB | bS | b. Introducem neterminalele noi Xa i Xb. Formm regulile Xa ::= a i Xb ::= b. Apoi

modificm regulile gramaticii iniiale cu excepia regulilor A ::= a i B ::= b. Obinem noua mulime de reguli: S ::= XbA | XaB; A ::= XbAA | XaS | a; B ::= XaBB | XbS | b; Xa ::= a; Xb ::= b. Introducem noi simboluri neterminale i modificm regulile care au n membrul drept cel puin trei simboluri. Fie Y1 i Y2 simboluri neterminale noi. Gramatica n forma normal Chomsky, echivalent cu gramatica iniial, are regulile: S :;= XbA | XaB; A ::= XbY1 | XaS | a; B ::= XaY2 | XbS | b; Y1 ::= AA; Y2 ::= BB; Xa::= a; Xb ::= b. Cerinta 6.2 Fie G = (, , S, P) o gramatic de tip 2 n forma normal Chomsky. Dac derivarea A w1 wn, n 1, wn *, are proprietatea c cel mai lung lan de la rdcin la vrfurile terminale n arborele de derivare asociat ei n gramatica GA = (, , A, P) are k noduri, atunci |wn| 2k-1. Demonstraie. Aplicm metoda induciei n raport cu k. Cum n 1 rezult k 2. Pentru k = 2 rezult n = 1 i w1 , deoarece G este n forma normal Chomsky, deci |w1| 2k-1. Presupunem afirmaia adevrat pentru orice ntreg m, 2 m k, unde k este un ntreg fixat, k 2. Considerm o derivare A w1 wn, n1, wn *, care are proprietatea c cel mai lung lan de la rdcin la vrfurile terminale n arborele de derivare asociat ei are k + 1 noduri. Primul pas al derivrii const n aplicarea unei reguli de forma A ::= XY cu X i Y neterminale (gramatica este n forma normal Chomsky). Prin aplicarea ipotezei de inducie asupra arborilor de derivare cu rdcinile X i Y obinem |wn| 2k-1 + 2k-1 = 2k, deci |wn| 2(k+1)-1. Cerinta 6.3 Fie gramatica proprie G = (, , S, P) i A ::= 1B2 o A-producie i B ::= 1 | 2 | k toate B-produciile din mulimea P. Considerm G1 = (, , S, P1) unde P1 = (P {A ::= 1B2}) {A ::= 112 | 122 | | 1k2 }. Atunci G i G1 sunt gramatici echivalente. Demonstraie. Se arat, prin dubl incluziune, c L(G) = L(G1).

Cerinta 6.4 Fie gramatica fr -producii i numai cu simboluri utilizabile, G = (, , S, P) i A ::= A1 | A2 | Ak toate A-produciile recursive la stnga i A ::= 1 | 2 | m restul A-produciilor din mulimea P. Fie X un simbol nou, X , 1 = {X} i gramatica G1 = (1, , S, P1), unde P1 se obine din P prin nlocuirea tuturor A-produciilor cu regulile: A ::= 1 | 2 | m, A ::= 1X | 2X | mX i X ::= 1 | 2 | k, X ::= 1X | 2X | kX. Atunci G i G1 sunt echivalente. Demonstraie. Se arat c L(G) = L(G1). Cerinta 6.5 Fie G = (, , S, P) o gramatic proprie. Atunci exist gramatica G*, n forma normal Greibach, echivalent cu G. Demonstraie. Se aplic algoritmul: Intrare: Gramatica G1 n forma normal Chomsky, nerecursiv la stnga, fr producii, 1 = {A1, A2, ., Am}, S1 A1. Ieire: Gramatica G* n forma normal Greibach. SEQ 1. P* := P1; i := m; 2. while i > 1 do SEQ i := i - 1; while (exist j, i < j m, Ai ::= Aj n P*) do P* := (P* - {Ai ::= Aj}) {Ai ::= | Aj ::= P*} END 3. for indici i ai simbolurilor Y do while (exist j, 1 j m, Yi ::= Aj P*) do P* := (P* - { Yi ::= Aj }) {Yi ::= | Aj ::= P*} END. Exemplul 6.2 Fie gramatica G, cu simbolurile neterminale numerotate i regulile: A1 ::= A2A3; A2 ::= A3A1 | b; A3 ::= A1A2 | a. Se observ c gramatica G, dei are reguli de tip FNC, este recursiv n mai muli pai. Considerm regula A3 ::= A1A2 i o nlocuim cu A3 ::= A2A3A2, prin aplicarea lemei 6.1. Observm c n continuare persist recursivitatea n mai muli pai. Considerm regula A3 ::= A2A3A2 i o nlocuim, folosind lema 6.1, cu regulile A3 ::= A3A1A3A2 | bA3A2. Observm c am ajuns la reursivitate ntr-un singur pas i putem aplica lema 6.2. Eliminm regula A3 ::= A3A1A3A2 i introducem regulile A3 ::= bA3A2Y3 | aY3; Y3 ::= A1A3A2Y3 | A1A3A2. Am obinut urmtoarea mulime de reguli: A1 ::= A2A3; A2 := A3A1 | b; A3 ::= bA3A2Y3 | aY3 | bA3A2 | a Y3 ::= A1A3A2Y3 | A1A3A2.

n continuare aplicm algoritmul din demonstraia teoremei 6.3. Eliminm regula A2 ::= A3A1 i adugm regulile: A2 ::= bA3A2Y3A1 | aY3A1 | bA3A2A1 | aA1. Observm c A2 ::= b rmne pe loc. Apoi regula A1 ::= A2A3 se elimin i se introduc regulile: A1 ::= bA3A2Y3A1A3 | aY3A1A3 | bA3A2A1A3 | aA1A3 | bA3. Pn acum am aplicat pasul 2 cu indicii i =2 i 1. Aplicm, n continuare, pasul 3 pentru Y3. Astfel regulile Y3 ::= A1A3A2Y3 | A1A3A2 se nlocuiesc cu Y3 ::= bA3A2Y3A1A3A3A2Y3 | aY3A1A3A3A2Y3 | bA3A2A1A3A3A2Y3 | aA1A3A3A2Y3 | bA3A3A2Y3 | bA3A2Y3A1A3A3A2 | aY3A1A3A3A2 | bA3A2A1A3A3A2 | aA1A3A3A2 | bA3A3A2. Gramatica G*, n forma normal Greibach, echivalent cu gramatica dat, are regulile: A1 ::= bA3A2Y3A1A3 | aY3A1A3 | bA3A2A1A3 | aA1A3 | bA3; A2 ::= bA3A2Y3A1 | aY3A1 | bA3A2A1 | aA1 | b; A3 ::= bA3A2Y3 | aY3 | bA3A2 | a Y3 ::= bA3A2Y3A1A3A3A2Y3 | aY3A1A3A3A2Y3 | bA3A2A1A3A3A2Y3 | aA1A3A3A2Y3 | bA3A3A2Y3 | bA3A2Y3A1A3A3A2 | aY3A1A3A3A2 | bA3A2A1A3A3A2 | aA1A3A3A2 | bA3A3A2. Trebuie observat c, n general, procesul de normalizare, conduce la creterea numrului neterminalelor dar i a regulilor. Astfel cresc msurile Var i Prod. Cerinta 6.6 [Lema Bar-Hillel] Fie L un limbaj independent de context oarecare. Atunci exist numerele naturale p = p(L) i q = q(L) astfel nct orice cuvnt w L cu |w| > p se poate descompune sub forma w = uvxyz, unde |vxy| q, vy i pentru oricare numr natural i, uvixyiz L. Demonstraie. Dac L atunci se ia p = p(L) i q = q(L) unde L = L {}. Presupunem c L i fie G = (, , S, P) o gramatic de tip doi n forma normal Chomsky astfel nct L = L(G). Dac || = n, lum p = 2n i q = 2n-1. Fie w L cu |w| > p. Folosind teorema 6.2 rezult c cel mai lung lan de la rdcin la vrfurile terminale, din arborele de derivare al cuvntului w, pornind de la simbolul de start S, conine cel puin n + 2 noduri. n caz contrar ar rezulta c |w| 2n. Deoarece || = n rezult c cel mai lung lan conine dou noduri n1 i n2 etichetate cu acelai neterminal X. Presupunem c nodul n1 este mai aproape de rdcina S dect nodul n2 i fie D1 subarborele de rdcin n1. Evident frontiera lui D1, notat cu a, conform teoremei 6.2, are lungimea (notat cu |a|) cel mult 2n+1. Fie D2 subarborele cu rdcina n2 i frontiera x. Atunci exist v * i y * astfel nct a = vxy. Evident, v i y nu pot fi simultan vide pentru c regula care se aplic din n1 este de forma X ::= YZ, cu Y i Z neterminale. Exist i cuvintele u i z * * * * * peste astfel nct S uXy uvXyz uv2Xy2z i i i i uv xy z, i1. De asemenea, |vxy| = |a| q, iar vy i uv xy zL pentru orice i 0. Exemplul 6.3 Un exemplu simplu de limbaj care nu este independent de context este L = {anbncn | n 1}. Prin reducere la absurd, putem presupune contrariul, adic L este un limbaj independent de context. Atunci exist constantele p i q date de lema

Bar-Hillel. Se alege un numr natural k > p / 3 i cuvntul w = akbkck de lungime mai mare ca p. Din descompunerea furnizat de teorema 6.4 rezult c v i y conin cel mult una din literele a, b sau c; altfel prin iterare nu s-ar mai pstra ordinea alfabetic. Totui prin iterare ar trebui s se obin acelai numr de simboluri a, b i c, ori nu pentru orice i 0 se poate obine acest lucru. Rezult c L nu este un limbaj independent de context. Cerinta 6.7 Fie G o gramatic independent de context. Atunci L(G) este infinit dac i numai dac exist w L(G) astfel nct p < |w| p + q, unde p i q sunt numerele furnizate de teorema 6.4. Demonstraie. Dac L(G) este infinit rezult c exist w L(G) cu |w| > p, deoarece este o mulime finit. Dac |w| p + q atunci stop, altfel aplicarea teoremei 6.4 i alegerea lui i = 0, n procesul iterativ conduce la un cuvnt mai scurt, dar de lungime mai mare ca p. Dup un numr finit de pai se ajunge la un cuvnt cu lungimea cel mult p + q. Afirmaia reciproc rezult din aplicarea teoremei 6.4 i generarea unui ir infinit de cuvinte prin iteraie.

7. Gramatici i automate
Cerinta 7.1 Fie G = (, , S, P) o gramatic liniar la dreapta7. Atunci exist un automat finit nedeterminist (deci i unul determinist) M astfel nct L(M) = L(G). Demonstraie. Fr a restrnge generalitatea putem presupune c simbolul S nu apare n membrul drept al nici unei reguli din P, iar fiecare regul are una din formele: A ::=a i A ::= aB cu A, B i a . Fie X i automatul finit nedeterminist M = ({X}, , , S, S1) unde : ( {X})x P( {X}) este definit prin:

iar S1 = {S, X} dac S ::= P i S1 = {X} dac S ::= P. Vom demonstra c L(M) = L(G), prin dubl incluziune. Fie w *, w , astfel nct w = a1a2an, n 1 i ai , i = 1, 2, , n. Atunci w L(G) dac i numai dac exist produciile Di ::= aiDi+1 P, cu D1 = S, i = 1, 2, , n-1 i Dn ::= an P. Deci exist strile s1, s2, , sn+1, unde sn+1 = X, iar s1 = S, sn+1 S1, si+1 (si, ai), i = 1, 2, , n, echivalent cu w L(M). Este uor de vzut c dac w L(M) atunci w L(G). Caz special: Dac w = i w L(G) atunci exist unica producie S ::= P, deci S1 = {S, X}, adic {S} {S1} , ceea ce este echivalent cu L(M). Cerinta 7.2 Orice limbaj generat de o gramatic liniar8 este regulat.

{ A | Y ::= aA P} { X }, Y X , Y ::= a P Y X , Y ::= a P (Y , a) = { A | Y ::= aA P}, , Y = X,

A se vedea i propoziia 2.5 (manual).

Demonstraie. Se aplic teorema 3.1, teorema 3.2 i teorema 7.1 (din manual) Exemplul 7.1 Fie gramatica G = (, , S, P), unde = {S, A, B}, = {a, b} i P = { S ::= aA | a, A ::= bB, B ::= aA | a}. Un AFN care recunoate limbajul L(G) are strile {S, A, B, X}, mulimea strilor finale este {X}, iar funcia de tranziie este: S A B X A {A, X} {A, X} B {B}

Cerinta 7.3 Pentru orice limbaj regulat L exist o gramatic liniar G astfel nct L=L(G). Demonstraie. Fie automatul finit determinist M = (Q, , , q0, F) astfel nct L = L(M). Gramatica echivalent G = (, , S, P) se construiete astfel: = Q, S = q0, iar pentru L(M) mulimea regulilor P este {p ::= aq | (p, a) = q} {p ::= a | (p, a) F}. Dac L(M) atunci q0 F i adugm un simbol nou S, ca simbol de start i regulile S ::= q0 | . Gramatica obinut este echivalent cu o gramatic liniar prin eliminarea redenumirilor i definiia 5.1(manual) Egalitatea L(G) = L(M) rezult imediat. Exemplul 7.2 Fie automatul dat prin tabelul q0 q1 q2 a q1 q1 b q2 q2 C Q0 Q0

Cu starea iniial q0 i F = {q0}. Deoarece L(M), n prima faz, rezult urmtoarele reguli: S ::= q0 | ; q0 ::= aq1 | cq0 | c; q1 ::= aq1 | bq2; q2 ::= bq2 | cq0 | c. Dup eliminarea redenumirilor se obine: S ::= aq1 | cq0 | c | ; q0 ::= aq1 | cq0 | c;
8

Din acest motiv gramaticile liniare se mai numesc i gramatici regulate. Rezult, de aici, c familia limbajelor de tip 3 conine limbajele finite i este nchis la operaiile de reuniune, produs i stelare (*). Astfel, limbajele de tip 3 sunt descriptibile cu ajutorul expresiilor regulate, generabile de gramatici liniare i recunoscute de sisteme tranziionale i deci de automate finite.

q1 ::= aq1 | bq2; q2 ::= bq2 | cq0 | c. Un automat pushdown (cu memorie local gestionat prin disciplina LIFO [eng. Last In First Out] numit memorie pushdown) citete banda de intrare (de la stnga la dreapta) folosind un numr de stri interne (ca i un AFD sau AFN), dar tranziia, n general nedeterminist, se face nu numai n raport cu starea anterioar i informaia curent de pe banda de intrare, ci i n funcie de cea mai recent informaie stocat n memoria auxiliar (prelucrat ca o stiv de capacitate infinit). Observaia 7.1 Micarea automatului este posibil numai dac memoria stiv este nevid. Exemplul 7.3 Fie Q = {q0, q1, q2}, = {a, b}, = {a, Z0}, F = {q0} i funcia de tranziie definit astfel: (q0, a, Z0) = {(q1, aZ0)}, (q1, a, a) = {(q1, aa)}, (q1, b, a) = {(q2, )}, (q2, b, a) = {(q2, )}, (q2, , Z0) = {(q0, )}, (q, x, Z0) = n celelalte cazuri. Fie M = (Q, , , , q0, Z0, F). Se poate arta c L(M) = {anbn | n 0}. Cerinta 7.4 [Un limbaj recunoscut de un APD cu stri finale poate fi recunoscut i de un APD cu memoria pushdown vid] Fie L(M) limbajul recunoscut de automatul pushdown M = (Q, , , , q0, Z0, F). Atunci exist un APD, notat M=(Q, , , , qinit, X, ), care recunoate L(M) cu memoria pushdown vid, adic L(M) = L(M). Demonstraie. Fie Q = Q {qinit, q} unde qinit i q sunt dou elemente distincte i noi n raport cu Q. De asemenea, considerm X un simbol nou n raport cu i formm = {X}. Dac definim ca mai jos atunci se poate demonstra, prin dubl incluziune vezi Popovici i colectiv(1991), c L(M) = L(M). Funcia acioneaz conform urmtoarelor apte legi: a) (qinit, , X) = {(q0, ZoX)}; b) (q, a, Z) = (q, a, Z), pentru oricare q, a i Z astfel nct q Q, a , Z; c) (q, , Z) = (q, , Z) dac q Q F i Z ; d) (q, , Z) = (q, , Z) {(q, )} dac q F i Z ; e) (q, , X) = {(q, )} dac q F; f) (q, , Z) = {(q, )} dac Z {X}; g) (q, a, Z) = n toate celelalte cazuri. Cerinta 7.5 [Un limbaj recunoscut de un APD cu memoria pushdown vid poate fi recunoscut i de un APD cu stri finale] Fie L(M) limbajul recunoscut de automatul pushdown M = (Q, , , , q0, Z0, ). Atunci exist un APD, notat M = (Q, , , , qinit, X, {qf}), care recunoate L(M) cu starea final qf, adic L(M) = L(M). Demonstraie. Fie Q = Q {qinit, qf} unde qinit i qf sunt dou elemente distincte i noi n raport cu Q. De asemenea, considerm X un simbol nou n raport cu i formm = {X}. Dac definim ca mai jos atunci se poate demonstra, prin

dubl incluziune (conform Popovici i colectiv(1991)), c L(M) = L(M). Funcia acioneaz conform urmtoarelor patru legi: a) (qinit, , X) = {(q0, ZoX)}; b) (q, a, Z) = (q, a, Z), pentru oricare q, a i Z astfel nct q Q, a {}, Z ; c) (q, , X) = {(qf, )}, dac q Q; d) (q, a, Z) = , n toate celelalte cazuri. Cerinta 7.6 Pentru orice gramatic independent de context G = (, , S, P) care genereaz limbajul L = L(G) exist un sistem APD care recunoate L. Demonstraie. Presupunem c P conine reguli de forma u ::= v, cu |u| = 1 i v ( )*. Construim automatul M = ({q}, , , , q, S, ) cu funcia de tranziie definit prin urmtoarele trei reguli: 1. [expandare] (q, , X) = {(q, ) | (X ::= ) P} pentru toate regulile mulimii P; 2. [reducere] (q, a, a) = {(q, )}, dac a ; 3. [altfel] (q, a, X) = , n toate celelalte cazuri. Se arat, prin dubl incluziune, folosind metoda induciei complete (vezi Popovici i colectiv(1991)), c L(G) = L(M). Exemplul 7.4 Fie gramatica G = ({S, A}, {0, 1, 2}, S, P) unde P const din produciile: S ::= S2 | A2; A ::= 0A1 | 01. Se observ c L(G) = {0n1n2m | n, m 1}. Sistemul APD care recunoate limbajul L(G) este M = ({q}, {0, 1, 2}, {S, A, 0, 1, 2}, , q, S, ) unde are urmtoarea definiie: (q, , S) = {(q, S2), {q, A2)}; (q, , A) = {(q, 0A1), (q, 01)}; (q, 0, 0) = {(q, )}; (q, 1, 1) = {(q, )}; (q, 2, 2) = {(q, )}; (q, 0, 1) = (q, 0, 2) = (q, 0, S) = (q, 0, A) = ; (q, 1, 0) = (q, 1, 2) = (q, 1, S) = (q, 1, A) = ; (q, 2, 0) = (q, 2, 1) = (q, 2, S) = (q, 2, A) = . Cerinta 7.7 Pentru orice sistem APD care recunoate limbajul L cu memoria pushdown vid, exist o gramatic independent de context care genereaz limbajul L. Demonstraie. Fie M = (Q, , , , q0, Z0, ) un APD astfel nct L = L(M). Construim gramatica G = (, , S, P) cu reguli de forma u ::= v astfel nct |u| = 1, v ()*. Fie S un simbol special astfel nct S QxxQ . Considerm mulimea simbolurilor neterminale ca fiind = QxxQ {S}, iar fiecare element din QxxQ de forma (q, Z, r) l vom scrie compact sub forma [qZr]. Produciile din mulimea P se definesc folosind urmtoarele reguli: 1. [Start] Pentru fiecare q Q introducem producia S ::= [q0Z0q].

2. [tergere] Pentru oricare a {} astfel nct (r, ) (q, a, Z) se 3. [Compunere] Pentru oricare a {} pentru care (r, 12k)
introduce producia [qZr] ::= a. (q, a, Z), unde i (i = 1, 2, , k), considerm toate combinaiile de k stri s1, s2, , sk pentru a forma producii de forma [qZsk] ::= a[r1s1] [s12s2][sk-1ksk], unde k > 0.

Prin inducie complet n raport cu numrul de tranziii (respectiv n raport cu lungimea derivrii) se arat c L(M) L(G) (respectiv L(G) L(M)). Pentru detalii se poate consulta Popovici i colectiv(1991). Exemplul 7.5 Fie Q = {q0, q1, q2}, = {a, b}, = {a, Z0}, i funcia de tranziie definit astfel: (q0, a, Z0) = {(q1, aZ0)}, (q1, a, a) = {(q1, aa)}, (q1, b, a) = {(q2,)}, (q2, b, a) = {(q2,)}, (q2, , Z0) = {(q0,)}, (q, x, Z0) = , n celelalte cazuri. Fie M = (Q, , , , q0, Z0, ). Se poate arta c L(M) = {anbn | n 0}. A se vedea i exemplul 7.3. Gramatica de tip doi care recunoate limbajul L(M), construit pe baza metodei dat de demonstraia teoremei 7.7 are 24 de producii, dup cum urmeaz. Conform [Start] introducem trei producii: S ::= [q0Z0q0] | [q0Z0q1] | [q0Z0q0]. Conform [Compunere] pentru (q0, a, Z0) = {(q1, aZ0)} introducem urmtoarele nou producii: [q0Z0q0] ::= a [q1aq0] [q0Z0q0]; [q0Z0q0] ::= a [q1aq1] [q1Z0q0]; [q0Z0q0] ::= a [q1aq2] [q2Z0q0]; [q0Z0q1] ::= a [q1aq0] [q0Z0q1]; [q0Z0q1] ::= a [q1aq1] [q1Z0q1]; [q0Z0q1] ::= a [q1aq2] [q2Z0q1]; [q0Z0q2] ::= a [q1aq0] [q0Z0q2]; [q0Z0q2] ::= a [q1aq1] [q1Z0q2]; [q0Z0q2] ::= a [q1aq2] [q2Z0q2]; Folosind [Compunere] pentru (q1, a, a) = {(q1, aa)} obinem nc nou producii: [q1Z0q0] ::= a [q1aq0] [q0aq0]; [q1Z0q0] ::= a [q1aq1] [q1aq0]; [q1Z0q0] ::= a [q1aq2] [q2aq0]; [q1Z0q1] ::= a [q1aq0] [q0aq1]; [q1Z0q1] ::= a [q1aq1] [q1aq1]; [q1Z0q1] ::= a [q1aq2] [q2aq1]; [q1Z0q2] ::= a [q1aq0] [q0aq2]; [q1Z0q2] ::= a [q1aq1] [q1aq2]; [q1Z0q2] ::= a [q1aq2] [q2aq2]; Aplicm regula [tergere] pentru (q1, b, a) = {(q2, )} i (q2, b, a) = {(q2, )}. Obinem produciile: [q1aq2] ::= b i [q2aq2] ::= b. Pentru tranziia (q2, , Z0) = {(q0,)}, obinem producia: [q2Z0q0] ::= . Evident, -produciile pot fi eliminate i se obine o gramatic de tip doi, dar foarte complex (n sensul c mrimea mulimilor i P este considerabil). Comparai cu gramatica obinut printr-o simpl modificare a gramaticii din exemplul 2.2 (manual). Observaia 7.2 Fie M = (Q, , , , q0, B, ) un sistem MT. Atunci L(M) = . Observaia 7.3 Fie M = (Q, , , , q0, B, Q) un sistem MT. Atunci L(M) = *. Observaia 7.4 Introducerea nedeterminismului asupra sistemelor MT nu crete puterea de acceptare. Mai precis, are loc:

Cerinta 7.8 Pentru orice main Turing M exist o gramatic G, de tip 0, astfel nct L(M) = L(G). Demonstraie. Se poate urmri Hopcroft i Ullman(1979). Cerinta 7.9 Urmtoarele afirmaii sunt adevrate. a) Pentru orice gramatic dependent de context (de tip 1) G = (, , S, P) exist o gramatic monoton G = (, , S, P) astfel nct L(G) = L(G) {}. b) Pentru orice automat liniar mrginit M exist o gramatic monoton G astfel nct L(M) = L(G). Demonstraie. Pentru a) se poate consulta, de exemplu, lucrarea Jucan i Andrei (2002). Pentru b) recomandm studierea lucrrii Hopcroft i Ullman (1979). Exemplul 7.6 O main Turing care accept limbajul L = {anbncn | n > 0} este M = (Q, , , , q0, B, F), unde Q = {q0, q1, q2, q3, q4, q5}, = {a, b, c}, = {a, b, c, x, y, z, B}, F = {q5}, iar este dat prin tabelul: q0 q1 q2 q3 q4 q5 A (q1,x,D) (q1, a, D) (q3, a, S) B (q2, y, D) (q2, b, D) (q3, b, S) c (q3, z, S) x (q0,z,D) Y (q4,y,D) (q1,y,D) (q3,y,S) (q4,y,D) z (q2,z,D) (q3,z,S) (q4,z,D) B (q5,B,D)

8. Proprieti de nchidere
Cerinta 8.1 Familia limbajelor dependente de context este nchis fa de reuniune. Demonstraie. Fie L1 i L2 dou limbaje dependente de context generate de gramaticile G1 = (1, 1, S1, P1 ) i G2 = (2, 2, S2, P2) astfel nct gramaticile G1 = (1, 1, S1, P1 {S1 ::= }) i G2 = (2, 2, S2, P2 - {S2 ::= }) s fie dependente de context, iar 1 2 = , 1 2 = i 2 1 = . Fie S 1 2 1 2. Formm gramatica G = (1 2 {S}, 1 2, S, P) unde P = (P1 {S1 ::= }) (P2 {S2 ::= }) {S::= w | S1 ::= w P1 sau S2 ::= w P2}. Artm c L = L1 L2 este generat de gramatica G. Evident G, fr producia S ::= , este dependent de context (a se vedea definiia 5.1(manual), pentru legtura cu limbajele dependente de context). * Fie w L(G). Presupunem c w . Atunci exist o derivare S w. La primul pas se poate aplica, fie o producie din P1, fie o producie din P2. Presupunem c iniial se aplic o producie din P1, urmtoarele producii sunt tot * w, adic w L(G1). Analog din P1, deoarece 1 2 = . Rezult c S1

pentru aplicarea primei producii din P2. Dac w = atunci S ::= , adic S1 ::= sau S2 ::= . Deci w L1 L2. * Fie w L1 L2 {}. Atunci w L1 (S1 w, n G1) sau w L2 (S2 * w, n G2). Prin nlocuirea primului pas al derivrii i aplicarea produciei * corespunztoare din P, obinem S w, n G. Pentru w = raionamentul este banal. Observaa 8.1 Enunul i demonstraia de mai sus pot fi refcute pentru a arta nchiderea la reuniune a familiilor L2 i L3. Conform teoremei 3.3 (manul), familia limbajelor regulate este cea mai mic familie de limbaje care conine limbajele finite i este nchis la reuniune, produs (concatenare) i la operaia * (nchiderea Kleene). Trebuie remarcat c familia L3 include strict familia limbajelor finite. Cerinta 8.2 Fie un alfabet i L * un limbaj regulat. Atunci * - L este un limbaj regulat Demonstraie. Dac L este un limbaj regulat aunci exist M = (Q, , , q0, F) un sistem AFD astfel nct L(M) = L. Atunci sistemul M1 = (Q, , , q0, Q - F) este considerat astfel nct L(M1) = * - L. Cerinta 8.3 Familia limbajelor regulate este nchis la operaia de intersecie. Demonstraie. Se folosete faptul c A B = C(CA CB), unde prin CX se noteaz complementara mulimii X. Observaia 8.2 Familia limbajelor regulate peste un alfabet , fiind nchis la reuniune, intersecie i complementar, formeaz o algebr boolean n care suma boolean este reuniunea, produsul boolean este intersecia, iar complementul unui element este obinut prin formarea limbajului complementar (diferena pn la *.) Cerinta 8.4 Familia L2 este nchis la reuniune. Demonstraie. Fie L1 i L2 dou limbaje independente de context generate de gramaticile G1 = (1, 1, S1, P1 ) i G2 = (2, 2, S2, P2) astfel nct gramaticile G1 = (1, 1, S1, P1 {S1 ::= }) i G2 = (2, 2, S2, P2 - {S2 ::= }) s fie independente de context, iar 1 2 = , 1 2 = i 2 1 = . Fie S 1 2 1 2. Formm gramatica G = (1 2 {S}, 1 2, S, P) unde P = P1 P2 {S::= S1, S::= S2}. Este uor de artat c L = L1 L2 este generat de gramatica G. Evident redenumirile pot fi eliminate (propoziia 5.3 - manual), dac acest lucru este necesar n aplicaii. Cerinta 8.5 Familia L2 este nchis la concatenare (produs).

Demonstraie. Fie L1 i L2 dou limbaje independente de context generate de gramaticile G1 = (1, 1, S1, P1 ) i G2 = (2, 2, S2, P2) astfel nct gramaticile G1 = (1, 1, S1, P1 {S1 ::= }) i G2 = (2, 2, S2, P2 - {S2 ::= }) s fie independente de context, iar 1 2 = , 1 2 = i 2 1 = . Fie S 1 2 1 2. Formm gramatica G = (1 2 {S}, 1 2, S, P) unde P = P1 P2 {S::= S1S2}. Este uor de artat c L = L1L2 este generat de gramatica G. Cerinta 8.6 Familia L2 este nchis la operaia * (stelare). Demonstraie. Fie L un limbaj independent de context generat de gramatica G1 = (1, 1, S1, P1) astfel nct gramatica G1 = (1, 1, S1, P1 {S1 ::= }) este independent de context,. Fie S 1 1 . Formm gramatica G = (1 {S}, 1, S, P) unde P = P1 {S::= SS1 | }. Este uor de artat c L* este generat de gramatica G. Evident -produciile pot fi eliminate (propoziia 5.4 - manual), dac acest lucru este necesar n aplicaii. Observaia 8.3 Dac L este un limbaj de tip i (i = 2 sau 3) atunci L+ este de tip i. Cerinta 8.7 Familia L2 nu este nchis la intersecie i complementar. Demonstraie. Considerm limbajele independente de context L1 = {anbmcm | n 1, m 1} i L2 = {anbncm | n 1, m 1} generate de gramaticile G1 = ({S1, A1, B1}, {a, b, c}, S1, {S1 ::= A1B1, A1 ::= aA1 | a, B1 ::= bB1c | bc}) i G2 = ({S2, A2, B2}, {a, b, c}, S2, {S2 ::= A2B2, A2 ::= aA2b | ab, B2 ::= cB2 | c}). Evident L1 L2 = {anbncn | n 1} care nu este independent de context, dup cum a fost justificat n exemplul 6.3. Deci L 2 nu este nchis la intersecie. Dac L2 ar fi nchis la complementar, atunci ar trebui s fie nchis i la intersecie deoarece L 2 este nchis la reuniune, iar n teoria mulimilor are loc relaia A B = C(CA CB). Folosind principiul reducerii la absurd deducem c L2 nu este nchis la complementar. Cerinta 8.8 Fie L L2 i R L3, L1 = L R i L2 = L R. Atunci Li L2 (i = 1, 2). Demonstraie. Este suficient s demonstrm c L1 L2. Deoarece familia L 3 este nchis la complementar (R L 3 conduce la CR L3), iar L R = L CR, va rezulta c i L2 L2. Fr a restrnge generalitatea putem continua n urmtoarele ipoteze: a) L i R sunt limbaje peste acelai alfabet ; b) mulimea L R nu conine cuvntul vid . Fie M = (Q, , , q0, F) sistemul AFD care recunoate limbajul R, L(M) = R. Dac F = {f1, f2, , fm} atunci fie Mi =(Q, , , q0, {fi}) i Ri = L(Mi), i = 1, 2, , m. Fie G = (, , S, P) o gramatic de tip 2, n forma normal Chomsky, care genereaz limbajul L, L(G) = L. Este evident c L R = (L R1) (L R2) (L Rm). Prin urmare este suficient s artam c Li = (L Ri) este

independent de context, cu i oarecare n mulimea {1, 2, , m}. Invocarea proprietii de nchidere a familiei L 2 la reuniune va ncheia demonstraia. Construim G1 = (1, , S1, P1) gramatica independent de context astfel nct 1 = ( ) x Q x Q, S1 = (S, q0, fi) i P1 conine toate produciile de forma: a. (A, q, q1) ::= (B, q, q2) (C, q2, q1), unde q, q1, q2 Q, iar A ::= BC P. b. (A, q, q1) ::= (a, q, q1), unde q, q1 Q, iar A ::= a P. c. (a, q, q1) ::= a, a , (q, a) = q1. Faptul c L(G1) = L Ri rezult din justificarea urmtoarelor afirmaii: * * (X1, qi, q1) (X2, q1, q2) (Xn+1, qn, qj) A a) (A, qi, qj) X1X2 Xn+1, oricare A, X1, X2, , Xn+1 , q Q. * a1a2an (q1, a1a2an) = b) (a1, q1, q2) (a2, q2, q3) (an, qn, qn+1) qn+1. * * a1a2an; (S, q0, fi) ntr-adevr, fie w = a1a2an L(G1), deci S1 * * (A1, q0, q1) (An, qn-1, fi) (a1, q0, q1) (an, qn-1, fi) a1a2an, prin aplicarea produciilor n ordinea 1), 2) i 3), n final. Prin urmare, conform a) * obinem S A1A2An, iar conform b) rezult (q1, a1a2an) = fi. Cum fi F rezult w Ri. Obinem, de asemenea, existena produciilor Ai ::= ai, i = 1, 2, , * * n. De asemenea rezult i S A1A2An a1a2an, echivalent cu w L. n final obinem w L Ri. n partea a doua a demonstraiei considerm w = a1a2an L Ri. Din w Ri deducem existena strilor q1, q2, , qn-1 astfel nct qi = (q0, a1a2ai), i = 1, 2, * a1a2an poate fi scris , n-1. n plus, fi = (q0, a1a2an). Derivarea S * * astfel S A1A2An a1a2an. Aceste rezultate permit asamblarea * * unei derivri n G1: S1 = (A, q0, fi) (A1, q0, q1) (An, qn-1, fi) (a1, q0, * q1) (an, qn-1, fi) a1a2an, adic w L(G1). Cerinta 8.9 Considerm transformarea de substituire definit asupra limbajelor ca n definiia 1.8 - manual. Familia limbajelor independente de context este nchis la substituii. Demonstraie. Fie L un limbaj independent de context peste , iar pentru fiecare a , fie a alfabetul asociat lui a. Fie s: * P(( a )*) substituia lui * n

P((

U
a

)*). Evident s are urmtoarele proprieti (din definiia 1.8):

1. pentru oricare a , s(a) a; 2. s()={}; 3. pentru oricare i, 1 i k, dac ai atunci s(a1a2ak) =

s(a1)s(a2)s(ak). Presupunem c, pentru fiecare a , s(a) este un limbaj independent de context. Trebuie s artm c s(L) este limbaj independent de context. Conform ipotezei, exist gramaticile G = (, , S, P) i Ga = (a, a, Sa, Pa) astfel nct L = L(G) i s(a) = L(Ga) pentru oricare a . Presupunem c a b = a b = pentru a b i pentru fiecare a, b avem a b = i a = . Dac a (adic S ::= P sau Sa ::= Pa, a atunci trebuie ca (, , S, P-{ S ::= }) i (a, a, Sa, Pa-{ Sa ::= }) s fie gramatici independente de context. Definim transformarea t: {} {Sa | a } {} prin t() = ; t(X) = X pentru oricare X, t(a)=Sa pentru oricare a astfel nct,

prin extensie, rezult c pentru oricare x1, x2, , xn {} are loc relaia t(x1x2xn) = t(x1)t(x2)t(xn). Formm gramatica G1 = (1, 1, S, P1) astfel nct 1 := ( a ), 1 =

U
a

, iar P1 = (

UP
a

) {X ::= t() | X ::= P}.

Evident G1 = (1, 1, S, P1 {S ::= }) este independent de context. Se arat, prin dubl incluziune, c L(G1) = s(L). a) s(L) L(G1): Fie w s(L) = s ( ) , deci exist L astfel nct w =
L

s(). Dac = atunci exist, n gramatica G, producia S ::= , deci n G1 exist producia S ::= t(), adic S ::= . Obinem s() = {}, adic w = i w L(G1). Dac atunci exist, n gramatica G, simbolurile terminale a1a2ak astfel nct = a1a2ak. Deoarece s() = s(a1)s(a2)s(ak), rezult c pentru fiecare i, 1 i k exist wi s(ai) i w = w1w2wk. Din L = L(G) rezult c exist, n G, * * * * 2 p = (=a1a2ak). Prin derivarea S 1 * * t(1) aplicarea transformrii t obinem existena, n G1, a derivrii S * * t(2) t(p) = t() = t(a1) t(a2) t(ak) = S a1 S a2 S ak . Deoarece s(ai) = L( G a1 ) atunci exist n fiecare G a1 , derivarea S a1
* wi, i = * * * 1, 2, , k. Prin urmare S a1 wi n G1 i S S a1 S a2 S ak

w1w2 wk = w. n concluzie, w L(G1). * * b) L(G1) s(L): Fie w L(G1), adic exist derivarea S 1 2 * * p = w. Deoarece mulimile de neterminale ale gramaticilor din ipotez sunt disjuncte (am presupus c a = pentru oricare a ) produciile din P1 de forma X ::= t(), unde X ::= P, pot fi permutate cu Pa , astfel nct iniial s nu se utilizeze producii din Pa . produciile din

a
*

Deci exist o derivare S wt {Sa | a }*. Prin urmare exist k 1 astfel * nct wt = S a1 S a2 S ak i a1a2ak L(G). Cum S w, rezult c S a1
* w i apoi obinem descompunerea w = w1w2wk astfel nct S a2 S ak * wi n G1 i deci i n G a1 , pentru i = 1, 2, k. Se mai poate spune c S a1

wi L( G a1 ), adic wi s(ai), i = 1, 2, , k. n concluzie rezult c w s(a1)s(a2)s(ak) = s(a1a2ak) s(L). Observaia 8.4 Familia limbajelor independente de context este nchis la homomorfisme. Observaia 8.5 Un sistem gsm este un sistem AFN care, n plus, fa de banda de intrare (cuvinte peste ) conine i o band de ieire (pentru manipularea cuvintelor peste

). Faptul c (q2, u) (q1, a) arat trecerea din starea q1 in starea q2, cnd capul de citire a ntlnit simbolul a, dar i emiterea cuvntului u * la ieire. Funcia se extinde la *, n mod obinuit. Cerina 8.10 Orice clas de limbaje peste alfabetul nchis la substituii finite i intersecie cu limbaje regulate este nchis la transformri gsm. Demonstraie. Fie C o clas de limbaje cu proprietatea din enun i sistemul gsm M = (Q, , , , q0, F). Considerm substituia finit s: P(Q x x * x Q) definit astfel nct pentru oricare a , s(a) = {(q1, a, u, q2) | q1, q2 Q, u * , (q2, u) (q1, a)}. Fie limbajul R (Q x x * x Q)* definit prin R = {((q0, a1, u1, q1) (q1, a2, u2, q2) (qn-1, an, un, qn) | qn F, (qi, ui) (qi-1, ai), i = 1, 2, , n}. Limbajul R este regulat deoarece este acceptat de automatul finit nedeterminist A = (Q, Q x x * x Q, 1, q0, F), cu q2 1(q1, (q1, a, u, q2)) dac i numai dac (q2, u) (q1, a) pentru oricare q1, q2 Q, u * i a . Definim homomorfismul h : Q x x * x Q * prin h(q1, a, u, q2) = u, pentru oricare q1, q2 Q, u * i a . Atunci pentru oricare L C, rezult gM(L) = h(s(L)R). Sunt valide echivalenele: w h(s(L) R) dac i numai dac exist s(L) R astfel nct w = h(); s(L) R dac i numai dac exist v L astfel nct s(v) R; deci = (q0, a1, u1, q1) (q1, a2, u2, q2) (qn-1, an, un, qn) , qn F, (qi, ui) (qi-1, ai), i = 1, 2, , n; v = a1a2an. Prin urmare h() = u1u2un. Deci w h(s(L) R) dac i numai dac exist cuvintele v = a1a2an L, w = u1u2un *, strile q0, q1, , qn Q, qn F astfel nct (qi, ui) (qi-1, ai), i = 1, 2, , n, echivalent cu w gM(v). Deoarece gM(L) = h(s(L) R) pentru L C, iar C este nchis la substituii finite i intersecia cu limbaje regulate obinem: L C s(L) C s(L) R C h(s(L) R) C gM(L) C. Observaia 8.6 Deoarece familiile Li ( i = 2, 3) satisfac condiille teoremei 8.10 rezult c acestea sunt nchise la transformri gsm.

9. Specificarea sintaxei limbajelor de programare


Exemplul 9.1 Vom ilustra utilizarea limbajului C++ n codificarea algoritmului pentru determinarea strilor accesibile ale unui sistem AFD. Pentru acest exemplu, automatul M este un obiect al clasei Sistem_AFD caracterizat prin atributele: numar_stari = |Q|, cardinal_sigma = | |, stare_initiala = q0 , delta (funcia de tranziie) definit ca tablou, stari_accesibile (tablou care va conine strile accesibile) i n_accessible (cardinalul mulimii strilor accesibile). La declararea automatului se va apela constructorul care va citi datele. Strile accesibile se determin prin apelarea metodei aferente. Afiarea datelor despre automat se realizeaz, de asemenea, printr-o metod specific.

#include <iostream.h> class Sistem_AFD { private: int numar_stari; int cardinal_sigma; int q0; int **delta; int *stari_accesibile; // Structur de date organizat ca o coad int n_accesibile; public: Sistem_AFD(); //Constructor ~Sistem_AFD(); //Destructor Determin_strile_accesibile(); // Metoda care implementeaz algoritmul 4.1 Afiare_informaii(); //Vizualizarea informaiilor } Sistem_AFD::Sistem_AFD(){ //Constructor int i, j; cout << "Introducei numrul strilor iniiale: "; cin >> numar_stari; // Se presupune c strile vor fi codificate prin numerele naturale // 0, 1, 2, , numar_stari-1. cout << "Introducei numrul simbolurilor alfabetului :"; cin >> cardinal_sigma; // Se presupune c literele vor fi codificate prin numerele naturale // 0, 1, 2, , cardinal_sigma-1. cout "Introducei starea iniial:"; do {cin >> q0; } while ((q0 <0) || (q0 >= numar_stari)); delta = new int *[numar_stari]; for (i = 0; i<numar_stari; i++) delta[i] = new int [cardinal_sigma]; cout << "Introducerea funciei de tranziie." << "Valoarea 1 pentru lipsa tranziiilor.\n"; for (i=0; i<numar-stari; i++) for(j=0; j<cardinal_sigma; j++) { cout << "delta [ " << i << " ][ " << j << " ] ="; cin >> delta[i][j]; } stari_accesibile = new int [numar_stari]; n_accesibile = 0; } // sfrit constructor Sistem_AFD :: ~Sistem_AFD(){ //Destructor int i; for (i = 0; i<numar_stari; i++) if (delta[i]) delete [ ] delta[i]; if (delta) delete[ ] delta; if(stari_accesibile) delete [ ] stari_accesibile; // Iniializri implicite delta = NULL; stari_accesibile = NULL; numar_stari = 0;

cardinal_sigma = 0; q0 = 0; n_accesibile = 0; } //sfrit destructor void Sistem_AFD :: Determin_strile_accesibile(){ int primul_slot = 0; // Tabloul este organizat ca o coad. // Inserarea presupune incrementarea variabilei ultimul_slot, // iar "eliminarea" din coad presupune incrementarea variabilei // primul_slot. Tabloul este suficient de // larg pentru a include toate strile automatului. int ultimul_slot = 0; int qc; //starea curent; int qt; //starea posibil accesibil din qc; int a_fost_vizitat; // variabil logic care va atesta prezena/absena // strii qt n tabloul stari_accesibile; int i, j; // variabile de lucru stari_accesibile[0] = q0; // starea iniial este accesibil; while (primul_slot <= ultimul_slot) { qc = stari_accesibile[primul_slot]; for (i = 0; i< cardinal_sigma; i++) { qt = delta[qc][i]; if (qt != -1) { // ncepe procesul de cutare-secvenial // n tabloul strilor accesibile a_fost_vizitat = 0; j = 0; while ((j<=ultimul_slot) && (!a_fost_vizitat)) if (qt == stari_accesibile[j]) a_fost_vizitat = 1; else j++; if (!a_fost_vizitat) stari_accesibile[++ultimul_slot] = qt; } // sf. test qt; } // sf. iteraie dup i primul_slot++; } // sf. while n_accesibile = ultimul_slot+1; } // sf. metoda Determin_strile_accesibile void Sistem_AFD :: Afiare_informaii () { cout << "Strile accesibile sunt : \n "; int i; for (i = 0; i < n_accesibile; i++) cout << "stri_accesibile [ " << i << " ] = " << stari_accesibile[i] << "\n"; } // sf. metoda Afiare_informaii // Testarea clasei void main(void){ Sistem_AFD M; M.Determin_strile_accesibile(); M.Afiare_informaii();

Exemplul 9.2 [Liste n Prolog] Exemplificm prin cteva predicate utile n prelucrarea listelor, folosind implementarea Turbo Prolog.
domains list=integer* /* Se defineste tipul lista de intregi */ predicates wlist(list) /* afisarea elementelor unei liste */ nlist(list,integer) /* Numarul elementelor unei liste */ slist(list,integer) /* Suma elementelor listei */ addx(integer,list,list) /* Adauga x la fiecare element al listei */ addl(list,list,list) /* aduna element cu element doua liste */ dlist(list,list) /* dublarea elementelor unei liste */ rnlist(list,list) /* eliminarea numerelor negative */ inlist(integer,list) /* este in lista? Yes or No */ catlist(list, list, list) /* concatenare de liste */ clauses wlist([]) :- !. wlist([H | T]) :- write(H), nl, wlist(T). nlist([],0) :-!. nlist([_|T],N) :- nlist(T,N1), N=N1+1. slist([],0) :- !. slist([X|C],S) :- slist(C,S1), S=S1+X. addx(X,[], []):- !. addx(X,[A|R], [Y|R1]) :- Y=A+X,addx(X,R,R1). addl([],L,L) :- !. addl(L,[],L) :- !. addl([A|L1],[B|L2],[C|L3]) :- C=A+B,addl(L1,L2,L3). dlist([], []) :- !. dlist([A|B], [A,A|C]) :- dlist(B,C). rnlist([],[]) :- !. rnlist([X|A],[X|B]) :- X>=0, !, rnlist(A,B). rnlist([X|A],B) :- X<0,!, rnlist(A,B). inlist(X, [X|A]) :- !. inlist(X, [_|A]) :- inlist(X,A). catlist([],L,L) :- !. catlist([X|L1], L, [X|L2]):- catlist(L1, L, L2).

Exemplul 9.3 Urmtoarele clause sunt suficiente pentru a permite testarea apartenenei unui cuvnt la mulimea cuvintelor acceptate de un sistem AFN. Considerm automatul prezentat n exemplul 3.4. Strile sunt s1, s2, s3 i corespund notaiei cu A, B, C din exemplul 3.4 - manual. Vocabularul este {a, b}. Declaraiile Prolog sunt:
delta(s1, a, s1). delta(s1, a, s2).

delta(s1, b, s2). delta(s2, a, s1). delta(s2, a, s3). delta(s2, b, s3). delta(s3, a, s2). delta(s3, a, s3). delta(s3, b, s1). stare_iniial(s1). stare_final(s2). stare_final(s3). accepta(X, []) :- stare_final(X), write("Da"). accepta(X, [Prima_liter | Restul]) :- delta(X, Prima_liter, Y), accepta(Y, Restul). aparine(W) :- stare-iniial(X), accepta(X, W). aparine( _ ) :- write("Nu"). ?- aparine([a, b, a, b, a, b, b]).

Observaia 9.1 n Prolog se comunic cunotine. Determinarea efectiv a soluiei este realizat de ctre nucleul Prolog prin metode specifice: unificare, backtracking etc. Observaia 9.2 Limbajul Prolog permite att codificarea algoritmilor recursivi, ct i a celor nerecursivi. Urmtoarele declaraii permit calculul factorialului n ambele variante. 00F] | [#x202A-#x202E] | [#x206A-#x206F] | #xFEFF Exemplul 9.4 Secvena XML urmtoare ilustreaz definirea nregistrrilor tip baz de date: <?XML version = "1.0" ?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (CLIENT)*> <!ELEMENT CLIENT (NUMESIPRENUME, DATA, COMENZI)> <!ELEMENT NUMESIPRENUME (NUME, PRENUME)> <!ELEMENT NUME (#PCDATA)> <!ELEMENT PRENUME (#PCDATA)> <!ELEMENT DATA (#PCDATA)> <!ELEMENT COMENZI (POZITIE)*> <!ELEMENT POZITIE (PRODUS, NUMAR, PRET)> <!ELEMENT PRODUS (#PCDATA)> <!ELEMENT NUMAR (#PCDATA)> <!ELEMENT PRET (#PCDATA)> ]> <DOCUMENT> <!Date despre clienti--> <CLIENT> <NUMESIPRENUME> <NUME>Ionescu</NUME> <PRENUME>Marian</PRENUME> </NUMESIPRENUME> <DATA>Februarie 23, 2005</DATA>

<COMENZI> <POZITIE> <PRODUS>CAIET DICTANDO</PRODUS> <NUMAR>15</NUMAR> <PRET>25000</PRET> </POZITIE> <POZITIE> <PRODUS>CRETA</PRODUS> <NUMAR>10</NUMAR> <PRET>15000</PRET> </POZITIE> </COMENZI> </CLIENT> <CLIENT> <NUMESIPRENUME> <NUME>Popescu</NUME> <PRENUME>Alexandru</PRENUME> </NUMESIPRENUME> <DATA>Februarie 24, 2005</DATA> <COMENZI> <POZITIE> <PRODUS>CARTE</PRODUS> <NUMAR>1</NUMAR> <PRET>500000</PRET> </POZITIE> <POZITIE> <PRODUS>CD AUDIO</PRODUS> <NUMAR>10</NUMAR> <PRET>150000</PRET> </POZITIE> </COMENZI> </CLIENT> </DOCUMENT> Exemplul 9.5 Documentul urmtor definete dou tipuri de obiecte (cerc i elips) mpreun cu atributele acestora. <?XML version = "1.0" ?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (CERC|ELIPSA)*> <!ELEMENT CERC EMPTY> <!ELEMENT ELIPSA EMPTY> <!ATTLIST CERC X CDATA #IMPLIED Y CDATA #IMPLIED R CDATA #IMPLIED> <!ATTLIST ELIPSA X CDATA #IMPLIED Y CDATA #IMPLIED

L CDATA #IMPLIED H CDATA #IMPLIED> ]> <DOCUMENT> <CERC X="100" Y="100" R="25"> <CERC X="200" Y="160" R="50"> <CERC X="170" Y="100" R="15"> <ELIPSA X="150" Y="100" L="100" H="50"> <ELIPSA X="220" Y="130" L="100" H="50"> <ELIPSA X="60" Y="240" L="80" H="100"> </DOCUMENT>

10. Introducere n analiza sintactic


Cerinta 10.1 [Gramaticile dependente de context sunt recursive9.] Exist un algoritm care pentru orice G = (, , S, P) - gramatic dependent de context i orice w + decide dac afirmaia w L(G) este adevrat. Demonstraie. Fiind dat gramatica G = (, , S, P), dependent de context i w + astfel nct |w| = m, definim, prin recuren, irul de mulimi Xi, i 0, astfel: X0 = {S}, Xi+1 = Xi {v | v ()+, exist u Xi astfel nct uv i |v| m}, i0. Vom arta c irul construit are urmtoarele proprieti: k P1: Xk = {v | v ( )+, S v, |v| m}, k = 0, 1, ; P2: Xi (i 0) este un ir ascendent, n sensul relaiei de incluziune i mrginit de

U
k =1

( )k i exist p N astfel nct Xp = Xp+1.

P3. Dac Xp = Xp+1 atunci Xp = Xp+i, oricare i 0. P4. Fie p0 = min {p | Xp = Xp+1}. Atunci w L(G) dac i numai dac w X p0 . Demonstraia proprietii P1 [prin inducie n raport cu k]. Fie Yk := {v | v k ( )+, S v, |v| m}. Vom arta c Xk (obinut prin construcia recurent) coincide cu Yk, k = 0, 1, Pentru k = 0, proprietatea este, n mod evident, adevrat. Este suficient s observm c X0 = Y0 = {S}. Presupunem c P1 este adevrat pentru un k oarecare i demonstrm c Xk+1 = Yk+1. Iniial, demonstrm c Xk+1 Yk+1. Fie v Xk+1. Atunci fie v Xk, fie v { | ( )+, exist u Xk astfel nct u i || m}. Dac v Xk atunci, prin ipoteza de inducie rezult v Yk, dar Yk Yk+1 (o derivare n cel mult k pai poate fi considerat i ca derivare n cel mult k + 1 pai). Prin urmare v Yk+1. Fie v { | ( )+, exist u Xk astfel nct u i || m}. Avem succesiv S k +1 u i u v i |v| m. Deci S k v i |v| m. Prin urmare v Yk+1. A
9

n teoria algoritmilor, o gramatic formal G se numete recursiv dac exist un algoritm care accept, la intrare, orice cuvnt w peste vocabularul terminal i produce, la ieire, rspunsul la ntrebarea: w L(G)? Nu trebuie s confundm aceast noiune cu cea referitoare la recursivitatea la stnga (resp. dreapta) a gramaticilor, introdus prin definiia 2.10.

mai rmas de justificat incluziunea invers: Yk+1 Xk+1. Fie v Yk+1. Atunci S +1 k v i |v| m. Rezult c exist u( )+ astfel nct S u v (am k pus n eviden ultimul pas al derivrii), iar u = x1y1, v = x1y1 i ::= P. Deoarece gramatica este dependent de context, deci i monoton, obinem c || ||, deci |u| |v|. Cum |v| m, rezult i |u| m. Adic u Yk Xk (conform ipotezei de inducie). n concluzie, v este un element al mulimii {v | v ( )+, k v i |v| m exist u Xk astfel nct u v i |v| m} Xk+1. Dac S atunci n mod banal v Yk Xk (conform ipotezei de inducie). Demonstraia proprietii P2. Construcia irului de mulimi arat i caracterul ascendent al irului. Mrginirea este posibil deoarece se lucreaz cu mulimile de cardinal finit i , iar mulimea cuvintelor de lungime cel mult m este o mulime finit. Demonstraia proprietii P3 [prin inducie n raport cu i]. Cazul i = 1 este chiar cel din ipotez. Admitem, prin ipoteza de inducie, c Xk = Xk+i, pentru un i fixat. Dorim s artm c proprietatea se pstreaz pentru indicele i + 1. Dar Xk+(i+1) = Xk+i {v | v ( )+, exist u Xk+i astfel nct u v i |v| m} = (prin ipoteza de inducie) Xk {v | v ( )+, exist u Xk astfel nct u v i |v| m} = Xk+1 = Xk.
m w, adic w Xm. Demonstraia proprietii P4 Fie w L(G), deci S Dac m > p0 atunci se aplic proprietatea P3 i rezult c w X p0 . Dac m p0 atunci se aplic proprietatea P2 i rezult w X p0 . Reciproc, dac w X p0 , prin k0 w. Prin urmare w L(G). aplicarea proprietii P1, rezult S

Cele de mai sus ne permit formularea urmtorului algoritm: 1. k := 0; Xk := {S}; 2. Repet paii 2.1. Xk+1 = Xk {v | v ( )+, exist u Xk astfel nct u v i |v| m}; 2.2. k := k + 1; pn cnd Xk = Xk-1. 3. Dac w Xk atunci w L(G) altfel w L(G). Exemplul 10.1 Fie gramatica G = ({S, A}, {a, b}, S, {(S, AA), (S, AS), (S, b), (A, SA), (A, AS), (A, a)}) i w = abaab (|w| = 5). Prin aplicarea propoziiei 10.1 se obine urmtorul ir de mulimi: X0 = {S}; X1 = X0 {AA, AS, b}; X2 = X1 {SAA, ASA, aA, AAS, Aa, SAS, ASS, aS, AAA, Ab}; X3 = X2 {AAAA, ASAA, bAA, SSAA, SASA, SaA, SAAS, SAa, ASSA, aSA, AASA, AbA, ASAS, ASa, aAS, aa, AaS, AAAS, Aab, bAS, SSAS, SASS, SaS, SAAA, SAAS, SAb, ASSS, aSS, AASS, AbS, ASb, aAA, ab, AaA, AAa, , ab}

X4 = X3 {SAAAA, ASAAA, aAAA, AASAA, AaAA, AAASA, AAaA, AAAAS, AAAa, SASAA, ASSAA, aSAA, AAAAA, AbAA, ASASA, ASaA, ASAAS, ASAa, bSAA, bASA, baA, bAAS, bAa, SbAA, SSSAA, SSASA, SSaA, SSAAS, SSAa, SASSA, SaSA, SAASA, SAbA, SASAS, SASa, AAaA, ASaA, SaAS, Sab, SaAS, SAASS, SAaS, SAAAS, SAAb, Saa, ASSSA, aSSA, AASSA, AbSA, ASbA, ASSAS, ASSa, aAAA, aASA, abA, AaSA, AAbA, AASAS, AASa, SAbA, AbAS, Aba, aSAS, AbAS, ASASS, ASaS, ASAb, aSa, aASS, aaS, aAAS, aAb, AaAA, AaAS, Aab, ASAAS, AAASS, AAbS, AAAb, SAab, ASab, aab, bSAS, bASS, baS, bAAA, bAAS, bAb, SAAAS, SbAS, SSASS, SSSAS, SSaS, SSAAA, SSAb, bASS, SSASS, SASSS, SaSS, SAASS, SAbS, SASAA, SASb, AAaS, baS, SaAA, bAAAA, SaAA, SAaA, SAAa, ASAb, ASAb, bAb, Sab, ASSSS, aSSS, AASSS, AbSS, ASAAS, ASbS, ASSb, aAAS, abS, aSb, AaSS, AAbS, AASb, SAbS, AbAA, AbAS, Abb, aaA, SAaA, ASaA, aaA, AaAS, Aaa, ASAa, aAa, AASa, Aaa}, ... X9 = X8 {abaab, ...} Observm c w X9. Prin urmare w L(G). Cerinta 10.2 Exist un algoritm care s determine, pentru o gramatic independent de context G = (, , S, P) i un cuvnt w *, dac w L(G) sau w L(G). Demonstraie. Deoarece orice gramatic independent de context este echivalent cu o gramatic n forma normal Greibach (teorema 6.3) putem presupune c G este n forma normal Greibach. Dac w = atunci w L(G) dac i numai dac S ::= P. Presupunem c w . Atunci w L(G) dac i numai * dac S w. n cadrul derivrii fiecare producie adaug exact un terminal, | w| deci S w (lungimea derivrii este egal cu lungimea cuvntului w). Un algoritm pentru a decide dac w L(G) sau nu, ar trebui s genereze toate derivrile de lungime |w|. Acest lucru este posibil deoarece numrul regulilor este finit i prin aplicarea metodei backtracking se pot genera toate derivrile de o anumit lungime. Exemplul 10.2 Considerm datele de intrare din exemplul 10.1. Rezultatul aplicrii algoritmului CYK este prezentat n urmtorul tabel: j 5 4 3 2 1 i=1 V15 = {A, S} V14 = {A, S} V13 = {A, S} V12 = {A, S} V11 ={A} i=2 V24 = {A, S} V23 = {S} V22 ={A } V21 = {S} i=3 V3,3 = {A, S} V3,2 ={S} V31 = {A} i=4 i=5

V42 = {A, S} V41 = {A}

V51 = {S}

Cerinta 10.3 Algoritmul CYK (Cocke, Younger i Kasami) calculeaz mulimile Vi,j (j = 1, 2, , m; i = 1, 2, , m j + 1) folosind O(m3) operaii de reuniune.

Demonstraie. Complexitatea pasului 1 este O(m). Numrul de operaii de reuniune din pasul 2 este dat de numrul tripletelor (j, i, k) - cardinalul mulimii {(1, 1, _), (1, 2, _), ., (1, m, _), (2, 1, 1), (2, 2 1), , (2, m-1, 1), (3, 1, 1), (3, 1, 2), (3, 2, 1), (3, 2, 2), , (3, m-2, 1), (3, m-2, 2), ., (m, 1, 1), (m, 1, 2), , (m, 1, m-1)}, adic o expresie de ordinul O(m3). Prin _ am notat executarea doar a pasului 2.a. Prin urmare complexitatea algoritmului este de O(m3) operaii de reuniune. Pentru obinerea analizei stngi a unui cuvnt w generat de gramatica G se poate utiliza o procedur recursiv inspirat de schema algoritmului CYK. Se presupune, n continuare, c G este n forma normal Chomsky. Procedura ANALIZA, care furnizeaz analiza stng, are urmtorul cod (n limbaj algoritmic): Integer n(100); Integer h; Procedure Analiza (i, j, A) Integer i, j; Neterminal A; SEQ if (j = 1) then SEQ h := h + 1; n[h] := #(A ::= ai); END else SEQ If (exist k astfel nct k = min{s | s = 1, 2, , j-1, A ::= BC P, B Vis , C Vi+s, j-s}) then SEQ h := h+1; n[h] := #(A ::= BC); if (k < j-k) then SEQ Analiza(i, k, B); Analiza(i+k, j-k, C); END else SEQ Analiza(i+k, j-k, C); Analiza(i, k, B); END; END END END Procedura este apelat prin Analiza(1, |w|, S) numai dac algoritmul CYK a furnizat rezultatul w L(G). Valoarea variabilei h va fi majorat de valoarea [log2|w|]. Cerinta 10.4 Fie G = (, , S, P) o gramatic independent de context, nerecursiv la stnga i A wXu (stnga). Atunci exist o constant real pozitiv, c, astfel nct || c|w|+2.
Demonstraie. Fie n = || i arborele corespunztor derivrii A wXu (stnga). Atunci, n acest arbore nu exist nici un drum de lungime mai mare dect n(|w| + 2). Fie s = max {|| |A ::= P}. Cum n arborele de derivare nu sunt mai mult de sn(|w| + 2) noduri interioare, rezult c lungimea unei analize stngi poate fi

majorat ca n enun. Se observ c se poate lua c = sn care depinde numai de gramatica G, nu i de forma propoziional. Exemplul 10.3 Fie gramatica cu regulile S ::= aSb | b i cuvntul w = aaabbb. Prin aplicarea algoritmului de analiz sintactic descendent rezult urmtoarele configuraii: (q, 1, , S$) |- (q, 1, S1, aSb$) |- (q, 2, S1a, Sb$) |- (q, 2, S1aS1, aSbb$) |(q, 3, S1aS1a, Sbb$) |- (q, 3, S1aS1aS1, aSbbb$) |- (q, 4, S1aS1aS1a, Sbbb$) |(q, 4, S1aS1aS1aS1, aSbbbb$) |- (r, 4, S1aS1aS1aS1, aSbbbb$) |(q, 4, S1aS1aS1aS2, abbbb$) |- (r, 4, S1aS1aS1aS2, abbbb$) |(r, 4, S1aS1aS1a, Sbbb$) |- (r, 3, S1aS1aS1, aSbbb$) |(q, 3, S1aS1aS2, abbb$) |- (q, 4, S1aS1aS2a, bbb$) |(q, 5, S1aS1aS2ab, bb$) |- (q, 6, S1aS1aS2abb, b$) |(q, 7, S1aS1aS2abbb, $) |- (t, 7, S1aS1aS2abbb, ). Analiza sintactic a cuvntului aaabbb este 112 unde indicii i asocierile sunt urmtoarele: 1 (S1) pentru S ::= aSb, respectiv 2 (S2) pentru S ::= ab. Cerinta 10.5 Fie G = (, , S, P) o gramatic independent de context, fr -producii i aciclic, w *, iar A uXw (dreapta). Atunci exist o constant real pozitiv, c, astfel nct || c|w|. Demonstraie. n virtutea propoziiei 5.3, putem presupune c gramatica G nu are redenumiri. Deoarece gramatica nu are -producii atunci n orice derivare X w, numrul (notat prin h) produciilor de forma Y ::= , cu || 2 nu poate depi |w|. Evident h < |w|. Vom arta, prin inducie dup h, c || 2|w|. Pentru h = 0, rezult c |w| = 1, lungimea derivrii este 1, deci || 2|w|. * Presupunem c h > 1, A Y1Y2...Ym w (dreapta), deci w = w1w2...wm * wi, prin aplicarea a hi reguli, i = 1, (proprietatea de localizare) astfel nct Yi 2, ..., m. Evident h = 1 + h1 + h2 + ... + hm. Fie i fiecare dintre cele i derivri drepte. Prin ipoteza de inducie rezult c |i| hi + |wi|. Prin sumare, rezult c || 1 + h1 + h2 + ... + hm + |w1| + |w2| + ... + |wm| = h + |w| 2 |w|. * u o derivare dreapt, unde u este un Fie w *, ( )+, i prefix al lui w. Conform celor de mai sus, lungimea derivrii este cel mult 2|u|. Numrul analizelor sintactice parial drepte consistente cu w care se refer la prefixul u este cel mult |P|2|u|, unde |P| reprezint numrul produciilor gramaticii date. Cuvntul w are |w| prefixe deci numrul analizelor sintactice este cel mult |P|2 + |P|4 + ... + |P|2|w| < c|w|. n rolul lui c se poate lua, de exemplu, |P|4. Exemplul 10.4 Fie gramatica din exemplul 10.3 i cuvntul w = a3b3. Conform algoritmului analizei sintactice ascendente au loc urmtoarele tranziii: (q, 1, $, ) |- (q, 2, $a, D) |- (q, 3, $aa, DD) |- (q, 4, $aaa, DDD) |(q, 5, $aaab, DDDD) |- (q, 5, $aaS, 2DDDD) |- (q, 6, $aaSb, D2DDDD) |(q, 6, $aS, 2D2DDDD) |- (q, 6, $aSb, D1D2DDDD) |(q, 7, $S, 1D2D2DDDD) |- (t, 7, , 1D1D2DDDD). Analiza sintactic a cuvntului aaabbb este 112 unde indicii produciilor sunt urmtoarele: 1 pentru S ::= aSb, respectiv 2 pentru S ::= ab.

Bibliografie
1. Academia Romn Institutul de lingvistic ,,Iorgu Iordan, DEX Dicionarul explicativ al limbii romne, Ediia a II - a, Univers enciclopedic, 1996. 2. Aho, A.V., Ullman, J.D., The theory of parsing, translation and compiling, Vol. I, Prentice-Hall, 1972. 3. Albeanu G., Algoritmi i limbaje de programare, Editura FRM, 2000. 4. Atanasiu A., Bazele Informaticii, Universitatea din Bucureti, 1987. 5. Atanasiu A., Mateescu Al., Limbaje formale, Culegere de probleme, Universitatea din Bucureti, 1990. 6. Gries D., Compiler Construction for Digital Computers, John Wiley & Sons, 1971. 7. Grigora Gh., Limbaje formale i tehnici de compilare, Universitatea Al. I. Cuza, Iai, 1984. 8. Gruska J., On a classification of context-free grammars, Kybernetika, 3(1967), 22-29. 9. Hausser R., Foundations of Computational Linguistics, Human-Computer Communication in Natural Language, 2nd Edition, Springer, 2001. 10. Hopcroft, J.E., Ullman, J.D., Introduction to Automata Theory, Languages and Computation, Addison Wesley Publishing Company, 1979. 11. Hristea Florentina, Introducere n procesarea limbajului natural cu aplicaii n Prolog, Editura Universitii din Bucureti, 2000. 12. Jucan Toader, Andrei Stefan, Limbaje formale i teoria automatelor, Universitatea Al. I. Cuza, Iai, 2002. 13. Malia Mihaela, Antrenamente Prolog - Introducere n limbajul de programare logic Prolog. Editura Universitii din Bucureti, 2000. 14. Manna, Z., Mathematical Theory of Computation, McGraw-Hill, 1974. 15. Pun Gh., Cteva gramatici dependente de context, Studii i cercetri matematice, Tom 26, Nr. 8, 1974. 16. Pun Gh., Mecanisme generative ale proceselor economice, Editura Tehnic, Bucureti, 1980. 17. Pun Gh., Probleme actuale n teoria limbajelor formale, Editura tiinific i enciclopedic, Bucureti, 1984. 18. Popovici C., Rudeanu S., Georgescu H., Bazele Informaticii, Vol II, Universitatea Bucureti, 1991. 19. Serbanai Luca-Dan, Limbaje de programare i compilatoare, Editura Academiei, Bucureti, 1987. 20. Simovici Dan, Limbaje formale i tehnici de compilare, EDP Bucureti, 1978. 21. ndreanu N., Bazele Informaticii. Exerciii de calcul boolean, automate i limbaje formale, Universitatea din Bucureti, 1980.

S-ar putea să vă placă și