limbaje_formale

Embed Size (px)

Citation preview

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: [email protected] Titularul/titularii cursului / serie: ZI, FR, ID Prof. Univ. Dr. Albeanu Grigore [email protected] Str. Ion Ghica, Facultatea de matematic-informatic 7.30-16 2. Coninutul tematic al cursului1. 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 regulate1.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) + =

Uk 1

k

.

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 fundamentale2.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. b) genereaz1 (i se noteaz * ) dac i numai dac exist cuvintele 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 L(G), adic S * , dac i numai dac exist un arbore de derivare (S-arbore) cu 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, (resp. A * A), ()*. O gramatic este recursiv la stnga (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 regulate3.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 efectund -deplasri, pornind din q. Mai precis, (q) = {p Q| q * [ ] p} i 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 finite4.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.

3

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 formale5.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, mulimea {w * | X * w} este nevid. 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-Hillel6.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 automate7.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 de4

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 nchidere8.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 L2

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

2

2

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)}. Dac L * atunci gM(L) = U g M (u ) . Transformarea gsm invers este g M1 : *uL P(*) dat de g (u) = {v | u gM(v)}. Dac L * atunci g M1 (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 marcareSpecificarea 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.html2

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 XMLMetalimbajul 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 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: Acesta este un titlu !]]> f) STag - tag-uri de nceput, de forma ; g) ETag - tag-uri de sfrit, de forma ; h) TagVid - elemente vide, de exemplu: ; 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 ::= '' Referin ::= Referin-entitate | Referin-caracter Referin-entitate ::= '&' Nume ';' Referin-caracter ::= '' [0-9]+ ';' | '' [0-9a-fA-F]+ ';' S ::= (#x0020 | #x0009 | #x0000D | #x000A)+ Nume ::= (Liter | '_' | ':') (Caracter-pt-nume)* PI ::= '' Caracter*)))? '?>' NumePI ::= Nume - (('X' | 'x') ('M' | 'm') ('L' | 'l')) CDSect ::= CDStart CData CDEnd CDStart ::= '' Car*)) CDEnd ::= ']]>' TagVid ::= '' DocumentXML ::= Parte_1 Element Diverse* Parte_1 ::= XMLDecl? Diverse* (Decl-tipdoc Diverse*)? XMLDecl ::= '' 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 ::= '' Element ::= TagVid | STag Coninut ETag STag ::= '' Atribut ::= Nume Eq Valoare-atribut ETag ::= '' 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::= [^' 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 ::= '' IgnorSect ::= '' IgnorSectConinut ::= Ignor ('' Ignor)* Ignor ::= Car* - (Car* ('') Car*) Referin-PE ::= '%' Nume ';' Declarare-entitate ::= GEDecl | PEDecl GEDecl ::= '' PEDecl ::= '' 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 ::= '' ExtTradEnt ::= Declarare-text? Coninut Decl-codificare ::= S 'encoding' Eq ('"' Nume-cod '"' | "'" Nume-cod "'" ) Nume-cod ::= [A-Za-z] ([A-Za-z0-9._] | '-')* ::= '' 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: ]> Ionescu

Marian Februarie 23, 2005 CAIET DICTANDO 15 25000 CRETA 10 15000 Popescu Alexandru Februarie 24, 2005 CARTE 1 500000 CD AUDIO 10 150000

10. Introducere n analiza sintactic10.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.

1

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 nctDe 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 descendentProcesarea 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.

5

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 propuse1. 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 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, s