Sunteți pe pagina 1din 128

GRIGORE ALBEANU LIMBAJE FORMALE SI AUTOMA TE Editia a II-a, revazuta ~iextinsa

FAC
Edltura acreditata de Ministerul Educatiei, Cercetarii §I Inovdrii
prin Consiliul National 01 Cercetarii Sttintfice din invii,tiimantul Superior

co Editura

Fundatiei Romania de Maine, 2009

lDescrierc~- eIP a Bibliotecii Nationalc ~ Roman~ i ALBEANU, GRIGORE'


: Limbaje formalc ~iautomate / Grigore Albeanu , Bucuresti: Editura Fundatiei Romania de l'vldine, 2009 Bibliogr. ISBN: 978-973-163-468-5 004.43 519.7
.

'

----

..

_-._-._

._---

--~

..

Rcproduccrea integra Iii sau fragmentars, prin orice forma si prin mice mijloace tehnice, este strict interzisa si se pedepseste conform legii,

Raspunderea pentru continutul §I originalitatea textului revine exclusiv autorului/autorilor,

Telmoredactor: Marian BOLINTI~ Coperta: Cornelia PROD AN Bun de tipar: 29JX 2009; Coli tipar: 8 Format: 16170xlOO Editura Fundatiei Romania de Maine BuIcvardul Timisoara, m,58, Bucuresti, Sector 6 TeL/Fax: (021) 444 20 91; www.spiruharet.ro e-mail: editurafrm@yahoo.com

UNIVERSIT ATEA SPIRU HARET


FACUL TATEA DE MATEMA TICA - INFORMATICA

GRIGORE ALBEANU

LIMBAJE FORMALE ~I AUTOMATE


Editia a II-a, revazuta si extinsa

EDITURA FUNDATIEI ROMANIA DE MAINE Bucuresti, 2009

CUPRINS

Cuvant inainte

7 9
9

1. Limbaje si expresii regulate


1.1. Alfabet. Cuvant. Limbaj 1.2. Operatii eu limbaje , 1.3. Multimi regulate ~i exprcsii regulate 1.4. Exercitii

..
. , " . . ..

11
14 16 19 19 20 21 24 29 30 33 33 34 35 37 38 39 42 45 45 47 49 51 53 53 54 56 58
5

2. Mecanisme generative fundamentale 2.1. Sisterne de reseriere


2.2. 2.3. 2.4. 2.5. 2.6. 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 4.1. 4.2. 4.3. 4.4. 5.1. 5.2. 5.3. 5.4.

. Gramatiei fonnale .. Clase de gramatici .. Arbori de derivare, ambiguitatea si rccursivitatea gramaticilor .. , . Complexitatea sintactica a gramaticilor si limbajelor . Exercitii , ,.

3. Mecanisme pentru recunoasterea automata a multirnilor regulate


Automatul finit determinist (AFD) , Automatul finit nedeterminist (AFN) Puterea de acceptare a sistemelor AFD ~i AFN Automate eu A,~deplasarisau sisteme tranzitionale Sistemele AFN !?iexpresiile regulate Aspecte algoritmice Exercitii Stari accesibile. Stari utile Congruente si limbaje regulate , ' Lema de pompare pentru Iimbaje regulate. Aplicatii Exercitii ." , " Transformari elementarc Redenumiri si A,~productii Simboluri utile Exercitii ,

.
. . . ,. .. .. .

4. Optimizarea automatelor finite

.
. . . ..

5. Transformari asupra gramaticilor formale

.
. .. · .. .

· .. ·.. ·.. ·.. ·.. ·.. ··

·.. ··

6. Forme normale. Lema Bar-Hillel

'"

..

59 59 60 62 63 65 65
66

6.1. 6.2. 6.3. 6.4. 7.1. 7.2. 7.3. 7.4. 7.5. 8.1. 8.2. 8.3. 8.4. 9.1. 9.2. 9.3. 9.4. 9.5.

Forma normala Chomsky...... Forma normala Greibach Lema Bar-Hillel Exercitii

'"

7. Gramatici ~iautomate............ Gramatici liniare si limbaje regulate... Automate pushdown Limbaje independente de context !it automate pushdown............. Masini Turing si automate liniar marginite Exercitii Reuniunea limbajelor '" Familia limbajelor regulate... ... Familia limbajelor independente de context...... Exercitii '" Limbajul C++ Limbajul Phyton Limbajul Prolog XML '" Exercitii '" ..

69 71 73 77 . 77 78 78 83 85 85 96 102 107 114 115 115 120


121

8. Proprietati de inchidere

9. Specificarea sintaxei limbajelor

'" '"

'"

10. Introducere in analiza sintactica 10.1. Problema recunoasterii 10.2. Analiza sintactica descendenta 10.3. Analiza sintactica ascendenta 10.4. Exercitii 11. Exercitii recapitulative Bibliografie ... ... ... ... ... ... '" '" '" . " . ... ..

124 125 127

Cuvant-inainte

Cursu} de limbaje fonnale si automate abordeaza aspecte teoretice si aplicattve privind generarea Ifi recunoasterea limbajelor arttficiale, deci Ift a limbajelor de programare. Continutul a fost proiectat conform programei analitice a disciplinei eu acelasi titlu din planul de invatamant corespunzator specializarii informatica (Studii universitare de licenta, ciclul I Bologna, semestrul al Ill-lea, 28 ore de curs si 28 ore de seminar). Materialul este structurat in unsprezece capitole cu pastrarea fluxului informational impus de prima editie a cartii. in aceasta editie sun! extinse anumite capitole, sun! adaugate exemple not, exercttii si prob/eme. Primul capitol introduce notiunile Jundamentale de alfabet, cuvdnt, limbaj; defineste operatiile de baza asupra limbajelor formale Ifi se incheie cu un studiu asupra expresiilor si limbajelor regulate. Al doilea capitol este dedicat mecanismelor generative fundamentale. Se introduc sistemele de rescriere. operatia de derivare, gramaticile formale, clastficarea lui Chomsky, formele simplificate ale gramaticilor liniare, arborii de deriva-re, notiunea de limbaj ambiguu, clasa gramaticilor cu simboluri recursive precum Iff masuri ale complexitatii sintactice a gramaticilor si limbajelor. Capitolul al treilea descrie mecanismele pentru recunoasterea automata a multimilor regulate (automate finite deterministe/nedetermintste si sisteme tranzitionale). Se arata legatura dintre expresiile regulate si multimile acceptate de mecanismele de recunoastere introduse. Algoritmii pentru optimizarea automatelorfinile, lema Bar-Hillel Ifi aplicatiile acesteia pentru clasa limbajelor regulate sunt prezentate in capitolul al patrulea. Capitolul al cincilea se ocupa de transformari asupra gramaticilor forma le (prezenta simbolului de star! numai in membrul stdng, eliminarea redenumirilor pentru gramattci de tip 2 §.j 3, eliminarea A - productiilor, gramatici proprii). in capitolul al saselea, se prezinta formele normale ale lui Chomsky si Greibach, lema Bar-Hillel si aplicatiile acesteia pentru limbaje independente de context. Legaturile dintre gramaticile liniare Ifi limbajele regulate, gramaticile independente de context si automatele pushdown, gramaticile dependente de context Ifi automatele liniar marginite, respectiv dintre masinile Turing yi gramatictle oarecare, sunt prezentate in capitolul al saptelea. in capitolul al optulea se investigheaza proprietatile de inchidere ale familiilor de limbaje la operatiile de reuniune, intersectie, complementara, operatia Kleene, substitutii, homomorfisme si transformari gsm.
7

Capitolul noua este dedicat unei prime aplicatii a dispozittvelor de generare si recunoastere introduse in capitolele anterioare: specificarea sintaxei unor limbaje cu rol important in informatica. Exemplele ilustreaza gramaticile formale pentru limbajele C++, Python, Prolog st XML. Pentru utilizarea limbajelor formale in scrierea interpretoarelor ~i compilatoarelor precum si in domeniul lingvisticii computationale trebuie sa dispunem de algoritmi st unelte de analiza lexicala si sintactica. 0 introducere in analiza sintactica este prezentaui in capitolul al zecelea. Fiecare capitol cuprinde exemple ilustrative si exercitii pentru aplicarea .'ii aprofundarea notiunilor ~i algoritmilor prezentati. Capitolul 11 este dedicat. in intregime, exercitiilor recapitulative. Materialul, cu anumite variatii, a fast utilizat ca suport de curs in perioada 1997-2003, in cadrul cursului de Bazele Informaticii de la specializarea matematica-informaticd. Editia 2005 a fost utilizata, cu precadere, pentru cursul din planul de invatamant al specializarii informatica. Prezenta editie aduce cdteva corectii ~i completari la editia din 2005. Autorul spera ca cititorii vor gdsi suficiente exemple ilustrative, exercitii si probleme pentru antrenament astfel tncdt prin parcurgerea materialului sa capete nu numai cunostinte. dar ~i deprinderi in utilizarea mecanismelor de generare !ji recunoastere a limbajelor. Toate cunostintele transmise in cadrul acestui curs sunt utile atdt pregatirii in informatica teoretica, edt st programatorilor care i~ipropun sa realizeze translatoare, interpretoare, compilatoare, interfete in limbaj natural etc. Iulie 2009 Autorul

1. Limbaje ~iexpresii regulate


1.1 Alfabet. Cuvdnt. Limbaj Definitia 1.1 [Alfabet] Un alfabet este simboluri (litere\ Notatie
AlfabeteIe se vor nota prin
0 multime

nevida

si finita ale carei elemente

sunt numite

semne precum: V, VN, VT, L etc.

Deoareee programatorii calculatoarelor lucreaza eu ,,~iruri de caractere", uneori, elementele unui alfabet vor fi numite si caractere. Pentru ca toate simbolurile sft fie reprezentabile grafic' (printr-un semn) acestora li se asociaza reprezentari. In acest sens, alfabetul muzical reprezinta un exemplu ilustrativ.

Exemplul1.1

Multirnile V = {a, b, c}, L = {O, I} si VT == {a1, a-; ... , an} sunt alfabete. Alte alfabetc sunt: alfabetul octal reprezentat de multimea {O, 1, 2, 3, 4, 5, 6, 7}, alfabetul zecimal, alfabetul hexazecimal reprezentat de multimea {O, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}, alfabetul latin, alfabetul chirilic, alfabetul limbii rornane, alfabetulliterelor mici, etc.

Definitia 1.2 [Cuvdnt, lungimea unui cuvdnt] Fie L = {aJ, a-; ... , an} un alfabet, unde n este un numar natural nenul (n 21). Orice secventa x = ai/ai2...a.; ai} E L, 1 ::;) ::; r, se numeste cuvant' ($ir) peste L. Lungimea cuvantului x se noteaza eu Ixl ~i este cgala eu r. Convenim sa
consideram si cuvantul "format" eu zero simboluri numim cuvantul vid sau sirul nul', pe care-I notam eu

A si II

I Conform DEX (1996), alfabetul reprezinta "tota/itatea Were/or, asezate intr-o ordine conventionala, reprezentdnd sunete/e de baza ale unei limbi", deci ~i ale unui limbaj, asa cum va rezulta din definitia 1.3. 2 Unele elemente ale codului ASCII sunt descrise prin secvente speciale: '\n', '\t', ... , respective prin nume: CR, TAB, .... 3 Tennenul englezesc pentru aceasta constructie este string. Un cuvdnt de /ungime n (n ~ 1) poate fi definit ~i printr-o functie x : {l, 2, .... , n} --+ L; x = x(l )x(2) ...x(n). Atunci r.n reprezinta multimea cuvintelor de lungime n. In mod natural, cuvintele de lungime unu se identifica cu elementele multimii L. 4 in programarea ealculatoarelor sirului nul i se asociaza 0 reprezentare, in memoria sistemului de calcul, care depinde de limbajul de programare utilizat. 9

Notatii

'Multirnea tuturor cuvintelor peste ~ se noteaza cu 1:*, iar multimea tuturor cuvintelor nenule, 1:*-{A.}, se noteaza cu 1: . A1fabctu1 sta 1a baza unui sistem de scriere si contine entitatile nccesare formarii cuvintelor, propozitiilor si frazelor. In aceasta lucrare sc st~diaza numai sintaxa limbajelor. Prin urmare se vor utiliza doar cuvinte. In plus, nu vom folosi termenul vocabular ca sinonim pentru alfabet (asa cum se obisnuieste in anumite lucrari de s referinta (Paun (1984» pentru a nu crea ambiguitatc si dificultati, de ' intelcgere . cuvintelor] Daca x = ai/ai2 ... a.; Y = afJap ... ,ajs, aip E 1: (l spSI') si ajq E 1: (J sq S 1') atunci xy = ailai2 ... ai..ajlap ... afs se numeste concatenarea cuvintelor x si y. Multimea 1:* este monoid" in raport cu operatia de concatenare a cuvintelor, deoarece operatia de concatenare este asociativa, iar A este element neutru, Da~a notam prin z:,O multimea fermata c1..1irul vid' ({A}), prin z:,2 (= 1:1:) s multimea cuvintelor de lungirne doi, prin z:,3 (= z:,21:) multimea cuvintelor de lungirne trei, respectiv, prin r = z:,n.l1: (multimea euvintclor de lungirne n; n> 1), atunci 1:*
=

Observatia 1.1 [Concatenarea

Observatia 1.2

U 2:. k i?i z:,+ U 2:. k .


=
kd

Definitia 1.3

price submultime L de euvinte peste 1:, L c;;;; L*, se numeste limba/ peste L. In cadrul tematicii noastre nu vom asocia nicio semnifieatie cuvintelor. Prin urmare nu trebuie facuta 0 asociere directa c1..1 domeniullingvisti~. Exernplul1.2 Urmatoarele constructii dcscriu limbaje": 1) z:,= {a, b. c}, Li = {anbnc" I n ~ 1}, L2 = {aP I p E N*,p numar prim}, L3 = {xx I XEI*}. 2) 1: = {O, I}, L = { X E I* I x este scricrea binara a unui numar natural divizibil prin 5}.
Din punet de vedere lingvistic vocabularul (numit si lexicul) unei limbi reprezinta totalitatea euvintelor din acea limba. De aceea se vorbeste despre vocabular de baza, voeabular seeundar, etc. Oriee partitionare a unui alfabet in submultimi nu trebuie asociata eu partitionarea unui voeabular. 6 Monoidul fiber pe l: este monoidul (l:*, ., {.-1}). Semigrupul liber pe l: este semigrupul (l:+, .). Operatia notata prin "punct" desernneaza concatenarea cuvintelor (sirurilor). O 7 Trebuic observat ca L "* 0. 8 Notiunile introduse (alfabet, litera, cuvant) se aplica limbajelor artificiale. Pentru proeesarea limbajului natural (in eontextul lingvisticii computationale) entitatile de bam sunt: cuvantul (ehiar daca cste format dintr-o singura litera) si fraza (chiar daca cste fermata din euvinte de 0 singura litera). 9 In eele ce unneaza an reprezinta un sir (cuvant) format din n simboluri a, unul dupa altul.
S

10

1.2 Operatii cu limbaje


Deoarece limbajele sunt multimi de cuvinte, operatiilc'" obisnuite ale teoriei multimilor sunt valabile !?i pentru limbaje. Pentru alfabetul 1: fixat, au sens reuniunea, intersectia, complementara (fala de 1:*) si diferenta Iimbajelor peste 1:. Accste operatii vor fi notate, in mod uzual, prin u, (1, C si -. In continuare presupunem ca cititorul este familiarizat eu aceste operatii,

Definitia 1.4 [Concatenarea, Produsulll]

Consideram limbajele Li (peste 1:1) si L2 (peste 1:2). Atunci multimea LlL2 = {!lvl U ELl, V E L2} se numeste concatenarea sau produsullimbajelor L, si L2. . L{A} = {/l.}L = L; L0=0L=0, pentru oricare limbaj L, unde 0 cste limbajul vid. Definitia 1.5 [lnchiderea Kleene= concatenarea iterata sau stelarea ] Fie L 0:;: 1:*. Inchiderea Kleene a limbajului L este multimea L* unde LO.= {A},
12

Observatia 1.3

ULk ,

t:"

= L"

L, n 20.

Notatie [inchiderea pozitiv6] L+ =

ULk .
kd

Observatia 1.4

~ Daca L este un limbaj A~liber (nu contine cuvantul vid) atunci L + = L * ~ {A}. In plus, 0° = 0" = {A} si 0' = 0, i 2: I. Daca E = {/l.},atunci E' = E. Definitia 1.6 [Subcuvdnt, Prefix, Sufix, Revers] Fie sirurile x, y E 1:* si X = ajJai2 ... a.; Daca exista u, v E 1:* astfel incat y = !lXV, spunem ca X este subcuvdnt (sub}'ir) allui y. Daca exista V E 1:* astfel incat y ~~xv atunci X este prefix al lui y, iar daca exista U E :E*astfel in cat y = ux, atunci x este sujix al lui y. Simi Reverstx) = air ... aj]CJil, se numeste oglinditullui x.
10 Majoritatca operatiilor cu limbaje se defmesc prin extensie. Fie 0'1 : V* -j. P(V*) si (12 : V*xV* -j. P(V*) operatii definite pentru cuvinte, respectiv perechi de cuvinte, Atunci,

pentru L c::; V*, se pune al(L)

UO'j (x). iar pentru L

1, L2

c::; V*, se defineste aiLl,

Ls)

Ua2 (x.j.).
XC~ II ,YEL2

Asa cum am ornis scrierea aperatorului de concatenare a cuvintelor vom amite si scrierea

unui operator pentru produsullimbajelor. 12 Uneori numim aceasta operatie si stelare asa cum in literatura de specialitate, de limba engleza, se numeste si "asterate" .

11

Notatii Pcntru un sir y E E*, notam prin Sub(y), Pref(y), subcuvintelor, prefixelor si, respectiv, a sufixelor cuvantului y.

SlW)

multimea

Definitia 1.7 [Extinderea operatiilor Sub, Prej si S~lasupra limbajelor] Fie L ~ E*. Atunci Sub (L) ~ U Sub (x) ; Prej(L)
.~EL

~ UPref(x); Slif(L) ~ USuf(x) .


xc I:
XEt

Observatia 1.5 In mod similar, se poate defini oglinditullimbajului

L.

Definitia 1.8 [Substttufia] Fie ansamblul (U, V, s), undo V si V sunt alfabcte, iar s : V ~ P(U*) este aplicatie oarecare. Aplicatia s extinsa la V* prin s(A.) = rAj, stxy) = s(x)s(y), x, Y E V*, iar apoi la limbaje, se numeste substitutie.

Definitia 1.9 [SubstttupafinitCi. Homomorfismul] In conditiile definitiei 1.8, a) daca s(a) este 0 multime finita, pentru orice a E V, atunci s se numeste substitutie finita. b) daca sta) are exact un element pentru fiecare a din V, atunci s este un homomorfism si scriem s(a) = x 'in loc de s(a) = {x}, c) daca s(a) nu contine cuvantul vid, pentru orice a din V, atunci s este substitutie klibera, sau homomorfism kliber (cand este cazul). Daca h : V* ~ U* este un homomorfism, atunci aplicatia g : U* ~ V*, definita prin g(y) = (x E V* I h(x) = y}, pentru oricare y E U*, este homomorfism invers pentru h. Propozitia 1.1 [Lema lui Levi pentru siruri] Fie E un alfabet si x, y, u, V E E*. Daca zy = uv atunci a) Ixl > lui::::::> exista W E E* astfeI incat x = uw si v b) !xi=lul::::::>x=u~iy=v; c) Ixi < Iv! ::::::>exista W E E* astfel incat u = xw ~iy

wy;

= WV.

Propozitia 1.2 [P este multime numarabilal3] Daca E este un alfabet, atunci E* este rnultime numarabila. Demonstratie. Presupunem card(E) ~ n ~i E "" {Xl, X2, ... , x,,}. Construim functia bijectivaj pentru domeniul P si codomeniul N (multimea numerelor naturale). Fie WE E*, atuncijrJ poate fi definita astfel:

13

Multimea limbajelor peste L nu este nurnarabila deoarece are cardinaluI2card(N). 12

Definitia 1.10 [Mul,timi inchise la operafiiJ Fie U 0 multime univers si functiaj": U ---+ U. 0 multime A ~ U este inchisa fata de I, sau in raport cu f, daca si numai daca pentru oricare x E A rezultlf(x) E A. Un limbaj L este inchis la operatia Pre/ dad Pre/ (L) = L. In mod evident Pre/(PreJ(L» = Prej(L). Propozitia 1.3 [lnchiderea unei multimi B in raport eu 0 operatie J - cea mat mica multime inchisa fa operatia J:ji care contine multimea B]. Fie multimea univers U, functia j": U ---+ U si B ~ U . Construim, In mod inductiv, sirul de multimi: Ao= B; Ak+l= AkU {f(x) I x E Ak}, kEN ~i A = UAk . Atunci: a) A este inchisa fata de 1; b) Daca multimea C este astfel incat B c C ~ U ~i este 'inchisa fata de atunei A~ C.

Demonstratie. Fie x EA. Atunci exista kEN astfel incat x E Ak. Prin unnarej(x) E Ak+1 C A. Fie multimea C astfel incat Be C ~ U ~i C inchisa fata def Evident Ao c C. Presupunem, prin inductie ca Ak c C. Fie y E Ak+1 Cum AHI = Ak u{j{x) I x E Ad, atunci fie y E Ak (deci si lui C), fie y = j(x) cu X E Ak ~ C. Din inchiderea lui C in raport cu/, rezulta y E C. Prin urmare

U Ak

~ C.

kEN

Exemplul1.3 [Defintrea inductiva'" a limbajelor] a) Fie L = {a, b}. Definim, in mod recursiv, limbajul L s-; ~* cu ajutorul urmatoarelor reguli: 1) 2 EL; 2) Daca x E L atunci axb E L; 3) Orice cuvant din L se obtine prin apliearea regulilor anterioare de un numar finit de ori. b) Limbajul expresiilor eu operanzi (numere sau variabile), paranteze si operatorii de adunare si inmultire este generat prin urmatoarele doua reguli: 1) Orice numar si orice variabila este expresie; 2) Daca E si F sunt expresii, atunci E+F, E*F ~i (E) sunt expresii.

Uneori se utilizeaza exprimarea "definire inductivd pentru a descrie obiecte construite in mod recursiv. Trebuie observat ca definitia inductiva este diferita de definitia circulara deoarece, prin definire induct iva se specifica si cazurile de baza, adica acelea care nu se definesc prin autoreferire. in plus, trebuie observat ca este pusa in evidenta 0 anumita structura a cuvintelor. Elementul structural este ~i mai important in cazul structuriIor de date recursive (liste, arbori, etc.), caz in care ne vom referi la inductie structurale.
14

13

1.3 Multimi regulate ~i expresii regulate


Definitia 1.11 [Multimi regulate15] Fie L un alfabet. Familia multimilor regulate (eng. Regular sets) peste L este definita inductiv astfel: (1) (VL) «L ~ L* si card L < 00) :::::> L este multime regulata peste L). Se indud aiei multimea vida si multimca fermata doar eu sirul nul A. (2) Daca A si B sunt multimi regulate peste L atunei Au B (reuniunea) ~i AB (produsul) sunt multimi regulate peste L. (3) Daca A este multime regulata peste L atunci A* este mulpme regulata peste L. (4) Singurele multimi regulate peste L sunt cele obtinute prin aplicarea regulilor (I), (2) si (3). Observatia 1.6 IFamilie inchisa la operatiile: reuniune, produs !ii *] Familia multimilor regulate peste L este cea mai mica clasa de multimi care contine toate multimile finite de cuvinte peste L si este inchisa la reuniune, produs

si stelare.

Definitia 1.12 [Mulfimea expresiilor regulate] Fie L un alfabet. Multimea expresiilor regulate peste L este (prin definire inductiva) construita astfel: a) 0 este 0 expresie regulata; b) A este 0 expresie regulata; c) a este 0 expresie regulata pentru oricare a E L; d) daca r si s sunt expresii regulate atunei (r + s), (rs) si (r*) sunt expresii regulate; e) singurele expresii regulate sunt eele obtinute prin regulile a), b), e) si d). Definitia 1.13 [Limbajul unei expresii regulate numit ~i limbaj regulat] Fie r 0 expresie regulata peste alfabetul L. Limbajul Lir), desemnat de expresia r, cste obtinut astfel:
(1) (2) (3) (4) (5) (6) L(0) ~ 0;

L(A)={A},
L(a)
=

{a};

L(r + s)=L(r) u I,(~); L(r;.,)=L(r)L(s); L(r*) =(L(r))*.

In multe lucrari de specialitate, in loc de r+s se utilizeaza notatia rls, semnul ] fiind numit operator de alternanta. De exemplu, expresia r ~ 011121314151617 deserie multimea cifrelor octale. , LimbajuI constanteIe octale, descris relativ la limbajul de programare C, este modelat prin: O( 1121314151617)(011121314151617) '.
15 Din respect pentru limba romana trebuie acceptata constructia rnultime (respectiv expresie) regulata si nu cea de multime (respectiv expresie) regulara, asa cum incearca sa impuna noii interpreti ai literaturii de specialitate. 14

Observatia 1.7
a)

Daca presupunem ca ordinea operatiilor (pe baza prioritatii de aplicare) este *, ., + (corespunzatoare stelarii, produsului si reuniunii) atunei se poate renunta la paranteze. b) Folosind definitia expresiilor regulate, rezulta ca 0 multime este reguiata peste L. daca si numai daca coincide cu limbajul unei expresii regulate peste L.. c) Pentru 0 multime regulata pot exista mai multe exprcsii regulate echivalente. Doua expresii regulate r, si r: sunt echivalente (scriem rl r2) daca ~i numai daca L(rl) = L(r~.

,
',\'

,i

r
"

, :

Exemplul1.4 a) L(0*1*2*) = (Oi1ji' i.], k 20). b) Expresiile btab) * si (bo)*b sunt echivalente. c) L(bo*) este muljimea cuvintclor, peste {a, b}, care inccp cu b §i dupa care urmcaza 0, 1,2, ... etc. simboluri 0, adidiL(bo*) ~ {bd' n 2 OJ. d) L(o*ba*ba*) este multimea cuvintelor, peste {a, b}, care con tin simbolul b exact de doua ori. e) L((a+b)*) reprezinta multimea tuturor cuvintelor peste aIfabetul {a, b}. f) L((a+b)*(oa+bb)(a+b)*) este muljimea tuturor cuvintelor, peste {a, b}, continand subsirurile aa sau bb .
I I

Exemplul1.5 Urrnatoarele limbaje sunt multimi regulate: Ll={an In 21}, Lz = {(ablel n 20}; L3 = {a.b}*, etc.

Propozitia 1.4 [IdentitiiJi cu expresii regulate]


Fie r, s ~i t expresii regulate peste L.. Atunei: a) r + s ~S + r, r + 0 ~0 + r, r + r <r, (r + s} + t r + (s + t); b) r 2 - .:ir - r, r0 - 0r - 0, (rs)t - rtst); in general, eomutativitatea produsului nu are loc. . c) r(s + t) rs + rt, (s -".t)r <sr + tr.r" -r*r* -(r*)* -(2+r)*, 0* -2*-c =

d) e) f) g)

2;r*-2+r+I-t-/+ ... +!'I·!+lr*,pentruk20. (r+s)* =(r" +05*)* -(r*s*)* ~(r*!;)*r* -r*(5r*)*. Expresiile (r+o5)* ~i r*+ s nu sunt, in general, echivalente. r*r - rr*, r(sr) (rs) *r; (r*s) * - 2 + (r + 05) s, (rs*)* - 2 -r- r(r -l- 05) *; * Daca 2 ~ LM atunei ((r = sr -t- t) ¢?r--s*t) si ((r =rs + t) ¢?r - ts*).

*-

+ sf + t) - ... _l+lr + (it + l·lt + ... + st + t), pentru k 20. Aratam ca r ~.s*t prin dubla incluziune. Fie x E L(r) de lungime k : = IxI- Deoarece r= sl:+l r + (.h + i-It + ... + sf + t) ~i A ~ L(.s) rezulta ca x ~ sk+lr (este dar ca L(/+1) eon!ine euvinte eu eel putin k -t- 1 simboluri). Prin urmare x E L(/t + i-It -1- ... + st -+ t) c: L(s*~. Reciprofl fie x E L(s*t), deci exista i ~ 0 ~astfel incat x E Lts't). Dar, identitatea r»: s' r + (s't + 05,·1 + ... + sf + t) arata ca L(r) J L(s't). Deci x E L(r). t Partea a doua a afirmatiei se dernonstreaza similar.
15

Demonstratie. Folosind unele dintre identitatile aj-f), demonstram afirmatia g). Din r -s*t rezulta r - (A. + ss*)t - At + ss*t - t + sr <sr + t. Presupunem ca 2 ~ L(s) ~l ca r = sr + t. Obtinem, sueeesiv, r =sr + t -s(sr -i- t) +t -ir + (st + t) -!/r + (s't

1. 4 Exercitii
1. Aratati ea limbajul definit prin exemplul 1.3 este L 2. Demonstrati propozitia 1.1. 3. Arata]! di functia definita in eadrul propozitiei 1.2 este injectiva ~i surjectiva),
0 =

{a"b"

i n ~ O}.

bijectie (aplicatia este

4. Scrieti expresiile regulate asoeiate limbajelor descrise in exemplul 1.5. 5. Demonstrati afirmatiile a) ~ f) din cadrul propozitiei 1.4.

6. Fie :Eun alfabet nevid. Atunei card(:E*) < codaca si numai daca L = {A}. 7. Fie L un alfabet si L un limbaj peste :E.Arata]! ca A
E

L + daca si numai daca A

L.

8. Fie card(L) := n si k ~ O. Sa se determine numarul cuvintelor de lungime k formate eu simboluri din L.

9. [Grigora~ (1984)1 Fie L un alfabet total ordonat"'. Ordinea de pe :Einduce pe :E* ordinea lexicografica'" L. Sa se arate ca, relativ la ordinea L, produsul de cuvinte nu este monoton la dreapta. Mai precis: exista u, v si W, cuvinte peste L, astfel incat (u, v) E L, dar (uw, vw) i5 L.
10. [Grigora~ (1984)] Relativ la structura (:E, L), daca x, y, z sunt cuvinte peste L astfel incaty L x L yz, atunei exista W E L* astfel incat x = yw cu w L z.
I ,

1,1' ~ .

ab E L ~i ba E L; Daca WE L atunei awbe L si bwae L; Daca u E L ~i vEL atunci uv E L; Orice cuvant din L se obtine prin aplicarea regulilor 1), 2) ~i 3) de un numar finit de ori. Sa se arate ca L = { w I w E :E.~{A}, in w simbolurile a ~i b apar de acelasi numar de ori} .

11. Fie 1) 2) 3) 4)

L =: {a, b} si L ~ L·, limbajul definit recursiv astfel:

16[Relafie de ordine] 0 relatie binara :S: pe 0 multime X se numeste cvasiordine sau daca este reflexiva (x s: x; oricare x E X) ~i tranzitiva (x s: y ~iy s z implica x s: Z, orieare ar fi x, y ~i z din multimea X.) Daca, in plus, relatia este antisirnetrica (pentru orieare x si y din X, din x s y ~i y s x rezulta x = y) atunei se spune ca :S: este 0 ordine partialii si (X, :S:) este 0 multime partial ordonata. Daca pentru orieare doua elemente x ~iy din X rezulta ea x s: y sau V s: x atunci (X. :S:) este 0 multime total ordonata. 1~ [Ordinea lexicograjicaj Fie L+ multimea cuvintelor nevide peste alfabetul ordonat L. Definim relatia binara <, numita ordine lexicografica, astfel: u < v daca si numai daca: u = UjU2 ... Um• V = VI, V2 .. · Vn, u, < VJ san exista k (J s k s min (m,n)) astfel ineat u, = v" i =1, 2, ... , k, iar Uk+l < Vk+l (ordinea intre literele din L.)
preordine

16

12. [Hopcroft s.a (2001)] Fie a si b simboluri ale unui alfabct. Descrieti, in cuvinte, limbajele descrise prin urmatoarele expresii regulate: a) (b /*A)(aa*b)"a* • b) (ab)aaa(a+b) c) (a + ba)*b* 13. Fie u si v simbpluri ale unui ~lfabet. Sunt adevarate egalim!ile? a) (uv + u) u:= u(vu + ul b) v(uv + v)*u := uz/v(uu v)* c) (u+v)*=u·+v·

13. Sa se simplifice expresia regulata (b +aa *b) + (b +aa *bJ( 'a+ba *b) *(a+ ba *bj.
14. ilncntaerea reflexiva / stmettica / tranzitiva a unei relatii binare R] Fie X multime nevida ~iR 0 relatie binara" pe X (R <:;;; XxX). Atunci: a) inchiderea reflextva a relatiei R este hrefl(R) = inf{H I H 2 R si H ( <:;;; XxX) este relatie reflexiva}. b) inchiderea simetricd a relatiei R este h'im(R) = inf{H \ H 2 R si H (<:;;; XxX) este relatie simetrica} e) tnchiderea tranzitiva a relatiei R (notata si R+) este htranz{R) inf{H \ H 2 R ~i H ( <:;;; XxX) este relatie tranzitiva}. = Acltap ca: 1) hsim(R):=R u R\unde
2)
0

RT := {(x, yj

I (y, x)

R} este transpusa relatiei R.

htran>(R):=sUPi;>lR'. 3) (R+r= (Rff.

15. [Manna(1974)J Fie L un alfabet, iar r si s expresii regulate peste L. Arata]! ca: a) r* ~ r*r* ~ (r*)* ~ (A + r)* ~ A + rr*; b) (r + s)* ~ (r* + s*)* ~ (r*s*) (r*s)*r*~ r*(sr*)* c) r*r - rr* d) (r*s) * ~ ..1,+ (r + s)*s.

*~

16. [Manna(1974)] Fie f(r] , rs. ... , r.J 0 expresie regulata peste L in care apar ri. rz. ....r, ea expresii regulate peste L si operatiile '*', '.' ~i '+'. Atunei: a) f(r[. r2, ... , r,) + (r, + r2 +-l- r,J* = (r, -t- r: + + r,J*; b) (r, + rz + ... +- r; +Itr» rz , r.J)* = (r, + rz ++- r,J*.

17. Fie R"" {(a. c), (b. c), (c, c), (c, d), (d, e), (e. a)}. Sa se determine R+.
18. Sa se arate ca daca A este 0 multime finita si multimea Beste definita prin regulile: a) B;2 A; b) Dace x, Y E B, atunci xy E B; e) B nu confine aile elemente decaf cele generate prin regulile a) ~i b), atunci B = A+.
1&

Dad R si S sunt relatii binare pe multimea X, urmatoarele operatii sunt utile pentru tmetegerea materialului din eapitolele care urmeaza: a) [Reuniunea (resp. Intersecfia)} R v (resp. n) S

{(x,y)

I (x, y)
E

R sau (resp. si)

b)

(x, y)

[Produsull R
0

S}.

S=
0 .,.

{(x, z)
0

I existii y

EX (x,

y)

R si (y, z)

S}. Notam prin Rk 17

produsul R

R (k factori).

19. Construiti expresii regulate care caracterizeaza: a) multimea cuvintelor cu un numar par de 0 si un numar impar de I; b) multimea cuvintelor binare care nu admit ca subsir cuvantul 101; c) multimea cuvintclor binare care contin eel putin doua zerouri consecutive; d) multi mea cuvintelor peste un alfabet finit care au lungimea divizibila eu trei. 20. [Ecua,tii ell expresit regulate] Solutia gcnerala ~ ecuatiei de forma" X = aX + b, unde a, b si X sunt expresii regulate este X = a (b+w), unde w este 0 expresie regulata oareeare. Solutia minimala este X = a $b. Sa se rezolve urmatoarele sisterne de ecuatii: a) X = aX+bY+c; Y = dX + eY+f b) X = OY+IX+A; Y=OZ+IY; Z =OX+IZ 21. Sa se simplifice expresiile regulate: a) it -t- b*(abb)*[b*(abb)*J*; b) (a -i- b + aa)*. 22. Implementati algoritmullui Roy (1969) - Warshall (1962) care pentru 0 relatie binara R, pc 0 multime eu n elemente, determine R+ folosind 0(n3) operatii II (sau logic in C). Pentm rezolvare se poate vedea Albeanu (2000), pag. 131. 23. Fie u si v cuvinte peste L. Sa se arate ca Revers(uv) = Revers(v)Revers(n). 24. Sa se arate ca pentru orieare dona limbajc A si B are lac egalitatea (A v B)* =A*(BA*)* si ca A+ = A*A = AA*. 25. Fie a ~i b expresii regulate. Sa se dcmonstreze urmatoarele identitati: a) a*(a+b)* = (a+ba*)* b) (ba)"(a*b*+a*) = (ba*b)a'b*

19 Acest rezultat

estc

CUllOSCUt

sub numele de "lema lui Arden".

18

2. Mecanisme generative fundamentale


2.1 Sisteme de rescriere
Definitia 2.1 [Sistem de rescriere] Fie V un alfabet si P c V* x V* 0 multime finita de pereehi numite reguli de rescriere. Ansamblul SR = (V, P) se numeste sistem de rescriere'". Definitia 2.2 [Generare (derivare) directd, lungimea unei derivari] Fie SR = (V, P), iar a ~i pcuvinte peste V. Atunei: a) a genereaza direct p (si se noteaza a ---* {J) daca si numai daca exista sirurile u, v, x si y astfel incat 1l E Pre}{a) n Prej(j3) , v E Suj(a) n Sl~t(j3), a = UXV,P = uyv, iar (x, y) E P .• b) a genereaza21 p (si se noteaza a ~ {J) daca ~i numai daca exista cuvintele peste V, ao = a, a., a], ... , ak.I, ak = p, k ;?O, iar at genereaza direct ai+I, 0 Sf <k-I, Se spune ca sirul a(), a.; a2, ... , ak.], ak formeaza 0 derivare pentru p pomind de la sirul a. Numarul k se numeste /ungimea dertvarii. Exemplul2.1 Fie V = {S, A, B, C",a, *} ~i P = { (S, BAB), (BA, BC), (CA, AAC),(CB, AAB), (A, a), (B, *)}. In cadrul sistemului de reseriere (V, P) sunt posibile generari de cuvinte precum: a)BA2t b) BA2t
c) BA2k

B~ B~ B~

BA2k'l 2k

B; *; *;

*a

*a
*a2"*.

2t.l

d)S ~

Din punet de vedere istorie, primele structuri generative au fost gramaticile categoriale (C-gramaticile). Acestea au fost inventate, eonfonn Hausser (2001), de catre logicienii polonezi Lesniewski (1929) si Ajdukiewicz (1935) si au fost aplicate, pcntru prima data, asupra limbajului natural de catre Bar-Hillel in 1935. Formal, 0 C-gramatica este ansamblul (W, C, LX, R, EC), unde: W este 0 multime finita de simboluri; C este 0 multime de categorii definita inductiv astfel: a) u, v E C; b) Daca X. Y E C atunci ("\iY) si (XIY) E C; c) C /111 contine alte elemente dedit cele obunute prin regulile a ~i b; LX c (W x C) este 0 multime finita, R este 0 multime de scheme de reguli de forma: (a, (YIX) 0 (~, (Y» = (a~, (X)); (~, (Y» 0 (a, (Y\X)) = (~a, (X», iar EC c C este multirnea expresiilor complete. Pentru limbajul din exemplul1.3, se defineste LX = {(a, (ulv), (b, (uj), (a, (v/(u/v»} si EC = {(v)}. 21 Prin ~ se noteaza tnchiderea reflexive si tranzitivd a relatiei binare ~.
2()

19

Definitia 2.3 [lvletodii generativcf2] Fie V 0 multime de simboluri, I: c siruri peste V, numite axiome . Structura pentru limbajul L, peste E, daca Mg(L) = sistem de rescriere, iar L = {w E L* I exista

E V un alfabet si A c V* 0 multime de MiL) se numeste metoda generative (SR, A, I:), unde SR = (V, P) este un a E A astfel incat a genereaza w}.

2.2. Gramatici formate


Definitia 2.4 [Gramatica formala23] Ansamblul G = (0., I:, S, P) se numeste gramatica formala daca 0. este 0 multime nevida si finita de simboluri, numite neterminale, I: este 0 multime nevida si finita de simboluri, numite terminale, astfel indit 0. n L = 0, S este un neterminal cu rol de axioma, iar Peste 0 muljime de perechr" (p, q), notate si sub forma p :: = q, unde p E (nUL) * O(o.uI:) * §i q E (nUL) *. Relatiile ~ si ~ sunt valabile si pentru cuvintele peste 0. U L. Orice cuvant peste 0. U L care poate fi generat din S, se numeste forma propozitionald in gramatica G. Fie FP(G) multirnea fonnelor propozitionale ale lui G. Limbajul generat de gramatiea G este L(G) = {w I w E I:*, S~w}, adica L(G) = FP(G) n I:*. Notatie 'Daca exista mai multe reguli cu acelasi cuvant in partea stanga: (p, ql), (p, qV, ... , (p, q"J, atunci convenim sa notam aceasta submultime de reguli (sau preguli) sub forma: p ::= q] I q2 I ... I ql'l)' De asemenea, notam prin V multimea tuturor simbolurilor gramaticii G, adica V = 0. U I:. Observatia 2.1 An~amblul SR = (0. U I:, P) este un sistem de rescriere pentru limbajul L(G) pomind de la sirul S. Metoda de gene rare pentru L(G) poate fi specificata prin structura (SR, {S}, I:). Definitia 2.5 [Gramatici echivalentei Fie G, = (U, I:, Sr, P,), i = 1, 2. Spuncm cit G1 §i G2 sunt eehivalente daca L(G1) = L(G2). Exemplul 2.2 [dbk] o gramatica eare genereaza limbajul definit in exemplul 1.3 este G = ({S1, {a, b}, S, {(Sf aSb), (S, ab)}. Se dcmonstreaza,kprin inductie, ca FP(G) = {d'Sb" k c I} U {clb ,k ell. Prill unnare L(G) = {clb Ike 1}.
Mecanismele generative joaca un rol important nu numai din punet de vedere teoretic, dar mai ales din punet de vedere al aplicatiilor acestora in diverse domenii: biologie, economie, pragramarea calculatoarelor, etc. 23 Al doilea formalism elementar al gramaticilor generative a fost publicat in 1936 de catre logicianul american E. Post. Este yorba de sistemul de rescriere, introdus prin definitia 2.1. Sistemele de rescriere au fost aplicate in studiul limbajului natural, pentru prima data, de catre N. Chomsky in 1956, fonnalizate precum in definitia 2.4, dar numite gramatici PS (eng. phrase structure grammars). 24 0 pereche (p, q) se numeste regula de rescriere sau productie; p reprezinta membrul stang, iar q este membrul drept al productiei (P, q). 20
22

Exemplul 2.3 [Patrate] Fie 0. = {S, A, B, X}, L={a, %} si P = {S ::= %% I %B% I %AABB%, %A ::=%XA, XA ::=AX,XB ::=AABX, X% ::=B%, A ::=a, B ::=a}. Gramatica G
=

(0., ~, S, P) genereaza limbajul L

{% a 11~ % [n

z O}.

2.3. Clase de gramatici

o gramatica G = (0., ~, S, P) este de tip i, 0 .:::i .:::3, daca sunt verifieate restrictiile (i) asupra regu1ilor din P:
(0)
(1)

Definitia 2.6 [Ierarhia lui N Chomsky]

(2)

(3)

Regulile suntde x ::= y, x En, y E Eventuale A-reguli sau redenumiri se pot elimina Regu1ile sunt de forma x::= Vt.'Y sau x ::= w, unde x, yEn, W E ~ •. Eventualele . ·26 .. se rmma sunt forma x ::= yw sau x :;= w, unde x, YEn, W E ~'. Eventualelc redenumiri se elimina
0

Liniare la stanga (eng. Lefllinear)

Un limbaj L este de tipul" i daca exista L=L(G).

gramatica G de tipul i astfcl incat

Fie Li familia limbajelor de tipul i (i = 0, 1, 2, 3). Se observa imediat ca La ::J ::J L3. De asemenea este adevarat ca L1 ::J L2, dar justificarea nu este imediata'".
Ll ~i Lz

Observatia 2.2

25 0 gramatica este monotona daca regulile sale sunt de forma p ::= q, unde Ipl :;; lq]. Sc poate demonstra (vezi teorema 7.9) egalitatea dintre clasa limbajelor generate de gramatici dependente de context (care nu contin cuvantul vid) si clasa limbajelor generate de gramatici monotone. 26 A se vedea propozitia 2.3. 27 in general, se cauta i maximal astfel incat exista G de tipul i care satisface L = L(G). De exemplu, gramatica G = ({S, A}, {a, b, c}, S, {S ::= aAb, aA ::= aaAb I c}), eu reguli de tip 1, genereaza limbajul L = {a"eb" I n 2 I} care esle de tip 2, deoareee L poate fi generat ell ~ramatiea de tip 2, G'= ({S, X}. {a, b, c}, S, {S ::= Xb, X ::= aXb Ie}). ~8 Se va demonstra, pe parcurs, si faptul cii incluziunea L, ::J Li+ 1, i = 0, 1, 2 este stricta. 21

Propozitia 2.1 [Principiu! derivarii independentei Pentru orice gramatica de tip 2, G = (.0., L, S, P), daca AB ~ w, atunci exista WI, W2 E V* astfel incat W = W1W2 ~i A ~ WI, B~ wa (V =.0. u :E). Demonstratie. Fie n lungimea derivarii AB ~ w. Aplicam metoda inductiei dupa n, Pentru n = 0 (AB ~ AB), luam WI = A si W2 = B, iar afirmatia este evidenta. Sa prcsupunem ca propozitia este adevarata pentru orice derivare de lungime n. Fie AB ~ w g derivare de lungime n + 1. Punem in evidenta ultimul pas al derivarii: AB ~ a --t w. Fie C ::= P ultima productie aplicata. Din ipoteza de inductie rezulta: a = ala2, A ~ aI, B ~ a2. Neterminalul C se afla fie in ai, fie in az. Sa presupunem di C se afla in aI, adica al = y1CY2. Prin urmare AB ~ 'Y1CY2a2 --t 'YIP'Y2a2 = w. Luam A ~ y1CY2 --t 'YIP'YZ = al si B ~ a2, In general al si a2 nu sunt determinate in mod unic, Propozitia 2.2 [Rescriereafinala prin terminalei Pentru oriee gramatica de tip 2, G = (.0., L, S, P), exista 0 gramatica echivalenta G' = (.0.', L, S, P'), de tip 2, in care toate productiile lui P' care contin terminale sunt de forma A ::= a, a E:E. Demonstratie. Pentru fiecare simbol terminal a E :E, se introduce un neterminal nou X; Se considera: .0.' = .0. u {X, I a E L}, iar P' se obtine din P inlocuind toate terminalele a cu neterminalul Xa si adaugand, in final, productiile X. ::= a, a E :E. Este evident ca se pastreaza tipul gramaticii si ca L(G') = L(G). Propozitia 2.3 [Simplijjcarea membrului drept pentru gramatici liniare la dreapta] Orice gramatica liniara la dreapta este echivalenta cu 0 gramatica de acelasi tip, dar cu reguli de forma: A ::= aB sau A ::= a, unde A, BE .0., iar a E L U {A}. Demonstratie. Fie A ::= wB 0 regula agramaticii initiale, A, B E .0., WE L*. Daca Iwl = 1, aceasta nu sufera nici 0 modificare, fiind in forma ceruta. Presupunem ca Iwl = n > 1. Atunci w = a.a, __ introducem n - 1 simboluri neterminale noi B/, .a-, B2, .'" Bn•1 si inlocuim regula A::= wB cu multimea de reguli {A ::= aIBI, B1 ::= a2B2, __ Bn•2 ::= an.lBn•l, Bn.l ::= a.B}. ., Daca n = 0 (mai spunem ca avem de-a face cu 0 redenumirey atunei parcurgem urmatoarele etape (a se vedea si propozitia 5.3). Initial, se determina multimea" R(B) = {D IDE .0., B ~ D}, Regula A ::= B se inlocuieste cu multimea de reguli {A ::= aC I D ::= o.C E P, D E R(B), a i:- A} U {A ::= a I D ::= a E P,D E R(B)} , , Fie A:= W 0 regula a gramaticii initialc, A E n si \V E L·, Daca n = I\vl s 1, accasta regula ramane neschimbata, altfel se considera n - 1 neterminale noi Cl, C2, __., c,1--/' si daca w = a.a, __ regula considerata se 'inlocuieste cu multimea de .a., reguli {A := a.C), CI ::= aZC2, __ Cn.2 ::= an-ICn.l, Cn.1 ::= an}. Se pareurg toate ., regulile gramatieii initiale si se transforma ca mai sus. Trebuie avut in vedere ca regulile sa fie inregistrate 0 singura data.

.!
i

29 30

Se subintelege utilizarea notatiilor din definitia 2.4. R(B) reprezinta multimea redenumirilor directe sau prin simboluri intennediare

ale

neterminalului B. 22

Exemplul 2.4 Fie gramatica G = ({S, A, B, C, D}, {a, b, c}, S, {S ::= A I abcB, A ::= C I D, B ::=A lab, C ::= S}). Obtinem succesiv: R(S) = {A, C, 0, S}, R(A) = {C, 0, S, A}, R(B) = {A, C, D, S}, R(C) = {S, A, C, D}, R(D) = O. Consideram regula S ::= abcB si simbolurile Xi, X2. Formam multimea SI = {S ::= aXl, X, ::=bX2, X2 ::= eB}. Pentru regula B ::= ab, consideram simbolul X3 ~i multimea de reguli P1 = {B::=aX3, X3 ::= b}, In acest moment, regulile obtinute sunt: S ::= A I aX1; X1 ::= bX2; A ::= C I D; X2 ::= cB; ..~ . X 3··- b . ..~ B ..- A I aX 3,
A

C::=S; Regula S ::= A se transforma in S ::= aX1 (care exista deja), regula A::= C se transforma in A ::= aX1, regula A ::= D se elimina, regula B ::= A se inlocuieste eu B ::= aX1, iar regula C ::= S se 'inlocuie~te cu regula C ::= aXl. Gramatica G' are multimea neterminalelor Q' = {S, B, X1, X2, X3}, aceeasi multime de terminale, simbolul de start S ~i multimea de reguli P' = { S ::= aX}, X, ::= bX2, X2 ::= cB, B ::= aX11 aX3, X3 ::= b}. Se observa ca simbolurile A, C ~i D sunt inutile", Regulile A ::= aX1 si C ::= aX1 pot fi adaugate, dar 'in procesul de generare nu se vor aplica niciodata, Propozitia 2.4 [Simplificarea membrului drept pentru gramatici liniare la stanga] Fie G 0 gramatica liniara la stanga, exista 0 gramatica liniara la stanga G' astfel Indit L(G') = L(G), iar regulile gramaticii G' sunt numai de forma A ::= Ba si A ::= a, unde A, B E 0. si a E L U {A}. Demonstratie. Se procedeaza precum la demonstrarea propozitiei 2.3. Propozitia 2.5 [Puterea de generare a gramattcilar liniare] Fie G 0 gramatica in care productiile sunt de forma A ::= Ba ~i A ::= a. Atunci exista 0 gramatica G' echivalenta cu G pentru care productiile sunt de forma X ::= xy si X ::= x (in mod generic, A, B, X ~iY sunt simboluri neterminale, iar x, y sunt simboluri terminale). Demonstratie. Fie G = (0., L, S, P) gramatica data. Construim G'=(O,', E, S', P'), unde S' este un neterminal nou, considerat ca axioma in gramatica G', 0' = 0 U

31 Eliminarea simbolurilor inutile se va descrie algoritmic in capitolul 5. in efortul de a transfonna 0 gramatica pentru a avea complexitate redusa (vezi sectiunea 2.5), intillnim atat simboluri netenninale care nu produc, prin derivare, cuvinte peste L, dar si simboluri netenninale care nu sunt accesibile pornind de la simbolul de start S. Dupa procesarea gramaticii prin algoritnri pre cum cei prezentati in capito lui 5, gramatica ob\inutli va avea 0

complexitate statica mai scazuta.

23

{S '}, iar P' se obtine din P pnn transfonnarea fiecarei productii, dupa cum urmeaza: 1. A ::=aE P<=>S' ::=aAE P',A*S; 2. S ::== a E P <=> ::= as E P' ~iS' ::= a E P': S' 3. A ::=Ba E P <=> ::= aA E P', A S; B 4. S ::= Ba E P <=> ::= aSE P' si B ::== a E P'. B

Fie wEL(G). Daca lw] = 1, rczulta S ::= WE P, dcci (regula 2) S'::=w E P'. Prin unnare W E L(G'). Daca w = a.a, ... an, n > 1, atunci exista derivarca: S -')AJa" -')- Ala".Jan -')- Ajan.2a".Ja" ... -')- An-I afo3... an.2an·lan-')- a/a2 ... an. Producpile folosite au fost: S ::= Alan; Al ::= A]Un.J; ... , An•2 ::== A".la2 §i A".l ::== al. Deci, in P', sc vor utiliza regulile Al ::== an; A2 ::== an.1A/; ... , An.I ::= alA".2 si S' ::= aIA,,-I. Rezulta ca w E L(G'). Incluziunea inversa se demonstrcaza similar. Observatia 2.3 Propozitiilc anterioare arata echivalenta dintre gramaticile liniare la stanga si celc liniare la dreapta, din punet de vedere al puterii de generare. Nu trebuic crezut ca daca 0 gramatica are pe langa reguli de tipul A ::= a, utat reguli de forma A ::= aB, cat §i reguli de forma C ::= Db, ca va fi echivalenta eu 0 gramatica liniara la stanga (sau la drea~ta). De exemplu, gramatiea cu regulile {S ::== aA I aB; A ::= Sb; B ::= b} genereaza 2 un limbaj de tip 2 §i nu unul de tip 3 asa cum ar parea la prima vedere. Exemplul 2.5 Urmatoarele limbaje sunt de tip 3: LJ = {o"] n c 1}, L2 == 2:+, unde L cste un alfabet finit (a se face Iegatura si eu elementele lexieale ale limbajelor de programare), L3 == {a(ba)" I ncO}. LJ este generat de gramatica G1 avand regulile: P={S ::""as I a}. Fie L == {G}, G2, ... , an}. L2 este generat de 0 gramatica eu reguli1e: P == {S ::== aiS I i == 1,2, ..., n} u {S ::= at I i = 1, 2, ... , n}. Limbajul L3 estc generat de gramatiea eu regulile P = { S := aA I a, A ::== bB, B ::= aA I a}.

2.4 Arbori de derivare, ambiguitatea

§i

recursivitatea gramaticilor

Atat pentru gramatiei independente de context cat si pentru gramatici liniare (la stanga sau la dreapta) modul de obtinere a unei fonnc propozitionale, prin derivare, poate fi reprezentat grafic cu ajutorul structurilor arboreseente. Fie D == (X, A) un digraf3 (graf orientat): daca (x, y) E A atunei x este predecesorul tus y, iar y este succesorullui x. Arborii ordonati sunt digrafuri concxe (oricare dona noduri fiind coneetate direct sau prin noduri intermediare; altemativ, spunem ca oricare dona noduri sunt eoneetate printr-un drum: succesiune de arce cu pastrarea sensului) si rara circuite (nu exista drum de la un varf la el insusi) eu proprietatile:

32

l3

Se demonstreaza usor ca limbajul generat de gramatica de la observatia 2.3 este L "" {a'b" n ~nl este 0 structura D "" (X, A), unde X este 0 multime finita si nevida de varfuri (noduri) si A este 0 multime, po sibil vida, de perechi ordonate (x, y) numite arce (x si y sunt elemente ale multimii X). 24

!igraf

Exista, In D, un unic nod, numit radacina care nu are predceesori si de la care exista un drum la fieeare nod a1 digrafului; b) Orice nod, altul dedit radacina, are exact un predecesor; c) Multimca sucecsorilor oricarui nod este ordonata, Arborii oricntati se deseneaza eu radacina in sus. iar ordinea suecesorilor unui nod este de la stanga la dreapta. Se intelege ca sensularcelor este de sus in jos; astfel nu mai estc nevoie de sageti. Nodurile digrafului D care au descendenti sunt noduri tnterioare, iar celelalte se numesc noduri terminale saufnmze. a) Definitia 2.7 [S-graj] Fie G"" (0, L, S, P) 0 gramatica de tip eel putin 2. Un S-grafeste un digraf D "" (X, A) irnpreuna cu 0 functie de etichetare f: X -t 0 U L U {A.} cu proprietatile: 1) card (X) "" card (0) + card (L). 2) Daca x are descendentii xi, X2, ... , Xn (deci A (x, x.) (x, X2), .'" (x, Xn) sunt arce din A), In aceasta ordine, atunci P contine regula de rescriere f(x) ::"" f(Xl)f(X2) ... f(xn). 3) Daca f(x) "" A., x nu are descendenti (este frunza). Arborele de derivare al unui cuvant in grarnatica G este un S-graf care, in plus, este si arborc si indica succesiunea derivarilor directe efectuate pentru generarea cuvantului, Exernplul2.6 Fie gramatica G "" ({E, T, Flo {(, ), +, *, a}, E, P) unde E este simbolul de start, iar Pare urmatoarele elemente: E ::= E+T I T; T ::= T*F I F, F ::= (E) I a. Arborii de derivare pentru sirurile a+(a*a) si (a+a)*a sunt":
E E

II\
E

I
T T

I
T
F

I
T
)

*
\

F a

I
F

II\
E T F

I
a T F a

I
E

II\

11\
F E T F

I
a

I
F

Ordinea descendentilor unui nod in arborele de derivare induce 0 ordine in multimea frunzelor arbor'elui de derivare. Cuvantul obtinut din etichetele frunzelor
34

Pentru simplitate, au fast trecute direct etichetele varfurilor multimea X.

~i nu elementele din 25

arborelui de derivare, in ordinea indusa, se numeste frontiera arborelui. Frontiera oricarui arbore de derivare este 0 forma propozitionala a gramatieii G, mai mult, frontiera unui H-arbore este un cuvant a peste n u 1: astfel lncat H ~ a.

Propozitia 2.6 Fie G = (n, 1:, S, P) 0 gramatica independenta de context. Oricare ar fi A E n, a E (n u 1:)*, atunci A ~ a daca ~i numai daca exista un A-arbore cu frontiera a.
Demonstratie [prin inductie structuralai. Fie n numarul nodurilor interioare ale unui A-arbore cu frontiera a. Daca n = 1 [structura de baza] atunei, arborele are forma: A

Prin urmare, in G exista productia A ::= X1X2 ...Xk, Deci A ~ XIX2 ... Xk. Sa presupunem ca proprietatea are loc pentru arbori cu eel mult n - 1 noduri interioare si fie un A-arbore eu n noduri interioare ~i frontiera a (n > 1) [ipoteza inductiei structurale}. Descendentii lui A nu pot fi toti frunze. Fie Xj, X2, ... , X, etiehetele acestor descendenti si ai frontiera Xi - arborelui daca Xi E n si ai = Xi daca Xi E 1:. Deoareee orice Xi-arbore are eel mult n-I noduri, atunci Xi ~ ai (evident si pentm Xi E L). Prin urmare, in G exista derivarea A ~ XIX2 ... X, ~aIX2 ...Xk ~ala2X3 ... X, ~ala2 ... ak-IXk ~ala2 ... ak=a. Reeiproc, presupunem ca derivarea A ~ a are lungimea n (in gramatiea G) ~i procedam prin inductie dupa n. Pentru n = 1, rezulta ca A ~ a, iar daca a = XIX2 ... X, atunei putem pune in evidenta A-arborele:

Presupunem ca afirmatia este valabila pentru derivari de lungime eel mult n - J care incep de la un neterminal din G si fie derivarea, in n pasi, A ~ a. Fie A ::= XIX2 ... X, prima productie din derivare. Deei A ~ XIX2 ... X, ~ a. Atunei (conform principiului derivarii independente valabil pentru gramatici de tip 2: propozitia 2.1) a = 0.10.2 ... ak ~i Xi ~ ai (in eel mult n-I pasi). Daca Xi :;t; ai, atunei exista un Xi - arbore eu frontiera ai. Daca Xi = ai atunei Xi - arborcle este format doar din nodul etiehetat eu X.

26

Astfel, A-arborele de frontiera a se obtine prin asezarea Xi-arborilor in ordinea Xl, X2, ... , X, si adaugarea unui nou nod cu eticheta A si descendentii Xi, X2, ... , Xr.

Observatia 2.4
frontiera o:

Fie G~= (0., L, S, P) 0 gramatica independents de context. Atunci U E L(G) , adica S ~ a; daca ~i numai daca exista un arbore de derivare (S-arbore) cu Definitia 2.8 [Derivare extrem stanga/dreaptai Fie G = (0., L, S, P) 0 gramatica independenta de context. Daca intr-o derivare in gramatica G, la fiecare pas este aplicata 0 productie celui mai din stanga 35 (resp. dreapta) neterminal atunci derivarea se numeste extrem stdnga (resp. dreapta).

Observatia 2.5

Fie G = (0., L, S, P) 0 gramatica independenta de context ~i WE L(G), deci exista un arbore de derivare cu frontiera w. a) Pentru orice cuvant we L(G), numarul de derivari extrem stanga pentru W este egal cu numarul de derivari extrem dreapta. b) Evident, se poate pune in evidenta 0 derivare extrem stanga (deci si dreapta) pentru w avand S ca simbol de start. Totusi, pentru un anumit cuvant pot exista mai multe derivari extrem stanga (deci si dreapta) distincte, ceea ce indica 0 ambiguitate in proeesul de generare. Definitia 2.9 [Gramaticii ambiguii] gramatica independents de context G se numeste ambigua daca exista w E L(G) eu eel putin doua derivari extrem stanga (deci si dreapta) distincte. Un limbaj L nu este ambiguu daca poate fi generat de 0 gramatica care nu este ambigua. Daca orice gramatica care genereaza L este ambigua atunci se spune ca L este inerent ambiguu.

Exemplul 2.7 Fie G = ({S}, {a, b}, S, {S ::= SbS I a}) si cuvantul w = (ab)3a. Se observa ca:
35

In une1e publicatii se omite cuvantul "extrem", folosindu-se notiunile de derivare stdnga (resp. dreapta) in aceptiunea definitiei 2.8. 27

S ~ SbS ~ SbSbS ~ abSbS ~ abSbSbS ~ ababSbS ~ abababji, ~ abababa


~1

S ~ SbS ~ SbSbS ~ SbSbSbS ~ abSbSbS ~ ababSbS ~ abababj[, ~ abababa sunt derivari extrem stanga distincte.

Dad numerotam rcgulile de rescriere: 1. S ::= SbS, 2. S ::= a atunci derivarile cuvantului (ab)3a sunt obtinute prin aplicarea secventelor de reguli: 1,1,2,1,2,2,2 (resp. 1,1,1,2,2,2,2). Totusi limbajul {(abta I n 2: I} nu este ambiguu deoarece este generat si de gramatiea liniara la dreapta G} = ({S, X, V}, {a, b}, S, {S ::= Xa, X := aY, Y ::= bX I b}) care nu este ambigua. Ori~e gramatica independenta de context care contine, printre regu1ile sale de rescrierc, productii de una din formele (1) - (4), cu ncterminalul A util in gencrarea de cuvinte peste E, este ambigua: (1) (2) (3) (4) A A A A ::= AA; ::= AyA; ::= aA lAP;
::=

Observatia 2.6

aA I aApA.

Definitia 2.10 [Recurs/vitate] Fie G = (0, E, S, P) 0 gramatica independenta de coqtcxt. Un neterminal ~ E Oeste numit recursiv la stdnga (resp. dreaptai daca A ~ Aa, (resp. A --------7o.A], a E (QuE)*. 0 gramatica este recursive 1a stanga (resp. 1a dreapta) daca multimea simboluri1or netermina1c contine eel putin un simbol recursiv la stanga (resp. la dreapta). Pentru implemcntarea a1goritmilor de analiza sintactica descendcnta este necesar ca gramatica re1ativ la care se face analiza sa fie nerccursiva 1a stanga. Eliminarea recursivitatii la stanga se face prin procesarea fiecarui nctenninal care este simbol rccursiv. Propozitia 2.7 [Eliminarea recurstviuitti fa stanga] Fie G = (0, E, S, P) 0 gramatica independenta de context ~i A E 0 eu proprietatea ca exista 0 productie de forma A ::= Aa. Atunci exista 0 gramatica G' echivalenta cu G care pentru orice A-regula A ::= p avem A Ii. Pref(p).

Demonstratie.

Fie A ::= Aai, i = 1, 2, "., n, toate A-regulile de rescriere ale gramaticii G care au neterminalul A ca prima litera a membrului drept, iar A ::= Pi , i = 1, 2, ... , m, celelalte A-reguli. Consideram gramatica G' = (0 u {B}, E, S, P') unde B Ii. (0 u l:) este un simbol nou, iar P' se obtine din P astfel: P'=(P - {A ::= Aai; 1 ~ i ~ n}) u{A ::= p,B; 1 ~ i s m}}) u{B ::= aiB I ai; 1 ~ i ~ n}. Observam ca noua gramatica nu mai este recursiva la stanga in A, dar este recursiva la dreapta in B. Echivalenta eelor doua gramatiei rezulta imediat.
28

2.5 Comp/exitatea sintactica a gramaticilor Ji Iimbajelor


Uncle limbaje pot fi generate de catre mai multc gramatici distincte. Pentru aplicatii practice trebuie utilizate gramatici cat mai simple. In cele ce urmeaza sc considera complexitatea statica a gramaticilor (marimea ~i structura gramaticilor.) Definitia 2.11 [Masurarea complexitatti sintacttces Fie G 0 clasa de gramatici ~i fie L (G) familia limbajelor generate de gramaticile din clasa G. 0 masura a complexitatii gramaticilor din clasa G este 0 aplicatie 'V : G ~ N. Complexitatea sintactica a limbajelor din familia L (G) este 'V(L) = min { 'V(G) I L = L(G), G E G }, L E L (G) • Definitia 2.12 [Masurile Var, Prod si Simb) Fie G = (0, L, S, P) 0 gramatica inde_Pcendentade context (G E G2). Definim urmatoarele masurt de complexitate statica 6: a) Var: G2 ~ N, Var(G) = 101, b) Prod: G2 ~ N, Prod(G) = WI; c) Simb : G2 ~ N, Simb(G) = Suma {Simb(r) IrE P}, unde Simb(r) = Ix\+2, daca r este regula A ::= x. Definitia 2.13 [Indexullimbajelor independente de context) Fie G = (0, L, S, P) 0 gramatica independenta de context (G E G2) ~i derivarea D: S = Wo ~ WI -+ ... ~ Wk. Fie N(w,) numarul de aparitii ale simbolurilor din n in sirul w.. Indexul derivarii D, in gramatica G, este Index(D, G) = max Ntw.).
bt"k

Fie x E L(G) si D(x) multimea derivarilor lui x din S, in gramatica G. Indexul sirului x in raport eu gramatica G este Index (x, G) = min Index(D, G).
DED(x)

Indexul gramaticii G cste


Index(G)
=

sup {Index(x,
{a"b c"
n

G), x

L(G)}.

Exemplul2.8 [Generarea limbajului

In

>O}

Descriem, in continuare 7 gramatici echivalente, dar cu complexitate variabila. Fiecare dintre acestea genereaza limbajul {anb"c" i n >O}. Nr.
crt. Q Var

Axioma A A S S

Regulile A::=aABclabc;_ B ::= Bc~ bB ::=bb A::=aABC I abC; CB ::= BC; bB ::= bb' C ::=c S::=abc I A; A ::= aABc I abX; cB ::= Be: XB ::=bX; Xc ::= cc S::=Abc; A ::= AaX I a: Xa ::= aX; Xb ::= bhY; Yb ::""hY: Yc ::=cc

Prod

1 2 3 4

A,B A, B, C S,A, BX S,A, XY

2 3 4
4

4 5

7 7

36 Masurile Var si Prod pot fi definite pentru toate clasele de gramatici, masura Simb este definita numai pentru gramatici de tipul 2 29

5
6
!
!

S,A, B,X, Y A,B, C,E,F A,B, C,O, X_,Y

5 5
6

S
A A

S::=abc I Ac; A ::=aAB I abX; XB ::= bXY; YB ::=BY; Yc ::=cc; Xc ::=c A: :=aAB I abC; CB ::= EB; EB ::= EF; EF ::= BF· BF::=BC: C ::=c; bB ::=bbc A::=BX; B::=aBc~ Bc ::=CcY; aC ::= abO; Dc ::=c0; OYc::=CcY; cC ::= bC ::= bbD' DYX ::= /..

8 8 9

ce.

Masura Simb(G) nupoate


independente de context.

fi evaluata deoarece gramaticile considerate nu sunt

Exempllll2.9 Fie gramatica independenta de context G = (n, L, S, P), unde n = {S, A, B}, L = {a, b} si P = {(S, aB); (S, bA); (A, a); (A, as); (A, bAA); (B, b); (B, bS); (B, aBB)}. Atunci Var(G) = 3, Prod(G) = 8 si Simb(G) = 32. Fie derivarea 01: S ~ aB ~ abS ~ abbA ~ abba. Atunci Index(OI, G) = 1.
Oerivarea O2: S -; bA ~ bbAA ~ bbaSA ~ bbaaBA ~ bbaaaBBA ~ bbaaabba, are indexullndex(02, G) = 3. ... ~

Masurile prezentate pot fi extinse ~i la clase de limbaje. Asupra unei masuri 'V a complexitatii sintactice statice a gramaticilor si limbajelor, dintr-o anumita clasa G, se pun, in mod natural, urmatoarele prob/eme. a) Pentru 0 gramatica G, oarecare, din c1asa G: PI: Se poate detennina 'V(G)? P2: Se poate detennina 'V(L(G»? P3: Se poate decide daca 'V(G) = ,¥(L(G»? P4: Se poate construi 0 gramatica echivalenta G' astfel mcat '¥(G') = b) P 5: Pentru n arbitrar, dar nenul, se poate decide algoritmic daca \jI(L( G» =n? Evident, PI are raspuns afinnativ, dar P2 ~ P, au raspuns negativ (conform Paun(J 984).) Oiferite aspecte algoritmice privind clasele de gramatici jntroduse precum ~i subc1ase ale acestora vor fi prezentate incepand cu capitolul 5. In capitolul trei vom investiga recunoasterea muljimilor regulate.

'V(L(G»

2.6 Exercitii 1. Sa se arate ca urmatoarele limbaje pot fi generate folosind gramatici liniare la stanga: 311 1 a) LJ ={a + In '?O}; b) L2 = {w E {O, I} * I w considerat ca numar binar este di vizibil cu 3}; c) L3 = {w E {a, 1}*1 numarul de aparitii ale simbolului 0 este divizibil cu 3}.
2. Fie gramatica Cll regulile {S ::= abS I aaA, A ::= B I bA, B ::= q b, C ::= as I aa}. Sa se apJice propozitia 2.3 pentru a obtine 0 gramatica echivalenta, dar mai

I:

simpla.
30

3. Sa se arate

ca limbajele regulate nu sunt ambigue.

4. Sa se aplice propozitia 2.5 pentru gramaticile cu productiile: a) S ::= Sa \ a b) S::o=:Aa\b,A::o=:Sbla. 5. Fie gramatica eu regulile S ::= aA I bS I b, A ::= aB I bA, B ::""as afle limbajul gene rat.

I bB \ a. Sa se

6. Fie L un limbaj si Riisturnat(L) = u {Riisturnat(w) I w E L} (vezi definitia 1.6.) Sa se aplice propozitia 2.5 pentru a arata ca Rastumattl.) este de tip 3 daca ~i numai L este de tip 3. . 7. Fie L un limbaj de tip 3 peste un alfabet fin it :E, a E :E si limbajele'" La == {w I wa E L} si L" = {w law E L}. Sa se arate ca La si La sunt limbaje de tip 3. 8. Fie G 0 gramatica de tip 3. Sa se elaboreze un algoritm care sa eerceteze daca L(G) "" 0. Sa se eodifice algoritmul 'intr·un limbaj de programare, iar programul rezultat sa se utilizeze pentru gramaticile cu regulile: a) S::= aA I bB, A ::= aA, B ::= bA I b; b) S ::= bS I aA, A::"" bS, B ::= aB I bS I a. 9. Fie Li (i = 1, 2, 3) limbaje de tip 3. Sa se utilizeze algoritmul elaborat la exercitiul 8 pentru a arata ca exista un algoritm care decide daca L, ~ L ~L3. 10. Fie gramatiea eu regulile {S ::= BID, B ::= Bee xy}. Sa se obtina limbajul generat de aceasta gramatica,

I x,

C ::= yx, 0 ::= xCyD

11. Sa se arate ca orice limbaj independent de context poate fi generat de 0 gramatica G = (0., :E, S, P) cu productii numai de forma A ::= a I p, unde a E rr.

PE

1:*.

12. Sa se arate ea urmatoarele gramatici sunt ambigue: 1) S: : if c then S else S I if c then S I a; 2) S::= as I Sb \ c.
0:::

13. [Nota,da Backus-Naurt Daca reprezentam netenninalele intre simbolurile < si > si indicam repetarea ( operatia *) prin scriere intre acoladele { si }, iar earacterul optional este descris prin prezenta parantezelor drepte [ si 1, atunci se obtine descrierea sintaxei limbajelor folosind notatia Backus-Naur. Fie descrierea <identificator> ::= <litera> {<litera> I <eifra> I _} Transcrieti specificatia in limbajul gramatieilor generative.
14. Alegeti un limbaj de programare si scrieti in notatie Backus-Naur specificatii pentru:
37

Aceste limbaje se numesc derivata la stanga, respeetiv derivata la dreapta, a limbajului L


E

in raport Cll a

L.

31

a) b) c) d)

numar real fara semn: instmcliunea if; instructiunea while; instrucpunea for.

15. Fie gramatica G = (0, L, S, P) cu 0 = {S}, L = {(, )}, iar Peste 0 multime constituita din S ::= SS I (S) I A. Sa se arate ca limbajul generat este reprezentat de expresiile complet parantezatc care satisfac conditiile: a) pentru oricare w" E Pre/f.w) numarul de paranteze stangi din w' este mai mare sau egal dedit numarul de paranteze drepte ale lui w'; b) numarul de paranteze stangi ale lui w este egal cu numarul de parantcze drepte ale lui w. 16. [$irullui Fibonacci: 0, 1, 1,2,3,5,8, elaboreze
0

... ] Fie (an)n<:O sirul lui Fibonacci. Sa se

gramatica care genereaza limbajul L

{# x

a ,

# [n z O}.

17. Fie 0= {A, B}, L = {;, S, D}, P = {(A, B), (A, D;A), (B, S), (B, B;S)}, GA (0, L, A, P) ~i GB = (0, L, B, P). Sa se determine L(GA) si L(GE).

18. Sa se arate ca limbajul generat de gramatica G = (0, L, S, P) unde 0 = {S, A}, L = {a, b, c}, P = {(S, aAb), (aA, aaAb), (aA, c)} este independent de context. 19. Fie N«w) numarul de aparitii ale sirnbolului x in cuvantul w. Sa se construiasca gramatici independente de context pentru limbajele: a) LJ = {w I \V E {a, b}*, Na(w) = Nb(W)}; b) L2 = {w I WE: {a, b}*, Na(\v) ~ Nb(W)}; c) L3={wlwE: {a, b}*,N.(w)> Nb(W)}; d) L4 = {w I w E: {a, b}*, N.(w) = 2Nb(w)}; e) L4 = {w I W E {a, b, c}*, Ne(w) = N.(w) + Nb(W)}. 20. Fie gramatica G = ({S, A, B}, {a, b}, S, P), unde P = reS, aB), (S, bA), (A, a), (A, .a~), (A, bA~), (B, ~)2 \B, b~}l (B, aB~)}. ~a construiasc~ toate3 ~eri¥arilc posibile ale cuvantului a'b a (ba) b'. Acceasi cennta si pentru cuvantul a b aboa.

32

3. Mecanisme pentru recunoasterea automata a multimilur regulate


3.1 Automatulfinit determinist (AI·V)

Definitia 3.1 [AFD] Un AFD (automat finit determinist) este 0 structura M = (Q, L, 8, qe, F) unde: • Q este 0 multime fin ita ~i nevida de elemente numite start; • L cste un alfabet (numit, de intrare); • &: QXL -7 Q este 0 functie partiala (partial definita), numitafimctie de tranzitie; • qo E Q este starea initiala a automatului M~ • F ~ Q 0 multime nevida, numita multimea starilor finale. Observatia 3.1 [Diagrama de tranzitiei Unui AFD i se poate asocia un digraf (0 diagrama de tranzitie) astfel: • nodurile digrafului sunt starile automatului (eorespund elementelor multimii Q); • daca Seq, a) = p atunci, in digraf, exista un arc de Ia nodul q la nodul p, etichetat eu simbolul a; • digraful nu contine alte noduri ~i alte aree in afara celor specificate mai sus. Pentru a citi usor 0 diagrama de tranzitie, se accepta marcarea, in mod diferit, a starii initiale si a starilor finale (observati diagrama asociata automatului definit in exemplu13.1).

33

Exemplul 3.1 Fie Q "" {qs, qi, q2, q3}, 1: = I}, F = {qe}. Pentru automatul M = (Q, 1:, 8, qo, F), functia 8, definita tabe1ar, este:

to,

001

Definitia 3.2 [ExtindereajUnc,tiei 8] Fie 8A : QxL:* ~ Q definita prin: 8A(q,A) = q, pentru oricare q E Q; 8A(q,a) = 8(q,a), pentru oricare q E Q ~i oricare a E L:; OA(q, wa) = 8(OA(q, w), a), pentru oricare q E Q, a E L:~i w E L:*. Deoarece 8A(q, a) "" o(q, a), pentru orieare a E L:, se poate nota &A CU 0, lara nici 0 confuzie. tot Propozitia 3.1 Cu notatiile de mai sus, o(q, uv) o(o(q,u), v), pentru oricare u, v L:*.

Demonstratie. Se utilizeaza un raponament inductiv dupa lungimea cuvantului v. Daca lvl "" 0 atunci o(q, uv) = o(o(q, u), A) = o(q, u). Presupunem afirmatia adevarata pentru cuvinte v de Iungime eel mult n. Fie v de Iungime n + 1, v = wa, unde a E L: si w E L:*. Obtinem succesiv: o(q, uv) = o(q, uwa) = o(o(q, uw), a) "" o(o(o(q, u), w), a) = o(o(q, u), wa) ""o(o(q, u), v). Exemplul 3.2 Fie automatul din exemplu13.1. Atunci: a) o(qo, 10101100) = o(o(qo, 1),0101100) = o(o(q[, 0), 101100) = 0(O(q3, 1),01100) = O(&(q2,0), 1100) = o(o(qo, 1), 100)= o(o(q[, 1),00) = o(o(qo, 0),0) = 0(O(q2, 0), A)= O(q2, 0) "" qa E F. b) S(qa, 11101001) = O(O(qa,1), 1101001) = o(o(ql, 1), 101001) "" o(o(qo, 1),01001) ""o(o(q], 0), 1001) = O(O(q3,1),001)= O(0(q2, 0),01)= o(o(qo,O), 1) = &(0(q2, 1), A) ""S(q2,1) = q, ~ F. Definitia 3.3 [Limbaj acceptat de sisteme AFD] Fie M ""(Q, L:,0, qo, F) un AFD. Limbajul aceeptat de M, notat L(M), este: L(M) = {u I u EL*, o(qo, u) E F}. Exemplul 3.3 Limbajul aeceptat de automatul prezentat in exemplul 3.1 este constituit din multimea sirurilor peste {O, I} in care apar un numar par de '0' si un numar par de' 1'.

3.2 Automatul finit nedeterminist (AFN)


Definitia 3.4 [AFN] Un AFN (automat finit nedeterministy este 0 structura N = (Q, L:, 8, qo, F), unde qo ~.iF au semnific<I:!iadin_. ~fini!a ~.1, iar 0 : QxL: ~ ~(Q)Q unde P(Q) d reprezinta multimea submultimilor (partilor) lui Q (adesea notata pnn 2 ).

9, ~,

34

Observatia

3.2 [Diagrama de tranzi/ie]


de tranzitie (digraful asociat) se obtine pe baza observatiei 3.1.

Diagrama

Definitia 3.5 [Extinderea functiei de tranzilie]

Fie 0/\ : QxI:* --+ P(Q) astfel: o/\(q, A) 0:: {q}; oA(q, wa) > {p I exista r E o"(q, w), p E o(r,a)}. Daca w 0:: A, obtinem o"(q, a) = o(q, a), oricare a E L. Astfel, se poate nota 0/\ tot eu 0, nici 0 confuzie.

rara

Pen:tru utilizarea sistemclor AFN in recunoasterea limbajelor se extinde nivelul multimii P(Q)xl:*, astfel incat pentru oriee u E I:* au loe relatiile: 0(0, o(P, u) == U8(q,U),
qEP

Observatia

3.3

0 la

u) == O;
orieare P ~ Q, P ic O.

Definitia 3.6 [Limbaj acceptat de sisteme AFN]


Fie Nun Neste: L(N)={wlwE l:*,0(qo,w)nFic0}. sistem AFN precum in definitia 3.4. Limbajul acceptat de sistemul

ON data prin tabel ul:

Exemplul 3.4 Fie N == (Q, I:, ON,qo, F) cu Q = {A, B, C}, I: a A B C


{A,B} {A,C} {B, C}

= {a,

b}, qo = A, F

= {B, C} si

·B
{B}

{e}
{A}

si w

:=0

abababb.

Atunei, obtinem suecesiv: oN(A, abababb) == oN(A, bababb) u ~(B, bababb); oN(A, bababb) 0:: oN(B, ababb) == oN(A, babb) U ON(C, babb); oN(B, bababb) == ON(C, ababb) == oN(B, babb) U ~(C, babb); oN(A, babb) == oN(B, abb) = oN(A, bb) U ~(C, bb); oN(B, babb) = ON(C, abb) = oN(B, bb) U ON(C, bb); ON(C, babb) == oN(A, abb) == oN(A, bb) U oN(B, bb); oN(A, bb) == oN(B, b) == {C}; oN(B, bb) = ON(C, b) = {A}; ON(C, bb) == oN(A, b) = {B}; oN(A,abababb) == {A, B, C}. Observant ca F n oN(A, abababb) ic O. Deci abababb E L(N).

3.3 Puterea de acceptare a sistemelor AFD ~'i AFN


Propozitia 3.2
de un sistem AFD este aceeptat si de un sistem AFN. Orice limbaj acceptat

Demonstratie. Evident. 35

Propozitia 3.3 Fie L un limbaj acceptat de un sistem AFN. Atunei exista un sistem AFD, notat eu M, astfel incat L(M) = L. Demonstratie. Fie N = (Q, ~, 0, qo, F) un sistem AFN astfel incat L(N) Construim un sistem AFD, notat eu M = (QM,~, OM,qo', F') unde: Qlvl = P(Q); qo' = q.; F' = {P I P ~ Q, P n F 7' 0}, mr oM(0, a) = 0; OM(P, a)= U8(q,a); orieare P ~ Q, P 7' 0.

L.

Este sufieient sa aratam ca o]>.,t( w) = o(s, w) pentru orieare SEQ si oricare w E {s}, ~*. Dezvoltam un rationament inductiv. Pentru [w] = 0, afirmatia este evidenta. Presupuncm ca afirmatia este adevarata pcntru orice cuvant de lungirne k. Fie W E ~* astfel incdt Iwl = k -;... , w = aa, [c] = k, a E ~. Prin urmare: 01!({S}, w) = 1 or-irs}' aa) = OM(OM({S},a»,
¢::>

a)=

ou(r,a)=
7'

rE5(sp)

o(r,a)= o({s}, oa).


¢::>

In concluzie, WE L(M) w) E F' ¢::> W E L(M').

o(qo, w) n F

¢::>

o]>.A{qo}'w) n F 7' 0

OM(qo',

Exemplul3.5 Fie automatul finit nedetenninist din exernplul 3.4. Automatul determinist asociat are functia de tranzitie definita prin tabelul:

finit

deoarece: OM(qo', a) = oM({A}, a) = oN(A, a) = {A, B} = q,'; OM(qo', b) = OM({A}, b) = oN(A, b) = {B} = q.': OM(ql" a) = olvJ({B}, a) = oN(B, a) = {A, C} = q,'; OM(ql', b) = OM({B}, b) = oN(B, b) = {C} = q.': OM(Q2',a) = 01>,r({C},a) = ON(C, a) = {B, C} = q-'; O~,,t(q2"b) = OM({C}, b) = ON(C, b) = {A} = qo'; OM(q/, a) = oM({A, B}, a) = oN(A, a) U oN(B, a) = [A, B, C} = q,'; OM(q3', b) = 0}'1( A, B}, b) = oN(A, b) U oN(B, b) = {B, C} = q,', { OM(q4', a) = OM({A, C}, a) = oN(A, a) U ON(C, a) = {A, B, C} = q6'; OM(q4', b) = OM({A, C}, b) = oN(A, b) U ON(C, b) = {A, B} = q,': 0~Aq5', a) == ol>.l{B, C}, a) = oN(B, a) U ON(C, a) == {A, B, C} = qs'; OM(qs', b) = or,i {B, C}, b) = oNCB, b) U ON(C, b) = {A, C} = q,',
36

O~iq6', a) = ot>i{A, B, C},a) '" oN(A,a) U oN(B,a) U oN(C,a)={A, B, C} = qs'; OM(q6',b) = ot>,t( B, C},b) =oN(A,b) U oN(B,b) U oN(C,b)={A, B, C} = qs', {A, iar F' = {ql', q2', q3', q,", qs', q6'}. Observant ca starea q7' este inutila ~i se poatc elimina din

QM.

Teorema 3.1 [Puterea de acceptare a sis/erne/or AbD .. AFN] ji Automatele finite nedctenninistc au aceeasi putcre de acceptare precum automate le finite detenninistc. Sistemele AFN si AFD sunt eehivalente din punet de vedere al clasei limbajelor acceptate

3.4 Automate cu A..-deplasarisau sisteme transitionale


Definitia 3.7 [Sistem tranzitionalt Un automat cu A-deplasari sau sistem tranzitional, este 0 structura AN = (Q, 1:, 0, qo, F) in care Q, 1:, qo si F au semnificatia din definitia 3.4, iar functia de tranzitie este definita astfel: 8 : Qx(1: U {A}) ~ P(Q), adica masina finita permite ~i A-deplasari. Diagrama de tranzi lie are areele etiehetate cu elemente din 1: U {A}. Notatie Daca p

8(q, A) scriem q ~

[A]p. Fie

~[A..],

inchiderea reflexiva si

tranzitiva a relatiei

~[Al Notaro prin A.(q)multimea starilor In care ajunge masina efectuand A-deplasari, pomind din q. Mai precis, A.(q)= {p E Q I q ~[A..]p} ~i extindem notatia pentru multimi de stari, adica A.(P)= UA,(q) , oricarc P ~ Q.
Ohservatia 3.4 Fie AN = (Q, 1:, 0, qo, F) un sistem tranzitional. Funetia 0 poate fi extinsa la
cuvinte peste 1:, prin functia 0" astfel: a) 8"(s, f,_,) A(S), orieare SEQ; = b) Daca a E 1:* si a E 1: atunei 8"(s, «a) = A(P), unde P
a), p
E

0=

{p I exista r E o"(s, 1:, a


E

o(r,a)}.
qo P

c)

8(P, ar=

US(q,a); o"(P, a) = US(q, a) , P ~ Q, a

1:*

d) o"(s, aa)=A(8(8"(q,a),

a), deci este nccesara distinctia lntre 8 si 8".

Definitia 3.8 (Limba) acceptat de un sistem tranzitianali Fie AN = (Q, 1:, 8, qo, F) un sistem tranzilional. Limbajul acceptat de AN este L(AN) = {a I a E 1:*, o"(qo, a) n F *- 0}.

Propozitia 3.4

Fie L un limbaj peste 1: acceptat de un sistem tranzitional, notat cu AN. Atunci exista un AFN, notat cu N, astfel incat L(N) "" L (':"L(AN». Reciproca este,

'in mod banal, adevarata.

Demonstratie. Fie AN = (Q, 1:, 0, qo, F) sistemul tranzitional care accepta limbajul L. Se poate construi sistemul AFN "" (Q, 1:,8', qo, F') astfel: S'(s, a) o"(s, a),
oricare sEQ ~i a E 1:; daca f,_,(qo) F *- 0 atunci F' n arata, prin inductie dupa [o], ca o'(qo, a) = o"(qo, a).

= F u {qo}, altfel

0=

F'

F. Se 37

3.5 Sistemele AFN ~'iexpresiile regulate


Propozitia 3.5 Fie r 0 expresie regulata. Atunci cxista un sistem AFN care recunoaste limbajul L(r). Demonstratie. Prin inductie dupa numarul de operatori ai expresiei r (notat eli n), vom arata ca poate fi construit un sistem tranzitional care sa recunoasca limbajul L(r). Concluzia finala se obtine prin invocarea propozitiei 3.4. Daca n = 0 atunci r este de una din formele: 0, A, a, unde a E L. Limbajele asociate sunt recunoscute de urmatoarele sisteme tranzitionale: • AN, ~ ({qo, 0" q~, eu diagramade tranzitie

9'

AN2

({qo}, 0,02, qo, {qnj), cu diagrama de tranzitie

AN3 =({qo, q.}, {a}, 03, qo, {qJ}),cudiagramadetranzilie

Daca n 2::: 1, atunci presupunem ca afirmatia este adevarata pentru expresii regulate cu eel mult n-I operatori, r fiind de una din formele: r = (r/+r2), r = (rlr2) sau r = tn)", r: si rz avand, in componenta lor, eel mult n-l operatori. Fie AN, (i = 1, 2) sistemul tranzitional atasat expresiei regulate r, (pot fi construite pe baza ipotezei de inductie) cu L(AN,) = L(ri); AN = (Qi, Li, q., Oi, {fj}). Pentru c1aritate, presupunem QI 1\ Q2 = 0. Sistemul tranzitional care recunoaste limbajul L(rl+r2) este: AN = (Ql U Q2U {qo, qr}, LI U L2, 0, qo, {qrI), unde qo si qf sunt dona stari noi, iar functia de tranzitie este definita prin: o(qo, A) = {q], q2}; o(q, a) = Oi(q, a), oricare a E L, U{A} ~iq E Q! - {fi}, i = 1,2; o(fj, A) = {qr}, i = 1,2. Sistcmul tranzitional care recunoaste limbajul L(r1r2) este AN = (Ql U Q2, Ll U ~, 0, q., {f2}), unde functia de tranzitie cste definita prin: o(q, a) = (h(q, a) oricare q E Ql - {fi} ~i a EL1U{A}; o(f], A) = {q2}; o(q, a) = 02(q, a), oricare a E L2 U {A} si q E Q2. De asernenea, sistemul tranzitional care recunoaste limbajul L(rl *) este AN = (QI U {qo, q-}, Ll, 0, qo, {qr}), unde qo si qf sunt dona stari noi, iar functia de tranzitie este definita prin: o(qo, A) = O(fl, A) = {qi, qr}; o(q, a) = Ol(q, a) oricare q E Ql - {fi} si a E LI U {A}. Se arata usor ca sistemele tranzitionale propuse accepta limbajele cerute. Propozitia 3.6 Daca L cste un limbaj acceptat de un sistem AFD atunci L este regulata.
38

multime

Demonstratie. Fie M = (Q, :E, 0, qi, F) un sistem AFD astfel incat L(M) = L si Q = <. < << ~ . .. . . {ql, q2, ... , qn.} Pentru 1 - 1, J. - n. 0 - k - n. notam pnn Rk[ IJ ] mu 1prnea cuvinte Ior care due automatul M din starea qi in starea CJj trecand doar prin stari din multimea {q., qz, ..., qk}, respectiv 0 daca k = O. Aceste multimi pot fi definite recursiv astfel: Cazul I: k = O. Daca i = j atunci ROfi,j] = {a I a Daca i 1= j atunci RO[i,j] = {a I a

E E

:E, O(qi, a)

= CJj}
CJj}.

{A}.

:E, .O(qi, a) =

Cazul II: k> O. Rk[i,j] = Rk-1[i,j] u Rk-1[i,k](Rk-1[k, k])*Rk-1[k,j], Prin inductie, dupa n, se arata ca exista a expresie regulata rn[i,j] corespunzatoare limbajului R'[ij] (adica Rn[ij]=L(r'[ij])). In final, propozitia rezulta din faptul ca L(M)=

URn

[1, j] = L(

L r n[1, jD

Teorema 3.2
Un limbaj este regulat daca si numai daca este recunoscut de un sistem AFN (deci si de catre un sistem AFD). Demonstratie. Evident.

Teorema 3.3
Familia limbajelor regulate este cea mal mica familie de limbaje care contine limbajele finite si este inchisa la reuniune, produs (concatenare) si la operatia * (inchiderea Kleene). Demonstratie. Evident.

3.6 Aspecte algoritmice


In aceasta sectiune vom considera uncle aspecte algoritmice privind constructia de sisteme AFD, AFN ~i sisteme tranzitionale care recunose limbajul descris printr-o expresie regulata. Reamintim ca expresiile regulate sunt constituite din atomi (simboluri din :E, A, 0 si constructii de forma (E) unde E este 0 expresie regulata), factori (atomi sau constructii de forma E* unde E ste 0 expresie regulata), termeni (factori ~i constructii de forma EF, unde E ~i F sunt expresii regulate supuse operatiei de concatenare (produsj) si constructii de forma E + F (alternativ: E I F), unde E si F sunt expresii regulate. Din punet de vedere algoritmie suntem interesati de expresiile regulate neambigue. Expresiile atomice a E :E, A, 0 sunt neambigue. Expresia (E) este neambigua ori de cate ori E este expresie regulata neambigua. Conditia ca E* sa fie neambigua este ea E sa fie expresie regulata neambigua si ca orice cuvant W E L(E*) - {A} sa admita 0 descompunere unica w = U1U2 ...Uk,in subcuvinte u, din L(E), i = 1, 2, ..., k. 0 constructie de forma EF este neambigua daca L(EF) "'"0 sau
39

dad! E si F sunt neambigue si, in plus, oriee cuvant W E L(EF) se descompune, in mod unic, W = uv, cu U E L(E) si v E L(F). Expresiile E+F sunt neambiguc daca E si F sunt neambigue si L(E) n L(F) = 0. Clasa limbajelor reeunoseute de sistemele prezentate anterior coincide cu clasa limbajelor descrise prin expresii regulate ~i contine numai limbaje neambiguc, deoareee un sistem AFD are la baza un mecanism de rccunoasterc neambiguu. Aceasta face ca orice expresie regulata sa fie echivalenta eu 0 expresic regulata neambigua. Dad. E este 0 expresie rcgulata atunci se construieste un sistem tranzitional AN astfel incat L(AN) = L(E). Asociat sistemului AN se construieste sistemul AFN rara Ii-deplasari care recunoaste L(A.N), apoi se construieste sistemul AFD cchivalcnt ~i se determina expresia regulata F recunoscuta de ultimul sistem construit. F este 0 expresie regulata neambigua echivalenta cu E. Algoritmul care urmeaza are la baza regulile care 'apar in dernonstratia propozitiei 3.5, descrierea arborescenta a expresiilor regulate, explorarea arborilor binari si pasii propusi de Rytter (a se vedea Gibbson & Rytter (J 988) si Grigoras (2005». Numarul de stari ale automatului este 2(n-m) unde n cste lungimca expresici regulate E considerata ca intrare (se numara simbolurile alfabetului, operatorii si parantezele), iar m este numarul de paranteze si opcratori de concatenare. Din demonstratia propozitiei 2.5 se observa ca operatorii + si introdue doua stari, iar operatorul de concatenare pastreaza starile existente. De asemenea, pentru fieeare stare se considera atat varianta unci ;t,.deplasari, cat si tranzitia conditionata de prezenta unui simbol din L. Structura de date utilizata in deserierea algoritmului este un ansamblu de trei tablouri unidimensionale (cu p eomponente): primul tablou, denumit SIMBOL, contine simbolurile care conditioneaza tranzitia, al doilea tablou, denumit Q 1, descrie prima stare obtinuta in urma tranzitiei, iar al treilea, denumit Q2 retine a doua stare. Acest ansamblu arata, de fapt, modul de functionare a sistemului tranzitional (functia de tranzitie). Pasii algoritmului sunt: 1. Se construieste arborele asociat exprcsiei regulate. 2. Se exploreaza arborele in preordine [model recursiv: RadacinaStanga-Dreapta] si se eticheteaza nodurile in ordinea vizitarii (cu exceptia nodurilor care desernneaza operatia de concatenare) cu numerc1e 1,2, ..., n-m. 3. Se exploreaza arborele in postordine [model recursiv: StangaDreapta-Radacina] si se asociaza fiecarui nod H 0 perechc de stari (x, y) care reprezinta starea initiala, respcetiv starea finala a automatului corespunzator subarborelui eu radacina H. Regulile de asociere sunt: l. Daca nodul Hare eticheta k (asociata la pasul 2) atunci H.x = Zk-I si Hy = 2k; 11. Daca nodul H descrie 0 operatic de concatenare ~i consideram ca S si D sunt descendentii sai (Svstangul, respectiv D-dreptul), atunei H.x = S.x si Hy = D.y 4. Se initializeaza cei trei vectori astfel in cat componentele lui SIMBOL devin spatiu, iar toate componcntele tablourilor Q I si Q2 contin constanta O.

40

5.

Se exploreaza arborele construit dinspre frunze spre radacina (in postordine). Fie H un nod curent, iar S si D descendentii sai. Se analizeaza operatia reprezentata de nodul H si sc executa urmatoarele operatii: i. Daca operatia curenta estc +, atunci Ql[H.xl = S.x, Q2[Hx] = D.x, Ql[S.y] = Hy, QI[D.y] = Hy 11. Daca operatia curenta este cea de concatenare, atunci Ql[S.y] = D.x 111. Daca operatia curenta este * (D nu exista in acest caz), atunci Ql[H,X] = Sox, Q2[H,Xl = Hy, Ql[S.y] = S.x, Q2[S.y] = H.y IV. Daca nodul H este frunza ~i se refera la simbolul a atunei SIMBOL[H.x] = 'a', Ql[Ux] = Hf.

Exemplul 3.6 Consideram expresia regulata E = (a+b)*a(a+b)(a+b). Prin aplicarea pasilor 1, 2 ~i 3, descrisi mai sus, obtinern arborelc ale carui informatii sunt descrise in tabelul CA, B si C desemneaza etichetele asociate nodurilor care descriu operatia de concatenare) :

Et.
Op. x

A 1 18

1 2

2 + 3 4

3 a 5 6

4 b 7 8

B 9 18

5 a 9 10

C
11 18

6 +

11
12

7 a 13 14

8 b 15 16

9 + 17 18

10 a 19 20

11 b 21 22

Prin aplicarea pasilor 4 ~i 5 rezulta tabelul care arata functionarea sistemului tranzitional care recunoaste expresia regulata E. Numarul de stari estc 22.
Starea 1
~imbol

P P

34

5
a

§~
b 8

~ fJ
~

10
11 0

11
13

12 13
a

14 12

15
b

16 12

17 19 21

18 19 ~O 121 122

pI
Q2

~
10

~536~
7
2

opp

15

17 14
0

]6

~
18
) )

PP

pO 18 p2

Pentru obpnerea unui sistem AFN care recunoaste E se aplica procedeul descris in demonstratia propozitiei 3.4. Analizorul lexical este 0 componenta importanta a oricarui compilator. A reprezenta un limbaj (deci un sablon de cuvjnte) regulat revine la a da 0 descricre lexical a cu ajutorul unci expresii regulate. In general, 0 expresie regulata E este obtinuta prin operatiile de baza aplicate unor expresii regulate (atomi, factori, termeni). Prin urm are , un cuvant W E L(E) se obtine prin coneatenarea unor cuvinte WI, W2, ... , Wn (w = WIW2 ... w-), CU w, E L(E,), i = 1, 2, ..., n. 0 interpretare a cuvantului W precizeaza atat sub cuvintele cat ~i expresiile componente generatoare ~i este redata printr-o secventa de perechi (wi, k.) unde k, este indicele expresiei regulate generatoare a limbajului din care face parte w.. astfel de pereche sc numeste token sau entitate Iexicala, Un analizor lexical (numit ~i scanner) este un program care pentru fiecare W E L(E) produce, la iesire, interpretarea sa, daca w este corect format, ~i eroare. in caz contrar.

41

3.7 Exercitii
1. Sa se construiasca un sistem AFD care accepta toate euvintcle peste alfabetul {a, b, c} cu proprietatea ca ultimul simbol a mai aparut deja. 2. Sa se construiasca automate finite deterministe care sa recunoasca limbajelc L, = {a3k+l I k 2>. O}, L2 = {a'ba" In, m 2>. 0, n == m (mod 5)}, L3 = {a'bafba" I q == mn (mod 5)}, 3. Sa se construiasca automate expresiile regulate: a) ab+(b+aa)a*b; b) a(b*)+a; c) (a+b)* + ab*; d) (a+b)*a(a+b); e) ba+{a+bb)a*b; f) a*b(c+da*b)*; g) (a+ba)*(b+ab)*; h) (a+b)* a(a+b)(a+b)a(a+b); i) a(a+b)*a+b(a+b)*b; j) (ab+b) *(A.+a+aaa*); k) (ab+b)*a*, finite care sa accepte limbajele descrise de

4. Sa se construiasca sistemul AFN care genereaza acelasi limbaj eu eel specificat prin expresia regulata e = (a+b)*a(a+b) si apoi sa se construiasca sistemul AFD corespunzator. 5. Sa se construiasca" automate finite deterministe asociate sistemelor AFN urmatoare: a) M, = (Ql, {#, %}, 0], A, FJ), unde Ql = {A, B, C, D}, F] = {D}, iar 01 este definita prin tabelul: % # 0] {A} {A,B} A {C} {Cl B 0 {D} C {D} {D} D b) M2 = (Q2, {a, b}, ch, p, F2), unde Q2 = {p, g, r, s}, F2 definita prin tabrel:,=:u:::.:l:_~ ..----,

= {g, s}, iar S: estc

02

c)

M3 = (Q3, {a, b}, 03, p, F3), unde Q3 = {p, q, r, s}, F3 = {p, r}, iar 03 este
definita prin tabelul:

38

Se va aplica propozitia 3.3.

42

6. Sa se construiasca un sistem AFN care accepta toate secventele de eifre zecimale in eare eel putin 0 cifra se repeta. 7. Sa se splice" propozitia 3.6 pentru aflarea limbajului reeunoseut de automatul M ""(Isi, S2, S3}, {XI, X2}, &, si, S2), unde functia & este definita astfel:

XI S2 S2

X2 S3 S2 S2

s,
S2 S3

Sl

8. Fie L ~ r* un limbaj reeunoscut de un system AFN. Sa se arate ca exista un system AFN care recunoaste limbajul init(L) =def {w I exista X E L* astfel lncat wx
E

.1.

L}.

9. Fie L ~ r* un limbaj. Ariitati ca L este recunoscut de un sistem AFN daca si numai dacafin(L) ""def {w I exista X E L* astfel incat xw E L} este reeunoseut de un sistem AFN. 10. Sa se aplice algoritmul descris in sectiunea 3.6 pentru recunoasterea expresiilor regulate: a) a*b+bb(a+c)*; b) (a+b)*a*bb*a*; c) (a+b)*aa(a+b)*; d) (b+ba)*; e) (a+b)*abb; t) a*b*c*; g) aa*bb*ce*; h) a*(a+b)*; i) (a+ba*)*; j) ba(ba)*(a*b*+a*); k) (ba)*baa*b*; 1) a+aata+b)"; m) (abb* a+aaa*b+baa*b )(a+b )*; n) a*(ba*ba*ba*ba *ba*)*; 11. Sa se serie un program C/C++/Java pentru simularea unui sistcm AFD. 12. Sa se serie un program C/C++/Java pentru simularea unui sistem AFN.
Propozitia 3.6 este utila in demonstrarca directa a teoremei lui Kleene, De aceea in multe publicatii exercitiul 7 eonstituie una dintre aplicatiilc teoremei lui Kleene. 43

39

13. Sa se scrie un program C/C++/Java care pentru un automat finit nedeterminist, considerat ca intrare, determina sistemul AFD echivalent, 14. Sa se scrie un program C/C++/Java care pentru un sistem tranzitional, considerat ca intrare, determina sistemul AFN echivalent. 15. Sa se scrie un progmm C/C++/Java care pentru 0 expresie regulata E, fumizata, la intrare, ea sir de caractcre, determina sistemul AFD care 0 recunoaste. 16. Sa se scrie un program C/C++/Java care pentru un sistem AFD, considcrat ca intrare, determina, sub forma unui sir de caracterc, expresia regulata recunoscuta de sistemul dat. 17. Sa sc analizeze complexitatea timp-memorie pentru fiecare dintrc algoritmii implementati in programele realizate la exercitiile 11) - 16). 18. Sa se serie cate un analizor lexical pcntru recunoasterea elementelor lexicale ale limbajului C: a) multimea constantelor intregi scrisc in baza 10; b) multimea constantelor octale; c) multimea constantelor hexazecimale; d) multimea identificatorilor; e) multimea cuvintelor cheie. 19. Sa se scrie un analizor lexical pentru un subset al limbajului C care suporta: tipul int, functii care returneaza int sau void si au argumente multiple, instructiunile if, while si return, 0 versiune de printf care afiseaza un intreg: printj("ryodln': n);, 0 versiune de scanf care citeste un intreg scanf("ryod", &n); operatorii +, -, *, /, =, ==, l=, lucrul cu tablouri unidimcnsionale, variabile locale si variabile globale.
20. Un generator de analizori lexicali este reprezentat de programul zex". Pomind de la documentatia de utilizare a programului lex, sa se scrie specificatii lex pentru entitatile indicate in eadrul exercitiului 18.

21. Sa se utilizeze lex pentru a genera analizorul lexical ecrut la exercitiul 19.

40 lex cste prezent in orice versiune UNIX Versiunea actuala se numeste Flex (fast lexical analyzer generator) si este disponibila si sub alte sisteme de operare. Programului lex i sc ofera 0 descriere a unitatilor lexica le care urmeaza a fi recunoscute. Ceea ce se genereaza, in final, este cod C, de accea actiunile specificate in cazul recunoasterii secventei lexica le sunt reprezentate de cod In limbajul C.

44

4. Optimizarea automatelor finite


4.1 Star! accesibile. Starf utile
Definitia 4.1 [Stari accesibile, start utile] Fie M "" (Q, ~, 8, qo, F) un sistem AFD. 0 stare q E Q estc accesibila din qo daca exista un cuvant W E L* astfel incat o(qo, w) "" q. 0 stare se numeste inaccestbtla daca nu este accesibila. 0 stare q este utila daca exista un cuvant W E L* astfel incat o(q, w) E F. 0 stare este inuttla daca nu este utila. Algoritmul4.1lDeterminarea starilor accesibile41] Prin aplicarea strategiei greedy, putem obtine un sir ascendent de multimi cu stan accesibile, sir majorat 'in sensul relatiei de ineluziune de multimca starilor automatului considerat, Fie So"" {qo}. Pentru i 2: 0, formam Sr-: "" S, U {q E Q - Sil exista s E Si si a E ~ astfel incat 8(5, a) "" q}. 0 alta modalitate de construire a sirului ascendent utilizeaza relapa de recurenta: Si+l "" S, U {8(s, a) I s E S; a E ~}. Este elar cil exista ko, ko s IQI astfcl incat SkO "" SkO+l, ko fiind eel mai mie numar natural cu aceasta proprietate; in aceste conditii SkO+j "" SkO, oricare j 2: 1. Multimea starilor accesibile este SkO. Intrare: Q, ~, qo, 8, F Iesire: Q' - multimea starilor aceesibile SEQ 1. i:~O;Su:o={qo}; 2. do {Si+l := S, u{8(s, a) I s E S" a 3. Q' =S; END.

E ~}:

i = i+l; }while(Si - Si-l *- 0);

Propozitia 4.1 Cu notatiile de mai sus, urmatoarcle afirmatii sunt adevarate: a) q este stare accesibila daca si numai daca q E Q'; b) Daca IQI = m, iar I~I = n, atunei complexitatea algoritmului

Otmn).

4.1 cste
I:
I

Demonstratie. Pentru a) se utilizeaza metoda inductiei. Afirmatia b) rezulta imediat din deserierea algoritmului.
41 Problema determinarii starilor accesibile este echivalenta eu problema determinarii vfufurilor unui digraf care sunt legate prin eel putin un drum de varful care corespunde starii qo. Dad se detcrmina matricea existentei drumurilor sau, ecluvaleru, inchiderea tranzitiva a relatiei binare asociata diagramei de tranzitie (de exemplu, folosind algoritmul Roy-Warshali atunci starile accesibile eorespund valorii 1 in lima starii qo din matrieea

existentei drumurilor.

45

Exemplul4.1 Se considera sistcmul AFD eu functia de tranzitie data prin tabelul (q, este stare initiala, q2 este stare finala, iar celelalte elemente se deduc din context):

Se observa

ca qo, ql ~i q2 sunt

stan accesibile, dar q3 nu este stare accesibila.

Algoritmul4.2 [Determinarea starilor utile] Prin aplicarea strategiei greedy, putem obtine un sir ascendent de multimi eu stari utile, majorat in sensul relatiei de inc1uziune de multimca starilor automatului considerat. Fie Va = F. Pentru i 2:: 0, formam Vi+l = Vi U {q E Q - Vii exista a E L astfel incat 8(q, a) E Vi}. Este cIar ca exista ko, ko s IQI astfel lncat UkO = VWl, ko fiind eel mai mie numar natural eu aceasta proprietate; in aceste conditii UkQ+j = Uio, oricare j 2:: 1. Multimea starilor utile este VkO. Intrare: Q, L, qe, 8, F Iesire: V' - multimea starilor utile SEQ 1. i ;= 0; Vo:= F: 2. do { for a E L do for q E Q - Vi do if 8(q, a) i=i+l; [whiletU, - V;-l eft 0); 3. V'=U;. END.

Vi then Vi+l

= Vi

{q};

Propozitia 4.2 Cu notatiile de mai sus, urmatoarele afirmatii sunt adevarate: a) q este stare utila daca si numai daca q E U'; b) Daca IQI = m, iar ILl = n, atunei complexitatea algoritmului O(mn). Demonstratie. Evident.

4.2 cste

Exemplul4.2 Pentru automatul considerat la exemplul 4.1, toate cele patru stari sunt utile. Trebuie retinut ca, in general, nu este obligatoriu ca oriee stare utila sa fie si accesibila, Deducem, de aici, ca automatul cu numar minim de stari care recunoaste limbajul secventelor binare care au sufixul 01 are eel mult trei stari. Numarul minim de stari se obtine numai dupa identificarea starilor cchivalente.
46

4.2 Congruente

§i

limbaje regulate
==

Definitia 4.2 [Reta,tie de echivalenta. Invarianta. Congruentai Fie L un alfabet si == 0 relatie de echivalenta pe I.*. Relatia de echivalenta" este de indice finit daca numarul claselor de cchivalenta" ale relatiei =' este finit.

Teorema 4.1 [Myhill-Nerode] Fie L <;;;; L* un limbaj. Urmatoarele afirmatii sunt echivalente: 1) L este un limbaj regulat; 2) L este reuniunea claselor de echivalenta ale unei relatii de echivalenta invarianta la dreapta, de rang finit; 3) Relatia PL <;;;; r*xI.* definita prin: u PL v daca $i numai daca orieare W E I.* astfel indit uw E L ¢:> vw E L estc 0 relatie de echivalenta invarianta la dreapta, de rang finit. Demonstratie. 1 => 2. Daca L este limbaj regulat, atunei exista un automat finit determinist M = (Q, I., 0, qo, F) astfel 'incat L(M) = L (vezi capitolul 3). Relatia PM <;;;; L*XI.* definita prin u PM v daca si numai daca o(qo, u) = o(qo, v), este 0 relape de echivalenta, ehiar invarianta la dreapta de rang finit (u PM V si W EI.* => uw PM vw) ale carei clase de echivalenta sunt in numar eel mult egal cu numarul starilor automatului M. Dedueem ca L este reuniunea claselor de echivalenta corespunzatoare starilor finale ale automatului M. 2 => 3. Se verifica usor ca rang finit.
PL

este

relatie de echivalenta invarianta la dreapta, de

3 => 1. Se construieste automatul M' = (Q', I., 0', q'o, F'), unde Q' este multimea (finita) a elaselor de echivalenta a relatiei PL, q' oeste clasa de echivalenta a cuvantului vid f.., F' este multimea c1aselor de echivalenta ale euvintelor limbajului L, iar 0' este definita astfel: fie [w] clasa de echivalenta a cuvantului w, atunei, orice [w] E Q' ~i orice a E I., o'([w], a)= [wa] (definire consistenta). Fie W E I.*. Atunei W E L(M') daca ~i numai daca o'(q'o, w) E F', daca si numai daca o'([)..,], w) E F', daca si numai daca bY] E F', daca si numai daca w E L. Deci L(M') = L. Teorema 4.2 Automatul M' construit anterior (In demonstratia teoremei 4.1) este automatul minimal care accepta limbajul L ~i el este unie pana la 0 redenumirc a starilor (un izomorfism). Relatia =' se numeste de echivalentii daca este reflexive (a ;: a, oricare a E L*), simeirica (a ;: ~ => ~ ;: a, oricare a E l:* si P E l:*) ~i tranzitiva (a ;: P ~i~ =' y => a=' y, oricare a E l:*, ~ E L* si Y E L*). Relatia de echivalenta =', pe l:*, este invarianta fa stanga daca a;: P => yo, =' y~ oricare y E L*. Relatia de echivalenta "', pc l:*, este invarianta la dreapta daca a ;: B => ay ;: py oricare y E L*. 0 relatie de echivalenta este numita congruenta daca este
42 43

" " J

invarianta atat la stanga, cat ~i la dreapta, Clasa de echivalenta a unui element x este fermata din totalitatea elementelor echivalente
cu x,

47

Demonstratie. Evident. Definitia 4.3 [Re/a,tta E] Fie M "" (Q, L, 0, qe, F) un sistem AFD. Definim, pe multimea starilor, 0 relatic de echivalenta, notata ==, astfel: Daca p, q E Q atunci p == q daca ~i numai daca pentru oricare W E L* avem cchivalenta:

S(p, w)

F ¢:} Seq, w)

F.

Observatia 4.1 Exista 0 corespondenta biunivoca intre clasele de echivalenta ale relatiei == si starile automatului M' construit prin teorema Myhill-Nerode. Pentru a determina starile automatului minimal care accepta limbajul L(M) este suficient sa gasim clasele de echivalenta ale relatiei s=, Exista mai multe metode pentru determinarea c1aselor de cchivalenta, 0 refcrinta bibliografica orientata spre aplicatii de seminar este Du&Ko(2001). Un algoritm recursiv de identificare a starilor echivalente, prin procedeul de mareare a starilor este deseris mai jos, Algoritmul4.3 [Determinarea starilor echivalentei multimea perechilor de stari

Intrare: AFD M "'"(Q, :E, 0, qn, F) Iestre: Multimea perechilor de stari eehivalente; neechivalente. Pasii: I. 2.

Se marcheaza toate perechile (p, q), p E F, q E Q - F; SI "'"F, S2"" Q - F. Pentru fiecare pereche (p, q) E S X S, unde S "'"SI sau S "'"S2, P *- q, executa A. Daca exista a E :E astfel meat (o(p, a), o(q, a» este marcata atunei : i) se marcheaza (p, q); ii) se marcheaza, recursiv, toate pereehile din lista lui (p, q) si din listelc altor perechi marc ate la acest pas. B. Daca pentru oricare a E L, pereehea (o(p, a), o(q, a» nu este marcata atunei, pentru oricare a E L, se adauga (p, q) in lista perechii (o(p, a), o(q, a» ori de cate ori o(p, a) *- 8(q, a).

Observatia 4.2 Ori~e p, q E Q, P nu este echivalent eu q (rclativ la ==) daca si numai daca in urma aplicarii algoritmului 4.3 pereehea (p, q) estc marcata. Observatia 4.3 Odam gasite perechile de stari cchivalente se poate construi automatul minimal care accepta limbajul supus discutiei. Fie M''''''(Q', L, 0', [qol, F') unde prin [q] notam clasa de echivalenta relativ la relapa == care are ca reprezentant starea q. CeleiaIte clemente sunt: Q' "'"{[q] I q este stare accesibila din qo}, F' "'"Uq] I q E F}, 8'([q], a)= [o(q, a)], oricare [q] E Q'~i orieare a E :E.
48

Exemplul 4.3 Se considera sistemul AFO descris prin tabelu1: ql qo qs qs q5 1 q2 q3 q, q4 q5 q, unde qo este starea initiala, iar q2, q3 si q5 sunt stari finale. Prin aplicarea algoritmului de marcare se constata ca raman nemarcate perechile So= (qo, ql) si s, = (q2, q3). Automatul minimal echivalent functioncaza pc baza tranzitiilor din tabelul: So o So 1 Sl

4.3 Lema de pompare pentru limbaje regulate. Aplicatii


Teorema 4.3 [Lema de pompare] Fie L un limbaj regulat oarecare. Exista atunei un numar natural ni. astfel incat orice cuvant W E L cu [w] ;::: nr, admite 0 descompunere w = xyz care are proprietatile: a) ]xYI::; ni.; b) lyj2 I; c) xy'z E L pentru oricare i ;::: O. Demonstratie. Se foloseste automatul minimal care recunoaste L. Rezulta ca ni. este unic determinat ~i depinde numai de L. Fie M = (Q, ~, 0, qe, F) astfel incat L(M) = L ~i M estc automatul minimal. Consideram ni := lQJ. Fie W E L, Iwl ;:::ni.. Atunci w = ala2 '" am, m ;:::nL. Fie qi = o(qo, ala2 ... a), i = 1,2, ... , m. Deoarece w E L rezulta ca qrn E F. Cum sunt evidentiate m + 1 stari, iar m ;::: ni., rezulta ca, in sirul qo, ql, ... , q-, exista doua stari care se repeta. Fie qs si q. starile care se repeta (evident 0 ::; s < t :S m; se poate lua ehiar s minim eu aceste proprietati). Se descompune w astfel; x = a.a, ... as, y = astla,+2... at, z = at+lat+2 arn. Se observa ca ... aceasta descompunere satisface cerintele formulate. Exemplul 4.4 [a
k2 k2

Fie L = {a I}. Vom arata ca L nu este limbaj regulat. Presupunem contrariul. Fie n numarul natural dat de lema de pompare aplicata pentru presupusullimbaj regulat L ~i W E L astfel indit w = a , adica ]wl = n2 > n pentru n > 1. Atunci w = xyz cu a) IxYI ::; n; b) Iyl ;:::1; c) xy'z E L pentru oricare i ;::: i O. Fie 2 2 2 = 2. Obtinem Ixy2z1 = [xyz] + Iyl = n + IYI. Dar n < Ix/zl :S n + n < (n+ 1)2. Deci xy'z ~ L, contrar celor presupuse. In concluzie L nu este limbaj regulat. Exemplul4.5 [d'b:'1 Fie L = {akbk I k z I}. Presupunem eli L este limbaj regulat si fie n numarul dat de Teorema 4.3. Fie w = a'b" = xyz. Cum Iyl > 0, apar trei situatii: 49
n2

I I kz

l. Y = a", 0 < s ::; n. Pentru i = 0 se va obtine un cuvant eu mai putine simboluri a dedit b, deci xlz tt L: 2. y = b\ < t ~ n. Analog, pcntru i ., 0, rezulta xlz tt L; 3. y = a'b', < s, t ~ n. Pentru i = 2 se amesteca literele si se obtine xy2z = an'SaSblasblbn.l ab'a'b" il L. = Deci L nu este limbaj regulat.

°°

Propozitia 4.3 Fie L un limbaj acceptat de un sistem AFD eu n stari. Atunei L *- 0 W E L astfel incat [w] < n;

¢:>

exista

Demonstratie. Presupunem ca L este nevid. Fie "V E L. Notam wo := w. Daca Iwol < n atunci stop, altfel aplicam Teorema 4.3 (deoarece n ;:::ru.) si rezulta deseompunerea wo = xyz eu proprietatile: a) IxYI s n; b) Iyl ;::: 1; c) xy'z E L pentru oricare i ;:::O. Pentru i = 0, formam WI = XZ E L. Continuam eu obtinerea secventei, dcscrescatoare in lungime, wo, WI, ... , WI. Ne oprim cand IWII < n. Implicatia inversa (<=) estc evidenta. Propozitia 4.4 Fie L un limbaj aceeptat de un sistem AFD eu n stari. Atunei L este infinit exista WE L, n ~ [w] < 2n.

¢:>

Demonstratie. Fie L limbajul gene rat de un sistem AFD eu n stari. Daca limbajul este infinit atunci, sigur exista un cuvant W E L astfel ineat [w] > n. Fie Wo := W. Conform lemei de pomparc rezulta ca exista 0 descompunere \Vo = xyz cu proprietatile: a) [xy] ~ n; b) Iyl ;::: L c) XlZEL pentru oriearc i z O. Daca Iwol < 2n atunei stop, aItfel consideram WI = xz E L, pentru care Iw1\ < Daca Iw\1 < 2n atunci stop, altfel reluam proeesul si vom obtine 0 seventa, descrescatoare in lungime, wo, WI, ... , WI. Ne oprim cand ]wd < n. Rceiproe, daca in L exista un cuvant w astfel incat n ~ Iwl < 2n, atunei prin apliearea lemei de pompare si eonsiderarea cuvintelor xy'z, i ;::: 0, obtinem 0 multime infinita de cuvinte ale limbajului, deei L este infinit. Algoritmul 4.4 Fie L un limbaj aeeeptat de un sistem AFD eu n stari. Pentru a verifiea daca L este ncvid, se poate apliea urmatorul algoritm, ell eomplexitatca mult mai mica decat metoda furnizata prin propozitia 4.3.

Intrare: Q, E, qo, 0, F

Iesire: "DA" daca L este ncvid; "NUl' In caz contrar. SEQ 1. i:= 0; So:= {qs}; 2. do {S;+I := SI u{8(s, a) Is E Si,a E L:}: i = i + I;} while(S; - S;.I *- 0); 3. if S; n F = 0 then write "NU"; else write "DA". END.

50

Se observa ca multimea S, de la pasul 3, contine starile accesibile. Estc dar ca daca niei 0 stare finala nu este accesibila atunei limbajul L este vid. Algoritmul 4.5 Fie L un limbaj aeeeptat de un sistem AFD cu n stari. Pentru a verifica daca L este infinit, se poate apliea urmatorul algoritm, cu eomplexitatea mult mai midi deem metoda furnizata prin propozitia 4.4. lntrare: Q, l:, qo, 0, F Iesire: "DA" daca L este infinit; "NU" in eaz contrar. SEQ 1. i:= 0; So:= {qe}; 2. do {Si+l := S, u{o(s, a) Is E S, a E l:}; i = i + 1; }while(i < n); 3. do{ if S,n F oj:. 0 then write "DA"; stop. Si"-1 := S, u{o(s, a) Is E S" a E l:}; i = i + 1; }while(i < 2n); 4. write "NU". END. 4.4 Exercitii 1. Sa se justifiee observatia 4.2. 2. Fie L multimea tuturor sirurilor binare de lungime impara. Sa se determine clasele de echivalenta ale relatiei 'in eontextullimbajului L.

3. Fie expresia regulata r = (0+1)*01. Sa se determine clasele de echivalenta ale relatiei = in contextul limbajului L(r). 4. Fie expresia regulata r = (0+ 1)*0(0+ ale relatiei ;;= an contextul limbajului L(r). 5. Sa se arate ca L 6. Sa se arate ca L
=

ll. Sii se determine

clasele de echivalenta

{a" I p numar prim} nu este limbaj regulat. {ambnI emmde(m, n)


=

1} nu este limbaj regulat.


E

7. Fie f: N -} No functie crcscatoare eu proprictatea ca pentru orice n mEN astfel incat f(m+ 1) - f(m) > n. Sa sc demonstreze ca limbajul L EN} nu este regulat.

N, exista {af(m) m I

8. Se defineste indcxul unui limbaj regulat L, ~i se noteaza prin index(L), ea fiind numarul claselor de echivalenta ale relatiei ;;= definita in contextu1 limbajului L. Este evident ca daca un limbaj L este regulat atunei Index(L) este finit. Fo1osind aceasta observatie sa se arate ca urmatoarele limbaje nu sunt regulate: a) {ambnIO::S m s, n}; b) {ww I WE {O, l}*};
51

9. Sa se aplice algoritmii 4.4 si 4.5 pentru automatele din excmplelc 4.1 si 4.3. 10. [Du&Ko(2001)] AFD: Construiti automatul minimal pentru fiecare dintre sistemele

a) A = ({qo, q., q2, q3, q., qs, q-}, {a, b}, OA, qo, FA={Q4, q5}), iar OA estc functia descrisa prin tabelul:

b) B = ({qQ, q., q2, q3, qa, qs, Q6}, {a, b}, DB, qn, FB={qQ,ql, qo}), iaroB este functia descrisa prin tabelul:

52

5. Transformari asupra gramaticilor formale


5.1 Transformari elementare
In acest capitol se presupun cunoscute notatiile din eapitolelc 1 si 2. Folosind anumite transformari, in general simple, se vor obtine gramatici echivalente. Propozitia 5.1 [Transformare privind simbolul de start} Fie G = (0, L, S, P) 0 gramatica de tipul i (i = 1,2, 3). Exista 0 gramatica 01 de acelasi tip eu G, echivalenta cu G, astfel incat simbolul initial S1 al gramaticii G1 nu apare in nici unul din cuvintele aflatc in membrul al doilea al productiilor gramaticii GI. Demonstratie. Fie 0 gramatica din enun] si S1 (/; (0 U L) un simbol nou. Construim gramatica G1 = (01, L, S], PI), eu 01 := Ou {SI} ~i PI := P u {S1 .:= \V I (S ::= w) E Pl. Evident 01 II L = 0, iar G si GI sunt de acelasi tip. Vom demonstra ca 0 si G] sunt gramatici echivalente. Fie W E L(G), deci S ~ w, printr-o derivare, 'in G, de forma: S --+ WI --+ W2 --+ '" --+ w, = w. Evident, S ::= wr E Pc PI deci S --+ w l , in GI. De asemenea, deoarece w,i -» Wi+!,in G, SI nu apare in P, iar Pc PI, rezulta ca w, ~ wi-i, in G1. Deci SI ~ w, adica W E L(OI). Fiew E L(G1), deci S] ~ W, printr-o derivare, in GI, de forma: S1 --+ W1 --+ W2--+ ... ~ w, = w. Evident, SI ::= w, E PI. Nici unul din cuvintele w., i = 1,2, ... , k, nu contine simbolul SI deci w. ~ w.-r, in G. Cum S1 --+ WI,in GI, implica S --+ WI (prin constructia realizata), rezulta ca S ~ w, adica WE L(G). Corolarul5.1 [Generarea limbajelor L U {Aj, unde A. ~ L] Daca L este un limbaj de tipu1 i (i = 1, 2, 3), atunei exista 0 gramatica G = (0, L, S, P) care genereaza limbajul L U {A} astfel incat: 1) Simbolul initial S nu apare in membrul al doilca in nici una din productiile gramaticii G. 2) In mulpmea P exista regula S ::= 'A.. 3) Gramatica GI = (0, L, S, PI), unde PI := P - { s ::= 'A.} este de tipul i (i = 1, 2, 3) si genereaza limbajul L. Astfel putem defini limbajele de tip i (i

I'

= 1, 2, 3), precum in definitia 5.1.


0

Definitia 5.1 [Limbaj de tip i (i = 1, 2, 3)] Limbajul L este de tip i (i "" 1,2, 3), daca limbajul L - {A} este generat de gramatica de tipul i (i = 1,2, 3).

Lema 5.1 [Existenra derivarilor stang;]


Fie G:; (£1, L, S, P) 0 gramatica de tipul 2. Atunci pentru orice A I:* cu A ~ W, exista 0 derivare stanga a lui w din A.
E

0 ~i W

53

Demonstratie. Se utilizeaza un rationarnent induetiv relativ la lungimea derivarii. Daca A -~ W intr-un singur pas, atunei A ::= W E P si este in mod banal 0 derivare stanga. Presupunem proprietatea adevarata pentru to ate derivarile A ~ w de lungime eel mult egala eu m, m > O. Fie A ~ W 0 derivare de lungime m + 1. Evident, exista v E (.0. U Lt astfel incat A --+ v ~ W, unde v --) w este 0 derivare de lungime m. Fie v = VjV2 Vk,unde Vi E .0. U L, i = 1,2, ... , k. Conform propozitiei 2.1, ... (prin generalizare) exista WI, W2, ... , w, din L*, eu W = W1W2 w, si Vi ~ ... w, in eel mult m pasi. Conform ipotezei de inductie, exista derivarile stangi Vi ~ w, eu Vi E .0. si w, E L*. Daca Vi E L atunei w, = Vi. Evident V1V2 v, ~ ... W1W2.. w, este 0 derivare stanga. Deci derivarea A ~ . W poate fi realizata ea 0 derivare stanga.

5.2 Redenumiri si A-productii


Propozitia 5.3 [Eliminarea redenumirilor] Fie G = (n, L, S, P) 0 gramatica de tipu12 sau 3. Exista 0 gramatica G1 "" (.0., L, S, Pi) de acelasi tip eu G, echivalenta eu G si rara redenumiri. Demonstratie. Fie G = (n, L, S, P) 0 gramatica de tipul 2 sau 3 si P' := {A ::= w 1 W \l n, A ::= W E P} multimea regulilor din P care nu sunt redenumiri. Fie P" := { A ::= W I A E n, exista B, BEn si A ~ B (in G, derivare in eel putin un pas), iar B --+ W E P'} 0 multime de reguli care nu sunt redenumiri. Formam gramatica G: = (.0., L, S, P1) cu PI := P' uP". Evident Gl este rara redenumiri si de acelasi tip eu G. Demonstram ca G si G] sunt eehivalente. Fie WE L(G), deci S ~ w, printr-o derivare stana"a (conform Iemei 5.1), in G, de forma: S = Wo ~ W1 ---')0 W2 ~ ... --) wi = w, derivarile w, ~ Wi+1,i = 0, 1,2, ... , k - 1 fiind de lungime nenula, iar pentru fieeare din ele este posibila numai una din situatiile: a) w, ~ Wi+1este 0 deri~are de lungime 1 obtinuta prin apliearca unci reguli din P'. Oeei w, ~ Wi+1,n gramatica Gi. i b) w, ~ Wi+leste 0 derivare de lungime cel putin egala eu 2, astfel incat exista v E (.0. U L)", pentru care Wi ~ V (derivate stanga ell redenumiri) ~i V --+ W1+l, derivare printr-o regula din P'. Prin aplicarea unei reguli din P" referitor la derivarca initiala WI ~ V se poate gasi w, ----7 V in Gj. Prin cuplarea derivarilor rezulta ca este posibila derivarea S ~ win G] . Reeiproca este imediata. Definitia 5.2 [Gramatici ell A-produc!ii] Fie G = (n, L, S, P) 0 gramatica eu productiile de fonua (p, q) E nX(.o.UL)* . Sc numeste kproduc!ie oriee productie de forma (X, A) si scriem X ::= A (X En). Propozitia 5.4 [Determinarea simbolurilor neterminale care cuvdntul vhi] Fie G "" (.0., L, S, P) 0 gramatica eu productiile de forma (p, q) Sirul de multimi generat prin:
54

"genereaza"
E

nX(.o.UL)* .

Uo""0; Urn" I = Urn are urmatoarele proprietati: a) c)

{X I X En,

exista w,

WE

Urn*, X ::=\"

P}

Uo ~ U I ~
Uk+1.

...

Urn ~ '" ~ n si exista k, numar natural, astfe 'indit U, =

b) Daca Uk = Uk"1, atunci Ue = Ue-i, pentru oricare i > O.


Fie k * eel mai mie numar natural pentru care Uk~ Uk-={XIXEn~iX ~ X}.

= Uk- +1. Atunei

Demonstratie, Proprietatea a) rezulta din constructia sirului de multimi, iar proprietatea b) se poate demonstra usor prin inductie. V9m demonstra proprietatea e). Mai general, vom arata ca Urn ~ {X I X E n ~i X ~ X}, pentru oricare m numar natural. Daca m = 0, este evident. Presupunem ca Um ~ {X I X E 0. si X ~ X} si fie X E Um+1. Daca X ~ Urn rezulta ca exista \V, W E Um*, X ::= W E P. Sunt posibile doua cazuri: Cazull: w = A. Deci X _:__., ;t Cazul Z, w *- A. Atunei w = X1X2 ... x-, unde Xi E Urn, i = 1,2, ... , r. Din ipotcza de inductie rezulta ca x, ~ X, i = 1, 2, ... , r. Deci X ~ X. !n ambele cazuri a rezultat di X E{X I X E n ~i X ~ X}. In eoncluzie Uk. ~ {X I X E 0 si X ~ X}. Reciproe, presupunem ca Uk. *- 0 si aratam ca {X I X E q ~i X ~ X} ~ Ui-, prin inductie completa in raport cu lungimea derivarii X ~ X. Daca derivarea X ~ X este de lungime 1 atunci X ::= X este productie din P, deci X E UI C Ur-. Presupunem Ca pentru orice derivare X ~ X cu lungimea eel mult m rezulta X E Uk~. Fie X ~ A. 0 derivare de lungime m+ 1. Punem in evjdenla . primul pas al derivarii. Rezulta ca exista v astfel indit X ::= v si X --) v -----» A, unde derivarea v -----» A are lungimea m. Evident pentru m 0 trebuie ca v X. Prin unnare v = V1V2 ... v, este 0 scriere a lui v eu elemente VI E n, i = 1,2, .'" r. Daca ar exista un i pentru care Vi E L, acesta nu ar mai putea fi eliminat pe parcursul derivarii v ~ 2. Conform propozitiei 2.1 rezulta ca Vi __:_." X, i = 1, 2, ... , r. Prin aplicarea ipotezei de inductie rezulta ca Vi E Uk- ~i deci V E U,•. Astfel obtinern X E Uk e ,

'*

'*

producuti

Corolarul

5.2 [Limbaje independente de context generate de gramatici eu 2 E QX(QUL)*.

Fie G = (0, L, S, P) 0 gramatica cu productiile de forma (p, q) Atunei L(G) este un limbaj independent de context.

Demonstratte. Fie PI = {Y ::= WI I exista WE (QULf, eu Y ::= w astfel incdt w: se obtin~ din w prin stergerea a zero, unu sau mai multor simboluri X E 0 pentru care X -----» 2} si G1 = (0., L, S, PI)' Evident, gramatica G1 este independenta de context, iar L(G1) = L(G)- {tl}.

55

5.3 Simboluri utile


Fie G = (0, E, S, P) 0 gramatica independents de context cu L(G) *- 0. Exista o gramatica G1 ~ (01, E, S, PI) independenta de contpxt, echivalenta cu G, astfel indit pentru oricare X E .0.1, multimea {w E L* I X ~ w} este nevida.

Propozitia

5.5 [Simboluri care genereaza cuvinte peste ,.t4]

Demonstratie.
algoritm: 2. 3. 4.

Construim

sirul de rnultimi Vo, VI, V2,

...

folosind

urmatorul

1 u {X I X ::"" W E P, W E (Vi U E)*} Daca Vi *- Vi-1atunci i := i + 1 si sc continua cu pasul 2. Se considera 01 = Vi, PI se obtine din P prin eliminarea productiilor in care apare eel putin un simbol neterminal din .0. - 01. Sa observam ca U, ~ V I ~ ... ~ Vrn ~ ... ~ 0 (numarul maxim de aplicari al pasului 2 este maximum card (0», deci exista k astfel incat U; = Vk+ 1 si U, = Vkrp pentru oricare p > O. lndieele i fumizat de algoritm corespunde celui mai mie k pentru care U, = Uk+1. Notam aceasta valoarc prin k*. Deci se poate scrie ca Uo ~ VI ~ ... ~ Vk" De asemenea, pentru oricare i = 1, 2, ... , k*, daca X E Vi atunci cxista W E E* astfel incat X ~ w. Daca i = 1, afirmatia rezulta din constructia multimii VI. Presupunem proprietatca adevarata pentru un indice i ~i consideram X E V'+I. Daca X E Vi dernonstratia este incheiata, Consideram cazul X E Ui+1 - Vi, deci exista productia X ::= X1X2 ... X; eu Xi E Vi U E, i = 1, 2, ... , r. Daca Xi ~ E, consideram w, = Xi; altfel, prin ipoteza d~ inductie exista w. astfel incat Xi ~ w.. Formam derivarea X -+ X1X2 ... X, ~ W1W2... w. si luam W = WIW2... Wr Pentru a completa demonstratia propozitiei este suficient sa aratam ca daca X~ w (derivare in n pasi) si W E E* atunci exista i astfe1 incat X E U, Vom proceda prin inductie dupa n (lungimea derivarii). Pentru n = 1, din constructie va rezulta ca X E VI. Sa prcsupunem afirmatia adevarata pentru derivari de lungime eel mult n ~i sa consideram 0 derivare de lungime n + 1. Punem in evidenta primul pas al derivarii, adica X -+ X1X2 ... X, ~ w Conform propozitiei 2.1 rezulta ca w = \V1W2 w, CU X, ~ ... w, (p = 1,2, ... , r). Daca X, E L (n, = 0) atunci luam j[p] = 0, adica XpE Vo. Daca X, E 0 atunci, prin utilizarea ipotezei de inductie rezulta ca exista j [p] astfel incat X, E VJ[p); Cum sirul construit este ascendent, putem lua i = 1+ max{j[l], j[2], ... , j[rl} si rezulta X E Vi. Pe baza afirmatiilor de mai sus se deduce echivalenta gramaticilor G si G1.

1. Us :> 0; i :~ 1;

u »- Vi-

l
,
\ \

Corolarul 5.3 [Decidabilitatea problemei L(G) :;r f2JI


Exista un algoritm care pentru daca L(G) = 0 sau L(G) *- 0.
0

gramatica

independenta

de context

stabileste

Acestea se mai munesc si simboluri productive. Prin analogie cu sistemelc AFD, simbolurile productive vor fi numite si simboluri utile. Simbolurile care sunt In acelasi limp accesibile (dcfinitia 5.3) ~i productive le vom numi simboluri utilizabite. precum In Atanasiu (1987). 56
44

Demonstratie. Se poate utiliza urmatorul algoritm: I. Vo:= 0; i := 1; 2. U, := Ui.: u {X I X ::= WE P, WE (Vi U 2:)*} 3. Daca Vi Vi.l atunci i := i + 1 ~ise continua cu pasul 2. 4. Daca S E U, atunci L(G) 0 altfel L(G) = 0. Justificarea corectitudinii algoritmului urmeaza pasii prezentati dernonstratiei propozitiei 5.5.

in

cadrul

Definitia 5,3 [Simboluri inaccesibilei Fie G = (0, L, S, P) 0 gramatica independenta de context cu L(G) 0. A E o U 2: este un simbol inaccesibil daca nu exista nici 0 derivare S ~ uAv cu u, v E (QuL)*. Altfel simbolul A este accesibil.

Propozitia 5.6 [Determinarea simbolurilor accesibilei Fie G = (0, L, S, P) 0 gramatica independenta de context cu L(G) G1 = (01, LI, S, PI) cchivalenta cu G care nu are simboluri inaccesibile.

* 0.

Exista

Demonstratie. Vom demonstra ca algoritmul de mai jos va dctermina simbolurile accesibile. Pasii algoritmului sunt: 1. Vo:= {S}; i := 1; 2. U, ;= Ui.1 U {X I exista A ::= uXv E P, astfel lnd!t A E Ut.l}. 3. Daca Vi V,.I atunci i:= i+ 1 si se continua de la pasu12. 4. Fie k* valoarea lui i obtinuta la acest pas. Formam 01 := 0 n Ui-, LI := L n Vk. si PI productiile lui P care au in ambii membrii numai simboluri din Vk", Cum Vk' ~ 0. U 2:, are cardinal finit, rezulta ca procesul descris se term ina in timp finit. Se arata usor ca G ~i G1 sunt echivalente ~i ca pentru oricare AE 0.1 U LI exista u si v din (o.lu2:d* astfel inc at S ~ uAv.

Propozitia 5,7 Fie G = (0, 2:, S, P) 0 gramatica independenta de context cu L(G) Atunci G este echivalenta CU 0 gramatica GI simboluri neutilizabile.

rara

* 0.

Demonstratie. Asupra gramaticii G se aplica propozitia 5.5 ~i se determina G1


echivalenta eu G care are numai simboluri neterminale care pot "genera" cuvinte peste alfabetul terminal (asa numitele simboluri productive sau utile). Apoi, asupra gramaticii GI se aplica propozitia 5.6 pentru a obtine G2 ee are numai simboluri accesibile din simbolul de start. Daca, gramatica nu are redenumiri si nici ,,1productii, atunci s-a obtinut a gramatica proprie (definitia 5.4, teorema 5.1). Definitia 5.4 [Grqmaticii proprie] Fie G = (0, 2:, S, P) 0 gramatica independenta de context. G se numeste gramatica proprie daca contine numai simboluri utilizabile (accesibile ~i productive), nu contine A-productii si nu are redenumiri intr-unul sau mai multi pasi. Teorema 5.1 Fie G = (0, L, S, P) 0 gramatica independenta de context cu L(G) GI = (Ql, Ll, S, PI) echivalenta eu G care este gramatica proprie.

* 0.

Exista

57

Exemplul5.1 Simbolurile neutilizabile ale gramaticii cu multimca de reguli {(S, A), (S, 8), (A, aB), (A, bS), (A, b), (B, AB), (B, Ba), (C, AS), (C, b)} sunt B, a si C. Exemplul5.2 Dupa eliminarea 2-productiilor, gramatica cu regulile {(S, aSbS), (S, bSaS), (S, it)} devine echivalenta cu gramatica cu rcgulile {(S', S), (S', A), (S, aSbS), (S, aSb), (S, abS), (S, ab), (S, bSaS), (S, baS), (S, bSa), (S, ball. Exemplul5.3 Fie gramatica G cu multimea de reguli P = reS, A), (A, bS), (A, b)}. Gramatica proprie echivalenta cu G are multimea rcgulilor P' = {(S, bS), (S, b)}, iar A este un simbol ncutilizabil. 5.4 Exercitii

1. Sa se aplice propozitia 5.1. asupra gramaticii S ::= aSb, S ::= abo Acelasi cnunt pentru gramatica: S ::= aSB, S ::= abC, CB ::= EB, EB ::= EF, EF ::= BF, BF ::= BC, C ::= c, bB ::= bbC.
2. Sa se elimine A-produc~ile gramaticii cu regulile: S ::= ABC, A ::= BB, A ::= A, B ::= CC, B ::= a, C ::= AA, C ::= b. 3. Sa se elimine redenumirile din gramatica (0, ~, s, P), cu 0 = {<expresie>, <termen>, <factor>}, ~ = {x}, S = <expresie> si Peste multimea rcgulilor: <exprcsie> ::= <expresie> + <termen> <expresie> ::= <termen> <tennen> ::= <termen> * <factor> <termen> ::= <factor> <factor> ::= ( <expresie> ) <factor> ::= x 4. Sa sc determine simbolurile neutilizabilc pentru gramatica G = ({S, A, B, C}, {a. b} ,., S P} ., unde P = { S ...," A S"= B ,.. "= AB ,.. "= B B"= Ba, A "= aB A bS A "= ."..,. .. b, C ::= AS, C ::= b} ..
";0:

5. Acelasi enunt pentru gramatica cu regulile: S ::= AS, S::= A, A .:= aB, A::= bA. 6. Sa se determine gramatici proprii echivalente cu gramaticile avand regulile: a) S ::= Aa, A ::= bA, A ::= B, B ::= bB, B ::= ')..C ::= C. b) S ::= abS, S ::= baaA, A ::= babA, B ::= abB, B ::= aB, A ::= a, B ::= b, S ::= C, A ::= B, B ::= 0, C ::= ab, 0 ::= a.

58

6. Forme normale. Lema Bar-Hillel


6.1 Forma normala Chomsky
Definitia 6.1 [FNC] o gramatica G = (n, L, S, P) de tipul 2, rara A-produetii ~i rara redenumiri, este informa normala Chomsky (FNC) daca toate productiile sale sunt de una din formele A ::= BC, A :;= a, pentru A, B, C E n, a E L. Observatia 6.1 Conform teoremei 5.1 este sufieient sa se lucrcze cu mecanisme generative echivalente eu gramaticile proprii (obtinute dupa transformarile necesare). Teorema 6.1 Fie G = (n, L, S, P) 0 gramatica proprie. Atunci exista forma normala Chomsky echivalenta eu G. gramatica G: in

Demonstratie . Prin aplicarea propozitiei 2.2 putem considera ca multimea P contine numai reguli de forma A ::= X1X2 ... X; (m > 1) si A ::= a, eu A, Xr, ... , X; En, aE L. Regulile cu 2 neterminale in membrul drept raman nemodificate in PI. Daca m > 2, consideram m - 2 neterminale noi si pentru regula curenta adaugam in PI cele m - 1 reguh: A ::= X1Dl, D, ::= X2D3, ... , Dm3 ::= Xmo2Dmo2, Dmol ::= Xmo\Xm. Este user de demonstrat ca dupa prelucrarea tuturor regulilor din P, gramatica obtinuta este in forma normala Chomsky si este echivalenta eu G. Exemplul 6.1 Fie gramatica eu regulile S ::= bA jaB; A ::= bAA j as j a; B ::= aBB j bS j b. Introducem neterminalele noi X. si Xs. Formam regulile X. ::= a si X, ::= b. Apoi modificam regulile gramaticii initiale eu exccptia regulilor A ::= a ~i B ::= b. Obtinem noua multime de reguli:

S ::= XbA j X.B; A ::= XbAA! X.S! a; B ::= XnBB j XbS! b; X, ;:=a; Xb ::=b.
Introducem noi simboluri neterminale si modificam regulile care au in membrul drept eel putin trei simboluri. Fie YI si Y2 simboluri neterminale noi. Gramatica in forma normala Chomsky, echivalenta eu gramatica initiala, are

;,
"

i~

regulile:

S :;= XbA! X.B; A ::= XbYI !X.S! a; B ::= X.Y2! XbS! b; YI ::= AA; Y2 ::= BB; X.::= a; X, ::= b.
59

Teorema 6.2
Fie G = (.0., L, S, P) 0 gramatica de tip 2 in forma normala Chomsky. Daca derivarea A ---+ WI ---+ ... ~ w-, n ;;::I, w, E I:*, are proprietatea ca eel mai lung Ian] de la radacina la varfurile terminale in arborele de derivare asociat ei in gramatica GA = (0, L, A, P) are k noduri, atunci lwnl s 2k-1. Pentm k = 2 rezulta n = 1 ~i WI E I:, deoarece G este in forma normala Chomsky, deei IwI! s 2k-l. Presupunem afirmatia adevarata pentru orice intreg m, 2 s rn S k, unde k este un intreg fixat, k z 2. Consideram 0 derivare A --+ WI --+ ... --+ Wn, nz l, w, E I:*, care are proprietatea ca eel mai lung Ian] de la radacina la varfurile terminale in arborele de derivare asociat ei are k + J noduri. Primul pas al derivarii consta in aplicarea unei reguli de forma A ::= XY eu X si Y neterminalc (gramatica este in forma normala Chomsky). Prin apliearea ipotezei de induetie asupra arborilor de derivare eu radacinile k1 k1 . X ~1Y 0 bti pnem Iw, I S 2 - + 2 . =, 2k d'eel. Iw, I S 2(k+1)-1 .

Demonstratie. Aplicam metoda inductiei in raport cu k. Cum n ;;::1 rezulta k ;;::2.

6.2 Forma norma/a Greibach


Definitia 6.2 [FNG] gramatica G = (0, L, S, P), rara .-i-produqii si rara redenumiri, este in forma norma/a Greibach (FNG) daca P contine productii numai de forma A ::= aW, pentru A E 0, a E I: si WE (0 U L)*.

Lema 6.1
Fie gramatiea proprie G = (.0., L, S, P) si A ::= UIBu2 0 Avproductie si B ::= J31 I J32 I ... J3ktoate Bsproductiile din multimea P. Consideram G1 = (0, L, S, PI) unde PI = (P - {A ::= UIBu2}) u {A ::= UIJ31U21UIJ32U21... I UIJ3kU2}. Atunei G ~i GI sunt gramatici eehivalente. Demonstratie. Se arata, prin dubla incluziune, ca L(G)
=

L(GI).

Lema 6.2
Fie gramatiea lara A-produetii si numai eu simboluri utilizabile, G = (0, L, S, P) si A ::= AUI I AU2 '" I AUk toate Avproduotiile recursive la stanga si A ::= J31I J32I .. , J3mrestul Asproductiilor din multi-mea P. Fie X un simbol nou, X ~ .0. u I:, .0.1 = 0 U {X} ~i gramatiea GI = (01, L, S, PI), unde PI se obtine din P prin inlocuirea tuturor Avproductiilor cu regulile: A ::= J31I J32I ... J3m,A ;:= J3IX I J32X I ... J3mX~i X ::= UI I Uz ... I Uk, X :;= UIX I u2X ... I ukx. Atunei G si GI sunt echivalente, Demonstratie. Se arata ca L(G) reformulare a propozitiei 2.7.

= L(G]).

Se va mai observa di acest rezultat estc

Teorema6.3
Fie G = (.0., L, S, P) 0 gramatica proprie. forma normala Greibach, echivalenta ell G. Atunci exista gramatica G*, in

60

Demonstratte.

Asupra gramaticii G se pot aplica metodele descrise in cadrul lemelor 6.1 si 6.2. Ultima gramatica obtinuta se poate aduce la forma normala Chomsky. Notam aceasta gramatica cu Gl. Presupunem ca netenninalele gramaticii 01 sunt numerotatc ~i seriem regulilc in ordine crescatoarc a indieilor simbolurilor neterminale. Aplicam un algoritm simplu prin care se objine G*, cu multimea regulilor P*, 'in forma normala Greibach: nerecursiva la stanga, Tara ..1-

Intrare: Gramatica

G, in forma normala Chomsky, productii, 01 = {AI, A2, .... , Am}, SI == AI. Iesire: Gramatiea G* in forma normala Greibach,

SEQ
1. P*:= PI; i := m; 2. while i > 1 do

SEQ

3. END.

i:=i-I; while (exista j, i < j $ m, A, ::= Ap. 'in P*) do P" := (P" - {Ai ::= Ap}) u {A, ::= l3a \ AJ ::= f3 E P*} END for (indiei i ai simbolurilor Y) do while (exista j, 1 s j $ m, Y, ::= AJa E P*) do P" := (P" - {Y, ::= AJa }) u {Vi ::= ~a I Aj ::= P E P*}

Exemplul 6.2 Fie gramatiea G, eu simbolurile neterminale numerotate si regulile: AI A2A3; A2 ::= A3AI I b; A3 ::= AlA21 a. Se observa eel gramatica G, desi are reguli de tip FNC, este recursiva in mai multi pasi. Consideram regula A3 ::= AlA2 si 0 inlocuim eu A3 ::= A2A3A2, prin apliearea lemei 6.1. Observant ca, in eontinuarc, persista recursivitatea 'in mai multi pasi. Consideram regula A3 ::= AzA3A2 si 0 inlocuim, folosind lema 6.1, cu regulile A3 .:= A3AIA3A2 I bA3A2. Observam ca am ajuns la reursivitate intr-un singur pas si putem apliea lema 6.2. Eliminam regula A3 ::= A3AIA3A:! si introdueem regulile A3 ::= bA3AzY3! aY3; Y3 ::= AIA3AzY3! A1A3A2. Am obtinut urmatoarea multime de reguli: Al ::= A2A3; A2:= A3Al ! b; A3 ::= bA3A2Y31 aY3! bA3A21 a , Y3 ::= AIA3AN 31 A1A3A2. In continuare aplicam algoritmul din demonstratia teorcmei 6.3. Eliminam regula A2 ::= A3Al si adaugam regulile: A2 ::= bA3A2Y3A1 I aY3Al I bA3A2Al I aA1. Observam A2 ::= b ramane pe loc. Apoi regula A, ::= A2A3 se elimina ~i se introduc regulile: A, ::= bA3A2Y3AIA3! aY3AIA3 I bA3A2AIA31 aA1A3! bA3. Pana acum am aplicat pasul 2 pentru i = 2 si i = I. Aplicam, in eontinuare, pasul 3 pentru Y 3. Astfel regulile Y3 ::=AIA3A2Y31 AIA3A2 se inlocuiesc cu Y3 ::= bA3AzY3AIA3A3A2Y31 aY3AIA3A3A2Y3! bA3A2AlA3A3AzY31

ea

61

Gramatica G*, in forma normala Greibach, echivalenta cu gramatica data, are regulile: A, ::= bA3A2Y3AIA31 aY3AJA31 bA3A2AJA31 aA1A31 bA3; A2 ::= bA3A2Y3A1 I aY3AI I bA3A2AJ I aAl I b; A3 ::= bA3A2Y31 aY31 bA3A21 a Y3 ::= bA3A2Y3AJA3A3A2Y31 aY3AIA3A3A2Y31 bA3A2AJA3A3A2Y31

aAJA3A3A2Y31 bA3A3A2Y31 bA3AzY3AJA3A3A21 aY3AJA3A3Azi bA3A2AJA3A3A2 1aAJA3A3A21 bA3A3A2.

aAIA3A3A2Y31 bA3A3A2Y31 bA3A2Y3AJA3A3A21 aY3AJA3A3A21 bA3A2AJA3A3A21 aA1A3A3A21 bA3A3A2.

Trcbuie observat ca, 'in general, procesul de nonnalizare, conduce la cresterea numarului netenninalelor, dar si a regulilor. Astfel cresc masurile Var si Prod.

6. 3 Lema Bar-Hillel
Teorema 6.4 [Lema Bar-Hillel] Fie L un limbaj independent de context oarecare. Atunci exista numerele naturale p = p(L) si q = q(L) astfel incat oriee cuvant W E L eu [w] > p se poate descompune sub forma W = uvxyz, unde [vxy] ::; q, vy *- "A, si pentru oricare numar natural i, uv'xy'z E L.
E L atunei se ia p = p(L') ~i q = q(L') unde L' = L - {"A,}. Presupunem ca "A, 1£ L si fie G = (0., L, S, P) 0 gramatica de tip doi in forma normala Chomsky astfel incat L = L(G). Daca IQI = n, luam p = 2n si q = 2n-1. Fie WE Leu Iwl > p. Folosind teorema 6.2 rezulta ca eel mai lung lant de la radacina la varfurile terminale, din arborele de derivare al cuvantului w, pomind de la simbolul de start S, contine eel putin n + 2 noduri. in caz contrar ar rezulta ca Iwl ::;Z". Deoarece 10.1 = 11rezulta ca eel mai lung Ian] coniine doua noduri ni si 112 etiehetate eu acelasi netenninal X. Presupunem ca nodul 11Jeste mai aproape de radacina S de cat nodul n2 si fie DI subarborele de radacina n.. Evident frontiera lui DJ, notata cu a, conform teoremei 6.2, are lungimea (notata eu 101) eel mult 2"+1. Fie D2 subarborele eu radacina n2 si frontiera x. Atunei exista v E L* si Y E 1;* astfel incat a = vxy. Evident, v §i y nu pot fi simultan vide pentru ca regula care se aplica din ni este de forma X ::= YZ, cu Y ~i Z neterminale. Exista si cuvintele u si u: z peste I,asue 1 ~ ~ S ~ " meat uXY ~ • uv X yz ~ ~ uv 2X yz ~ • .2 ... ~ uv'xy'z, i ~ 1. De asemenea, IvxYI= [a] :S. q, iar vy *- A. ~i uv'xy'z E L pentru oriee i ~ O.

Demonstratie. Daca A.

Exemplul6.3 Teorema 6.4 se poate utiliza pentru a arata ca anumite limbaje formale nu sunt independente de context. Un exemplu simplu de limbaj care nu este independent de context este L = {a'b'c" l n > I}. Prin reducere la absurd, putem presupune contrariul, adica L este un limbaj independent de context. Atunei exista constantele p si 'l date de lema Bar-Hillel. Se alcge un numar natural k > p / 3 ~i cuvantul W = akb ek de lungime mai mare ca p. Din descompunerea fumizata de teorema 6.4 rezulta ca v ~i y contin eel mult una din literele a, b sau c; altfel prin iterare nu s-ar mai pastra ordinea alfabetica. Totusi prin iterare ar trebui sa se obtina acelasi numar de simboluri a, b
62

~i c, ori nu pentru orice i 2: 0 se poate obtine acest lucru. Rezulta ca L nu este un limbaj independent de context. Propozitia 6.1 Fie G 0 gramatica independenta de context. Atunci L(G) este infinit daca si numai daca exista w E L(G) astfel incat p < [w] s p + q, unde p si q sunt numerele furnizate de tcorema 6.4. Demonstratie. Daca L(G) este infinit rezulta ca exista w E L(G) cu [w] > p, deoarece 1: este 0 multime fin ita. Daca [w] s p + q atunci stop, altfel aplicarea teoremei 6.4 ~i alegerea lui i = 0, in proeesul iterativ conduce la un cuvant mai scurt, dar de lungime mai mare ca p. Dupa un numar finit de pasi se ajunge la un cuvant cu lungimea eel mult p + q. Afirmatia reciproca rezulta din aplicarea teoremei 6.4 ~i generarea unui sir infinit de cuvinte prin iteratie.

6.4 Exercitii
I. Sa se elimine recursivitatea la stanga pentru gramatiea cu A-regulile: A ::= aAb I bAa I AA I ab I ba. 2. Sa se elimine recursivitatea la stanga si apoi sa se obtina forma normala Greibach pentru gramatica cu regulile: E ::= E + TIT; T ::= T*F I F; F ::= (E) I a.

3. Sa se obtina forma normala Greibach pentru gramaticile cu regulile:


a) Al ::= A2A21 a, A2 ::= AlAI I b; b) A] ::= A2aA21 b, A2 ::= A]bA] I a

- 4. [Adaptare dupa Atanasiu & Mateescu (1990)] Folosind forma normala Greibach sa se arate ca orice Iimbaj independent de context, care nu contine cuvantul vid, cste gene rat de 0 gramatica independenta de context, tarn A-produqii, ale carei reguli sunt de forma A ::= a, A ::= aB, A::= aBC (A, B, C netcnninale oarecare, iar a un simbol terminal arbitrar.) 5. Sa se aplice procedeul evidentiat in rezolvarea exercitiului 4 asupra gramaticilor de la exercitiile 1-3. 6. [Forma norma/a operator] 0 gramatica independenta de context, tara Aproductii si care nu are reguli cu neterminale vecine in membrul drept se numeste gramatica operatoriala. Sa se arate ca orice limbaj independent de context, care nu coniine cuvantul vid, poate fi generat de 0 gramatica operatoriala. lndicatie. Se aplica procesul de la exercitiul 4 si se continua ell transformarea regulilor de forma A ::= aBC. 7. Sa se construiasca gramatiei operatoriale eehivalente cu gramatieile prezentate la exercitiile 1-3.

63

8. Sa se arate ca orice limbaj independent de context poate fi generat de gramatica G = (0., E, S. P) avand In P numai reguli de forma: A ::= IX, A ::= 13, a. 0.+,13 E E*. 9. Sa se scrie un program C/Java pentru nonnalizarea tip 2.

0 E

Chomsky a gramaticilor de

10. Sa se scrie un program C/Java pentru normalizarea Greibach a gramaticilor de tip 2. 11. Sa se scrie un program C/Java pentru normalizarea operatoriala a gramaticilor de tip 2. 12. Fie G 0 grarnatica independenta de context in forma normala Greibach si W E L(G) de lungime k (lw] == k). Sa se arate ca orice derivare a \sirului ware lungimea 13. Sa se arate ca limbaj ul L
=

k-I.

{a

"·1 n ?:: I}

nu este independent de context.

14. [Lema lui Ogden] Sa se demonstreze ca pentru orice limbaj L independent de context exista a constanta n E N, care depinde numai de L, astfel incdt orice cuvant W E L avand m ?:: n pozitii marc ate distinct, admite 0 descompunere w = uvxyz cu proprietatile: a) vy are eel putin 0 pozitie marcata; b) vxy are eel putin n pozitii marcate; c) uv'xy'z E L, pcntru orice i?:: O. 15. Sa se aplice lema lui Ogden pentru a demonstra lema Bar-HilleL 16. Sa se aplice lema lui Ogden pentru a arata ca urmatoarele limbaje nu sunt independente de context: a) L = {ambncPdq1 m = 0 sau n = p = q}; b) L = {ambncp1 n = max(m, p}; c) L = {anbrncp1 n =F m, m =F p, n =F p} . 17. [Adaptare dupa Tandareanu (1980)] Sa se arate ca orice limbaj independent de context peste un vocabular cu un singur simbol este un Iimbaj regulat.

64

7. Gramatici si automate
7.1 Gramatici liniare ~'ilimbaje regulate
Teorema 7.1 Fie G ~ (0., k, S, P) 0 gramatica liniara la dreapta 45. Atunei exista un automat finit nedetenninist (deei ~i unul determinist) M astfel incat L(M) ~ L(G).

Demonstratie . Fara a restrange generalitatea putcm presupune ca simbolul S nu

apare in membrul drept al nici unci reguli din P, iar fiecare regula are una din fonnele: A ::=a si A ::= aB cu A, BEn si a E k. Fie X rl 0. U k si automatul finit ncdetenninist M = (Qu{X}, k, 8, S, SI) unde 8 : (0. U {X} )Xk ~ p(n u {X}) este definita prin: {AIY::=aAEP}U{X}, Y:;t:X,Y::=aEP

5 (Y, a)

{A I Y ::= aA

P},

Y : X, y ::= a ~ P
Y-X,

0,

iar SI = {S, X} daca S ::= A E P si SI = {X} daca S ::= A rl P. Vom demonstra ca L(M) = L(G), prin dubla incluziune. Fie W E k*, w A, astfel indit w = aiai ... an, n 2: 1 ~i a, E k, i = 1,2, ... , n. Atunei W E L(G) daca si numai daca exista productiile D, ::= aiDi+l E P, eu 01 = S, i = 1,2, ... , n-l si D, ::= an E P. Deei exista starile SI, S2, ... , s-», unde Snn = X, iar Sl = S, Sn+lE SI, S;+1E 8(Si, a.), i = 1, 2, ... , n, eehivalent eu W E L(M). Este usor de vazut eft daca W E L(M) atunei W E L(G). Caz special: Daca W = A si W E L(G) atunei exista unica productie S ::= A E P, deci SI = {S, XL adica {S} (l {SJ} =I- 0, eeea ee este eehivalent eu A E L(M).

Teorema 7.2 Orice limbaj generat de

gramatica liniara" este regulat.

Demonstratie. Se aplica teorema 3.1, teorema 3.2 si teorema 7.1. Exemplul7.1 Fie gramatica G = (n, L, S, P), unde 0. = {S, A, B}, L ~ {a, b} si P aA I a, A ::=bB, B ::=aA I a}. S ::=

={

45

Din acest motiv gramaticile liniare se mai numesc ~i gramatici regulate. Rezulta, de aid, eli. familia limbajelor de tip 3 contine limbajele finite si este inchisa la operatiile de reuniune, produs si stelare (*). Astfel, Iimbajele de tip 3 sunt descriptibile cu ajutorul
46

A se vedea si propozitia 2.5.

expresiilor regulate, generabile de gramatici liniare Iii recunoscute de sisteme tranzitionale Iii deci de automate finite. 65

Un sistem AFN care recunoaste limbajul L(G) are starile {S, A, B, XL multimea starilor finale cste {X}, iar functia de tranzitie este: 1) a 0

{A X}

B X

{A,X}

b 0 {BJ 0

0
0

Teorema 7.3 Pentru orice limbaj regulat L exista

gramatica liniara G astfel incat L=L(G).

Demonstratie. Fie automatul finit determinist M = (Q, L, 8, qo, F) astfel incat L = L(M). Gramatica echivalenta G = (0, L, S, P) se construieste astfel: Q = Q, S = qo, iar pentru A. il: L(M) multimea regulilor P estc {p ::= aq I 8(p, a) = q} u {p ::= a I 1)(p, a) E F}. Daca A. E L(M) atunci qo E F si adaugam un simbol nou S, ca simbol de start ~i regulilc S ::= qo I A.. Gramatica obtinuta estc echivalenta cu 0 gramatica liniara prin eliminarea redenumirilor si definitia 5.1. Egalitatca L(G) = L(M) rezulta imediat. Exemplul 7.2 Fie automatul dat prin tabelul

I~:
Cu starea initiala qo si F = {qs}. Deoarece A. urmatoarele rcguli: S ::=qo I A.; qo ::= aq, I cqo I c; ql ::= aq. I bq-; q2 .r=bqi ] cq, I c. Dupa eliminarea redenumirilor se obtine: S ::= aqi I cqo I c I J; qo ::= aqi I cq, I c; ql ::= aq, I bq2; q2 ::= bq21 cq, I c.
E

L(M), in prima faza, rezulta

7.2 Automate pushdown


Un automat pushdown (cu mcmorie locala gestionata prin disciplina LIFO [eng. Last In First Out] - numita memorie pushdown) citeste banda de intrare (de la stanga la dreapta) folosind un numar de stari interne (ca si un sistem AFD sau AFN), dar tranzitia, in general nedeterminista, se face nu numai in raport cu starea anterioara si informatia curcnta de pe banda de intrare, ci ~i in functie de eea mai recenta informatie stocata in memoria auxiliara (prelucrata ea 0 stiva de capacitate infinita).
66

I
·
·

,I

Definitia 7.1 [APD] Un automat pushdown (sistem APD) este un sistem M = (Q, l:, F, 0, qo, Zo, F) unde Q, l:, qe, si F au semnificatiile cunoscute, teste 0 multime finita ~i nevida de simboluri care formeaza alfabetul pushdown, Zo E teste simbolul pushdown initial, iar 0 este functia de tranzitie 8 : Qx(l: u {A} jxl" -+ P(QXt*). Definitia 7.2 [Configura/ie] Fie M = (Q, t, I", 0, qo, Zo, F) un sistem APD. Orice triplet (q, W, a) E Qxt*Xt* se numeste configuratie a automatului M. Elementele configuratiei au urmatoarea semnificatie: q este starea curenta a unitatii de comanda a automatului; w este un cuvdnt peste alfabetul de intrare t, inclusiv A., care reprezinta partea necitita de pe banda de intrare'"; a reprezinta continutul memoriei stiva. Daca a = A atunei memoria stiva este vida. Definitia 7.3 [Mi:rcarea automatuluii Fie q, SEQ, a E l: u {2}, Z E F, W E t* ~i a, y E T". Configuratia (q, aw, Zo.) se afla in relatia I~ cu configuratia (s, w, yo.) si se serie (q, aw, Za) 1- (s, w, yo.) daca ~i numai daca (s, Y) E o(q, a, Z). Observatia 7.1 Miscarea automatului este posibila numai daca memoria stiva este nevida. Definitia 7.4 [inchiderea reflexiva $i tranzitiva a relatiei H Inchiderea reflexiva si tranzitiva a relatiei I~, otata prin n

astfel:

(qi, WI, 0.1) (q2, ~2, 0.2) daca (ql, WI, a}) (q-, W2, 0.2) . sau exista k configuratii (Pi, u., Pi), 1 = 1,2, .. " k, astfel meat (q., WI, 0.1) = (PI, ui, PI), (q-, W2, 0.2) = (Ph us, Pk) ~i (pi, u., Pi) I~ (p,«, U,+I, Pi+l), i = 1,2, ... , k-l.
, w

J~

!~,

se defineste

=:

Definitia 7.5 [Cuvdnt recunoscut prin tranzitie in stare jinala] Fie M = (Q, t, F, 8, q., Zo, F) un sistem APD si W E L:*un cuvant. Atunei w este aceeptrt (tecunoscut) de automatul M daca exista q E F ~i a E ['* astfel incat
(qo,

w, Zo)

I~

(q, A, a).

Definitia 7.6 [Limba) recunoscut prin start finale] Fie M = (Q, t, F, 0, qo, F) un sistem APD. Limbajul acceptat (recunoscut) de automatul M, notat L(M), este multimea tuturor euvintelor acceptate de M prin atingerea unei stari finale,

z.,

Exemplul 7.3 Fie Q = {qa, q., q2}, L = {a, definita astfel: 8(qo, a, Zo) = {(qt, A)}, 0(q2, b, a) = {(q2, A)}, 0(q2, cazuri. Fie M = (Q, t, r, 8, qo,

z;

b}, I' = {a, Zo}, F = {qo} si functia de tranzitie 0 ala)}, O(ql, a, a) = {(ql, aa)}, O(ql, b, a) = {(q2, A, Zo) = {(qo, An, c(q, x, Zo) = 0 in celelalte F). Se poate arata ca L(M) = {anbn 1 n > O}.

47

Capul de citire sc gaseste in dreptul primului simbol al cuvantului w. Se presupune ca, la


)c.

dreapta, dupa ultimul caracter al cuvanului w se afla sirul vid

67

Definitia 7.7 [Cuvdnt recunoscut cu memoria pushdown vidal Fie M = (Q, :E, I', &, qo, Zo, F) un sistem APD §i WE :E* un cuvant. Atunei w este aeeeptat (reeunoseut) de auto~atul M cu memoria pushdown vida" daca exista q E Q astfel incat (qo, w, Zo) I~ (q, A, A). Multimea tuturor cuvintelor acceptate de M cu memoria pushdown vida se va nota eu L,,(M) si este limbajul recunoscut de M eu memoria pushdown vida. Teorema 7.4 [Un limbaj recunoscut de un sistem APD cu start finale poate ft recunoscut st de un sistem APD cu memoria pushdown vida] Fie L(M) limbajul recunoseut de automatul pushdown M = (Q, :E, r, s, qo, Zo, F). Atunei exista un APD, notat M'=(Q', :E, I", &', qinit, X, 0), care recunoaste L(M) eu memoria pushdown vida, adica L,,(M') = L(M). Demonstratie. Fie Q' = Q U {qinit, qd unde qmit §i q, sunt doua elemente distinetc si noi in raport ell Q. De asemenea, consideram X un simbol nou in raport eu [§i formam I" = tV {X}. Daca definim 0' ca mai jos atunei se poate demonstra, prin dubla inc1uziune (Popovici si colectiv (1991», ca L,,(M') = L(M). Functia &' actioneaza conform urmatoarelor sapte legi: a) &'(qinit, A, X) ~ {(qo, b) &'(q, a, Z) = &(q, a, Z), pentru oricare q, a si Z astfel incat q ZEt; c) &'(q, A, Z) == &(q, A, Z) daca q E Q - F §i Z E 1; d) &'(q, A, Z) = &(q, A, Z) v {(q;\, An daca q E F §i Z E I'; e) S'(q, A, X) = {(q),.A)} daca q E F; f) o'(q", A, Z) = {(q;\,A)} daca Z E fv{X}; g) &'(q, a, Z) = 0 in toate celelalte cazuri.

z.xn,

Q, a

L,

Teorema 7.5 [Un limbaj recunoscut de un sistem APD eu memoria pushdown vida poate ji reeunoseut si de un sistem AP D ell start finale] Fie L,,{M) limbajul reeunoscut de automatul pushdown M = (Q, :E, r, S, qo, 0). Atunei exista un sistem APD, notat M' = (Q', L, r, s, qinit, X, {qr}), care recunoaste L,,(M) eu starea finala qr, adica L,,(M) ~ L(M').

z;

Demonstratie. Fie Q' = Q v {qinit, qr} unde qinit si qf sunt doua clemente distincte si noi in raport eu Q. De asemenea, consideram X un simbol nou in raport eu F si formam I" ~ru{X}. Daca definim S' ca mai jos atunci se poate demonstra, prin dubla incluziune (Popovici si colectiv (1991», ca L,,(M) "" L(M'). Functia S' actioneaza conform urmatoarelor patru legi: a) O'(qinit, A, X) = {(qo, ZoX)}; b) &'(q, a, Z) = Seq, a, Z), pentru orieare q, a si Z astfel incat q {A}, Z E r, c) &'(q, A, X) = {(qr, A)}, daca q E Q; d) &'(q, a, Z) = 0, in toate eelelalte eazuri. Q, a LU

48

Se observa

68

ca putem

alege F

0.

7.3 Limbaje independente de context $i automate pushdown


In continuare descricm legatura dintre sistemele APD si limbajele generate de gramatici independente de context. Teorema 7.6 Pentru orice gramatica independenta de context G "" (.0., L, S, P) care gcnereaza limbajul L = L(G) exista un sistem APD care recunoaste L. Demonstratie. Presupunem ca P contine reguli de forma u ::= v, cu lui = 1 si v E (.0. u l:)*. Construim automatul M = ({q}, L, .0. U L, 8, q, S, 0) cu functia de tranzitie definita prin urmatoarele trei reguli: 1. [expandare] 8(q, A, X) = {(q, ex) I (X ::= a) E P} pentru toate regulile multimii P; 2. [reducere] 8(q, a, a) = {(q, ),.,)},daca a E L; 3. lal~fel] 8(q, a, X) = 0, in toate celelalte cazuri. Se arata, prin dubla incluziune, folosind metoda inductiei complete (Popovici si colectiv (1991», caL(G) = L,JM). Exemplul 7.4 Fie gramatica G = ({S, A}, to, I, 2}, S, P) unde P consta din productiile: S ::= S21 A2; A ::= OAll 01. Se observa ca L(G) = {Onln2 I n, m > I}. Sistemul APD care recunoaste limbajul L(G) este M = ({q}, {O, 1, 2}, {S, A, 0, 1, 2}, 8, q, S, 0) unde S are urmatoarea definitie:
ffi

8(q, A, S) = {(q, S2), {q, A2)}; Seq, ),."A) = {(q, OAl), (q, Ol)}; Seq, 0, 0) = {(q, ),.,)}; 8(q, 1, 1) = {(q, A)}; 8(q, 2, 2) = {(q, ),.,)}; 8(q, 0, 1) = 8(q, 0, 2) = 8(q, 0, S) = 8(q, 0, A) = 0; 8(q, 1,0) = 8(q, 1,2) = Seq, 1, S) = Seq, 1, A) = 0; Seq, 2, 0) = 8(q, 2, 1) = 8(q, 2, S) = 8(q, 2, A) = 0. Teorema 7.7 Pentru orice sistem APD care recunoaste limbajul L cu memoria pushdown vida, exista 0 gramatica independenta de context care genereaza limbajul L. Demonstratie. Fie M = (Q, l:, F, 8, qo, Zo, 0) un sistem APD astfel 'incat L = L,.(M). Construim gramatica G = (.0., L, S, P) cu reguli de forma u ::= v astfel incat lui = 1, v E (.0. U L)*. Fie S un simbol special astfel lncat S ~ QXtxQ U L. Consideram multimea simbolurilor nctenninale ca fiind .0. = QXtxQ U {S}, iar fiecare element din QXtxQ de forma (q, Z, r) il vom scrie compact sub forma [qZr]. Productiile din multimea P se definesc folosind urmatoarele reguli: 1. [Start] Pentru fiecare q E Q introdueem productia S ::= [qoZoq]. 2. [$tergere] Pentru oricare a E L U {A} astfel incat (r, A) E o(q, a, Z) se introduce productia [qZr] ::= a. 69

3.

o(q, a, Z), unde Ui E I" (i = 1, 2, ... , k), consideram toate combinatii1e de k stan si, S2, ... , s, pentru a forma productii de forma [qZskI ::= a[rulsJ] [slu2s21... [Sk~lUkSk]' unde k> O.

[Compunere] Pcntru oricare a

{A} pentru care (r, U\U2.. ·Uk) E

Prin inductie completa in raport cu numarul de tranzitii (respectiv in raport cu lungimea derivarii) se arata ea LJ,,(M) c:;;; L(G) (respectiv L(G) c:;;; LJ,,(M». Pentru detalii se poate consulta Popovici ~i colectiv (1991). Exemplul 7.5 Fie Q = {qo, ql, q-}, L = {a, b}, r = {a, Zs}, si functia de tranzitie 0 definita astfel: o(qo, a, Zo) = {(qJ, aZo)}, 8(q!, a, a) = {(ql, aa)}, O(ql, b, a) = {(q2,A)}, O(q2, b, a) = {(q2,A.)},O(q2,A, Zo) = {(qo,A)}, 8(q, x, Zs) = 0, in eelelalte cazuri. Fie M = (Q, L, I", 8, qo, Zo, O). Se poate arata ca L,,(M) = {a'b" 1 n > O}. A se vedea si exemplul 7.3. Gramatiea de tip doi care recunoaste limbajul LJ",(M) construita pe baza , metodei data de demonstratia teoremei 7.7 arc 24 de productii, dupa cum urmeaza, Conform [Start] introducem trei productii: S ::= [qoZoqo]I [qoZOql] I [qoZOq2]. Conform [Compunere] pentru o(qo, a, Zo) = {(ql, aZo)} introducem urmatoarele noua productii: [qoZoqo] ::= a [qlaqo] [qoZoqo]; [qoZoqo]::= a [qlaqJ] [qIZoqo]; [qoZoqo]::= a [qlaq2] [q2Zoqo]; [qoZoqJ] ::= a [q.aq-] [qoZoqJ]; [qoZoqd ::= a [q.aq.] [q.Zeq.]; [qoZoql] ::= a [q.aq-] [q2Zoq!l; [qoZoq2] ::= a [q.aqs] [qOZOq2]; [qoZoq2]::= a [qlaqJ] [qlZOq2]; [qoZOq2]::= a [qlaq2] [q2Z0q2]; Folosind [Compunere] pentru 8(ql, a, a) = {(ql, aa)} obtinem 'inca noua productii: [q.aqs] ::= a [q.aqn] [qoaqo]; [qiaqo] ::= a [q.aq.] [qlaqa]; [q.aqo] ::= a [qlaq2] [q2aqa]; [qlaql] ::= a [qtaqo] [qoaqJ]; [qlaqd ::= a [q.aq.] [q.aq.]; [q.aq.] ::= a [q.aqi] [q-aq.]; [q.aq-] ::= a [qjaqn] [qoaqz]; [qlaq2] ::= a [qtaql1 [qlaq2]; [q.aq-] ::= a [qlaq2] [q2aq2]; Aplicam regula [$tergere] pentru O(ql, b, a) = {(q2, A)} si 8(q2, b, a) = {(q2, A)}. Obtinem productiile: [qlaq2] ::= b si [q2aq2] ::= b. Pentru tranzitia O(q2, A., Zo) = {(qo, A)}, obtinem productia: [q2ZoqO]::= A. Evident, A-produc!iile pot fi eliminate si se obtine 0 gramatica de tip doi, dar foarte complexa (in sensul ca marimea multimilor Q si Peste considerabila). Comparati cu gramatica obtinuta printr-o simpla modificare a gramaticii din exemplul 2.2.
70

7.4 Masini Turinl9 ~i automate liniar marginite


Definitia 7.8 rMTj masina Turing sau sistem M'r0 este 0 structura M = (Q, L, I', 0, qe, B, F) unde Q, E, qo ~i F au semnificatia uzuala (vezi, de exemplu, sistemele AFD, AFN sau APD), r este 0 multime finita si nevida care comine E, simbolul B (cu rol special, numit si blanc) ~i alte simboluri - intreaga multime r numindu-se alfabetul de lucru, iar 0 estefoncfia de tranzitie definita astfel: 0 : Qxf ~ Qxfxf S, D} unde S, D inseamna stdnga, respectiv dreapta.

Definitia 7.9 [Conjigurane] Fie M = (Q, E, r, 0, qo, B, F) un sistem MT. Se numeste configuratte un cuvant de forma o.qp unde 0., p E f*, iar q E Q. Semnificatia elementelor este urmatoarea: 0. este cuvantul de la ineeput pana la caput de citire-scriere, q este starea unitatii de control si peste cuvantul de la simbolul vizat (imediat din dreapta lui s) pana la ultimul simbol (diferit de blanc). Definitia 7.10 [Traniformarea configuratiilori Fie M = (Q, E, I', 0, qo, B, F) un sistem MT. Consideram simbolul ]- pentru a deserie relatia binara definita pe multimea configuratiilor. Fie configuratia X1X2 ... X,_lqxiXi+l ... Xn, cu i = 1,2, ..., n. Daca o(q, Xi) = (q', y, S) atunci: a) sufixele de blancuri dispar (se pot sterge secvente de tipul BB); b) daca i = 1 atunci nu exista deplasare la stanga; c) daca i = 2, ... , n atunci Daca o(q,
• XIX2 ... Xi.l q XiXi+l ... Xn 1 - X1X2 ... Xi.2 q '

Xi·l)'Xj+l ... Xn Xi+l ...

Xi) = (q',

y, D) atunci
x,

X1X2 ..

.x..i

q XiXi+l ...

1- X1X2· .. Xi.] Y q'

x-,

Consideram, de asemenea, simbolul reflexiva ~itranzitiva a relatiei 1-.

I~

pentm a descrie inchiderea

Se observa ca un sistem MT este mult mai puternic decat un sistem APD prin introducerea deplasarii in ambele sensuri pe 0 banda infinita care este folosita atat ca intrare, cat i?i ca iesire, Definitia 7.11 [Limbajul recunoscut de un sistem M11 Fie M = (Q, L, r, 0, qo, B, F) un sistem MT. Limbajul acceptat (recunoscut) de M, notat L(M), este definit prin: L(M) = {w 1 W E L*, exista rEF i?i c, P E r* astfel incat qow o.rp}.

I~

Observatia 7.2 Fie OM (Q, L, r, 0, qo, B, 0) un sistem MT. Atunci L(M)


0=

= 0.

Alan Turing: matematician., logician si criptanalist britanic (1912-1954) Sistemul descris aici este eel mai simplu, dar eehivalent (ca putere de calcul) cu alte extensii propuse In literatura de specialitate, 71
49 50

Observatia 7.3 Fie M = (Q, 2:,

r, 8, qn, B,

Q) un sistem MT. Atunci L(M)

L*.

Observatia 7.4 Intr"oducerea nedeterminismului asupra sistemelor MT nu creste puterea de acceptare. Mai precis, are loc teorema 7.8. Teorema 7.S Pentru orice masina Turing M exista L(M) = L(G). gramatica G, de tip 0, astfel incat

Demonstratie. Se poate urmari Hopcroft, Motwani & Ullman (2001). Definitia 7.12 [LEA] Un automat liniar marginit sau sistem LBA (eng. Linear Bounded Automata) este un sistem MT, nedeterminist care satisface, in plus, urmatoarele doua conditii: a) Multimea L contine doua simboluri distincte cu sernnificatie special a, notate prin # si $. b) Sistcmul MT nu se poate dcplasa nici la stanga simbolului #, nici la dreapta simbolului $. Mai precis: 8(q, #) = (q', #, D) ~i 8(q, $) = (q', $, S). Definitia 7.13 [Limbajul recunoscut de un sistem LEA] Fie M = (Q, 2:, F, 8, qo, B, F) un sistem LBA. Limbajul recunoscut de M, notat L(M), este definit prin: . L(M) = {w I W E 2:*, exista rEF ~i a, 13 E 1* astfel incat qO#w$l----=---+ arj3}. Definitia 7.14 [Gramaticii monotonii] gramatica (formala) sc numeste monotona daca regulile sale u ::= v au proprietatea ca lui Slvl·

Teorema 7.9 Urmatoarele afirmatii sunt adevaratc. a) Pentru orice gramatica dependenta de context (de tip I) G = (0, 2:, S, P) exista 0 gramatica rnonotona G' = (0, L, S, P') astfel lncat L(G') = L(G) - {A}. b) Pentru orice automat liniar marginit M exista 0 gramatica monotona G astfel incat L(M) = L(G). Demonstratie. Pentru a) se poate consulta, de exemplu, lucrarea Jucan si Andrei (2002). Pentru b) recomandam studierea lucrarii Hopcroft, Motwani & Ullman (2001). Exemplul7.6 o masina Turing care accepta limbajul L = {a'b'c" In> O} este M = (Q, L, I", 8, q., B, F), unde Q = {qs, q., q2, q3, q., q.}, 2: = {a, b, c}, I' = {a, b, c, x, y, z, B}, F = {q-}, iar 8 este data prin tabelul:

72

0 qo ql q2 q3 q4 qs

a (ql,x,D) (q., a, D) 0 (q-, a, S) 0 0

b 0 (q2, y, D) (q2, b, D) (qr, b, S) 0 0

c 0 0 (q-, z, S) 0 0 0

x 0 0 0 (qo,z,D) 0 0

(q4,y,D) (ql,y,D) 0 (q3,y,S) (qa.y.D) 0

z 0 0 (q2,z,D) (q3,Z,S) (qa.z.D) 0

B 0 0 0 0

(qs,B,D)
0

7.5 Exercitii ,
1. Sa se construiasca automatele finite (mecanismele de recunoastere: AFDI AFN) si apoi gramaticile liniare (mecanismele de generare) corespunzatoare pentru limbajele: Multimea cuvintelor binare cu un numar par de 0 si un numar impar de 1; Multimea cuvintelor peste alfabetul {a, b} care admit ca subsir cuvantul aba; c) Multimea cuvintelor peste alfabetul {a, b} care contin eel putin doua simboluri a vecine; d) Multimea cuvintelor peste alfabetul {a, b} care nu-l contin pe aba ca subsir; e) Mul timea sirurilor binare care contin secventa 10101; f) Multimea sirurilor binare care au al cincilea simbol 0; g) Muljimea sirurilor binare care sunt reprezentari ale numerelor naturale multiplu de 7. 2. Fie expresia regulata e "" ab* + b*a si L"" L(e). Sa se construiasca a) b) un sistem AFD care recunoaste limbajul L; 0 gramatica liniara care genereaza L. liniare care genereaza limbajelc recunoscute de a) b)

urmatoarele sisteme AFD:


a)

3. Sa se constuiasca gramatici

MI "" ({qo, q., q2, q3}, I}, 01, qo, {qo}), unde Ol(ql, 1) "" 01(q3, 0) "" qo; Ol(qo, 1) "" 01(q2, 0) "" q.; Ol(ql, 0) "" Ot(q3, I) "" q-; Ol(qo, 0) "" Ot(q2, 1) "" q3.

to,

b)

= qo; 02(qO, 1) = 02(q2,


1) "" q3

M2"" ({qo, q., q2,

Q3},

to, I}, 02, qo, {q., q2, q3}), unde


0)

= q2, 01(ql,

02(qt, 1) = 02(q3, 0) 0) = 02(q3, 1) = q2; 02(qO, 0) = 02(q2,

c) d)

M3 = ({qo, q., q2}, I}, 03, qo, {q2}) unde 03(qO, 0) 03(ql, 0) = q., 03(ql, 1) = q2, 03(q2, 0) = 03(q2, 1) = q2.
M,

to,

= qe, 03(qO, 1) = q., = qo, 54(qo, b) =


q.,
73

= ({qo, qi, q.}, {a, b}, 04, qo, {q2}) unde 54(qo, a) 04(ql, a) = q., 04(qt, b) = q2, 04(q2, a) = 54(q2, b) = qo.

e)

Ms:O= ({qo, q., q2, q3, qa, qs, q6}, I}, Os, qo, {q., q2, qi, qa, q-, qo}), unde 8s(qo, 0) os(q" 1) "" qt, 05(qO, 1) = q2, 85(qt, 0) "" 05(Q3, 0) = OS(q3, 1) "" 8S(q4, 0) = 05(Q5, 0) = q3, 05(ql, 1) = 05(q6, 0) = Q4, 8«q2, 0) = 05(q4, 1) q5, OS(q2, 1) = q6.
;0; ;0;

to,

4. Sa se construiasca grarnaticilc liniare care genereaza acelasi limbaj ea si eel recunoscut de automatul finit nedeterminist:

Ot qo qt q2 b)

0 {q., qd {q-, q2} {q., q2}

1 {qs} {q.} {qo}

N2

= ({ qo,

q 1, qs}, {O, I}, 02, qo, {q2}), unde 82 este definita prin tabelul: 02 qo ql q2 0 {qo, qJ} {qe, q2} {q.} 1 {qi} {q2} {q2}

03 qo

0 {qo, qt} {q2, q3} {qz} {q3}

1 {q2} {qil {Ql, q3} {qs} seturi de

q]
q~ Q3 5. Sa se construiasca productii: a) S ::= aSb S ::=bSa S ::= SS S ::= A.

sisteme APD pentru grarnaticile eu urmatoarele b) E::=E+TIT-EIT T::=T*FIT/FIF F ::= (E) I a cuvintelc generate

6. Construiti sisteme APD care recunosc independente de context ell productiile: a) S ::= as I aSbS I A b) S ::= A.I aSbS IbSaS c) S ::= A I SS I aSb

de gramaticile

74

7. Construiti sisteme APD care reeunosc cuvintele generate de gramaticile eu productiile: a) S ::= AB; A ::= BC I a; B ::= CC I b; C ::= a. b) S ::= AB I BC: A ::= BA I a; B ::= CC I b; C ::= AB I a c) S ::= AB I CD I E; A ::= OAl I A; B ::= 2B I A: C ::= OC I A; D ::= ID21 ;t.;E ::= OE2 I F; F ::= IF I ..(

8. Sa se estimeze numarul simbolurilor neterminale ale gramaticii construite pe baza teoremei 7.7 daca card(Q) == m ~i card(L) = n.
9. Scrieti un program C/Java care sa simuleze functionarea unui sistem APD.

10. Sa se construiasca automate pushdown care recunosc limbajele:


a) b) c) L = {w#Revers(w) I WE {a, b}"}, unde # este un simbol distinct de a si b: L = {w I WE {a, b}*, Na(w) = Nb(w)}; L = {a'b'a] n ~ O}.

11. Sa se arate ca orice limbaj regulat este acceptat de un sistem APD. 12. Sa se construiasca sistemc APD care rccunosc limbajele specificate urmatoarele expresii regulate: a) a*b+ab*; b) [a+b(ab)*(a + bb)](a+bf; c) (ab)*(b+aa) . . 13. Sa se arate, folosind forma normala Greibach, ca orice limbaj independent de context, care nu contine cuvantul vid, este acceptat de un sistem APD care nu efectueaza ;t.-deplasari (functia de tranzitie este definita pe Q x 2: x I") 14. Cu notatiile cunoscute, un automat su doua stive este un sistem APD2 = (Q, 2:, I', &, qo, F), unde functia de tranzitie este definita astfel: s : Q ~ (l: uP,}) 'x (iu {;t.})2-)0 P(QX(iu {;t.} Pentru a E l: u {A} ~i U1, U2, VI, V2 E lU {A}, daca (p, VI, V2) E Seq, a, UI, U2) atunci se considera ca U1, situat in varful primei stive, va fi inlocuit cu VI, iar U2, situat in varful celei de-a doua stive, va fi inlocuit cu V2. Exercitiul cere sa definiti formal notiunea de configuratie si transformarea configuratiilor (miscarea automatului) . prin

i\

15. Sa se scrie un program C/Java care accepta la intrare 0 gramatica independenta de context si furnizeaza, Ia iesire, automatul pushdown care recunoaste limbajul gene rat de gramatica acceptata. 16. Sa se scrie un program C(Java care accepta Ia intrare un automat pushdown care recunoaste limbajul L si fumizeaza, la iesire, gramatica independenta de context care genereaza limbajul L.
75

17. Pentru masina Turing de la exemplul 7.6, aratati ca

ib2c2

L(M).

18. Sa se arate ca orice multime regulata este recunoscuta de un sistem MT. 19. Sa se construiasca sisterne MT care sa recunoasca limbajele acceptate de sistemele AFD din exemplele 4.1 ~i4.3. 2D. Sa se construiasca sisteme MT pentru a recunoaste limbajele: a) LJ =:: {ww I W E {D, I} *}; b) L2;;:: { WE {D, 1}* I W = Revers(w)}; c) L3 = { WE {D, 1}* I ware lungime para};

76

8. Proprietati de inchidere
8.1 Reuniunea limbajelor
Definitia 8.1 Fie L 0 familie oarecare de limbaje. Spunem ca familia L este inchisa la operatia # daca \iLl, \iL2 (Li
EL

si Ls

EL

=> L, # L2 E

L ).

in continuare se presupun cunoscutc notatiile introduse in §1.2 referitor la operatiile cu limbaje. Prin Li vom desemna familia limbajelor de tipul i, in sensul definitiei 5.1. Evident Lo este familia limbajelor generate de gramatici de tip 0 (f"ararestrictii) si recunoscute de masini Turing. Teorema 8.1 Familia limbajelor dependente de context este 'inchisa fap de reuniune. Demonstratie. Fie Li si L2 doua limbaje dependente de context generate de 1 gramaticile G1 = (0.1, L1, PI ) ~i = (0.2, Lz, S2, P2) astfel incat gramaticile G = (0.1, Ll, Si, PI - {SI ::= A}) ~i G2 = (0.2, Lz, S2, Pr {S2 ::= A}) sa fie dependente de context, iar 0.1 (10.2 = 0, 0.1 (1 Lz = si 0.2 (1 Ll = O. Fie S ~ 0.1 U 02 U Ll U L2. Formam grarnatica G = (0.1 U 02 u{S}, L1 U Lz, S, P) unde P = (PI - {SI ::= A}) U (P, - {S2 ::= A}) U {S::= w ] SI ::= WE P1

s.,

o,

sau S2 ::= WE Ps}. Aratam ca L = Li U L2 este generat de gramatica G. Evident G, tara productia S ::= A, este dependenili de context (a se vedea definitia 5.1, pentru legatura cu Iimbajele dependente de context). Fie W E L(G). Presupunem di w A. Atunci exista 0 derivare S ~ w. La primul pas se poate aplica, fie 0 productie din PI, fie 0 productie din P2. Presupunem ca initial se aplica 0 productie din ~1' urmatoarele productii sunt tot din PI, deoarece 01 (10.2 = O. Rezulta ca S1 --+ w, adica W E L(G1). Analog pentm aplicarea primei productii din P2• Daca w = f.., atunci S ::= f.., adica Si ::= f..,

*'

sau S2 .:= f... Deci w a Li U L2. Fie w e L, U L2 _ {A}. Atunci w e L, (S1 ~ w, 'in G1) sau WE L2 (S2 ~ w, in G2). Prill inlocuirea primului pas al derivarii ~i aplicarea productiei corespunzatoare din P, obtinem S ~ w, in G. Pentru w = A raponamentul este banal.

Observata 8.1 Enuntu1 si demonstratia de mai sus pot fi refacute pentm a arata inchiderea la reuniune a familiilor Lz ~i L3.

77

8.2 Familia limbajelor regulate


Conform teoremei 3.3, familia limbajelor regulate este cea mai mica familie de limbaje care contine Iimbajele finite ~i este inchisa la reuniune, produs (concatenare) si la operatia * (inchiderea Kleene). Trebuie remarcat ca familia L, include strict familia limbajelor finite. Teorema 8.2 Fie L un alfabet si L ~ 1:* un limbaj rcgulat. Atunci P regulat - L este un limbaj

Demonstratie. Daca L este un Iimbaj regulat atunci exista M = (Q, L, 0, qo, F) un sistem AFD astfel lncdt L(M) = L. Atunci sistemul MI = (Q, 1:,0, qo, Q - F) este considerat astfel incat L(MJ) = 1:* - L. Teorema 8.3 Familia limbajelor regulate este inchisa la operatia de intersectic. Demonstratie. Se foloseste faptul di A n B = C(CA u CB), unde prin CX se noteaza complementara multimii X. Deoarece L3 este inchisa Ia complementara si la reuniune rczulta ca este inchisa si la operatia de interesectie. Observatia 8.2 F~ilia limbajelor regulate peste un alfabet L, fiind inchisa la reuniune, intersectic iii complementara, formeaza 0 algebra booleana in care suma booleana este reuniunea, produsul boolean este intersectia, iar complementul unui element este obtinut prin fonnarea limbajului complementar (diferenta pana la 1:*.)

8.3 Familia limbajelor independente de context


Teorema 8.4 Familia L2 este inchisa la reuniune. Demonstratie. Fie L, si L2 doua limbaje independente de context generate de gramaticile G1 = (nJ, 1:1, Sr, PI ) si G2 = (02, ~, S2, P2) astfeI inc at gramaticile GI = (01, 1:1, SI, PI - {SI ::= A}) si G2 = (02, Lz, S2, P2 - {S2 ::= A}) sa fie independcnte de context, iar 01 n O2 = 0, 0:1 n 1:2 = 0 iii 0:2 n 1:1 = 0. Fie S ~ 01 U 0:2 U 1:1 U 1:2. Formam gramatica G = (01 U 0:2 u{S}, Ll U L2, S, P) unde P = PI U P2 U {S ::= SI, S ::= S2}' Este usor de ararat ca L = LI U L2 este generat de gramatica G. Evident redenumirile pot fi eliminate (propozitia 5.3), daca acest lucru este necesar in aplicatii. Teorema 8.5 Familia L2 este inchisa la operatia de concatenare (produs). Demonstratie. Fie L. iii L2 doua Iimbaje indepcndente de context generate de gramaticile G1 = (01, LI, SI, PI ) si G2 = (0:2, ~, S2, P2) astfel incat gramaticile GI = (0], ~], SI, P, - {SI ::= A}) iii G2 = (02, 1:2, S2, P2 - {S2 ::= A}) sa fic 78

independente de context, iar 0.1 n 0.2 = 0, .0.1 n L.2 = 0 si .0.2 n L.I = 0. Fie S ~ 01 U 0.2 U L.l U ~. Formam gramatica G = (0.1 U .0.2 u{S}, L.I U L.2, S, P) unde P = PI U P2 U {S ::= SIS2}. Este usor de ararat ca L = LIL2 este generat de gramatica G. Teorema 8.6 Familia Lz este inchisa la operatia * (stelare). Demonstratie. Fie L un limbaj independent de context generat de gramatica GI = (0.1, L.I, SI, PI) astfel incat gramatica GI = (0.1, L.I, SI, PI - {SI ::= A}) este independenta de context. Fie S ~ .0.1 U L.I . Formam gramatica G = (0.1 U {S}, L.I, S, P) unde P = PI U {S ::= SSI I A}. Este usor de aratat ca L* este generat de gramatica G. Evident A-productiile pot fi eliminate (propozitia 5.4), daca acest lucru este neccsar in aplicatii. Observatia 8.3 Daca L este un limbaj de tip i (i = 2 sau 3) atunci L + estc de tip i. Teorema 8.7 Familia L2 nu este inchisa la operatiile de intersectie si complcmentara. Demonstratie. Consideram limbajele independentc de context L] = {anbmcm n 2: 1, I m 2: I} si Lz = {a"bncm In 2: 1, m 2: I} generate de gramaticile G] = ({SI, AI, Bi}, {a., b, c}, SI, {SI ::= AIBI, Al ::= aAl I a., BI ::= bBlc I bc}) si G2 = ({S2, A2, B2}, {a, b, c}, S2, {S2 ::= A2B2, A2 ::= aA2b lab, B2 ::= CB2 I c}). Evident LI n L, = {a'b'c" I n 2: I} care nu este independent de context, dupa cum a fost justificat in cxemplul 6.3. Deci Lz nu este inchisa la intersectie, Daca L2 ar fi inchisa la - complementara, atunci ar trebui sa fie inchisa si la intersectie deoarece Lz este inchisa la reuniunc, iar in teoria multimilor are loc relatia An B = ceCA u CB). Folosind principiul reducerii la absurd deducem ca Lz nu este inchisa la complementara. Teorema 8.8 Fie L E L2!j-iR L3, L,

= L n R si L, = L - R. Atunci L, E L2 (i = 1,2).

Demonstratie. Este suficient sa dernonstram ca LI E Lz. Deoarece familia L3 este inchisa la complementara (R E L3 conduce la CR E L3), iar L - R = L n CR, va rezulta ca !j-i 2 E Lz. L Fara a restrange generalitatea putem continua in urmatoarele ipoteze: a) L si R sunt limbaje peste acelasi alfabet L.; b) multimea L u R nu contine cuvantul vid A. Fie M = (Q, L., 8, qQ,F) sistemul AFD care recunoaste limbajul R, L(M) = R. Daca F = {fi, f2, ... , fm} atunci consideram M, =(Q, L., 8, qQ, {ti}) si R, = L(M), i = 1, 2, ... , m. Fie G = (0., L., S, P) 0 gramatica de tip 2, in forma normala Chomsky, care genereaza limbajul L, L(G) = L. Este evident ca L (1 R = (L n Ri) u (L n R2) u ... u (L n Rm). Prin unnare este suficient sa aratam ca L, = (L n Ri) este independent de context, cu i oarecare in multimea {I, 2, ... , m}. Invocarea proprietajii de inchidere a familiei Lz 1a rcuniune va incheia demonstratia.
79

01

Construim G, = (01, :E, Sl, PI) gramatica independenta de context astfel incat (0. U :E) x Q x Q, SI = (S, qo, fj) si PI contine toate productiile de forma: a. (A, q, ql) ::= (B, q, q2) (C, q2, qi), unde q, qi, qz E Q, iar A ::= BC E P. b. (A, q, ql) ::= (a, q, q.), unde q, ql E Q, iar A ::= a E P. c. (a, q, ql) ::= a, a E L, Seq, a) = ql.

Faptul ca L(Gl) = L n ~i rezulta din justificarea urmatoarelor afirmatii: • a) CA, qr, CL)-------'" (Xi, qi, ql) (X2, q., qs) ... (Xn+l, qn, CL)¢:> A --> XlX2 ... Xn+l, oricare A, XI, X2, ... , Xn+1 E .0, q E Q. b) (ai, q., qs) (a2, q., q3) ... (a" qn, qn+l) -------+ aia, ... a, ¢:> S(ql, a.a, ... an) = qn+l. • Intr-adevar, fie w = ala2 ... a., ~ L(Gl), deci SI ~ a.a, ... ~; (S, qo, fj) (AI, qo, q1) ... (An, qn.l, fj) -.._)o (ai, qo, ql) ... (a." qn.l, fj) --)a.a, ... an, prin aplicarea productiilor in ordinea 1), 2) si 3), In final. Prin urmare, conform a) obtinem S -.._)o AlA2 ... An, iar conform b) rezulta S(q\, aia, ... a.,) = fj. Cum f E F rezulta W E R. Obpnem, de asemenea, existenta productiilor Ai ::= a., i = 1, 2, ... , n. De ascmenea rezulta si S ~ AIA2 ... An ~ a.a; ... an, echivalent cu W E L. In final obtinem w e L n R. in partea a doua a demonstratiei consideram W = aiaz ... an E L n R. Din W E R, deducem cxistenta starilor qi, q2, ... , qn-I astfel inca! qi = S(qo, a.a, ... a.), i = 1, 2, ... , n-I. In p:lus, f = S(qo, ala2 ... an). Derivarea S-------+ ala2 ... a., poate fi scrisa astfel S ~ A1A2... An ~ a.a, ... an. Aceste rezultate permit asamblarea unei derivari in GI: SJ = (A, qn, £i)~ (AI, qo, ql) ... (An, qnl, fj) ~ (aI, qo, ql) ... (an, qn-I, f;) ~ ala2 ... a." adica wE L(GI).
-.._)o

Teorema 8.9 Consideram transformarea de substituire definita asupra limbajelor ea in definipa 1.8. Familia limbajelor independente de context este inchisa la substitutii, Demonstratie. Fie L un limbaj independent de context peste L, iar pentru fiecare a

E L, fie La alfabetul asociat lui a. Fie s: l:* ~ P«

UL

)*) substitutia lui P in

P«UL

)*). Evident s are urmatoarcle proprietati (din definitia 1.8):

1. pentru oricare a E L, sea) c;;:;; L.~; 2. S(A)={ A}; 3. pentru oricare i, 1 ::::; i ::::; daca a, E L atunei s(ala2 ... ilk) = k, s(al)s(a2)'" S(ilk). Presupunem ca, pentru fiecare a E L, sea) este un limbaj independent de context. Trebuie sa aratam ca sell este limbaj independent de context, Conform ipotezei, exista gramaticile G = (0, :E, S, P) ~i G, = (Oa, :Ea, Sa, Pal astfel incat L = L(G) ~i sea) = L(Ga) pentru oricare a E :E. Presupunem ca Oa n .Qb = La n Lb = 0 pentru a 7= b ~i pentru fiecare a, bEL avem n" n Lb = 0 si 0 n = 0. Daca A E L U La (adica S ::= A E P sau Sa ::= A EPa, a E :E atunci trebuie ca (.0, L, S, P ~ { S ::= An ~i (0., La, Sa, P, ~ { Sa ::= A}) sa fie gramatici independente de context. Definim transformarea t: 0 U :E U {A} --+ 0 U {Sa I a E L} U {A} prin teA) = A; t(X) = X pentru oricare X E .0, tea) = Sa pentru oricare a E L astfel incat,

n.

80

prin extensie, rezulta ca pentru oricare x., X2, ... , x, t(XIX2 Xn)= t(XI)t(X2)... t(Xn). ...

0.

{A} are loc relatia

Formam gramatica GI = (0.1, LI, S, PI) astfel indit 0.1 := 0. U

(U n, ),LI =

ULa , iar PI = cUPa )

{X ---+ ::= tea) I X ::= a

Pl.

Evident GI = (0.1, L), S, P, ~ {S ::= A}) este independenta de context. Se arata, prin dubla incluziune, ca L(G}) = seLl. a) s(L) c;;; L(G1): Fie W E s(L) =

Us(a), deci exista a

L astfel incat W =

sea). Daca a = A atunci exista, in gramatica G, productia S ::= A, deci in GI exista productia S ::= teA), adica S ::= A. Obtinem SeA) = {A}, adica W = A si W E L(Gd. Daca a *" A atunci exista, In gramatica G, simbolurile terminale a}a2... ak astfel incat 0.= aja2 ... ak. Deoarece sea) = s(a})s(a2) ... s(<ik),rezulta ca pentru fiecare i, 1 ~ i ~ k exista w, E s(a.;,)si W = WIW2 Wk. Din a E L = L(G) rezulta ca exista, in G, ... deri . envarea S· ~ (XI ~ * 0.2 ~ • ... ~ .. ap = a ( =ala2 ... ai). Pnn aplicarea transformarii t obtinem existenta, in GI, a derivarii S ~ t«X2) ~ ... ~
i

t(al) ~ " Sa .. · Sa . , * . ~WI,l=

t(ap)

=
~
WE

t(a)

= t(al) t(a2) ... t(<ik) = Sa


;

Deoarece S(ai) = L( G" ) atunci exista In fiecare Gai, derivarea Sa 1,2, ... , k. Prin unnare Sa b) L(G]) c;;;s(L): Fie
I

w, in GI !li S ~

Sa

Sa· .. Sa t ~
2-

WjW2... Wk = w. in conc1uzie,
WE

L(G1). (XI~
a2

L(GI), adica exista derivarea S ~

ap = w. Deoarece multimile de neterminale ale gramaticilor din ipoteza sunt disjuncte (am presupus ca Q n Q, = 0 pentru oricare a E L) productiile din PI de forma X ::= tea), unde X ::= a E P, pot fi permutate cu
productiile din

... ~

UP
2-

a,

astfel incat initial sa nu se utilizeze productii din


w,
E

UP

Deci exista 0 derivare S ~ incfit w,


=

{Sa I a
E

L}*. Prin unnare exista k 2:1 astfel w, rezulta ca Sa


1

Sa ~

Sa ... Sa

J:

si ala2 ... ak

L(G). Cum S ~

Sa, ... Sa, Sa


w,

W si apoi obtinem descompunerea w = WIW2 Wkastfel incat ...


j

~
E

w, in GI si deci si in Ga ,pentru
E

i = 1,2, ... k. Se mai poate spune ca


E

L( G Uj)' adica w,

s(ai), i = 1, 2, ... , k. In concluzie rezulta ca W

s(atls(a2) ... s(ak) = sla.a, ... <ik)~ seLl· Observatia 8.4 Familia limbajelor indcpendente de context este inchisa la homomorfisme.

81

Definitia 8.2 o masina secventiala generalizata (eng. gsm: generalized sequential machine) sau traducator secvential generalizat este sistemul M = (Q, L, !J.,0, qo, F) unde Q, L, qo si F au semnificatia cunoscuta, !J. este 0 multime finita ~i nevida, reprezentand alfabetul de iesire, iar 0 : Q x L ---)P(Q x !J.*) este functia de tranzitie, Observatia 8.5 Un sistem gsm este un sistern AFN care, in plus, fatA de banda de intrare (care contine euvinte peste 1:) este prevazut ~i cu 0 banda de iesire (pentru manipularea cuvintelor peste !J.). Faptul ca (q2, u) E 0(q1, a) arata trecerea din starea q1 in starea qi, cand capul de citire a intalnit simbolul a, dar si emiterea cuvantului u E ~* la iesire. Functia 0 se extinde la 1:*, 'in mod obisnuit. Definitia 8.3 Fie M = (Q, l:, ~, 0, qo, F) un sistem gsm. Transformarea gsm definita de M este functia gM : L* -)- P(!J.*) definita dupa cum urmcaza: Fie u E l:* oarecare. Atunci gM(U) = {w I W E ~*, exista q E F astfel Inem (q, w) E o(qo, u)}. Daca L ~ l:* atunei gM(L) =

UgM (u).

UEL

Transformarea gsm inversa este


gM(V)}. Daca L ~ N atunei

«: ~* -)- P(l:*) data de g~)(u)

{v I u E

g;} (L)

{v I exista u E L astfel incfit u E gt...t(v)}.

Teorema 8.10 Oriee clasa de limbaje peste alfabetul l: inchisa la substitutii intersectie eu limbaje regulate estc inchisa la transformari gsm.

finite si

Consideram substitutia finita s: 1: -)- P(Q x l: x !J.*x Q) definita astfel incat pentru oricare a E 1:, sea) = {(ql, a, u, q2) I q., q2 E Q, u E !J.*, (q., u) E O(ql, a)}. Fie limbajul R ~ (Q x 1: x ~* x Q)* definit prin R = {«qo, a., UI, q.) (q., a., uz, q2) ... (qn-I, an, u., qn) I qn E F, (q., u.) E O(qi_l,ail, i = 1,2, ... , n}. Limbajul R este regulat deoarece este acceptat de automatul finit nedeterminist A = (Q, Q x l: x ~* x Q, 01, qo, F), eu q2 E ol(ql, (q., a, u, q2» daca si numai daca (q2, u) EO(ql, a) pentru orieare ql, q2 E Q, U E A* si a E l:. Definim homomorfismul h : Q x l: x A* x Q -)- !J.*prin h(ql, a, u, q2) = u, pentm orieare ql, q2 E Q, u E !J.*si a E l:. Atunei pentru orieare L E C, rezulta g}..!(L) h(s(L)nR). = Sunt valide echivalentele: • W E h(s(L) n R) daca si numai daca exista a E s(L) n R astfel incat w =
• h(a); a E sell n R daca si numai daca exista VEL astfel incat a E s(v) n R; deei a = (qo, a], UI, qd (q., a2, U2, q2) ... (qn-I, an, u., qn), qn E F, (q., u.) E

= (Q, L, ~ 0, qo, F).

Demonstratie. Fie c

clasa de limbaje cu proprietatea din enun] ~i sistemul gsm M

O(qil, 31),i = 1,2, ... , n; v = ala2 ... an. Prin urmare h(a) = UIU2 Un. Deci W E h(s(L) n R) dad ~i numai daca exista ... cuvintele v = ala2 ... an E L, W = UIU2 Un E A*, stan le qo, q., ... , qn E Q, qn E F astfel incat (q., u.) E O(qi_l,ail, i = 1,2, , n, eehivalent eu W E g1l..t{v).

82

Deoareee gM(L) = h(s(L) r, R) pentru L E C, iar C este inchisa la substitutii finite si intersectia eu limbaje regulate obtinem: L E C => s(L) E C ~ s(L) n R E C ~ h(s(L) n R) E C ==> gM(L) E c. Observatia 8.6 Deoarece familiile t, (i = 2, 3) satisfac conditiile teorcmei 8.10 rezulta cii acestea sunt inchise la transformari gsm.

8.4 Exercitii
1. Sa se demonstreze ca familia L3 este inchisa la reuniune si concatenare prin proieetarea de gramatici care genereaza limbajele ce intervin. 2. Daca L este limbaj regulat atunei Sub(L), Prej{L) ~i Sl{/(L) sunt limbaje regulate.

3. Fie 2: un alfabet, iar L, si L2 limbaje peste 1:. CMu} stang al unui limbaj L, in
raport cu un limbaj L2, notat L2 \ L1, este definit prin L, \ L, = {v! uv ELl, U E L2}. Fie x E ~*, un cuvant peste ~. Derivata stanga a lui Li in raport eu x, notata prin Osx(L1), este limbajul {x}\L1 = {v I xv E Li}. Analog se definesc catul la dreapta si derivata la dreapta: L. / L2 = [u I uv E Li, v E L2}, oox(Ld = {u ! ux E Li}. Daca L, ~i L2 sunt limbaje regulate atunci catul la stanga (resp. la dreapta) allui L, in raport cu L2 este un limbaj regulat, Operatia de derivare (la stanga sau la dreapta) aplicata pentru un limbaj regulat si un cuvant peste acelasi alfabet conduce la un limbaj regulat. 4. Fie 2: un alfabet, iar L, si L, 1imbaje regulate peste L, generate de gramaticile liniare 1a dreapta G1 ~i O2. Sa se construiasca grarnatiei liniare la dreapta care genereaza limbajele: L, n L2, L, U L2, L1L2. Sa se considere urmatoarele eazuri: a) G1 = ({S, A, B}, {a, b, e}, S, reS, A), (S, abc), (A, aA), (A, B), (B, bbS), (B, b)}) ~i G2 = ({S, A, B, C, D, E}, {a, b, c}, s, {(S, aC), (S, aA), (S, bE), (S, b), (A, aA), (A, bE), (A, b), (B, bE), (B, b), (C, bD), (D, e), (E, bS)}). b) G1 = ({S, A}, {a, b}, S, {(S, as), (S, bA), (S, a), (A, aA), (A, bS), (A, b)}) si O2 = ({S, A}, {a, b}, S, {(S, as), (S, aA), (S, a), (A, hA), (A, b)}). c) G1 = ({S, A, B, C}, {a, b}, S, {(S, aC), (S, bA), (A, aB), (A, bS), (A, b), (B, aA), (B, bC), (C, as), (C, bB), (C, a)}) si G2 = ({S, A, B, C}, {a, b}, S, {(S, aC), (S, bA), (S, a), (S, b), (A, aB), (A, bS), (A, a), (B, aA), (B, bC), (B, a), (B, b), (C, as), (C, bB), (C, b)}).

5. Fie limbajul L genereaza L* .

{afbc)"

!n

2:: O}. Sa se construiasca

gramatica regulata care

6. Fie L un limbaj regulat si U c L. Este U, intotdeauna, un limbaj regulat?

83

7. Sa sc construiasca gramatica care genereaza limbajul L n R, pentru fiecare din situatiile: a) L = {a'b" I n ~ I} si R este limbajul aeceptat de automatul N = ({qo, q.}, {a, b}, 8, qo, {qd), unde 8(qo, a) = {qs}, o(qo, b) = {qi}, 8(ql, b) = {qn}, o(q], a) = 0. b) L = {w I w E {a, b}*, N.(\v) = Nb(W)} si R este limbajul recunoscut de automatul N = ({qo, qi}, {a, b}, 0, qo, {q.I), unde 8(qo, a) = {qd, 8(qo, b) = {qo}, 8(q], b) = {qll, o(q], a) = 0.

8. Sa se arate ca limbajul L independent de context.

{a, b, c}* - {anbncn I n 2: I} este un limbaj

9. Fie L = {w I W E {a, b}*, Na(w) = Nb(W)}. Sa se construiasca 0 gramatica pentru limbajul seLl unde sea) = {O'T" I n ~ I} si s(b) = {wRevers(w) I WE {O, 1, 2}*}. 10. Sa se arate ca exista un algoritm care sa decida daca doua limbaje regulate sunt egale sau diferite. 11. Sa se arate ca familia limbajelor operatia Revers. independentc de context cste inchisa la

12. Sa se demonstreze ca multimea tuturor cuvintelor de lungime para dintr-un limbaj independent de context este un limbaj independent de context. 13. Fie L = {OnIn I n ~ I} ~i sistemul gsm M = (Q = {qo, qi}, L = {O, I}, ~ = {a, b}, 0, qo, F = {q.I), unde 8(qo, 0) = {(qo, aa), (qi, b)}, o(qo, 1) = {(qo, a)}, O(ql, 1) = 2n {(ql, A)}. Sa se arate cagM(L) = {a bI n ~ O}. 14. Sa se arate ca limbajele Pascal, C++ ~i Java nu sunt independente de context.

It

84

9. Specificarea sintaxei limbajelor


Specificarea sintaxei unui limbaj contribuie alaturi de specificarea semanticii acestuia la ceea ce, global, se numeste specificarea limbajului . Sintaxa limbajului permite determinarea sirurilor de simboluri (cuvintelor) care reprezinta texte sau programe corect construite (din punet de vedere al regulilor sintaetice) in limbajul respectiv. Semantica limbajului deserie intelesul asoeiat unui text/program pomind de la conceptele de baza ale limbajului. De obicei, specificarca sintaxei unui limbaj artificial, in special un limbaj de programare, se face eu ajutorul unui mecanism de descriere BNF sau EBNF (Backus/Extended Backus Naur Form) care este eehivalent ca putcre generativa eu gramaticile independente de context.

9.1 Limbajului C+·~


Limbajul C++ a fost dezvoltat la inceputul anilor '80 de catre Bjame Stroustrup de la laboratoarelc AT&T Bell. Este un supraset al limbajului C, eel care a fost creat in 1972 de catre Dennis Ritchie. C++ pastreaza viteza, eficienta si simplitatea limbajului C pe care-l imbunatateste si 11completeaza cu support pentru abstractizarea datelor ~i proiectarea orientata obiectual. Definitiile fonnale, de mai jos, introduc, partial, un supra-set allimbajului C++. Doi termeni: declarare ~i dejinire (prin definire se intelege declarare + . inittalizares joaca un rol important in specificarea programelor CIC++. In cazul definitiilor Tara initializator, variabilcle primesc valori implicite, echivalente lui 0 (0 pentru tipuri numerice, cuvantul vid (A) pentru siruri de caractere, valoarea NULL pentru pointeri). Declaratiile introduc nume In unitatile de program (blocuril unitali de translatare). In general declaratiile nu sunt ~i definitii. Urmatoarele situatii nu eonstituie definitii: (1) Se declara 0 functie Tara a-i specifica si corpul; (2) Declaratia coniine speeificatorul extern si nu are initializare sau corp de functie; (3) Se declara un membru static intr-o declaratie de clasa; (4) Se declara un nume de clasa; . (5) Se descrie 0 declaratie typedef. Declaratiile pentm variabile pot specifica si tipul legarii: intern sau extern (introdus prin intermediul clasci de memorare). De asemenea, declaratiile sau definitiile pot coniine calificatori cv (const sau volatile) care definese modificabilitatea obiectelor precizate. Modul de aplicabilitate a1 calificatorilor cv asupra pointerilor prezinta 0 importanta particularitate: atributul const sau volatile prefixat cu operatoml * (dereferentiere) se aplica pointerului si nu obiectului punctat de acesta.
85

Programele e++ sunt organizate in unitati de translatare ce pot fi compilate separat, urmand ca procesul editarii Iegaturilor (eng bind, make, link etc.), prin care se obtine exeeutabilul, sa fie realizat ulterior. Notatie 'Simbolurile neterminale ineep eu litera mare. Unele neterminale se termina eu -optional. Aeeasta inseamna ca regula care confine 0 astfel de constructie este 0 meta-regula, adica este posibila lii inlocuirea neterminalului eu A (cuvantul vid). Se obtin, practic, mai multe productii ale gramatieii limbajului. Unitati de translatare Unitate-de-translatare

::=0 Seeventa-dec1aratii-opfional
(pp-preprocesare)

Directive de pre-procesare

Preproeesare ::=0 Grup-op!ional Grup ::=0 Parte-grup I Grup Parte-grup Parte-grup ::= Entitate-Iexicala-pp-op,tional Linie-noua I Sectiune-if] Linie-de-control Sectiune-if ::= Grup-if Grupuri -elif-oP,tional Grup-else-op,tional Linie-endif Grup-if ::= #if Expresie-constanta Linie-noua Gmp-op,tionall #ifdef Identifieator Linie-noua Grup-op/iona11 #ifndef Identificator Linie-noua Grup-op,tional Grupuri-elif ::= Grup-elif I Grupuri -elif Grup-elif Grup-elif ::= #elif Expresie-constanta Linie-noua Grup-opfional Grup-else ::= #else Linie-noua Grup-op,tional Linie-endif::= #endif Linie-noua Linie-de-control ::= #include Entitati-lexicale-pp Linie-noua #define Identifieator Lista-inlocuire Linie-noua #define Identificator Sparanteza Lista-identificarori-optional ) Lista-inlocuire Linie-noua #undef Identificator Linie-noua #line Entitati-lexicale-pp Linie-noua #error Entitati-Iexieale-pp-opfional Linie-noua #pragma Entitiiti-Iexicale-PP-op,tional Linie-noua # Linie-noua Sparanteza ::=:0: Paranteza-stanga-rara-a-fi-precedata-de-spatiu Paranteza-stanga- fara-a-fi -precedata -dc-spatiu ::= ( Lista-inlocuire ::= Entitati-Iexicale-pp-op,tional Entitaji-lexicale-pp ::= Errtitap-lexicale-preprocesare I Entitati-lexicale-pp Entitati-Iexicale-preprocesare Linie-noua ::= Caracterul-new-Iine Entitati lexicale Entitate-lexicala ::= Identificator I Cuvant-cheie I Literal] Operator Cuvant-cheie ::= Cuvant-cheie-C I Cuvant-cheie-Cs+ Cuvant-cheie-C
86

I Sernn-dc-punctnatie
do

::= auto

I break I case I char I const I continue I default I

double I else I entry I enum Iextern I float I for I goto I if lint I long I register I return I short I signed I sizeof I static I struct I switch Itypedef I union I unsigned Ivoid Ivolatile I while Cuvant-cheie-Cf+ ::= asm I catch I class I delete I friend Iinline I new I operator I overload I private I protected Ipublic Itemplate I this Ithrow Itry I virtual ", Cifra::=OII1213141516171819 Cifra-nenula ::= 1 12 13 14 I 51 6 I 71 819 Cifra-octala ::= 0 11 I2 I 3 I4 I 5 I 6 I 7 Cifra-hexazecimala ::= Cifra IAlB I C I DIE I F I a Ib I c I die I f Hex-quad :;=
Secventa-cifre ::= Cifra I Secventa-cifre Cifra Cifra-hexazecimala Cifra-hexazecimala Cifra-hexazecimala Cifra-hexazecimala

Set-universal i:= \u Hex-quad I \U Hex-quad Hex-quad Non-cifra ::= Set-universal I Underscore I Litere-mici I Litere-mari Underscore ::= Litere-mici ::= al b Ic Id lelflglh IiJj Ikill min I01p Iq Ir] s]tlu lvl wlxjy [z Litere-mari ;;= AIBICIDIEIFIG1HIIIJIKILIMINIOlPIQIRISITIUIVIWIX1YIZ Identificator .i= Non-cifra I Identificator Non-cifra I Identificator Cifra Nume-typedef ::= Identificator Nume-clasa ::= Identificator I Id-sablon Nume-enum ::= Identificator Nume-sablon ;:= Identificator Sufix-intreg ::= Sufix-unsigned Sufix-long-op,tionall Sufix-Iong Sufix-unsigned-op,tional Sufix-unsigned ::= u I V Sufix-long ;:= II L . Literal ::= Literal-intreg I Literal-caracter [Literal-string I LiteraI-flotant I Literal-boolean Literal-intreg ::= Literal-zecimaI Sufix-intreg-op{ionall Literal-octal Sufix-intreg-op,tionall Literal-hexazecimal Sufix-intreg -optional Literal-zecimal ::= Cifra-nenula I Literal-zecimal Cifra Literal-octal ::= 0 I Literal-octal Cifra-octala Literal-hexazecimal ::= Ox Cifra-hexazecimala I OX Cifra-hexazecimala I
Literal-hexazecimal Cifra-hexazecimala

Literal-caracter ::= 'C-car-secv' IL'C-car-secv' C-car-secv ::= C-car I C-car-secv C-car C-car ::= orice caracter sursa cu exceptia: apostrof, backslash, new-line I Secventa-escape I Set-universal Secventa-escape ::= Secventa-escape-simpla I Secventa-escape-octala I Secventa-escape-hexazecimala Secventa-escape-simpla ::= \' I \" I \? I \\ I\a I\b I\f I \n I\r I \t I \v Secventa-escape-octala ::"" \ Cifra-octala I\ Cifra-octala Cifra-octala I \ Cifra-octala Cifra-octala Cifa-octala Secventa-escape-hexazecimala ::= \x Cifra-hexazecimala I \X Cifra-hexazecimala Secven !ii-escape -hexazecim ala Cifra -hexazecimala Literal-string ::= "Secar-secv-optional" I L "Secar-secv-opponal'' Svcar-secv ::= S-car I S-car-secv S-car

87

Secventa-escape I Set-universal Literal-flotant ::= Parte-factionara Parte-cxponentiala-opncsc/ Sufix-flotant-opnoncf ] Secventa-cifre Parte-exponentiala Sufix-flotant-op!ional Parte-fractionara ::= Secventa-cifre-optional . Secventa-cifre 1 Secventa-cifre . Parte-exponentiala ::= e Semn-op,tional Secventa-cifre 1 E Scuui-opiional Sccventa-cifre Semn ::=+ 1Sufix-flotant ::= fill F 1 L Literal-boolean ..= false 1 true Nume-tip ::= Identificator Instructiuni Secventa-instructiuni ::= Instructiune 1 Secventa-instructiuni Instructiune Instructiune ::= Instrucpune-etichetata Instructiune-expresie Instructiune-compusa 1 Selectia 1 Iteratia 1 Instructiune-salt 1 Instructiune-declaratic 1 Bloc-try Instructiune-etichetata ::= Identificator : Instructiune 1 case Expresie-const : Instructiune 1 default: Instructiune Instructiune-expresic ::= Expresie-op,tionai Instructiune-compusa ::= { Secvenja-instructiuni-cpnonc/ } Selectia ::= if ( Conditie ) Instructiune I if ( Conditie ) Instructiune else Instructiune 1 switch ( Conditio ) Instructiune Conditio ::= Expresie I Specificator-tip Declarator= Expresie-atribuire Iteratia ::= while ( Conditie ) Instructiune 1 do Instructiune while ( Expresie ) ; 1 for ( Initializare-for-opfional ; Conditie-op!ional; Expresic-opfional) Instructiune Initializare-for ::= Instructiune-expresie I Declaratie-simpla Instructiune-salt ::= break; 1 continue; 1 return Expresie-opfional; 1 goto Identificator;
1 I

Svcar ::= orice earaeter sursa eu exceptia ", \ sau new line I

Definitii si declaratii Instructiune-declaratie ::= Dcclaratie-bloc Secventa-declaratii :':= Declaratie f Secventa-declaratii Declaratie Definitie-nume-domeniu ::= Definitie-domeniu-numit 1 Definitie-domeniu-anonim Definitie-domeniu-numit ::= Definitie-domeniu-original ] Definitie-domeniu-extins Definitie-domeniu-original ::= Domeniu Nume-domeniu-origmal {Corp-nume-domeniu } Definitie-domeniu-extins ::= Domeniu Nume-domeniu-original {Corp-mune-domcniu } Definitie-domeniu-anonim ::= Domeniu { Corp-nume-domeniu } Corp-nume-domeniu ::= Secventa-declaratii-opfional Definitie-alias-nume-domeniu ::= Domeniu Identificator = Specificator-domeniu-calificat ; Spccificator-domcniu-calificat ::= : t-opttonal Specificator-recursi v Nurne-domeniu Declaratie-using ::= 88

using Nume-tip-optional :: -optional Specificator-recursiv Id-necalificat ; I using:: Id-necalificat ; I Dircctiva-using ::= using Nume-domeniu it-optional Specificator-recursiv-opjtcnc/ Nume-domeniu ; Definitie-asm ::= asm ( Literal-string) ; Specificator-legatura ::= extern Literal-string { Secvenla-dec1arapi-op,tional } I extern Literal-string Declaratie Initializator ;:= =Clauza-initializare I ( Lista-expresii ) Clauza-initializare ::= Expresie-assign I { Lista-initializare -optional } I { } Lista-initializare ::= Clauza-initializare I Lista-initializare • Clauza-initializare Declaratie ::= Declaratie-bloc I Definitie-functie I Declaratie-sablon I Instantiere-explicita I Specializare-explicita I Specificare-legatura I Definire-spatiu-nume Declaratie-bloc ::= Declaratie-simpla I Definitie-asm I Definitie-alias-spatiu-nume I Declaratie-using I Directiva-using Declaratie-simpla ::= Secv-declaratii-op,ttonal Lista-initializare-op,tional ; Specificator-clasa-de-memorare ::= auto I register I static I extern I mutable Specificator-declaratie ::= Specificator-clasa-de-memorare I Specificator-tip I Specificator-functie I friend I typedef Specificator-functie ::= inline I virtual I Explicit Specificator-tip ::= Specificator-tip-simplu I Specificator-clasa I Specificator-enum I Specificator-tip-elaborat I Calificator-cv Specifcator-tip-simplu ::= :<optional Specificator-recursiv-op,tional Nume-tip I char I wchar_t 1 bool ] short lint I long I signed I unsigned I float I double I void Nume-tip ::= Nume-clasa I Nume-enum I Nume-typedef Nume-enum ::= Identificator Specificator-enum ::= enum Identificator-opponc/ {Lista-cnumerativa-opnczc/ } Lista-cnumerativa ::= Definitie-enumerarc I Lista-enumerativa, Definitie-enumerare Definitie-enumerare ::= Enumerator I Enumerator = Expresie-constanta Enumerator ::= Identificator Specificator-tip-elaborat ::= Class-key: i-optional Specificator-recursiv-opponal Identificator I enum ii-optional Specificator-recursiv-op,tional Identificator I Nume-tip : =opttonal Specificator-recursiv-opponal Identificator I Calificator-cv ::= const I volatile Specificator-recursiv ::= Nume-clasa-sau-domeniu :: Specificator-recursiv-op!ional Nume-clasa-sau-domeniu ::= Nume-clasa I Nume-domeniu Nume-domeniu ::= Nume-domeniu-original ]Nume-domeniu-alias Nume-domeniu-original ::= Identificator Nume-domeniu-alias ::= Identificator Gramatica expresiilor

Name-tip ::-optional Specificator-reclUSiv-op,tional Identificator <Lista-argumente-sablon>

Expresie-primara ::= Literal I this I:: Identificator :: ld-calif I (Expresie) I Id-expresie

I::

Id- op-func

I
89

Id-expresie ::= Id-necalif ] Id-calif Id-necalif ::= Identificator I Id-op-func I If-conv-func I ~ Nume-clasa I Id-sablon Id-calif::= Specificator-recursiv sabJon-opponal Id-necalif Expresie-postfix ::= Expresie-primara I Expresie-postfix [ Expresie ] I Expresie-postfix ( Lista-expresii ~ optional ) I Specificator-tip-simplu ( Lista-expresii ~ optional ) ! Expresie-postfix . ~ablon-opponal .i-opttonal Id-expresie I Expresie-postfix -> ~ablon-opfional r-optional Id-expresie I Expresie-postfix . Nume-pseudo-dcstructor I Expresie-postfix -> Nume-pseudo-destructor I Expresie-postfix ++ I Expresie-postfix -- I Cast-dinamic Id-tip ( Expresie ) I Cast-static Id-tip ( Expresie ) I Cast-reinterpretat Id-tip ( Expresie ) I Cast-cost Id-tip (Expresie ) I Id-tip (Expresie ) I Id-tip ( Id-tip ) Lista-expresii ::= Expresie-assign I Lista-expresii , Expresie-assign Nume-pseudo-destructor ::= :i-optional Specificator-recursiv-oppons/ Nume-tip :: - Nume-tip I :i-optional Specificator-recursiv-opJional - Nume-tip Expresie-unara ::= Expresie-postfix 1++ Expresie-cast I -- Expresie-cast I Operator-unar Expresie-cast I sizeof Expresie-unara I sizeof ( Id-tip ) I Expresie-new I Expresie-delete Operator-unar ::= * I & I + I-I! I~ Expresie-new := =-opnonal new Plasament-new-opfional Id-tip-new Inipalizator-new-opfionall :<optional new Plasament-new-op,tional ( Id-tip ) Initializatcr-new-ocnozc/ Id-tip-new ::= Specificator-tip-secv Declarator-new-opponal Declarator-new::= Ptr-operator Declarator-new-opnozex] Declarator-new-direct Dec1arator-new-direct::= [Expresie] I Declarator-new-direct [ Expresie-const ] Initializator-new ::= (Lista-expresii-opfional) Expresie-delete ::= ii-opttonal delete Expresie-cast I it-optional delete [ ] Expresie-cast Expresie-cast ::= Expresie-unara I ( Id-tip ) Expresie-cast Expresie-pm :;= Expresie-cast I Expresie-pm . * Expresie-cast Expresie-pm ->* Expresie-cast Expresie-multiplicativa ::= Expresie-pm I Expresie-multiplicativa * Expresie-pm I Expresie-multiplicativa I Expresie-pm I Expresie-multiplicativa % Expresie-pm Expresie-aditiva ::= Expresie-multiplicativa I Expresie-aditiva + Expresie-multiplicativa I Expresie-aditiva - Expresie-multiplicativa 90

Expresie-deplasare ::= Expresie-aditiva I Expresie-deplasare <x Bxpresie-aditiva I Expresie-deplasare » Expresie-aditiva Expresie-relationala ::= Expresie-deplasarc I Expresie-relationala < Expresie-deplasarc I Expresie-relationala > Expresie-deplasare I Expresie-relationala <= Expresie-deplasare I Expresie-relationala >= Expresie-deplasare Expresie-egalitate ::= Expresie-relationala I Expresie-egalitate == Expresie-relationala I Expresie-egalitate != Expresie-relationala Expresie-and ::= Expresie-egalitate I Expresie-and & Expresie-egalitate Exclusiv-or-Expresie ::= Expresie-and I Exclusiv-or-Expresie A Expresie-and Inclusiv-or-Expresie ::= Exclusiv-or-Expresie I Inclusiv-or-Expresie Bar Exclusiv-or-Expresie Logic-and-Expresie ::= Inclusiv-or-Expresie I Logic-and-Expresie && Inclusiv-or-Expresie Logic-or-Expresie ::= Logic-and-Expresie I Logic-or-Expresie Bar Bar Logic-and-Expresie Expresie-conditionala ::= Logic-or-Expresie I Logic-or-Expresie ? Expresie : Expresie-assign Expresie-assign ::= Expresie-conditionala I Logic-or-Expresie Operator-assign Expresie-assign I Expresie-throw Operator-assign ::= = I it= 1/= I %= I += 1_= I »= I «= I A= I != Expresie ::= Expresie-assign I Expresie, Expresie-assign Expresie-constanta ::= Expresie-conditionala Clase . Nume-clasa ::= Identificator I Id-sablon Specificator-clasa ::= Antet-clasa { Specificator-membru-opnonc! } Antet-clasa ::= Class-key Identificator-oponal Clauza-de-baza-op,tionai I Class-key Specificator-recursiv Identificator Clauza-de-baza-op,tional Class-key ::= class I struct I union Specificator-membru .:= Dec1arator-membru Specificator-membru-op,tional 1 Specificator-acces: Specificator -membru-opfional Declarator-membru ::= Secv-specif-declarare-opnozez/ Lista-declaratori-opfionall Definitie-functie ; -optional i Id-calificat; I Declaratie-using I Declarape-sablon Lista-declaratori ::= Declarator-membru I Lista-declaratori • Declarator-membru Declarator-membru ::= Declarator Specificator-pur-ojmonci ] Declarator Initializator-constant -optional i Identificator-opponal : Expresie-constanta Specificator-pur ::= = 0 Initializator-constant ::= =Expresie-constanta Specificator-access ::= private I protected I public
91

Clase derivate Clauza-de-baza ::= .Lista-specificatori-baza Lista-specificatori-baza ::= Specificator-baza I Lista-specificatori-baza , Specificator-baza Specificator-baza ::= ;=opuonal Spccificator-recursiv Nume-clasa I virtual Specificator-acces-op,tioml::-opfionalSpecificator-recursiv-op,tionalNwue-clasa Specificator-accesirtual-op,tioml ::-op,tional pecificator-recursiv-op,tiomlNume-cIasa v S Id-functie-conversie ;;= Operator Id-tip-conversie Id-tip-conversie ;;= Secventa-specificator-tip Declarator-conversie-op,tional Dec1arator-conversie ;:= Operator-ptr Declarator-conversie-op,tional Initializator-constructor ;:"'"; Lista-initializatori-memorie Lista-inipalizatori-memorie ;;= Initializator-memorie I Ini tiali zator -memo rie , Li sta -initializatori -memorie Initializator-memoric ;;= ld-initializator-mcmorie ( Lista-expresii-opfional ) Id-initializator-mernorie ::= : =opttonal Specificator-recursiv-opponal Nume-clasa Identificator Sup rajncarcare Id-functie-operator :: = Operator Operator Bar ::= I Operator::= new I delete I new£] I delete[] I + I - I * I II % I A I & I Bar I ~ I ! I = I < I > I -r- I -= I *= I /= I %= I A= I &= I Bar- 1« »1 »= I «= I == I I::: I <; I >= I && I Bar Bar I ++ I -- I, I ->* I
->

I 0 I []

Sabloane (templates) Declaratie-sablon ::= Export-op,tional Sablon < Lista-parametri-sablon > Declaratie Lista-parametri-sablon ::= Parametru-sablon I Lista-parametri-sablon , Pararnetru-sablon Parametru-sablon ::= Tip-parametru I Dcclaratie-parametru Tip-parametru ::= class Identificator-opnono/] class Identificator = Id-tip I Nume-tip Idcntificator-op,tiona11 Nume-tip Identificator-optional =ld-tip I template < Lista-parametri-sablon > class Identificator-op,tional template < Lista-parametri-sablon> class Identificator-op,tional = Nume-sablon Id-sablon ::= Nume-sablon <Lista-argumente-sablon> Nume-sablon ::= Identificator Lista-argumente-sablon ::= Argument-sablon I Lista-argumente-sablon , Argument-sablon Argument-sablon ::= Expresie-assign [Id-tip I Nume jiablon Instantiere-explicita ::= template Declaratie Specializare-explicita ::= template < > Declaratie Entitate-lexicala-preprocesare ::= Nume-antet I Identificator I Numar-pp I Literal-char I Literal-string I Op-or-punc-preprocesare I Orice-alt-spatiu-non-alb

~I

92

Nume-antet ::= <Secventa-h-char> I "Secventa-q-char" Secventa-h-char ::= H-ehar I Secventa-h-char H-char H-ehar ::= flOrice caraeter sursa in afara de new-line si > Secventa-q-char ::= Q-char I Secventa-q-char Q-char Q-ehar ::= \\ orice caracter sursa In afara de new-line si " Numar-pp ::= Cifra I .Cifra I Numar-pp Cifra I Numar-pp Non-citra I Numar-pp e Semn I Numar-pp E Semn I Numar-pp . Op-or-punc-preprocesarc ::= {I } I [ I ] I # I ## I ( I ) I <: I :> I <% I 0/0> I %: I %:%: I ; I : I ... I new I delete I? I :: I . I .* I + I - I * I II %I AI &I Bar I ~ I ! I = I < I > I += I -= I *= I 1= I %= I A= I &= I Bar= I « I »1 »= I «= I == I != I <= I >= I && I Bar Bar I ++ I -- I ,I ->* I -> I and I and_cq I bitand I bitor I compl ] not I not_cq lor I or_eq I xor I xoreq Declaratori Lista-dcclaratori-inilializare ::= Declarator-ini~alizare I Lista-declaratori -ini ~alizare, Declarator-ini tializare Declarator-inilializare ::= Declarator Initializator-op!ionai Declarator ::= Declarator-direct I Operator-ptr Declarator Declarator-direct::= Id-declarator I Dec1arator-direct (Clauza..<Jeclarare-parnmetrii) Secventa-ca1ificatori-cv-opponal Specificare-exceptie-opponall Declarator-direct [ Expresie-const-oPlional

( Declarator) Operator-ptr ::= * Secventa-calificatori-cv-opponall &I . ::-op!ional Specificator-recursiv Secventa-calificatori-cv-op,tional Secvenla-calificatori-cv ::= Calificator-cv Secventii-calificatori-cV-Opfional Id-declarator ::= ::-op,tional Id-expresie I :»optional Specificator-recursiv-op!ional Nume-tip Id-tip ::= Secventa-specificare-tip Declarator-abstract -optional SecventA-specificare-tip.::= Spccificator-tip Secvcnta-specificare-tip-opfional Dcclarator-abstract ::= Operator-ptr Dcclarator-abstract -optional I Declarator -ab stract -di rect Declarator-abstract -direct ::= Declarator-abstract -direct -optional ( Clauza-declarare-parametri ) Secventa-calificatori-cv-opponal Specificare-exceptie-opfionall Declarator-abstract-direct-op,tional [ Expresie-const-op!iOnal J I ( Declarator-abstract) Clauza-declarare-parametri ::= Lista-dec1arare-parametri-op!ional ... -optional i Lista-declarare-parametri, .,. Lista-declarare-parametri ::= Dedarare-parametri I Lista-dec1arare-parametri , Declarare-parametri Declarare-parametri ::= Secventa-specificator-declaratie Declarator I Secventa-specificator-declaratie Declarator = Expresie-assign I Secventa-specificator-dec1aratie Declarator-abstract-op,tionall SecvenFi-specificator-declaralie Declarator-abstract-opfional= Expresie-assign Definire-functie ::= Secvellta~cator-dec1amtiC-OpfiomlDxlarntorconstructor-initializer-opfiGrnlCorp-fimqie I

93

Corp-functie ::= Instructiune-compusa


Secven p-specificator~declaratie Specificator-declaratie Tratarea exceptiilor

Secvenfli~specificator~declarape~op,tional Declarator Bloc-functie-try ::zx: Secvenfli~specificator-declara!ie-oPlional

Bloc-try ::= try Instructiune-compusa Secventa-handler Bloc-functie-try ::= try constructor-initializer-op,tional Corp-funcpe Secventa-handler Secventa-handler ::= Handler Secventa-handler-op,tional Handler ::= catch (Declaratie-exceptie ) Instructiune-compusa Declaratie-exceptie ::= Secventa-specificare-tip Declarator 1 Secventa-specificare-tip Declarator-abstract 1 Secven ta -speci ficare-tip Expresie-throw ::= throw Expresie-assign-op,tional Specificare-exceptie ::= throw ( Lista-id-tip-op,tional) Lista-id-tip ::= Id-tip 1 Lista-id-tip , Id-tip Exemplul 9.1 Vom ilustra utilizarea limbajului e++ In codificarea algoritmului pentru determinarea starilor accesibile ale unui sistem AFD. Pentru acest exemplu, automatul M este un obiect al clasei Sistem _AFD caracterizat prin atributele: numar _sttirt = IQI, cardinai stgma = 1 1: I, stare _inifialti = qo , delta (functia de tranzitie) definita ca tablou, sttiri_ accesibtle (tablou care va conpne starile accesibile) si naccesibile (cardinalul multimii starilor accesibile). La declararea automatului se va apela constructorul care va citi datele. Statile accesibile se determina prin apelarea metodei aferente. Afisarea datclor dcspre automat se realizeaza, de asemenea, printr-o metoda specifica.
#include <iostream.h> class Sistem_AFD { private: int numar stari; int cardinal_sigma; int gO; int **delta; int *stari accesibi1e; II Structura de date organizata ca 0 coada int n_accesibi1e; public: Sistem_AFD(); IIConstructor -Sistem_AFD() ; IIDestructor Determina starile accesibi1e(); II Metoda care implementeaza algoritmu1 4.1 Afi9are_informatii(); I/Vizualizarea informatiilor Sistem_AFD::Sistem_AFD() { I/Constructor int i, j; cout « "Introduceti numarul starilor

initiale:

";

94

II

cin » numar_stari; Se presupune ca starile cout

vor fi codificate

prin numerele alfabetului prin numerele

naturale :"; naturale

110,1,2,

..., numar_stari-l.
"Introduceti

nums.rul simbolurilor vor fi codificate

II

cin » cardinal sigma; Se presupune ca literele

110,1,

2, "., cardinal_sigma-l. cout "Introduceti starea initiala:"; do {cin » qO; } while ((qO <0) II (qO >~ numar_stari)); delta ~ new int *[numar_stari); for (i ~ 0; i<numar_stari; i++) delta[i] = new int [cardinal_sigma]; cout « "Introducerea functiei de tranzitie." « "Valoarea -1 pentru lipsa tranzitiilor.\n"; for (i=O; i<numar-stari; i++) for(j=O; j<cardinal sigma; cout « "delta [ " « i« " ] [ " « j « " ] ="; cin
}

j++)

delta [i) [j]; = new int [numar_stari};

stari

accesibile

n_accesibile = 0; II sfar~it constructor Sistem AFD :: -sistem_AFD() { IIDestructor i++) [ delta[i); [ ) stari = NULL; accesibile: numar = 0; stari 0;

int i; for (i = 0; i<numar_stari: if (delta[i]) delete if (delta) delete[ ] delta; if(stari accesibile) delete

II

Initializari implicite delta = NULL; stari accesibile cardinal_sigma Iisfar~it destructor

= 0; qO = 0; n accesibile

void

Sistem AFD

:: De.termina star.l.le_accesibile ()

II II II II II

int primul slot = 0; Tabloul este organizat ca 0 coada. Inserarea presupune incrementarea variabilei ultimul_slot, iar "eliminarea" din coada presupune incrementarea variabilei primul slot. Tabloul este sufic.l.ent de larg pentru a include toate starile automatului. int ultimul_slot = 0; int qc; Iistarea curenta; int qt; Iistarea posibil

accesibila

din qc;

II II

int a fost_vizitata; variabila logicS. care va atesta prezenta/absenta starii qt in tabloul stari_accesibile: int i, j: II variabile de lucru stari accesibile[O] = qO; II starea initiala este accesibila; while (primul_slot

<= ultimul_slot)

95

qc = stari_accesibile[primul_slot]; for (i = 0; i< cardinal_sigma; i++) qt = delta [qc] [i]; if (qt != -1) { II incepe procesul de cautare-secventiala II in tabloul starilor accesibile a_fost_vizitata = 0; j = 0; while ((j<=ultimul_slot) && (!a_fost_vizitata)) if (qt == stari_accesibile[j]) a fost vizitata if else j++; (!a_fost_vizitatl) stari_accesibile[++ultimul_slot] qt; dupa i

1;

qt;

} II sf. test II sf. iteratie


primul_slot++; } II sf. while n accesibile = ultimul II sf. metoda Determina

slot+1; starile

accesibile

void sistem AFD :: Afi~are_informatii () cout « "Starile accesibile sunt : \n "; int i; for (i = 0; i < n_accesibile; i++) cout « "stari_accesibile [ «i « = « stari_accesibile[i]
0 0 ] 0

"\nO;

II

sf. metoda Testarea clasei

) II

Afi~are_informatii

void main (void) { Sistem_AFD M; M.Deterrnina starile

accesibile();

M.Afi9are_informatii();

Similar se defineste colectia de gramatici speeifice Iimbajului Java. Pentru mai multe dctalii se poate consulta Jucan si Andrei (2002). 9.2 Limbajul Python

.,
i

Python este un Iimbaj de programare de nivel inalt care suporta paradigme multiple de programare (lucrul eu obiecte, modularitate, programare functionala, programare eu aspeete). Este un limbaj deschis, dezvoltat incepand cu anii '80, de catre olandezul Guido van Rossum de la Centrul National de Cercetari in Maternatica si Informatica din Amsterdam (CWI - Centrum voor Wiskunde en Informatica). Multimea entitatilor Python cuprinde: atomi, instructiuni si apeluri. Multimea atomilor cuprinde identificatori, literali si entitati parantezate. Se spune ca unele entitati fae parte din categoria primatc1or. Un program Python este campus din linii logiee delimitate prin NEWLINE (LF, CR sau CR+LF, in functie de sistemul de operare). Liniile logice sunt
96

compuse din una, doua sau mai multe linii fizice, unite folosind '\'. Comentariile, de tip linie, incep cu '#' ~i nu pot unna unui caracter '\'. Exprcsiile care contin paranteze rotunde, paranteze drcpte si acolade pot fi scrise pe mai multe linii fizice. In Python blocurile sunt delimitate prin spatii albe, in loc de acolade sau cuvinte cheie. Principalele constructii care permit definirea de entitati si eontrolul algoritrnului sunt: tj.for, while, try, class, def with. Instructiunile pot fi simple, respcctiv compuse Atribuirea, atribuirea combinata, assert, pass, del, print, return, yield, raise, break, continue, global, import, si exec sunt instructiuni simple. Instructiunile compuse eonstau dintr-una sau mai multe clauze. 0 clauza are un antet (incepe eu un cuvant cheie ~i se ineheie cu ":") ~i 0 suita (grup de instructiuni controlate de catre clauza). Nivclul de indentare joaca un rol important. In deseriere folosim INDENT pentru a semnala neeesitatea indentarii, rcspectiv DEDENT pentru a marca revenirea la nivelul anterior de indentare. Sintaxa limbajului Python 3.0 este specificata prin regulile de fo rm are , descrise folosind expresii regulate, notatie EBNF, reguli de rescriere. Cele mai importante entitati ale Iimbajului Python sunt descrise in continuare. atom::= identificator I literal Iparantezate idcntificator ::= (litera]";") (litera Ieifra I ",")" litcra := literamica [Iiteramare literamica ::= "a" ..."z'' literamare ::= "A".,,"Z" cifra ::= "0" ..,"9" literal::= literalsir I intreg I intreglung I numarIEEE754I numarimaginar literalsir ::= [prefixsir](sirscurt I sirlung) prefixsir ::= "r" I"u" I "ur" I "R" I"U" I "UR" I "Ur" I "uR" sirscurt ::= partesirscurt* "'" I'''' partesirscurt* "" sirlung ::= "'''" partesirlung* ""''' 1"'''''' partesirlung* "",," partesirscurt ::= carsirs Isecventaesc partesirlung ::= carsirl ] secvcntaese carsirs ::= <orice caracter exceptand "\", newline sau ghilimele> earsirl ::= <orice caracter In afara de "\"> secventaesc ::= "\" <orice earacter ASCII> intreglung ::= intreg ("I" I"L") intreg ::= intregzecimal ] intregoctal ]intreghexa intregzeeimal ::= eifranenula* I "0" intregoctal ::"" "0" citraoctala' intreghexa ::= "0" ("x" I "X") cifrahexa+ cifranenula ::= "1" "9" cifraoctala ::= "0" "7" cifrahexa ::= cifra I"a" ..."f" I "A" ..."F" numarIEEE754 ::= fonnatA I formatE fonnatA ::= [parteintreaga] partefractionara Iparteintreaga "." formatE::= (parteintreaga I formatA) exponent parteintreaga ::= cifra' partefractionara ::= ''." cifra' exponent::= ("e" I "E") l"+" I "_"] cifra' numarimaginar ::= (numarIEEE754I parteintreaga) ("j" I"J") parantezate ::= constructieparantezata llistadisplay 97
11111

1generatorexpresie 1dictionardijplay 1conversiesir ! atomyield constructieparantezata ::= "(" [listaexpresii] ")" listadisplay ::= "[" [listaexpresii [Iistac] "]" listac ::= expresie listajor list~or ::= "for" target_list "in" listaexpresiiv [listaiter] listaiter ::= list~or Ilistaij listaij::= "if' expresiev [listaiter] listaexprcsiiv ::= expresiev [("," expresiev)+ [","]] generatorexpresie ::= "(If expresie generatorexpresiejor If)" generatorexpresiejor ::= "for" listatinte "in" or_test [generatorexpresieiter] generatorexpresieiter ::= generatorexpresiejor I generatorexpresieif generatorexpresieif::= "if' expresiev [generatorexpresiciter] dictionardisplay ::= "\{" [listaintraridict] "\}" listaintraridict ::= intrarcdict ("," intraredict)* [","] intraredict ::= expresie":" expresie conversiesir ::= "'" listaexpresii II'" atomyield ::= "(" expresieyield")" expresieyield ::= "yield" [listaexpresii] primata ::= atom 1campreferit I subscriptie 1 partitie 1apel campreferit ::= primata "." identificator subscriptie ::= primata "I" listaexpresii "]" partitie ::= partitiesimpla I partitieextinsa partitiesimpla ::= primata "[" partescurta ''1'' partitieextinsa ::= primata 'T' listaparti "]" listaparti ::= parte ("," parte)* [","] parte::= expresie I parteproprie 1puncte parteproprie ::= partescurta 1partelunga partescurta ::= [margineinferioara] ":" [marginesuperioara) partelunga ::= partescurta ":" [avans] margineinferioara ::= expresie marginesuperioara ::= expresie avans ::= expresie puncte ::= "..." apel ::= primata "(" [listaargumente [","] 1generatorexpresiejor] ")" listaargumente ::= argumentepozitionale ["," argumentekeyword] ["," "*" expresie]["," "**" expresie] 1argumentekeyword ["," "*" expresie] [If," "**,, expresie] 1"*" expresie ["," "**" expresie] 1"**" expresie argumentepozitionale ::= expresie ("," expresie)* argumentekeyword ::= argumentkw ("," argumentkw)* argumentkw ::= identificator "=" cxpresie expresie ::= expresieconditionala 1expresielambda expresielambda .:= "lambda" [listaparametri]: expresie expresieconditionala ::= termenbool ["if' termenbool "else" expresie] termenbool ::= factorbool ]termenbool "or" factorbool factorbool ::= rclbool ]factorbool"and" relbool relbool ::= expresierel l l'not" relbool 98

expresierel ::= reltermcn ( operatorrel reltennen )* operatorrel ::= "<" I ">" I "==" I ">=" I "<=" I "<>" I "!=" I "is" ["not"] I ["not"] "in" reltermen ::= tennenxar I reltermen "I" tennenxor tennenxor ::= factorand I tennenxar "1'\" factorand factorand ::= deplasare I factorand "&;" deplasare deplasare ::= expresieadd I deplasare ( "«" I "»" ) expresieadd expresieadd ::= expresiemul I expresieadd "+" expresiemu/l expresieadd "_" expresiemul expresiemul ::= expresieunara I expresiemul "*" expresieunara I expresiemu/ "//" expresieunara I expresiemu/ "!" expresieunara I expresiemul "\ %" expresieunara expresieunara ::= putere I "_II expresieunara I "+" exprcsieunara I "\~" expresieunara putere ::= primata ["**" expresieunara] expresiev ::= termenbool ] expresielambdav expresielambdav ::= "lambda" [listaparametri]: expresiev listaexpresii ::= expresie ( "," expresie)* [","] instructiunesimpla ::= instructiuneexpresie instructiuneas sert

instructiuneatrtbuire

instructiuneprtnt instructiunereturn instructiuneyield instructi uneraise instructiunebreak instructiunecantinue instructi unei mport instructiuneglabal

instructiuneatribuirecombi instructiunepass instructiunedel

instructiuneexec instructiuneexpresie ::= listaexpresii instructiuneassert ::= "assert" expresie ["," expresie] instructiuneatribuire ::= (I istatinte =")' (listaexpresii I expresieyie ld) listatinte ::= tinta ("." tinta)" [","] tinta ::= identificator I "(" listatintc ")" I "[" listatinte 'T' I attributeref I subscriere I partitionare instructiuneatribuirecombi ::= tinta operatorcombinat (listaexpresii I expresicyield) operatorcombinat ::= "+=" 1 "_=" I "*=" I "/=" I "\0/0=" I "**=" I "»=" I "«=" I "\&=" I I 'l'" "
II IIAII

99

instmctiunepass ::= "pass" instmctiunedel ::= "del" listatinte instmctiuneprint ::= "print" ([expresie ("," expresie)* [","] I "»" exprcsie lt"," expresie)+ [","D instmctiunereturn ::= "return" [listaexpresii] instructiuneyield ::= expresieyieJd instructiuneratse ::= "raise" [expresie ["," expresie ["," exprcsieJ]] instructiunebreak ::= "break" instructiuneconhnue ::= "continue" instructiuneimport ::= "import" modul ["as" nume] ("," modul l'as'' nume])* I "from" modulrelativ "import" identificator ["as" nume] ( "," identificator ["as" nume] )* I "from" modulrclativ "import" "(" identificator ["as" nume] ( "," identificator ["as" nume] )* [","] ")" I "from" modul"import" "*" modul ::= (identificator ".")* identificator modulrelativ ::= "."* moduli ".", nume ::= identificator instructiuneglobal ::= "global" identificator ("," identificator)* instmctiuneexec ::= "exec" or_cxpr ["in" expresie cxpresie]] instructiunecompusa ::= instructiuneifl instructiunewhile I instructiunefor I instructiunetry I instructiunewith I definirefunctie I definircclasa suita ::= listainstructiuni NEWLINE I NEWLINE INDENT instructiune" DEDENT instmctiune ::= listainstructiuni NEWLINE I instructiunecompusa listainstructiuni ::= instructiunesimpla ("," instructiunesimpla)" [";"] instructiuneif::= "if" expresic ":" suita( "elif" expresic ":" suita)*["else"":" suita] instructiunewhtle ::= "while" expresie ":" suita ["else" ":" suita] instructiunejor ::= "for" target_list "in" listaexpresii ":" suita ["else" ":" suita] instructiunetry ::= try 1 I try2 try 1 ::= "try" ":"suita ("except" [expresier","tintall":"suitaf["else" ":" suita]["finally"":"suita] try2 ::= "try" ":" suita "finally" ":" suita instructiunewith ::= "with" expresie ["as" tinta] ":" suita definirefunctie ::= [decoratori] "def numefunctie "(" [listapararnetri] ")" '':" suita decoratori ::= decorator+ decorator ::= "@" numedot ["(" [listaargumente [","]] ")"] NEWLINE numedot ::= identificator ("." identificator)* listapararnetri ::= (definitiepararnetru ",")* (--"*" identificator [, "**" identificator] 1"**" identificator I defmitiepararnetru [","] ) definitiepararnetru ::= pararnetru ["=" cxpresie] sublista ::= parametru ("," pararnctru)* [","] parametru ::= identificator I "(" sublista ")"

r',"

100