Sunteți pe pagina 1din 146

UNIVERSITATEA “TRANSILVANIA” DIN BRAŞOV

DEPARTAMENTUL PENTRU ÎNVĂŢĂMÂNT LA DISTANŢĂ


FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ
CATEDRA DE INFORMATICĂ TEORETICĂ

PROF. DR. DANIELA MARINESCU

ASIST. IOANA PLAJER PREP. ALEXANDRA BĂICOIANU

LIMBAJE FORMALE
ŞI
TEORIA AUTOMATELOR

ÎNVĂŢĂMÂNT LA DISTANŢĂ

BRAŞOV 2009-2010
Introducere

Teoria limbajelor formale a apărut în conexiune cu studiul limbajelor naturale dar ea a avut o
dezvoltare rapidă datorită calculatorului electronic şi a limbajelor de programare. Cercetările
româneşti în limbaje formale au început în şcoala de lingvistică matematică creată şi condusă de
Solomon Marcus, din cadrul Universităţii Bucureşti. Printre reprezentanţii acestei şcoli se numără:
Gheorghe Păun, Gabriel Orman, Cristian Calude.
Limbajele formale au o mulţime de aplicaţii în diferite domenii: compilarea automată,
traducerea automată dintr-un limbaj natural într-altul, decidabilitate şi calculabilitate, demonstrarea
teoremelor, analiza imaginilor, modelarea unor procese chimice sau biologice, arhitectura, pictura,
modelarea unor probleme de cercetări operaţionale ş.a.m.d. O nouă direcţie deschisă de Păun
Gheorghe, este o aplicaţie practică a metodelor lingvistice în studiul proceselor economice.
Cursul de faţă îşi propune să trateze aspecte ale teoriei limbajelor formale strâns legate de
teoria compilării. El se adresează, în special, studenţilor de la secţiile de informatică, dar poate fi
folosit şi de cititori care nu au o pregătire specială în acest domeniu, pentru că noţiunile folosite au
fost introduse gradat şi metodic.

Astfel cursul este compus din patru mari module:


 Modulul 1, Introducere în teoria limbajelor formale, îşi propune să introducă cititorul în
domeniu prin definirea noţiunilor de limbaj, de reprezentare a unui limbaj, de gramatică de
şiruri de tip Chomsky. Se defineşte o ierarhizare a gramaticilor, datorată lui Chomsky, şi se
introduc o serie de operaţii cu limbaje care vor permite studierea în capitolele următoare a
proprietăţilor de închidere ale diferitelor familii de limbaje.
 Modulul 2, Automate finite şi limbaje de tip 3, este dedicat limbajelor de tip 3 din ierarhia
lui Chomsky, care sunt privite ca limbaje generate de gramatici de tip 3, recunoscute de
automatele finite sau reprezentate de expresii regulate. Se demonstrează că cele trei moduri
de reprezentare sunt echivalente. Se prezintă un foarte interesant algoritm de minimizare a
automatului finit, algoritm care permite realizarea unui analizor lexical optim.
 Modulul 3, Proprietăţi ale familiei limbajelor de tip 3, prezintă proprietăţi şi probleme de
decizie ale acestor limbaje, folosind cele trei moduri de reprezentare ale limbajelor
regulate: gramaticile de tip 3, automatele finite şi expresiile regulate.
 Modulul 4, Limbaje idependente de context şi automate push-down, defineşte o serie de
forme speciale ale gramaticilor independente de context, numite forme normale Chomsky
şi Greibach, şi demonstrează legătura dintre limbajele generate de geramaticile de tip 2 şi
limbajele recunoscute de automatele push-down nedeterministe. Se demonstrează şi aici o
serie de proprietăţi ale familiei limbajelor independente de context ş o lemă de pompare
pentru limbajele independente de context.

Obiectivele cursului
Cursul îşi propune ca obiectiv familiarizarea studenţilor cu noţiuni de
limbaje formale şi teoria automatelor, necesare în modelarea proceselor, în
procesarea limbajelor naturale şi, mai ales, în construcţia compilatoarelor pentru
limbaje de programare evoluate.

-1-
Competenţe conferite
După parcurgerea materialului studentul va fi capabil să:
 Identifice tipuri diferite de gramatici din ierarhia lui Chomsky;
 Construiască gramatici pentru diferite limbaje din ierarhia lui Chomsky;
 Construiască automate finite şi automate push-down în funcţie de clasa de
limbaje pe care doresc să o recunoască;
 Construiască reprezentari sub formă de expresii regulate pentru anumite
limbaje de tip 3;
 Scrie programe pentru o serie de algoritmi descrişi în cadrul acestui curs.

Resurse şi mijloace de lucru


Este indicat să se folosească următoarele mijloace de lucru:
 Parcurgerea cursului cu notarea separat a noţiunilor importante care vor
trebui reţinute;
 Refacerea exemplelor prezentate în curs;
 Rezolvarea problemelor propuse la sfirşit de unitate de învăţare;
 Testarea programelor realizate la laborator cu exemple rezolvate „cu
mâna”.

Structura cursului
 Cursul este structurat în 4 module şi 14 unităţi de învăţare, după cum
urmează:
 Modulul 1 conţine 3 unităţi de învăţare;
 Modulul 2 conţine 4 unităţi de învăţare;
 Modulul 3 conţine 2 unităţi de învăţare;
 Modulul 4 conţine 5 unităţi de învăţare.
 Fiecare unitate de învăţare necesită între 2 şi 4 ore de învăţare;
 Există 2 teme de control, prima fiind prezentată la sfârşitul modulului 3 iar
cea de a doua la sfârşitul modulului 4;
 Transmiterea temelor de control se va face în mod electronic şi sub formă
de material tipărit;
 Transmiterea rezultatelor se va face direct, în ziua exmenului, cu
comentarea problemelor apărute, şi în format electronic.

Cerinţe preliminare
Discipline necesare a fi parcurse înaintea disciplinei curente:
 Algoritmica;
 Structuri de date;
 Programare procedurală”
 Programare obiect orientată;
 Algoritmica grafurilor.

-2-
Discipline deservite
Cursul de Limbaje Formale si Teoria Automateleor este absolut necesar în
înţelegerea cursului de Tehnici de compilare .

Durata medie de studiu individual


Timpul estimativ de studiu individual necesar parcurgerii modulelor este
următorul:
 Modulul 1 conţine 3 unităţi de învăţare a câte 2-3 ore=8 ore;
 Modulul 2 conţine 4 unităţi de învăţare a câte 3 ore=12 ore;
 Modulul 3 conţine 2 unităţi de învăţare a câte 3 ore=6 ore;
 Modulul 4 conţine 5 unităţi de învăţare a câte 3-4 ore=16 ore.

Evaluarea
Nota finală este compusă din 4 evaluari după cum urmează:
– ponderea evaluării finale (examen/colocviu) este de 50%;
– ponderea evaluărilor pe parcurs (teme de control, verificări pe parcurs)
este de 25%
– ponderea proiectelor/colocvii de laborator este de 25%.;

-3-
Cuprins
Introducere .................................................................................................................................. 1
Chestionar evaluare prerechizite .................................................................................................. 9
Modulul 1. Introducere în Teoria Limbajelor Formale
Introducere. .................................................................................................................. 9
Competenţe ................................................................................................................... 9
Unitatea de învăţare I.1 Notiuni generale de teoria limbajelor formale .......................... 9
I.1.1. Introducere....................................................................................... 10
I.1.2. Obiectivele unităţii de învăţare ......................................................... 10
I.1.3. Noţiunea de limbaj ......................................................................... ..10
I.1.4. Rezumat ........................................................................................... 17
Test de evaluare/autoevaluare ................................................................... 16
Unitatea de învăţare I.2. Algoritmi normali în sens Markov ........................................ 18
I.2.1. Introducere....................................................................................... 18
I.2.2. Obiectivele unităţii de învăţare ......................................................... 18
I.2.3. Algoritmi normali în sens Markov.................................................... 18
I.2.4. Exemple ........................................................................................... 19
I.2.5. Rezumat ........................................................................................... 25
Test de evaluare/autoevaluare ................................................................... 25
Unitatea de învăţare I.3. Gramatici analitice şi generative ........................................... 26
I.3.1. Introducere....................................................................................... 26
I.3.2. Obiective .......................................................................................... 26
I.3.3. Gramatici analitice şi generative ..................................................... 26
I.3.4. Ierarhia lui Chomsky ........................................................................ 30
I.3.5. Operaţii cu limbaje........................................................................... 35
I.3.6. Rezumat ........................................................................................... 38
Test de evaluare/autoevaluare ................................................................... 37
Modulul II. Automate finite şi limbaje de tip 3............................................................................ 39
Introducere. ................................................................................................................ 39
Competenţe ................................................................................................................. 39
Unitatea de învăţare II.1. Automate finite şi limbaje de tip 3 ....................................... 40
II.1.1. Introducere ..................................................................................... 40
II.1.2. Obiectivele unităţii de învăţare ....................................................... 40

-4-
II.1.3. Automate finite ................................................................................ 40
II.1.4. Legătura dintre gramaticile regulate şi automatele finite ................ 45
II.1.5. Rezumat .......................................................................................... 52
Test de evaluare/autoevaluare ................................................................... 51
Unitatea de învăţare II.2. Minimizarea automatului finit ............................................. 53
II.2.1. Introducere ..................................................................................... 53
II.2.2. Obiectivele unităţii de învăţare ....................................................... 53
II.2.3. Minimizarea automatului finit ......................................................... 53
II.2.4. Algoritmi de minimizare a automatului finit .................................... 57
II.2.5. Rezumat .......................................................................................... 61
Test de evaluare/autoevaluare ................................................................... 60
Unitatea de învăţare II.3. Gramatici regulate şi expresii regulate ............................... 62
II.3.1. Introducere ..................................................................................... 62
II.3.2. Obiectivele unităţii de învăţare ....................................................... 62
II.3.3. Gramatici de tip 3 şi expresii regulate ............................................. 62
II.3.4. Algoritm de transformare a unei gramatici regulate într-o
expresie regulată ............................................................................. 65
II.3.5. Rezumat .......................................................................................... 70
Test de evaluare/autoevaluare ................................................................... 70
Unitatea de învăţare II.4. Expresii regulate şi automate finite ..................................... 71
II.4.1. Introducere ..................................................................................... 71
II.4.2. Obiectivele unităţii de învăţare ....................................................... 71
II.4.3. Algoritm de construcţie a unui automat finit pornind de la o
expresie regulată ........................................................................... 71
II.4.4. Rezumat .......................................................................................... 76
Test de evaluare/autoevaluare ................................................................... 76
Modulul III Proprietăţi ale limbajelor regulate .......................................................................... 77
Introducere. ................................................................................................................ 77
Competenţe ................................................................................................................. 77
Unitatea de învăţare III.1 Proprietăţi de închidere pentru limbaje regulate. ................ 78
III.1.1. Introducere .................................................................................... 78
III.1.2. Obiectivele unităţii de învăţare ...................................................... 78
III.1.3. Proprietăţi de închidere pentru limbaje regulate ............................ 78
III.1.4. Rezumat ......................................................................................... 85
Test de evaluare/autoevaluare ................................................................... 85
Unitatea de învăţare III.2. Lema de pompare pentru limbaje regulate ......................... 86
-5-
III.2.1. Introducere .................................................................................... 86
III.2.2. Obiectivele unităţii de învăţare ...................................................... 86
III.2.3. Proprietăţi ale limbajelor regulate................................................. 86
III.2.4. Lema de pompare .......................................................................... 88
III.2.5. Rezumat ......................................................................................... 90
Test de evaluare/autoevaluare ................................................................... 90
Temă de contro Il ........................................................................................................ 91
Modulul IV Limbaje independente de context.. ........................................................................... 92
Introducere. ................................................................................................................ 92
Competenţe ................................................................................................................. 92
Unitatea de învăţare IV.1. Arbori de derivaţie pentru gramatici independente de
context ...................................................................................................... 93
IV.1.1. Introducere .................................................................................... 93
IV.1.2. Obiectivele unităţii de învăţare ...................................................... 93
IV.1.3 Arbori de derivaţie pentru gramatici I.D.C.. .................................... 93
IV.1.4. Rezumat ......................................................................................... 98
Test de evaluare/autoevaluare ................................................................... 97
Unitatea de învăţare IV.2. Simplificarea gramaticilor independente de context.şi
forme normale
IV.2.1. Introducere .................................................................................... 99
IV.2.2. Obiectivele unităţii de învăţare ...................................................... 99
IV.2.3. Simplificarea gramaticilor independente de context. ...................... 99
IV.2.4. Forme normale pentru gramatici I.D.C. ....................................... 105
IV.2.5. Rezumat ....................................................................................... 114
Test de evaluare/autoevaluare ............................................................... ..113
Unitatea de învăţare IV.3.Lema de pompare pentru limbaje independente de contex..115
IV.3.1. Introducere .................................................................................. 115
IV.3.2. Obiectivele unităţii de învăţare .................................................... 115
IV.3.3. Lema de pompare pentru limbaje I.D.C. ....................................... 115
IV.3.4.Rezumat. ....................................................................................... 120
IV.2.5. Rezumat ....................................................................................... 120
Test de evaluare/autoevaluare ................................................................. 120
Unitatea de învăţare IV.4. Automate push-down şi legătura lor cu gramaticile
independente de context ................................................... 121
IV.4.1. Introducere .................................................................................. 121
IV.4.2. Obiectivele unităţii de învăţare .................................................... 121
-6-
IV.4.3. Automate push-down ................................................................... 122
IV.4.4. Legătura dintre automate push-down şi gramatici de tip 2 ........... 126
IV.4.5. Rezumat ....................................................................................... 132
Test de evaluare/autoevaluare ................................................................. 132
Unitatea de învăţare IV.5. Proprietăţi de închidere ale familiei limbajelor de tip 2.....133
IV.5.1. Introducere .................................................................................. 133
IV.5.2. Obiectivele unităţii de învăţare .................................................... 133
IV.5.3. Proprietăţi de închidere pentru limbaje I.D.C................................ 133
IV.5.4. Rezumat ....................................................................................... 143
Test de evaluare/autoevaluare ................................................................. 142
Temă de control II ..................................................................................................... 144
Bibliografie .............................................................................................................................. 145

-7-
Chestionar evaluare prerechizite

1. Definiţi următoarele noţiuni: tip de data, variabilă într-un algoritm, stare a execuţiei unui
algoritm (program), calcul efectuat de un program (algoritm), algoritm parţial corect,
testarea unui program, complexitatea unui algoritm.
2. Descrieţi metoda backtracking. Precizaţi 2 exemple de probleme rezolvate prin
backtracking.
3. Cum se realizează trasmiterea parametrilor pentru funcţii (java/c++)?
4. Cum se realizează generarea numerelor aleatoare în java/c++?
5. Ce înţelegeţi prin precedenţa operatorilor? Oferiţi exemple.
6. Şiruri de caractere:
a. Cum se determină lungimea unui şir?
b. Cum se determină poziţia unui caracter într-un şir dat?
c. Cum extragem un subşir dintr-un şir?
d. Cum se realizează înlocuirea unui subşir cu un alt subşir?
e. Cum se obţine inversul unui şir?

7. Instrucţiuni repetitive:
a. Care este forma generală a instrucţiunii ”for”?

b. Care este forma generală a instrucţiunii “while”?


Precizaţi pentru fiecare subpunct condiţii de ieşire din ciclu.
8. Ce este recursivitate? Precizati un exemplu.
9. Definiţi următoarele noţiuni: graf neorienatat, graf orientat, muchie, arc, nod sursă, nod
scop, lista de adiacenţă.
10. Definiţi următoarele noţiuni:
a. Arbore binar, subarbore, parcurgere în inordine, parcurgere în preordine, parcurgere în
postordine, frunză, succesor, rădăcină;
b.Stivă, coadă, listă simplu înlănţuită.

-8-
Modulul 1. Introducere în Teoria Limbajelor Formale
Cuprins
Introducere..........................................................................................................................9
Competenţe.........................................................................................................................9
U1. Noţiuni generale de teoria limbajelor formale............................................................10
U2. Algoritmi normali în sens Markov.............................................................................18
U3. Gramatici analitice şi generative................................................................................26

Introducere
Introducem, în acest modul, o serie de noţiuni folosite în teoria limbajelor formale
cum ar fi: alphabet, simbol, cuvânt, subcuvânt, prefix, suffix, cuvânt vid. Noţiunea
de limbaj formal se defineşte apoi în mai multe feluri, echivalente între ele,
pornind de la sisteme de rescriere, pînă la gramatici generative şi analitice.

În afară de gramatici se mai prezintă un exemplu de sistem de rescriere, algoritmul


normal în sens Markov, pentru care se dau o serie de exemple de funcţionare.

În continuare se prezintă o ierarhizare a gramaticilor, numită Ierarhia lui Chomsky,


şi se definesc operaţiile cu limbaje.

Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
 Folosească noţiunile definite în descrierea limbajelor formale;
 Construiască gramatici generative şi analitice pentru diferite limbaje;
 Construiască algoritmi normali în sens Markov cu o intrare şi o ieşire;
fixată;
 Implementeze algoritmii prezentaţi într-un limbaj de programare general.

-9-
Unitatea de învăţare M1.U1. Noţiuni generale de teoria
limbajelor formale

Cuprins

M1.U1.1. Introducere ............................................................................................... 10


M1.U1.2. Obiectivele unităţii de învăţare .................................................................. 10
M1.U1.3. Noţiunea de limbaj.................................................................................... 10
M1.U1.4. Rezumat ................................................................................................... 17

M1.U1.1. Introducere
Noţiunile folosite în teoria limbajelor formale au fost preluate din lingvistică deşi
sunt folosite de multe ori cu sens schimbat. Astfel limbajul este definit ca o
mulţime de cuvinte iar în lingvistică, care se referă la un limbaj natural, limbajul
este o mulţime de fraze care sunt la rândul lor mulţimi de cuvinte.

Problema delicată este de a defini în mod finit o mulţime infinită sau foarte mare
de cuvinte.

In acestă primă parte se defineşte un limbaj prin proprietăţi specifice ale


cuvintelor sale sau printr-un sistem de reguli care conduc la generarea cuvimtelor
sale .

M1.U1.2. Obiectivele unităţii de învăţare


Această unitate de învăţare îşi propune ca obiectiv principal o iniţiere a studenţilor
în noţiuni specifice Limbajelor formale.
La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice algoritmii de generare a cuvintelor unui limbaj;
 demonstreze corectitudinea unei construcţii de limbaj.

Durata medie de parcurgere a unităţii de învăţare este de 2 ore.

M1.U1.3 Noţiunea de limbaj


Noţiunea de limbaj se întâlneşte atât în lingvistică, unde se referă la limbajele naturale, cât şi în
informatică, unde se referă la limbajele de programare.

- 10 -
O limbă naturală se defineşte, conform dicţionarului, ca o mulţime de cuvinte şi de
metode de combinare a lor, folosită şi înţeleasă de o comunitate umană considerabilă.
Un limbaj de programare se defineşte ca o mulţime de programe corecte scrise în acel
limbaj.
O limbă naturală sau un limbaj de programare pot fi considerate ca mulţimi de secvenţe,
adică şiruri finite de elemente ale unui anumit vocabular de bază.
Pentru a putea studia proprietăţile acestor limbaje a fost necesară formalizarea noţiunii de
limbaj, construirea unei teorii matematice riguroase a limbajelor. O astfel de teorie este suficient
de generală pentru a include şi limbajele naturale şi limbajele de programare, precum şi o
mulţime de alte limbaje, formând la un loc aşa numitele limbaje formale.
Pentru a putea defini noţiunea de limbaj formal vom introduce o serie de noţiuni şi notaţii
folosite frecvent în această teorie.

Definiţia 1.1.1 Un alfabet sau vocabular, V, este o mulţime finită, nevidă de elemente.

Definiţia 1.1.2 Un element al alfabetului V se numeşte literă sau simbol.

În cele ce urmează vom folosi ca simboluri cifrele, literele latine şi greceşti mari şi mici
şi simboluri speciale cum ar fi $, #.

Exemplul 1 Exemple de alfabete sunt:


-alfabetul latin: {A, B, C, ..., Z}
-alfabetul grecesc: {, , , ..., }
-alfabetul binar: {0, 1}.

Definiţia 1.1.3 Un cuvânt peste alfabetul V este un şir finit constând din zero sau mai multe
simboluri ale lui V, unde un acelaşi simbol poate să apară de mai multe ori.

Notăm cu  sau , cuvântul vid, format din zero simboluri.


Dacă V este un alfabet atunci prin V* vom nota mulţimea tuturor cuvintelor peste V,
inclusiv cuvântul vid , iar V+= V* -    .

Exemplul 2 Dacă V =  0, 1  atunci


V*=, 0, 1, 00, 01, 10, 11, ...
şi
V+= 0, 1, 00, 01, 10, 11, 000 , ... .
Evident V* şi V+ sunt mulţimi infinite deoarece ele conţin cuvinte de
lungime oricât de mare.

- 11 -
Definiţia 1.1.4 Un limbaj este o mulţime de cuvinte peste un alfabet.

Exemplul 3 Într-un limbaj natural alfabetul, în sensul definiţiilor de mai sus, este
dicţionarul limbii respective, cuvintele sunt frazele, iar limbajul este mulţimea
tuturor frazelor. Într-un limbaj de programare simbolurile sunt instrucţiunile
limbajului, cuvintele sunt programele iar limbajul este mulţimea tuturor
programelor.

În mulţimea cuvintelor se introduce o operaţie numită concatenare:

Definiţia 1.1.5 Dacă u şi v sunt două cuvinte din V* atunci concatenarea uv este tot un cuvânt
din V*, care se obţine prin alăturarea simbolurilor lui v după ultimul simbol al lui u.

Observaţia 1.1.1 Evident operaţia de concatenare este asociativă, u(vw)=(uv)w, dar nu este
comutativă (în general uvvu) iar cuvântul vid  este element neutru relativ la operaţia de
concatenare: u=u=u.

Definiţia 1.1.6 Puterea a i-a a cuvântului u, notată ui, este definită recursiv astfel:
(1) u0 = 
(2) ui+1 = uiu

Definiţia 1.1.7 Lungimea unui cuvânt u, notată lg(u) sau |u|, este numărul de simboluri ale
cuvântului u şi este o aplicaţie lg: V*  N .
Prin definiţie lg() = 0,  fiind cuvântul format din zero simboluri.

Definiţia 1.1.8 Un cuvânt u este subcuvânt al lui v dacă şi numai dacă există cuvintele  şi 
astfel încât v = u. Dacă  =  atunci u se numeşte prefix al lui v iar dacă  =  atunci u se
numeşte sufix al lui v. Un subcuvânt u al lui v se numeşte subcuvânt propriu al lui v numai dacă
u{,v}.

Majoritatea limbajelor care ne interesează vor conţine o mulţime infinită de cuvinte. Se


pun atunci trei chestiuni importante:

1. Cum se poate reprezenta un limbaj?


Dacă limbajul este finit atunci el s-ar putea reprezenta prin enumerarea cuvintelor sale,
deşi la un număr mare de cuvinte enumerarea poate fi complicată. Dacă însă limbajul este infinit
apare problema găsirii unei reprezentări finite pentru limbaj.
Apare atunci o altă problemă:

2. Există o reprezentare finită pentru orice limbaj?


Evident mulţimea V* a tuturor cuvintelor peste un alfabet finit V este o mulţime
numărabilă. Un limbaj este o submulţime a lui V*, deci mulţimea tuturor limbajelor peste V este
mulţimea părţilor lui V*, adică o mulţime nenumărabilă.
Deşi nu am definit încă o reprezentare finită a unui limbaj, se pare că mulţimea
reprezentărilor finite este numărabilă [4] deci ar rezulta că există mai multe limbaje decât
reprezentări finite ale limbajelor.

- 12 -
3. Ce se poate spune despre structura acelor clase de limbaje care admit reprezentări finite?
Aceasta este una din principalele problemele de care ne vom ocupa în continuare.

Să considerăm acum câteva limbaje peste alfabetul {a, b}.

L1={  }
L2={ a, ba, aaba, bbbb }
L3={ ap | p număr prim }
L4={ ai bi | i număr natural }
L5={ u a , b | Na(u)=Nb(u) }
*

unde Na (u) este numărul de apariţii ale simbolului a în cuvântul u. Considerăm şi limbajul vid
, care nu conţine nici un cuvânt Se observă că   {} pentru că limbajul { } conţine un
cuvânt şi anume .
Limbajele L1 şi L2 fiind finite se pot reprezenta prin enumerarea cuvintelor lor pe când
limbajele L3, L4 şi L5 sunt infinite şi au fost caracterizate de o proprietate pe care trebuie să o
satisfacă toate cuvintele limbajului. O astfel de proprietate specifică este un mijloc de bază de
definire a unui limbaj infinit.
Un alt mod de a defini un limbaj infinit este de a introduce un mecanism generativ şi de a
considera cuvintele produse de acest mecanism.
Se poate, de asemenea, construi un mecanism analitic, de recunoaştere. Astfel un limbaj
se poate defini ca mulţimea tuturor cuvintelor recunoscute de un astfel de mecanism.
Mecanismele generative şi analitice se pot defini în termenii unui sistem de rescriere.
Să considerăm câteva moduri de definire ale unor limbaje în exemplele următoare.

Exemplul 4 Fie L un limbaj peste alfabetul {a, b} definit după cum urmează:
(i) λ L
(ii) Dacă x L atunci axb  L
(iii) Nici un alt cuvânt nu aparţine lui L.
Vom demonstra prin dublă incluziune că limbajul L construit conform
acestor reguli este chiar limbajul L4 = { ai bi | i număr natural }.

a) Demonstrăm prin inducţie relativ la k faptul că a k b k  L, k  N , adică că
L4L:
Din (i)  =a0b0L .
Dacă akbkL prin (ii)  aakbkbL adică ak+1bk+1L, deci prin inducţie
rezultă că L4L.

b) Demonstrăm, prin inducţie relativ la lungimea cuvintelor din L, faptul că


L L 4 :
a0b0 , adică , este singurul cuvânt de lungime 0 din L.
Presupunem că akbk este singurul cuvânt de lungime 2k din L ; atunci din
(ii) rezultă că ak+1bk+1 este singurul cuvânt de lungime 2k+2 din L.
Pentru că L nu conţine nici un cuvânt de lungime impară (este uşor de

- 13 -
demonstrate această afirmaţie tot prin inducţie) rezultă că LL4.
Din a) şi b) rezultă că cele două limbaje sunt egale adică L4 =L .

Se observă că (i)-(iii) constituie un mecanism generativ pe când L4 este definit de o proprietate


specifică.

Exemplul 5 Fie L‟ definit după cum urmează :


(i) L‟
(ii) Dacă xL‟, atunci axbL‟ şi bxaL‟
(iii) Dacă x1L, x2L‟ atunci x1x2L‟
(iv) Nici un alt cuvânt nu aparţine lui L‟.
Vom demonstra că L‟=L5.

Demonstrăm întâi că L‟L5.
Pentru că  = a0b0are proprietatea de a avea acelaşi număr de a şi de b,
adică 0 de a şi 0 de b, iar (ii) şi (iii) păstrează proprietatea (acelaşi număr de
apariţii ale lui a şi b) rezultă că L‟ conţine numai cuvinte cu acelaşi număr de
apariţii ale simbolului a şi b.
Se demonstrează prin inducţie că L‟ conţine toate cuvintele de lungime
mai mică sau egală cu 2i cu această proprietate.

Exemplul 6 Fie L” un limbaj constând din toate cuvintele care se pot reduce la 
prin înlocuirea subcuvintelor ab prin .
Astfel cuvintele , ab, abab şi aabbab L”. Evident L”L5 dar L”L5
pentru că, de exemplu, baL”. Definiţia aceasta poate fi considerată ca un
mecanism de recunoaştere sau analitic.
În exemplele date anumite subcuvinte sunt rescrise. În conformitate cu
definiţia următoare, o mulţime finită de reguli de rescriere determină un sistem de
rescriere.

- 14 -
Definiţia 1.1.9 Un sistem de rescriere este o pereche ordonată SR=(V, F), unde V este un alfabet
şi F o mulţime finită de perechi ordonate de cuvinte peste V. Elementele (α,β) ale lui F sunt
numite reguli de rescriere sau producţii şi se notează αβ.
Un cuvânt α peste V generează direct un cuvânt β (α  β) dacă şi numai dacă există
SR

cuvintele u, v, α1 , β1 astfel încât:


α=uα1v
β=uβ1v
iar
α1β1 F,
adică subcuvântul α1 al lui α este înlocuit prin subcuvântul β1.
*
Un cuvânt α peste V generează β (în mai mulţi paşi) (α  β) dacă şi numai dacă există un
şir finit de cuvinte α0, α1 , ..., αk, k  0, unde α0=α, αk=β şi αi  αi+1, pentru 0  i  k-1. Secvenţa
α0 α1... αk se va numi derivaţie a lui β din α în conformitate cu sistemul de rescriere, SR.
α= α0 α1 α2.... αk=β
*
Astfel relaţia  este o relaţie binară pe V* iar  este închiderea reflexivă şi tranzitivă a
relaţiei . Numărul k se numeşte lungimea derivaţiei sau număr de paşi.

Observaţia 1.1.2 Dacă  este o relaţie binară pe o mulţime W , atunci închiderea reflexivă şi
tranzitivă * a relaţiei  se defineşte :
(i) P*P pentru orice PW
(ii) Dacă P1*P2 şi P2P3  P1*P3
(iii) P*Q numai dacă se poate stabili prin (i) şi (ii).

Un sistem de rescriere poate fi transformat într-un mecanism generativ prin specificarea


unei submulţimi Ax  V*, numită mulţimea de axiome, şi considerând limbajul
*
(1) Lg(SR, Ax)={ β | α  β, αAx }
Similar un sistem de rescriere poate fi privit ca un mijloc analitic sau de recunoaştere,
considerând limbajul
*
(2) La(SR, Ax)={ α | α  β, βAx }
Formula (1) reprezintă limbajul generat de perechea (SR, Ax), iar formula (2) reprezintă
limbajul recunoscut sau acceptat de perechea (SR, Ax).

Observaţia 1.1.3 De cele mai multe ori mulţimea Ax este formată dintr-un singur simbol
(simbolul iniţial) sau are o structură foarte simplă.

Observaţia 1.1.4 De cele mai multe ori V se împarte în două submulţimi :


VT, mulţimea terminalelor
VN, mulţimea neterminalelor sau a variabilelor
şi limbajul se defineşte ca o submulţime a lui VT *.
Revenind la exemplele anterioare, în exemplul 1.1.6, L” se poate defini, în termenii unui sistem
de rescriere ca:
L” = La(SR,{}),
unde V={a,b} iar F={ab}.
- 15 -
În exemplul 1.1.4,
L=Lg(SR,{x}){a,b}*,
unde
SR=({a,b,x}, {x, xaxb}).
Limbajul L’ din exemplul 1.1.5 este definit acum :
L’ = Lg(SR,{x}){a,b}*,
unde
SR=({a,b,x}, {x, xaxb, xbxa, xxx}).
Sistemele de rescriere sunt de asemenea denumite sisteme semi - Thue.

Să ne reamintim...
Definiţiile pentru: alphabet, simbol, cuvânt, subcuvânt, prefix, suffix,
cuvânt vid, limbaj, regulă de rescriere, sistem de rescriere, derivaţie,
axiomă.
.

Test de evaluare a cunoştinţelor


I. Întrebări.
Definiţi noţiunile de:
 vocabular,
 cuvânt,
 subcuvânt,
 prefix,
 suffix,
 limbaj,
 sistem de rescriere.
II. Exerciţii propuse.
1. Furnizaţi câteva exemple de limbaje peste alfabetul {0, 1}.
2. Care este lungimea cuvântului “limbaj”? Este “aba” subcuvânt al lui? Care
este rezultatul pentru (limbaj) 3 ?
3. Fie limbajul
L = {a2nbn | 0<n<5}
Să se scrie mulţimea de cuvinte din L.

- 16 -
M1.U1.4 Rezumat
Unitatea de învăţare prezintă câteva elemente introductive în teoria limbajelor
formale cum sunt: alphabet, simbol, cuvânt, subcuvânt, prefix, suffix, cuvânt vid.
Noţiunea de limbaj formal se defineşte apoi prin proprietăţi specifice cuvintelor
limbajului, printr-un sistem de generare a cuvintelor sau printr-un sistem de
rescriere. Important pentru fiecare din reprezentări ale unui limbaj este să
demonstrăm corectitudinea construcţiei, pentru care s-au prezentat, în unitatea de
învăţare, mai multe demonstraţii.

- 17 -
Unitatea de învăţare M1.U2. Algoritmi normali în sens Markov

Cuprins
M1.U2.1. Introducere.............................................................................................. 18
M1.U2.2. Obiectivele unităţii de învăţare ................................................................ 18
M1.U2.3. Algoritmi normali în sens Markov .......................................................... 18
M1.U2.4. Exemple de algoritmi normali.....................................................................19
M1.U2.5. Rezumat......................................................................................................25

M1.U2.1. Introducere
Unul din cele mai cunoscute sisteme de rescriere este algoritmul normal în sens
Markov[16]. Caracteristic pentru algoritmul normal Markov este faptul că
mulţimea de reguli este ordonată şi că regulile se aplica unui cuvânt iniţial într-o
anumită ordine.
.

M1.U2.2. Obiectivele unităţii de învăţare


Această unitate de învăţare îşi propune ca obiectiv principal familiarizarea
studenţilor cu un prim mecanism formal, algoritmul normal în sens Markov.
La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice algoritmii normali;
 construiască proprii algoritmi normali;
 programeze un algoritm normal.

Durata medie de parcurgere a unităţii de învăţare este de 3-4 ore.

M1.U2.3 Algoritmi normali în sens Markov

Definiţia 1.1.10 Un algoritm normal în sens Markov este un sistem de rescriere SR = (V, F) unde
elementele lui F sunt date într-o anumită ordine α1β1, α2β2 , . . . , αkβk şi există o
submulţime, posibil vidă, F1F conţinând reguli sau producţii finale α.β ; la fiecare pas al
unui proces de rescriere, se aplică prima din regulile lui F care este aplicabilă, şi în plus se rescrie
cea mai din stânga apariţie a subcuvântului care este membrul stâng al regulei folosite.

- 18 -
Astfel, algoritmii normali în sens Markov posedă o proprietate specială şi anume :
pentru orice cuvânt P există cel mult un cuvânt care poate fi generat din P într-un singur
pas.
Din punct de vedere formal, α├─ β dacă şi numai dacă fiecare din următoarele condiţii
este satisfăcută.
(i) Există un număr i, 1 i k şi cuvintele α' şi α" astfel încât α=α'αiα", β= α'βiα".
(ii) Nici un cuvânt αj, j < i, nu este subcuvânt al lui α
(iii) αi apare o singură dată ca subcuvânt al lui α'αi.
Algoritmul normal reia aplicarea regulilor în ordine atâta timp cât este îndeplinita condiţia:
(iv) αiβi nu este un element al lui F1 şi unul din cuvintele α1, ..., αk este subcuvânt al lui β.
Dacă (iv) nu este îndeplinită, dar sunt îndeplinite (i)-(iii), atunci α├─*.β şi procesul de
rescriere se încheie.
Deci α├─*. β dacă şi numai dacă există α0, α1 , ..., αn astfel încât

α=α0├─ α1├─ α2├─ ... ├─ αn+1├─ .αn=β .

O consecinţă imediată este lipsa ambiguităţii. Rezultă că există cel mult un singur cuvânt
β astfel încât α├─* .β .
Dacă există un astfel de cuvânt β se spune că algoritmul normal se termină cu α sau că
traduce α în β. În caz contrar algoritmul ciclează cu α.

M1.U2.4 Exemple de algoritmi normali în sens Markov

Exemplul 7 Fie algoritmul normal peste { a, b } cu regulile de rescriere


1. a
2. b
3. .aba
El traduce orice cuvânt din {a,b}* în aba
Exemplificare:

aababba├1─ ababba ├1─babba ├1─bbba├1─bbb├2─ bb├2─ b ├2─λ ├3─. aba

- 19 -
Exemplul 8 Fie algoritmul cu alfabetul { a, x, y, # } şi regulile:
1. yaay
2. xaayx
3. x
4. a##x
5. #a#
6. #
7. ya
El traduce orice cuvânt de forma ai # aj cu i, j  0 în aij, deci realizează înmulţirea
a două numere.
Fie i = 2 şi j = 3. Atunci:
aa#aaa├4─ a#xaaa├2─ a#ayxaa├2─ a#ayayxa├1─ a#aayyxa├2─ a#aayyayx
( 3)
├1─ a#aayayyx├1─ a#aaayyyx  a#aaayyy├4 ─ #xaaayyy├2─ #ayxaayyy
├2─ #ayayxayyy├1─ #aayyxayyy├2─ #aayyayxyyy├1─ #aayayyxyyy
├1─ #aaayyyxyyy├3─ #aaayyyyyy├5 ─ #aayyyyyy├5─ #ayyyyyy
├5─ # yyyyyy├6─ yyyyyy├7─* aaaaaa.
Exemplul 9 Trecerea de la un număr natural la succesorul său este dată de
algoritmul peste alfabetul  = {a} cu mulţimea regulilor formată numai dintr-o
singură regulă:
1. a · aa.
Algoritmul transformă un cuvânt de forma ai în ai+1.
Exemplificare:
aaa ├─.aaaa

Exemplul 10 Algoritmul care calculează suma a două sau mai multe numere
este (, P) unde  = {a, #} şi mulţimea regulilor P :
1. #  
Acest algoritm transformă ai#aj în ai+j, ai#aj#ak în ai+j+k, etc.
Exemplificare:
a3 # a2 # a4 ├─ a5 # a4 ├─ a9

- 20 -
Exemplul 11 Modulul diferenţei a două numere: ai#aj ├─ a|i-j|
AN = (, P) unde  = {a, #} şi P conţine regulile:
1. a#a  #
2. #  
Să calculăm modulul diferenţei dintre 4 şi 2.
AN : a4 # a2├1─ a3 # a ├1─ a2 # ├2─ a2

Exemplul 12 Restul împărţirii unui număr natural la 5 transformă:


i / 5 
ai  ai5 iar AN = (, P) unde  = {a} şi P :
1. aaaaa  
Exemplificare:
AN : a13├─ a8├─ a3

Exemplul 13 Câtul împărţirii unui număr natural la 5 transformă:


# ai  ai / 5 iar algoritmul este definit de :
# aaaaa  a #
AN = (, P) unde  = {a, #} şi P :  # a #

 #

Exemplificare pentru câtul împărţirii numărului natural 13 la 5:
AN : # a13 ├─ a # a8 ├─ a2 # a3 ├─ a2 # a2 ├─ a2 # a ├─a2 # ├─. a2

- 21 -
Exemplul 14 Câtul şi restul împărţirii unui număr natural la 5:
# ai  ai / 5 # ai5i / 5

AN = (, P) unde  = {a, #} şi P : # aaaaa  a #



#  #
Calculăm câtul şi restul împărţirii numărului natural 13 la 5:
AN : # a13 ├─ a # a8 ├─ a2 # a3 ├─. a2 # a3

Exemplul 15 Cel mai mare divizor comun a două numere naturale:


ai#ajacmmdc(i,j)
1. axxa
2. a#ax#
3. a##y
4. ya
5. xz
6. za
7. #
El traduce ai # aj în ak, unde k este cel mai mare divizor comun al lui i şi j.
Să calculăm cel mai mare divizor comun al lui 6 şi 4.
a 6 # a 4 -a 5 x # a 3 -a 4 xa # a 3 -a 3 xa 2 # a 3 -a 2 xa 3 # a 3 -axa 4 # a 3 -
- xa 5 # a 3 - xa 4 x # a 2 - xa 3 xa # a 2 - xa 2 xa 2 # a 2 - xaxa 3 # a 2 -
- x 2 a 4 # a 2 - x 2 a 3 x # a - x 2 a 2 xa # a - x 2 axa 2 # a - x 3 a 3 # a - x 3 a 2 x # -
- x 3 axa # - x 4 a 2 # - x 4 a # y - x 4 # y 2 - x 4 # ay - x 4 # a 2 - zx 3 # a 2 -
- z 2 x 2 # a 2 - z 3 x # a 2 - z 4 # a 2 -az 3 # a 2 -a 2 z 2 # a 2 -a 3 z # a 2 -a 4 #a 2 -
-a 3 x # a -a 2 xa # a -axa 2 # a - xa 3 # a - xa 2 x # - xaxa # - x 2 a 2 # - x 2 a # y -
-x 2 # y 2 -x 2 # ay -x 2 # a 2 -zx # a 2 -z 2 # a 2 -az # a 2 -a 2 # a 2 -ax # a -
-xa # a -x 2 # -zx # -z 2 # -az # -a 2 # -a # y -# y 2 -# ay -# a 2 -a 2
Similar dacă calculăm cel mai mare divizor comun al lui 4şi 6 avem:
a 4 # a 6 -a 3 x # a 5 -a 2 xa # a 5 -axa 2 # a 5 - xa 3 # a 5 - xa 2 x # a 4 - xaxa # a 4 -
- x 2 a 2 # a 4 - x 2 ax # a 3 - x 3 a # a 3 - x 4 # a 2 -zx 3 # a 2 -z 2 x 2 # a 2 -z 3 x # a 2 -
-z 4 # a 2 -az 3 # a 2 -a 2 z 2 # a 2 -a 3 z # a 2 -a 4 # a 2 -a 3 x # a -a 2 xa # a -

- 22 -
-axa 2 # a - xa 3 # a - xa 2 x # - xaxa # - x 2 a 2 # - x 2 a # y - x 2 # y 2 - x 2 # ay -
- x 2 # a 2 -zx # a 2 -z 2 # a 2 -az # a 2 -a 2 # a 2 -ax # a - xa # a - x 2 # -zx # -
-z 2 # -az # -a 2 # -a # y - # y 2 - # ay - # a 2 -a 2

Exemplul 16 Împărţirea a două numere naturale:


a i # a j  a i / j # a i ji / j
AN = (, P) unde  = {a, #, x, y, c, r, s, t} şi P:
ac  ca

 xaa  axa
c # a  c # t

tx  rt
ta  t

t  
a # x  acy #


P : a #  # x

c # x  c # s
2

sx  s

sa  s
s  

x  
y  


a  r
Exemplificări
a3 # a5 -a2 # xa5 -a2 # axa 4 -a2 # a2 xa3 -a2 # a3 xa2 -a2 # a 4 xa -
-a # xa 4 xa -a # axa 3 xa -a # a2 xa 2 xa -a # a3 xaxa -# xa3 xaxa -
- # axa 2 xaxa - # a2 xaxaxa - # a3 xaxa - # a 4 xa - # a5 - # ra 4 - # r 2a3 -
-#r 3a2 - # r 4a - # r 5

- 23 -
a11 # a 4 -a10 # xa 4 -a10 # a 3 xa -a 9 # xa 3 xa -a 9 # a 2 xaxa -
-a 8 # xa 2 xaxa - a 8 #axaxaxa -a 7 # xaxaxaxa -a 7 cy # axaxaxa -

ca 7 y # axaxaxa -ca 7 y # a 4 -ca 7 # a 4 -ca 6 # xa 4 -ca 6 # a 3 xa -ca 5 # xa 3 xa -


-ca 5 # a 2 xaxa -ca 4 # xa 2 xaxa -ca 4 # axaxaxa -ca 3 # xaxaxaxa -
-ca3cy # axaxaxa -c 2a3 y # axaxaxa -c 2a3 y # a4 -c 2a3 # a4 -c 2a2 # xa 4 -

-c 2 a 2 # a 3 xa -c 2 a # xa 3 xa -c 2 a # a 2 xaxa -c 2 # xa 2 xaxa -c 2 # axaxaxa -


-c 2 # txaxaxa -c 2 # rtaxaxa -c 2 # rtxaxa -c 2 # r 2 taxa -c 2 # r 2 txa -c 2 # r 3 ta -
-c 2 # r t -c 2 # r 3
3

a 12 # a 4 a 11 # xa 4 a 11 # a 3 xa a 10 # xa 3 xa a 10 # a 2 xaxa 
a 9 # xa 2 xaxa a 9 # axaxaxa a 8 # xaxaxaxa a 8 cy # axaxaxa 
ca 8 y # axaxaxa ca 8 y # a 4 ca 8 # a 4 ca 7 # xa 4 ca 7 # a 3 xa 
ca 6 # xa 3 xa ca 6 # a 2 xaxa ca 5 # xa 2 xaxa ca 5 # axaxaxa 
ca 4 # xaxaxaxa ca 4 cy # axaxaxa c 2 a 4 y # axaxaxa c 2 a 4 y # a 4 
c 2 a 4 # a 4 c 2 a 3 # xa 4 c 2 a 3 # a 3 xa c 2 a 2 # xa 3 xa c 2 a 2 # a 2 xaxa 
c 2 a # xa 2 xaxa c 2 a # axaxaxa c 2 # xaxaxaxa c 3 # saxaxaxa 
c 3 # s c 3 #

Definiţia 1.1.11 Un sistem normal Post este un sistem de rescriere (V, F) unde toate elementele
(α, β) ale lui F sunt notate prin αxxβ, x fiind o variabilă operaţională. (Se presupune că x  V şi
nici α nici β nu au x ca subcuvânt). Relaţia se defineşte astfel: α1β1 dacă şi numai dacă există
cuvintele α, u, β peste V\{x} astfel încât: α1=αu, β1=uβ, şi αxxβF.

Se poate şi aici specifica o mulţime de axiome şi se poate defini limbajul generat şi cel
recunoscut la fel ca mai sus.

1 Să se construiască un algoritm normal în sens Markov care să realizeze înlocuirea


literelor a şi b dintr-un cuvânt de intrare, prin cuvintele alpha, respectiv beta adică
algoritmul codificării.

2 Să se construiască un algoritm normal în sens Markov care să calculeze puteri-



le lui 2, adică care să transforme cuvântul an# în a2 . Să se exemplifice algoritmul

- 24 -
pentru următoarele valori ale lui n:
a. n = 2;
b. n = 3;
c. n = 4.

Să ne reamintim...

Algoritmul normal în sens Markov se caracterizează prin faptul că mulţimea de


reguli este ordonată şi că regulile se aplica unui cuvânt iniţial într-o anumită
ordine până când nici o regulă nu mai poate fi aplicată sau până cind s-a aplicat o
regulă finală.

Test de evaluare a cunoştinţelor


I. Întrebări.
2. Cum se defineşte un algoritm normal Markov?.
3. Când se opreşte un algoritm nornal în sens Markov?

II. Exerciţii propuse.


1. Să se construiască un algoritm normal în sens Markov care să calculeze
lungimea unui cuvânt adică care să transforme un cuvânt de w în 0|w|.,
unde w din {a,b,c}*).

M2.U2.5 Rezumat
Unitatea de învăţare prezintă unul din primele sisteme de rescriere,
algoritmul normal în sens Markov, în care regulile de rescriere sunt ordonate
şi se aplică la rândul lor într-o anumită ordine. Prezentarea este însoţită de
foarte multe exemple pentru înţelegerea complexităţii unei astfel de
construcţii, cât şi pentru utilizarea acestor exemple în constrcţii ulterioare.

- 25 -
Unitatea de învăţare M1.U3. Gramatici generative şi analitice
Cuprins
M1.U3.1. Introducere............................................................................................ 26
M1.U3.2. Obiectivele unităţii de învăţare .............................................................. 26
M1.U3.3. Gramatici generative şi analitice ........................................................... 26
M1.U3.4. Ierarhia lui Chomsky............................................................................. 30
M1.U3.5. Operaţii cu limbaje................................................................................ 35
M1.U3.6. Rezumat.....................................................................................................38

M1.U3.1. Introducere
Noţiunea de gramatică formală a fost introdusă de lingvistul Noam Chomsky, si
reprezintă mecanismul generativ cel mai folosit pe parcursul acestui material.
Astfel se prezintă atât gramatici generative cât şi analitice şi se demonstrează că
ele sunt într-o relaţie de dualitate, fapt care permite tratarea numai a uneia dintre
ele.

Un alt aspect important care va fi tratat este definirea unor operaţii cu limbaje ca
operaţii clasice cu mulţimi şi chiar a unor operatii specifice limbajelor.
.

M1.U3.2. Obiectivele unităţii de învăţare


Această unitate de învăţare îşi propune ca obiectiv principal familiarizarea
studenţilor cu un al doilea mecanism formal, gramatica generativa în sens Chomsy.
La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice gramaticile generative;
 construiască propriile gramatici care să genereze un anumit limbaj;
 programeze un generarea cuvintelor într-o gramatică.

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M1.U3.3 Gramatici generative şi analitice


Vom defini un tip de mecanism care joacă un rol important în teoria limbajelor formale.

Definiţia 1.2.1 O gramatică generativă este un quadruplu ordonat


G=(VN, VT,S,P) ,

- 26 -
unde VN şi VT sunt alfabete finite disjuncte SVN şi P este o mulţime finită de perechi ordonate
(u,v), astfel încât v este un cuvânt din V*, unde V=VNVT şi u este un cuvânt din V* care conţine
cel puţin o literă din VN.
Elementele lui VN formează mulţimea neterminalelor sau variabilelor, iar cele ale lui VT
formează mulţimea terminalelor; S se numeşte simbolul iniţial, iar P sunt reguli de rescriere,
producţii. De fapt o gramatică este un sistem de rescriere (V, P) numit sistem de rescriere indus
de G.
Noţiunile de derivare directă sau derivare corespund celor introduse în cadrul unui sistem
de rescriere.
Limbajul L(G) generat de G este definit de:
*
L(G)={ w| wV *, S  w }
Vom introduce o noţiune duală celei de gramatică generativă şi anume cea de gramatică
analitică.

Definiţia 1.2.2 O gramatică analitică este un quadruplu ordonat


G=(VN, VT, S, P), unde VN, VT, S sunt exact ca în definiţia 1.3.1, dar P este o mulţime finită de
reguli (u, v) astfel încât u este un cuvânt din V* iar vV* conţine cel puţin o literă din VN.
Limbajul L(G) recunoscut de gramatica G, sau acceptat este definit de :
*
L(G)={ w| wVT*, w  S },
deci limbajul cuvintelor formate numai din terminale care se reduc la simbolul iniţial prin
aplicarea regulilor din P.

Definiţia 1.2.3 Două gramatici, G şi G1, se numesc gramatici echivalente atunci şi numai atunci
când L(G)=L(G1).

Exemplul 1 Limbajul L = { aibi | iN } este generat de gramatica generativă


G = ({S}, {a,b}, S, {S, SaSb})
şi recunoscut de gramatica analitică
G1 = ({S}, {a,b}, S, {S, aSbS})
Deci L(G) = L(G1).

Exemplul 2 Limbajul L = { w | w{a,b}*, Na(w)=Nb (w) } este generat de


gramatica generativă
G = ({S}, {a,b}, S, {S, Sasb, SbSa, SSS})
şi recunoscut de gramatica analitică
G1 = ({S}, {a,b}, S, {S, aSbS, bSaS, SSS})
Vom arăta în cele ce urmează că orice gramatică analitică admite o
gramatică generativă, duală a ei, echivalentă.

Teorema 1.2.1
Fie G = (VN, VT, S, P) o gramatică generativă (sau analitică). Fie P1 o mulţime de reguli
de forma u v dacă v u este în P. Atunci L(G1)=L(G) unde G1=(VN, VT, S, P1) este o
gramatică analitică (generativă).

- 27 -
▼ Demonstraţie:
Dacă G este o gramatică generativă vom demonstra că pentru orice cuvânt  din
(VNVt)* avem
* *
(1.2.1) S    S
G G1

Vom arăta întâi prin inducţie că dacă pentru un anume k


u0  u1  ...  uk
este o derivaţie în G, atunci
uk  uk-1  ..  u0
este o derivaţie în G1.
Evident, pentru k=1 afirmaţia este valabilă conform definiţiei regulilor lui P1. Procedând
inductiv, presupunem că afirmaţia este adevărată pentru k paşi şi fie o derivaţie în k+1 paşi de
forma:
u0  u1  ... uk uk+1 în G.
Conform ipotezei inducţiei
uk  uk+1  uk+1  uk
G G1
* *
şi u0  uk  uk  u0
G G1

Atunci din cele două rezultă că


* *
u0  uk+1  uk+1  u0
G G1

Dacă acum u0=S vom obţine afirmaţia (1.2.1) dorită, deci L(G)=L(G1).

Observaţia 1.2.1 Pentru o gramatică generativă sau analitică G, gramatica G1 definită mai sus se
va numi duala sa.

Vom da în continuare câteva exemple de gramatici conform cu [21].

Exemplul 3 Fie G = ({S, B, C}, {a, b, c}, S, P}), unde mulţimea P este formată
din:
SaSBC
SaBC
CBBC
bBbb
bCbc
cCCc
aBab
Să încercăm o derivaţie în gramatica G:

S  aSBC  aaSBCBC  aaaSBCBCBC  aaaaBCBCBCBC 


 aaaaBBCCBCBC * aaaaBBBBCCCC  aaaabBBBCCCC 
 aaaabbBBCCC  aaaabbbBCCCC  aaaabbbbCCCC 
 aaaabbbbcCCC  aaaabbbbccCC  aaaabbbbcccC  aaaabbbbcccc

- 28 -
Se poate demonstra că L(G)={anbncn | n1}

Exemplul 4[21] Fie limbajul L={ ww | w{0,1}* }. Gramatica G definită de:


G=({x0, x1, x2, x3, y0, y1}, {0,1}, x0, P}), unde P este:

P: x0x1x2x3 x1x2ix1yi
x1x2 yijjyi
pentru fiecare i şi j din {0,1}
x3 yix3x2ix3
ix2x2i
Această gramatică generează limbajul L. Să încercăm o derivaţie în această
gramatică:
x0  x1x2x3 0x1y0x3 0x1x20x3  01x1y10x3  01x10y1x3  01x10x21x3 
 01x1x201x3  0101x3  0101

Exemplul 5 [21] Pentru limbajul L={an² | n1} vom avea următoarele reguli
gramaticale care se bazează pe identitatea n2=1+3+...+(2n-1), unde toate
simbolurile cu excepţia lui a sunt simboluri neterminale:
P: x0a
x0axx2z
x2zaa
xaaa
yaaa
x2zy1yxz
xx1x1yx
yx1y1yx
xy1x1y
yy1y1y
ax1axxyx2
x2yxy2
y2yyy2
y2xyx2
Să încercăm şi aici câteva derivaţii:
x0  axx2z  axaa  aaaa
x0  axx2z  axy1yxz  ax1yyxz axxyx2yyxz axxyxy2yxz
 axxyxyy2xz  axxyxyyx2z axxyxyyaa  axxyxyaaa
 axxyxaaaa  axxyaaaaa  axxaaaaaa  axaaaaaaa
 aaaaaaaaa = a9 = a3².

- 29 -

Exemplul 6 [21] ] Pentru generarea limbajului L = { a2 | n0 }vom avea
următoarele reguli gramaticale
x0yxy
yxyz
zxxxz
zyxxy
xa
y
Vom construi o derivaţie în aceasta gramatică pentru n = 2, pornind de la
simbolul iniţial x0
x0  yxy  yzy  yxxy  yzxy yxxzy  yxxxxy  xxxy  axxxy 
 aaxxy aaaxy aaaay  aaaa

Exemplul 7[21 Fie G=({S,B}, {0,1}, S, P) unde


S  0B

P: B  1S
B  1

Limbajul generat de G este L(G) = {(01)n | n>0}. Exemplificăm derivaţia unui
cuvânt din limbaj pentru n = 3.
S  0B  01S  010B  0101S  01010B  010101 = (01)3

Exemplul 8 [21] Fie gramatica G=({S,A,B},{a,b},S,P), unde mulţimea regulilor P


este P={S  aSb,S  ab}. Este uşor de demonstrat că limbajul generat de
gramatica G este
L(G) = {anbn | n>0}.
Pentru n = 4 obţinem următoarea derivaţie:
S aSb  aaSbb aaaSbbb  aaaabbbb = a4b4

M1.U3.4 Ierarhia lui Chomsky

Gramaticile generative pot fi clasificate prin impunerea de restricţii asupra formei


regulilor.

Definiţia 1.2.4 (Ierarhia lui Chomsky) Pentru i{0,1,2,3}, o gramatică generativă, G=(VN, VT,
S, P) este de tip i dacă şi numai dacă regulile de rescriere din P îndeplinesc restricţiile de tip (i):
(0) Nici o restrictie.
(1) Reguli dependente de context (DC): Fiecare regulă din P este de forma u1Au2u1 wu2 , unde
u1, u2V*, AVN şi w  {VN VT }+ cu o singură excepţie posibilă S, care poate să
apară dacă S nu apare în dreapta nici unei reguli din P.

- 30 -
(2) Reguli independente de context (IDC): Fiecare regulă din P este de forma
A  w cu A  VN şi w  {VN VT } *.
(3) Reguli regulate (R): Fiecare regulă este de una din următoarele două forme A aB sau
A  a , unde A, BVN şi aVT.
Gramaticile de tip 1 se numesc dependente de context sau contextuale, gramaticile de tip
2 se numesc independente de context, iar gramaticile de tip 3 se mai numesc şi regulate sau cu
număr finit de stări.
Evident că orice gramatică de tip 3 este şi de tip 2, orice gramatică de tip 2 este şi de tip 1, şi
orice gramatică de tip 1 este de tip 0.
Dacă notăm cu Li familia limbajelor de tip (i) avem, evident, următoarea incluziune între
familiile de limbaje:
L3  L2  L1  L0
Se va demonstra ulterior că incluziunea este proprie, deci că prin restricţiile (0)-(3) se obţine
într-adevăr o ierarhizare a familiilor de limbaje.

Definiţia 1.5 O gramatică este cu lungime crescătoare sau monotonă dacă şi numai dacă regula
uv satisface condiţia |u| |v| cu o singură excepţie posibilă S, care, dacă apare în mulţimea
regulilor, atunci S nu apare în partea dreaptă a nici unei reguli.

Observaţia 1.2.2 Gramaticile dependente de context sunt gramatici cu lungime crescătoare. Se


poate demonstra că gramaticile cu lungime crescătoare şi gramaticile dependente de context sunt
echivalente.

Teorema 1.2.2
Pentru fiecare gramatică monotonă, G, există o gramatică dependentă de context, G’,
echivalentă cu G, adică L(G) = L(G’).

▼Demonstraţie.
Fie gramatica monotonă G=(VN, VT, S, P), în care regulile din P sunt monotone, adică de
forma uv unde |u| |v|. Presupunem că regula uv nu este dependentă de context şi că este de
forma:

A1 A2 … Am → B1 B2 … Bn

Pentru că gramatica este monotonă avem m  n iar Ai şi Bi pot fi simboluri terminale sau
variabile. Presupunem că toate simbolurile Ai sunt variabile (în caz contrar înlocuim fiecare
simbol terminal Ai printr-un nou symbol neterminal Ai’ şi adăugăm regula Ai’→ Ai).
Considerăm noi variabile C1,C2, …, Cm. şi înlocuim regula iniţială uv prin mulţimea de reguli
dependente de context P(u,v):

A1 A2 … Am → C1 A2 … Am
C1 A2 … Am → C1 C2 … Am
………………………………………………
C1 C2 … Cm-1Am → C1 C2 …Cm Bm+1 Bm+2 … Bn
C1 C2 … Cm-1Cm Bm+1 … Bn → C1 C2 … Cm-1Bm Bm+1 … Bn
C1 C2 … Cm-1Bm Bm+1 … Bn → C1 C2 … Cm-2Bm-1 Bm … Bn

- 31 -
……………………………………………………………..
C1 B2 … Bn → B1 B2 … Bn

Fie acum gramatica G” = (VN  {C1, C2, …, Cm}, VT, S, P\ {uv}  P(u,v) ).
Este uşor de demonstrat acum că L(G) = L(G”).
Procedând de aceeaşi maniera cu fiecare regula monotonă care nu este dependentă de context se
obţine în final gramatica echivalentă G’.

Exemplul 9 Să aplicăm algoritmul din teorema 1.2.2 pentru gramatica din


exemplul 1.2.3, G = ({S, B, C}, {a, b, c}, S, P}), cu P :
SaSBC
SaBC
CBBC
bBbb
bCbc
cCCc
aBab
Singura regulă monotonă care nu este dependentă de context este regula CBBC
Înlocuim această regulă cu următoarea mulţime de reguli dependente de context:

CB  C1B
C1B  C1C2
C1C2  C1C
C1C  BC
Obţinem în final gramatica dependentă de context echivalentă cu G, G’= ({S,B,C,
C1, C2}, {a,b,c}, S, P’), unde P’:
S  aSBC
S  aBC
bB  bb
bC  bc
cC  Cc
aB  ab
CB  C1B
C1B  C1C2
C1C2  C1C
C1C  BC.

Observaţia 1.2.3 Gramaticile din exemplele 3, 4, şi 6 sunt gramatici monotone deci, conform
teoremei 1.2.2, limbajele generate sunt dependente de context. Gramatica din exemplul 5 este o
gramatică de tip 0 (există reguli care nu sunt monotone, ca de exemplu regula x1x2),
gramatica din exemplul 8 este independentă de context iar cea din exemplul 7 este regulată sau
de tip 3.

- 32 -
Pentru gramaticile analitice definiţiile rămân aceleaşi ca şi pentru gramaticile generative,
schimbând însă membrul drept cu membrul stâng în regulile din P. Noţiunea de gramatică
generativă cu lungime crescătoare îşi are corespondentul dual în cea de gramatică analitică cu
lungime descrescătoare.

Exemplul 10 Din punct de vedere lingvistic, gramaticile sunt folosite pentru


analiza frazelor. Să considerăm următoarea gramatică analitică IDC unde VN = {
F, A, V, Pn, S, Sn}, (variabile care reprezintă, respective: fraza, articol, verb,
predicat nominal, substantiv, subiect), VT = {o, fata, este, laboranta}, unde
fiecare din aceste cuvinte ale limbii române reprezintă un simbol al alfabetului
terminalelor. Regulile gramaticii sunt:

{oA, fatăS, laborantăS, esteV, ASSn, VSPn, SnPnF}


Frazele recunoscute sunt :
 o fata este laborantă
 o laborantă este fată
 o fată este fată
 o laborantă este laborantă
Fiecare din fraze este corectă gramatical dar unele s-ar putea să nu aibă nici un
înţeles.
În cele ce urmează vom considera numai gramatici generative, aspectul analitic fiind tratat în
capitolele II şi III prin intermediul automatelor.

Exemplul 11 Se numeşte palindrom un cuvânt, care este identic când este citit
de la stânga la dreapta sau de la dreapta la stânga. Astfel în limba româna există
palindroamele: capac, coc, cuc, lupul, ele, etc. Notăm cu ~y reflectatul sau
oglinditul unui cuvânt y, adică cuvântul ale cărui simboluri sunt în ordine inversă
faţă de y. Limbajul { y~y | y VT* } este în mulţimea palindroamelor cu VT={a1,
..., an} şi poate fi generat de gramatica:

G=({S}, VT, S, {S, Sa1Sa1, Sa2Sa2, ..., SanSan}).

În exemplul anterior există regula S iar S apare şi în dreapta altor reguli. Vom arăta că
există ca pentru orice astefel de gramatică existăo gramatică echivalentă în care S nu apare în
dreapta nici unei reguli.

Teorema 1.2.3
Dacă G = (VN, VT, S, P) este o gramatică DC, atunci există altă gramatică D.C., G1, care
generează acelaşi limbaj cu G, pentru care simbolul initial (de start) nu apare în dreapta
nici unei reguli ale lui G1. Dacă G este I.D.C. sau R atunci şi G1 este I,D,C,, respectiv R.
▼ Demonstraţie :
Fie S1VNVT. Construim gramatica G1={VN{S1}, VT, S1, P1 }, unde P1 conţine toate
regulile din P şi în plus toate regulile de forma S1 unde
S P :

- 33 -
P1=P{S1 │ S P }
Observăm că S1VNVT deci nu apare în dreapta nici unei producţii din G şi nici în
dreapta vreunei producţii noi adăugate în P.
Să demonstrăm acum că L(G)=L(G1).
*
a) Presupunem că wL(G), deci există o derivaţie în gramatica G de forma S  w. Atunci prima
regulă folosită este de forma S deci derivaţia va fi :
*
S w
G G

Prin definiţia lui P1 avem : S1 P1 şi deci:


S1  
G1

Pentru că toate regulile lui P sunt în P1 rezultă că orice derivaţie din G este şi o derivaţie în
gramatica G1 deci
*
 w
G1

Combinând cele două derivaţii se obţine:


*
S1    w ,
G1 G1

Deci w  L(G1), de unde rezultă că L(G)L(G1).


*
b) Presupunem acum că wL(G1), deci există derivaţia S1  w în gramatica G1. Prima regulă
folosită este de forma S1, pentru un anume . Rezultă din construcţia gramaticii G1 că S
*
este o regulă din P şi deci S, în gramatica G. Acum   w este o derivaţie în gramatica G1
dar nu poate avea simbolul S1, căci foloseşte numai regulile din P1 care sunt şi în P. Rezultă că
*
  w este o derivaţie în gramatica G şi atunci:
*
S    w,
G G

adică wL(G).
Evident că regulile adăugate la P pentru a obţine P1 sunt de acelaşi tip cu regulile lui P
deci dacă G este DC (IDC sau R) atunci şi G1 este DC (IDC sau R).

Teorema 1.2.4
Dacă L este un limbaj DC, IDC sau R, atunci şi L şi L\{} sunt limbaje DC, IDC
respectiv R.

▼Demonstraţie : Dacă L este un limbaj DC, IDC sau R, din teorema 1.2.3 rezultă că există o
gramatică G, care poate fi DC, IDC sau R, în care simbolul iniţial, S, nu apare în partea dreaptă
a nici unei reguli de rescriere. În plus singura regulă în care membrul drept poate fi λ este de
forma S→λ.
Atunci pentru limbajul L\{} se scoate regula S→λ, iar pentru limbajul L se adugă tot
regula S→λ. Toate aceste modificări nu au nici o influenţă asupra restului cuvintelor generate de
G pentru că simbolul iniţial S nu mai apare în partea dreaptă a nici unei reguli de rescriere.

- 34 -
M1.U3.5 Operaţii cu limbaje

Pentru că limbajele sunt mulţimi, rezultă că se pot folosi toate operaţiile cu mulţimi cunoscute.

Reuniunea a două limbaje


L1L2={ w | wL1 sau wL2 }

Intersecţie a două limbaje


L1L2={ w | wL1 şi wL2 }

Diferenţa a două limbaje


L1-L2={ w | wL1 şi wL2 }

Complementara unui limbaj relativ la un alphabet V


CV(L)=V*-L

În afară de aceste operaţii se pot introduce o serie de operaţii specifice limbajelor :

Concatenarea a două limbaje


L1L2={uv | uL1, vL2
Limbajele Φ şi {} reprezintă elementul zero şi respectiv elementul unitate relativ la
concatenarea limbajelor:
L Φ = Φ L= Φ
L{}={}L=L
Concatenarea se mai numeşte şi produs.

Puterea unui limbaj se defineşte recursiv prin:


L0 = {}
Li+1 = Li L .
Produsul Kleene (sau Închiderea Kleene) este definit prin reuniunea tuturor puterilor lui L:

L*   Li
i 0

Închiderea Kleene  - liberă este



L   Li
i 1
Câtul stâng a două limbaje este limbajul format din sufixele cuvintelor din L1 care au prefixul
în L2:
L2\L1={v |uvL1, uL2}
Derivata stângă a unui limbaj relativ la cuvântul v este
 vs L={u |vuL}
adică câtul stâng al limbajelor
{v}\L
Câtul drept a două limbaje este limbajul format din prefixele cuvântelor din L1 cu sufixul în L:
- 35 -
L1/L2 = { v| vuL1 pentru uL2 }
Derivata dreaptă a unui limbaj relativ la cuvântul u este
udL= {v |vuL}

adică câtul drept al limbajelor:


L/{u}

Reflectatul sau oglinditul unui limbaj


~
L= { ~u | uL }
Substituţia unui limbaj se defineşte astfel:
aV definim  (a) un limbaj peste Va iar apoi se aplică proprietăţile:
()=,
(uv)=(u)(v)  u, v V*
deci  este o aplicaţie  : V* P(V’*)’
unde V’=  Va .
aV
Substituţia unui limbaj L este atunci:
(L)={ v | v(u) pentru uL }

Dacă (a) este un singur cuvânt ua, atunci substituţia se numeşte homomorfism h:V*V’*. Un
homomorfism se numeşte -liber dacă nici unul din cuvintele (a)=ua nu este .

Observaţia 1.3.1 Pentru că V* este un semigrup liber, h este homomorfism de semigrupuri.

Una din problemele pe care le vom studia în capitolele următoare este problema închiderii
familiilor de limbaje de tip i, Li (i = 0, 1, 2, 3) relative la operaţiile introduse.

1. Se consideră gramatica monotonă

G = ( {A,B}, {a,b}, A, P), unde P:


A → Ba B → BA
Aa → Bb B→b
B → bB A→a
Să se construiască o gramatică echivalentă independentă de context.

2. Considerăm gramatica G=({x0,x,y,z},{a }, x0, P), unde P este mulţimea


producţiilor:

(1) x0yxy

(2) xyyz

(3) zxxxz

- 36 -
(4) zyxxy

(5) xa

(6) y

(a) Să se dea o derivare în G pentru un cuvânt din L(G).

(b) Să se verifice care dintre cuvintele următoare aparţin limbajului:


{aaaaa,aaaa,a}.

3. Să se construiască gramatică pentru generarea limbajului:

L = {anbn | n>0}

Să ne reamintim...

O gramatică generativă este un quadruplu ordonat


G=(VN, VT,S,P) ,
unde VN şi VT sunt alfabete finite disjuncte SVN şi P este o mulţime finită de
perechi ordonate (u,v), astfel încât v este un cuvânt din V*, unde V=VNVT şi u
este un cuvânt din V* care conţine cel puţin o literă din VN.

Limbajul L(G) generat de G este definit de:


*
L(G)={ w| wV *, S  w }
Gramaticile şi, respectiv, limbajele generate de ele, sunt de 4 tipuri: de tip 0
(fără restricţii), de tip 1 (dependente de context), de tip 2 (independente de
context) şi de tip 3 (regulate).

Operaţiile cu limbaje sunt: reuniunea, intersecţia complementara, concatenarea,


puterea, produsul Klenee, oglindirea, substituţia, homomorfismul,
homomorfismul invers, derivata sângă şi dreaptă

Teste de evaluare/autoevaluare
I. Întrebări.
1. Ce este o gramatică generativă?
2. Câte tipuri de gramatici generative cunoaşteţi şi care sunt acestea?
II. Exerciţii propuse.
1. Se dă gramatica G=({S,A},{,,, p,q,r,„ },S, P), unde P =
{SSS, SSS, SS, SA, AA‟, Ap, Aq, Ar }.

- 37 -
Să se verifice dacă pqrpqr  L(G).
2. Să se construiască o gramatică G care generază următorul limbaj:

L = {a2nbn | n>0}

M1.U3.6. Rezumat. Această unitate de învăţare prezintă noţiunea de gramatică


formală, care a fost introdusă de lingvistul Noam Chomsky. Gramatica generativă
reprezintă mecanismul generativ cel mai folosit pe parcursul acestul material. S-au
prezentat atât gramatici generative cât şi analitice şi s-a demonstrat că ele sunt într-o
relaţie de dualitate, fapt care permite tratarea numai a uneia dintre ele. Un alt aspect
important tratat a fost definirea unor operaţii cu limbaje ca operaţii clasice cu mulţimi
şi chiar a unor operaţii specifice limbajelor..

- 38 -
Modulul 2. Automate finite şi limbaje de tip 3
Cuprins
Introducere ................................................................................................................ 39
Competenţe.....................................................................................................................39
U1. Automate finite şi gramatici de tip 3.......................................................................40
U2. Minimizarea automatului finit.................................................................................53
U3. Gramatici regulate şi expresii regulate.....................................................................61
U4. Expresii regulate şi automate finite..........................................................................71

Introducere
Acest modul se referă la limbajele regulate privite ca limbaje generate de gramatici
de tip 3, recunoscute de automatele finite sau reprezentate de expresii regulate. Se
demonstrează că cele trei moduri de reprezentare sunt echivalente.
Se prezintă doi algoritmi de minimizare a automatului finit, pe baza cărora se poate
construe un analizor lexical optim.

Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
 Construiască automate finite deterministe şi nedeterministe;
 Construiască gramatici generative de tip3 pentru diferite limbaje;
 Construiască expresii regulate pentru diferite limbaje de tip 3;
 Să construiasca un mod de reprezentare(gramatica, automat finit, expresie
regultă) pornind de la alt mod de reprezentare echivalent;
 Implementeze algoritmii prezentaţi într-un limbaj de programare general

- 39 -
Unitatea de învăţare M2.U1. Automate finite şi gramatici de tip 3

Cuprins
M2.U1.1. Introducere............................................................................................ 40
M2.U1.2. Obiectivele unităţii de învăţare .............................................................. 40
M2.U1.3. Automate finite ..................................................................................... 40
M2.U1.4. Legătura dintre gramaticile regulate şi automatele finite ........................ 45
M2.U1.5. Rezumat.....................................................................................................52

M2.U1.1. Introducere

Din punct de vedere istoric, automatele finite au fost introduse pentru a modela
reţelele neuronale dar au o mulţime de aplicaţii şi în alte domenii cum ar fi:
analiza lexicală (faza iniţială a unui compilator), descrierea editoarelor de texte şi a
altor programe de procesare a textelor, modelarea circuitelor logice şi altele.

Automatul finit este un bun model pentru un calculator cu o cantitate extrem de


limitată de memorie. Vom vede că, deşi are o memorie foarte mică, un astfel de
calculator poate să facă o serie de lucruri utile cum ar fi cele enumerate mai sus.

M2.U1.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 Construiască automate finite care să recunoasca un limbaj anume;
 Inţeleagă şi să explice algoritmii de trecere de la un automat finit la o
gramatică şi invers, de la o gramatică la un automat finit;
 Inţeleagă şi să explice algoritmii de trecere de la un automat finit
nedeterminist la unul determinist echivalent
 Implementeze algoritmii prezentaţi într-un limbaj de programare general.

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M2.U2.3 Automate finite

În modulul 1 am definit noţiunea de limbaj regulat sau limbaj de tip 3, ca fiind limbajul generat
de o gramatică de tip 3, adică de o gramatică G=(VN,VT,S,P), unde regulile din P sunt de forma
:

- 40 -
A→aB
sau
A→a
Aici A şi B, sunt simboluri neterminale iar a este un simbol terminal.

Vom defini în cele ce urmează un sistem analitic pentru limbajele regulate şi anume automatele
finite.

Definiţia 2.1.1 Un automat finit determinist, notat M=(Q, Σ, δ, q0, F), este format din:
Q - o mulţime finită nevidă (mulţimea stărilor);
Σ - un alfabet finit de intrare;
 - o aplicaţie numită funcţie de tranziţie, care ataşează fiecărei combinaţii <stare,
simbol de intrare> o nouă stare
δ:Q Σ Q;
q 0  Q starea iniţială;
F  Q mulţimea stărilor finale.

Din punct de vedere practic un automat finit este format dintr-un control finit, care se poate
afla într-una din stările mulţimii Q, dintr-o bandă de intrare împărţită în celule în care sunt
scrise un număr finit de simboluri din Σ, şi un cap de citire care se mişcă pe banda de intrare
secvenţial de la stânga la dreapta (de fapt banda de intrare se mişcă în dreptul capului de citire
de la dreapta la stânga ).

Iniţial controlul finit se află în starea q0 iar capul de citire analizează cel mai din stânga

a0 a1 … ai … an …

CONTROL
FINIT
Figura 2.1.1
simbol scris pe banda de intrare. Interpretarea lui δ(q,a)  p pentru q,pєQ şi aєΣ, este aceea
că automatul M, aflat în starea q şi analizând simbolul a pe banda de intrare, îşi schimbă starea
în p şi îşi mută capul de citire cu o celulă la dreapta.
S-ar putea ca funcţia de tranziţie δ să nu fie peste tot definită, adică să existe p P şi
a astfel încât δ(p,a)=. În cazul în care automatul se află în această stare p şi capul de citire
vizează simbolul a pe banda de intrare se spune că automatul se blochează fiindca nu este
definită mişcarea următoare.
Aplicaţia δ se poate extinde la Q  Σ , prin δ̂ :
*


δ̂(q, λ)  q


δ̂(q, xa)  δ( δ̂(q, x), a)  x  Σ* , a  Σ ,

- 41 -
unde δ̂(q, x)  p înseamnă că M, pornind să analizeze secvenţa x din starea q, ajunge în starea
p în momentul în care capul de citire depăşeşte secvenţa x.
Observaţia 2.1.1 În continuare vom folosi notaţia δ şi pentru ˆ .
Definiţia 2.1.2 Un cuvânt x este acceptat sau recunoscut de un automat finit M, dacă,
δ(q 0 , x)  p pentru p  F .
Limbajul acceptat de automatul M se notează

T(M)  x δ(q0 , x)  F . 
Un automat finit determinist se poate defini în termenii unui sistem de rescriere SR=(V,
P), unde :
V  Q  Σ, unde Q    
q 0  Q starea iniţială
F  Q mulţimea stărilor finale
şi P: q i a k  q j , unde q i , q j  Q şi a k  
şi în plus pentru fiecare qiak există exact o regulă în P.

Atunci T(M)  x  
 
q 0 x  p, p  F .

 
Definiţia 2.1.3 Numim configuraţie instantanee perechea (q,x), formată din starea q  Q în
care se află automatul finit şi şirul de caractere x  Σ * rămas necitit pe banda de intrare, unde
capul de citire vizează cel mai din stânga simbol al lui x.
Dacă automatul finit foloseşte tranziţia δ(q,a)  p , atunci vom nota modificarea
configuraţiei astfel: (q, a ) ├ ( p, ) .
Specificarea unui automat finit M se poate face prin definirea funcţiei δ (într-un tabel) sau
printr-o diagramă de stare sau de tranziţie. Diagrama de tranziţie este un graf orientat în care
nodurile sunt stările automatului iar arcele (q,p) sunt etichetate cu a dacă δ(q,a)=p este o
tranziţie din automatul M.

Exemplul 1
M  (Q, Σ, δ,q 0 , F)
Fie, de exemplu, automatul finit
  {0,1} , Q  {q 0 , q 1 , q 2 , q 3 } , F  {q 0 }

Σ
δ
0 1
q0 q1 q2
q1 q0 q3
Q
q2 q3 q0
q3 q2 q1

- 42 -
Fie şirul de intrare 10110010; atunci putem urmări execuţia automatului astfel:
δ(q 0 ,10110010)  δ(q 2 ,0110010)  δ(q 3 ,110010)  δ(q1 ,10010) 
 δ(q 3 ,0010)  δ(q 2 ,010)  δ(q 3 ,10)  δ(q1 ,0)  q 0  F ,
deci 10110010  T(M) .
În mod echivalent, într-un calcul de configuraţii se scrie:
(q0,10110010) ├ (q2,0110010) ├ (q3,110010) ├ (q1,10010) ├
(q3,0010) ├ (q2,010) ├ (q3,10) ├ (q1,0) ├ (q0,λ) unde q0 F,
deci s-a obţinut din nou că 10110010  T(M) .
Se poate demonstra că automatul finit M de mai sus acceptă şirurile cu
număr par de 0 şi număr par de 1.
Definiţia 2.1.4 Un automat finit nedeterminist, notat M=(Q, Σ, δ’,q0, F), este format din Q, Σ,
q0, F – prezentate în definiţia 2.1.1, dar funcţia de tranziţie este aici
δ': Q  Σ P (Q) .
Deci δ'(q, a) este o mulţime de stări şi nu o singură stare.
Şi aici δ’ se poate extinde la Q  Σ astfel:

δ'(q, λ)  {q}

δ'(q, xa)   δ'(p, a) , x  Σ  , a   .

 pδ'(q, x)

Acum δ’ se poate extinde la P (Q)   astfel:


k
δ'({p1 , p 2 ,..., p k }, x)   δ'(p i , x)
i 1

Definiţia 2.1.5 Un cuvânt x este acceptat sau recunoscut de un automat finit nedeterminist M
dacă δ(q 0 , x)  F   , adică dacă M pornind din starea q0 şi analizând cuvântul x poate
ajunge într-o stare finală.
În termenii unui sistem de rescriere, definiţia este aceeaşi cu cea pentru un automat finit
determinist fără să existe restricţie în cazul unei reguli de forma: q i a k  q j , de a fi singura
regulă cu acest membru stâng.
Limbajul acceptat de un automat finit nedeterminist este format din mulţimea
cuvintelor acceptate T(M) pentru care există o secvenţă care conduce la acceptare:
T(M) = {w  | ’(q,w) ∩ F }

Exemplul 2 Fie automatul finit descris în figura 2.1.2 cu ajutorul diagramei de


tranziţie; în acest caz T(M) este mulţimea cuvintelor care au sau doi de zero
consecutivi sau doi de unu consecutivi.

- 43 -
Să urmărim funcţionarea acestui automat pentru câteva situaţii diferite:
a) Dacă şirul de intrare este 0101, automatul va face toate încercările de tranziţii
posibile, înainte de a trage concluzia că acest cuvânt nu e recunoscut (nu duce
automatul într-o stare finală):
(q0,0101)├ (q0,101)├ (q0,01)├ (q0,1)├ (q0,λ) , q 0  F
(q0,0101)├ (q0,101)├ (q0,01)├ (q0,1)├ (q1,λ) , q 1  F
(q0,0101)├ (q0,101)├ (q0,01)├ (q3,1)├ blocare (  (q 3 ,1)   )
(q0,0101)├ (q0,101)├ (q1,01)├ blocare (  (q 1 ,1)   )
(q0,0101)├ (q3,101)├ blocare (  (q 3 ,1)   )

b) Dacă şirul de intrare este 0110, automatul va accepta acest cuvînt în momentul
depistării unui calcul de configuraţii ce duce automatul într-o stare finală
(indiferent câte încercări nereuşite face, automatul acceptă şirul de intrare la
înregistrarea unui succes):
(q0,0110)├ (q0,110)├ (q0,10)├ (q0,0)├ (q0,λ) , q 0  F
(q0,0110)├ (q0,110)├ (q0,10)├ (q0,0)├ (q3,λ) , q 3  F
(q0,0110)├ (q0,110)├ (q0,10)├ (q1,0)├ blocare (  (q 1 ,1)   )
(q0,0110)├ (q0,110)├ (q1,10)├ (q2,0)├ (q2,λ) , q 2  F  succes !
(q0,0110)├ (q3,110)├ blocare (  (q 3 ,1)   )

c) Configuraţiile instantanee ce determină acceptarea în cazul cuvântului de


intrare 010011 sunt:
(q0,010011)├ (q0,10011)├ (q0,0011)├ (q3,011)├ (q4,11)├ (q4,1)├ (q4,λ)
şi
(q0,010011)├ (q0,10011)├ (q0,0011)├ (q0,011)├ (q0,11)├ (q1,1)├ (q2,λ)

Ambele arată faptul că şirul de intrare poate fi citit de pe bandă ajungând într-o

- 44 -
stare finală (q2 sau q4), fiind deci recunoscut. Este suficientă găsirea uneia dintre
ele, când se stabileşte acceptarea cuvântului de către automat.

Pentru aceeaşi intrare propusă anterior, pot fi “încercate” şi alte posibile


transformări de configuraţii, dar care nu termină citirea într-o stare finală sau nici
măcar nu permit finalizarea citirii benzii (ajung la blocare, când simbolul de pe
bandă şi starea automatului finit nu sunt compatibile d.p.d.v. al funcţiei de
tranziţie, cum ar fi cazul citirii simbolului 0 într-un moment în care automatul se
află în starea q1, deoarece se observă că δ(q 1 ,0)   ).

M2.U2.3 Legătura dintre gramaticile regulate şi automatele finite

Vom demonstra în cele ce urmează că limbajele de tip 3 sunt echivalente cu limbajele


recunoscute de automatele finite (numite şi mulţimi regulate).

Teorema 2.2.1
Fie L o mulţime de cuvinte acceptate de un automat finit nedeterminist. Atunci există
un automat finit determinist care acceptă L.
▼ Demonstraţie:
Fie M  (Q, Σ, δ, q 0 , F) un automat finit nedeterminist care acceptă L, adică
L=T(M).
Definim M'  (Q' , Σ, δ' , q' 0 , F' ) un automat finit determinist după cum urmează:
 Q' ≈P(Q) noile stări (M’ păstrează urma stărilor în care poate fi M la un moment dat)
Q'  [q 1 , q 2 ,...,q k ] q i  Q, 0  k  card(Q) ;
 q 0  [q 0 ] ;
 F' Q', F' , conţine cel puţin o stare finală din F;
şi definim tranziţiile:
 δ([q 1 , q 2 ,...,q t ], a)  [p1 , p ,..., p j ]  δ({q1 , q 2 ,...,q t }, a)  {p1 , p 2 ,..., p j }
Deci dacă δ’ este aplicat unui element Z=[q1, q2,....,qk ] din Q', rezultatul este calculat
prin aplicarea lui δ la fiecare stare a lui Q din Z=[q1,q2,. . . ,qk ]:
δ([q 1 , q 2 ,...,q k ], a)  [ p1 , p 2 ,..., p j ]
k
p l   δ(qi , a), l  1, j
i 1

Se arată prin inducţie asupra lungimii şirului de intrare x că :


(2.2.1) δ(q0 , x)  [q 1 , q 2 ,...,q i ]  δ(q 0 , x)  {q 1 , q 2 ,...,q i }
- pentru |x|=0, q 0  [q 0 ]  afirmaţia (2.2.1) este adevărată;
- presupunem că (2.2.1) este adevărată pentru |x|  t ; să studiem atunci intrarea “xa”, unde
a  Σ şi deci |xa|  t+1 :
δ(q0 , xa)  δ(δ(q 0 , x), a)
Conform ipotezei inducţiei,
δ(q0 , x)  [p1 , p 2 ,..., p j ]  δ(q0 , x)  {p1 , p 2 ,..., p j }

- 45 -
Prin definiţie,
δ([p1 , p 2 ,...,p j ], a)  [r1 , r2 ,...,rk ]  δ({p1 , p 2 ,...,p j }, a)  {r1 , r2 ,...,rk }
Astfel,
δ(q0 , xa)  [r1 , r2 ,..., rk ]  δ(q 0 , xa)  {r1 , r2 ,..., rk }
Pentru a completa demonstraţia mai avem de adăugat că δ(q 0 , x)  F exact când
δ(q 0 , x) conţine o stare a lui Q care este în F.
Aşadar T(M)=T(M’). ▲

Exemplul 1 Considerăm automatul finit:


M  ({q 0 , q 1 }, {0,1}, δ, q 0 , {q 1 }) ,
δ(q0 ,0)  {q 0 , q1 }
δ(q ,1)  {q }
 0 1

 δ(q 1
,0)  

δ(q1 ,1)  {q 0 , q1 }
Să se construiască automatul finit determinist M’, echivalent cu M.

Să reprezentăm automatul M sub formă de diagramă de tranziţie:

Construim M’ conform Teoremei 2.2.1 :


M  ( {[q 0 ], [q 1 ], [q 0 , q1 ]} , {0,1} , δ , [q 0 ] , {[q 1 ], [q 0 , q1 ]} )
δ ([q 0 ],0)  [q 0 , q 1 ]
δ ([q ],1)  [q ]
 0 1


δ ([q 1 ],0)  Φ

δ ([q 1 ],1)  [q 0 , q 1 ]
δ ([q 0 , q 1 ],0)  [q 0 , q 1 ]

δ ([q 0 , q 1 ],1)  [q 0 , q 1 ]

Deci automatul M’ va avea diagrama tranziţiilor ca în figura 2.2.2:


- 46 -
Star 1
[q0] [q1]
t

0 1
[q0,q1]
0,1
Figura 2.2.2

Teorema 2.2.2
Fie G=(VN, VT, S, P) o gramatică de tip 3. Atunci există un automat finit nedeterminist
M  (Q, Σ, δ, q 0 , F) cu T(M)=L(G).

▼ Demonstraţie:
Construim
Q  VN  {T}, T  VN ;
q0  S;
Dacă S  λ  P , atunci F  {S, T} şi S nu apare la dreapta nici unei
reguli; dacă S  λ  P , atunci F  {T} ;
δ(T, a)  , a  VT ;
B  a  P 
Dacă   atunci T  δ(B, a) ;
a  VT , B  VN

B  aC  P 
Dacă   atunci C  δ(B, a) ;
a  VT
, B, C  VN 
Dacă există B  VN care nu apare în membrul stâng al nici unei reguli din P,
atunci δ(B, a)  , a  VT .
Atunci M simulează derivaţiile în G. Să arătăm că, într-adevăr, T(M)=L(G):

a) Fie x  a 1a 2 ...a n  L(G) , n  1 . Atunci:


S  a 1 A1  ...  a 1a 2 ...a n 1 A n 1  a 1a 2 ...a n 1a n
pentru anumite variabile Ai din VN. Din construcţia automatului M avem:

 A 1  δ(S, a 1 )
A 2  δ(A 1 , a 2 )

- 47 -

A  δ(A n -1 , a n )

Aşadar:
(S, a1a2…an)├ (A1, a2…an)├ …├ (An-1, an) ├ (A,λ)

Adică cuvântul x  a 1a 2 ...a n  T(M) .


Pentru că x a fost din L(G)

 L(G)  T(M)

b) Fie x  T(M) , | x | 1  există stările S,A1,…,An-1,T astfel încât:


A 1  δ(S, a 1 ) S  a 1A1  P
A  δ(A , a ) A  a A  P
 2 1 2 
   1 2 2

... ...
T  δ(A n 1 , a n ) 
A n 1  a  P
deci are loc derivaţia:

S  a 1A1  a 1a 2 A 2  ...  a 1a 2 ...a n 1A n 1  a 1a 2 ...a n 1a n

De aici  x  L(G)  T(M)  L(G)

Din (a) şi (b)  T(M)  L(G) .


Teorema 2.2.3
Fiind dat un automat finit determinist M, există o gramatică G de tip 3 astfel încât
L(G)=T(M).

▼ Demonstraţie:
Presupunem M  (Q, Σ, δ, q 0 , F) - automat finit determinist.
Definim o gramatică de tip 3, G  (Q, Σ, q 0 , P) astfel încât:
(i) q → ap  (q,a) = p
(ii) q → a  (q,a) = p  F
Demonstraţia este similară cu cea din Teorema 2.2.2.
În plus dacă λ  T(M) atunci q 0  F şi  q → λ este o regulă în G.

- 48 -
Teorema 2.2.4
Clasa limbajelor de tip 3 este echivalentă cu clasa limbajelor acceptate de automatele
finite.

Demonstraţia este evidentă din Teoremele 2.2.1, 2.2.2 şi 2.2.3 .

Observaţia 2.2.1 După unii autori clasa limbajelor acceptate de automatele finite se numeşte
clasa limbajelor regulate. Datorită teoremei anterioare (2.2.4), clasa limbajelor de tip 3 se
numeşte şi clasa mulţimilor regulate.

Exemplul 2 Fie G=({S,B}, {0,1}, S, P) unde

S  0B
B  0B
P: 

B  1S

B  0

a) Să se construiască automatul finit, M, care să recunoască L(G);


b) Pornind de la M să se construiască automatul finit determinist, M1,
echivalent cu M:
c) Să se construiască gramatica G’ care să genereze T(M1).

▼Construcţie:
a) Conform Teoremei 2.2.2, construim automatul finit care să recunoască
limbalul L(G), M =({S,B,A}, {0,1}, δ, S, {A}), unde:
δ(S,0)  {B} δ(B,0)  {A, B} δ(A,0)  
δ(S,1)   δ(B,1)  {S} δ(A,1)  

Să reprezentăm în figura următore diagrama tranziţiilor din automatul

M =({S,B,A}, {0,1}, δ, S, {A}):

0
Start S
B 0
1
0

A
Figura 2.2.3

- 49 -
Este uşor de verificat că T(M)=L(G) este limbajul cuvintelor peste alfabetul
{0,1} care încep şi se termină cu o succesiune de cel puţin doi 0 şi orice apariţie a
simbolului 1 este urmtă de succesiuni de 0.

b) Pornind de la M, să construim conform Teoremei 2.2.1, un automat finit


determinist, M1, echivalent cu M:
M 1  ( Q,{0,1}, δ,[S], {[A]} )
Q  {[S], [B], [A], [A, B]} (în Q nu sunt necesare şi stările
[S, A],[S, B],[S, A, B] )

δ([S],0)  [B]
δ([S],1)  Φ
δ([B],0)  [B, A]
δ([B],1)  [S]
δ([A],0)  δ([A],1)  Φ
δ([A, B],0)  [B, A]
δ([A, B],1)  [S]

c) Pornind de la M1, construim G’ după cum urmează (Teorema 2.2.3):


G’=( { S],[B],[A],[A,B]}, {0,1}, [S], P )
[S]  0[B]

P : [B]  0[A, B] , [B]  1[S] , [B]  0
[A, B]  0[A, B] , [A, B]  1[S] , [A, B]  0

Observaţia 2.2.2 Gramatica G’ este mult mai complicată decât gramatica G iniţială, deşi ele
sunt echivalente şi evident că dacă pornim de la ea se poate construi un automat finit şi mai
complicat, echivalent cu automatele de mai sus.

Se pune atunci problema dacă pornind de la un automat finit nu putem micşora numărul de
stări sau dacă atunci când se implementează un automat finit nedeterminist se poate obţine o
reprezentare în memorie optimală. Această ultimă problemă este de mare importanţa in
construcţia compilatoarelor şi este abordată în [12], [14]. În continuare nu vom ocupa de prima
dintre aceste probleme, şi anume de micşorarea numărului de stări ale unui automat finit
determinist.

1. Descrieţi un automat finit determinist pentru L = {w | w{0,1}*, w are


un număr par de 0 şi un număr impar de 1}
2. Să se construiască automatul finit care acceptă limbajul:

- 50 -
L = {0n1m | n≥0, m≥1}{1n0m | n≥0, m≥1}

3. Scrieţi un automat finit determinist, echivalent cu automatul finit


nedeterminist din figura de mai jos:

4. Fie automatul finit nedeterminist de mai jos:

Să se transforme într-un automat finit determinist.

Să ne reamintim...
Un automat finit determinist, notat M=(Q, Σ, δ, q0, F), este format din:
Q - o mulţime finită nevidă (mulţimea stărilor);
Σ - un alfabet finit de intrare;
 - o aplicaţie numită funcţie de tranziţie, care ataşează fiecărei combinaţii
<stare, simbol de intrare> o nouă stare
δ:Q Σ Q;
q 0  Q starea iniţială;
F  Q mulţimea stărilor finale.

Un automat finit nedeterminist, notat M=(Q, Σ, δ’,q0, F), este format din Q, Σ,
q0, F – prezentate în definiţia 2.1.1, dar funcţia de tranziţie este aici
δ': Q  Σ P (Q) .
Deci δ'(q, a) este o mulţime de stări şi nu o singură stare.

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Care este diferenţa esenţială dintre un automat finit determinist şi unul
nedeterminist?
2. Prezentaţi legatura dintre automate finite şi gramatici.

II. Exerciţii propuse.


1. Fie automatul nedeterminist de mai jos:

- 51 -
Să se construiască un automat finit determinist, A’, echivalent cu
automatul dat şi să se construiască apoi o gramatică care să genereze
T(A’).
2. Fie gramatica G=({A,B},{a,b},A, P), unde P = {AAa|aB, BBb|b}.
Să se determine automatul finit (determinist sau nu) echivalent cu
gramatica G.

M2.U1.5 Rezumat
Unitatea de învăţare prezintă automatele finite deterministe şi nedeterministe şi la
legatura cu limbajele de tip3, numite şi limbaje regulate. S-au prezintat echivalenţa
dintre automatele finite deterministe şi cele nedeterministe precum şi un algoritm de
trecere de la un automat nedeterminist la unul determinist echivalent.

- 52 -
Unitatea de învăţare M2.U2. Minimizarea automatului finit

Cuprins
M2.U2.1. Introducere............................................................................................ 53
M2.U2.2. Obiectivele unităţii de învăţare .............................................................. 53
M2.U2.3. Minimizarea automatului finit ............................................................... 53
M2.U2.4. Algoritmi pentru minimizarea automatului finit .................................... 57
M2.U2.5. Rezumat.....................................................................................................61

M2.U2.1. Introducere
Prin trecerea de la un automat finit la o gramatică şi apoi de la gramatică la un
automat finit se obţin în final automate echivalente, adică automate care recunosc
acelaşi limbaj.
Problema care se pune este de a vedea dacă în mulţimea automatelor echivalente
există un cel mai mic automat, relative la numărul de stări. Respunsul este
afirmativ şi este dat în această unitate de învăţare, în care se prezintă fundamental
theoretic al acestei minimizări şi doi algoritmi de minimizare ai unui automat finit.
.

M2.U2.2. Obiectivele unităţii de învăţare


Această unitate de învăţare îşi propune ca obiectiv aplicarea unor rezultate din
algebra abstractă în teoria automatelor.
La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice mecanismul de minimizare;
 construiască un automat finit pornind de la un automat dat;
 programeze un algoritm minimizare într-un limbaj oarecare..

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M2.U2.3 Minimizarea automatului finit


Definiţia 2.3.1 O relaţie binară R pe mulţimea S se numeşte relaţie de echivalenţă dacă ea
este:
1) Reflexivă (xRx, x  S)
2) Simetrică (xRy  yRx)
3) Tranzitivă (xRy, yRz  xRz)

- 53 -
O relaţie de echivalenţă peste S împarte mulţimea S în clase de echivalenţă, submulţimi
 x, y  Si  xRy .
disjuncte Si astfel încât 
S   S

 i
i

Definiţia 2.3.2 O relaţie de echivalenţă R peste S se numeşte de indice finit dacă numărul de
clase de echivalenţă este finit.
Definiţia 2.3.3 O relaţie de echivalenţă, R, se numeşte invariantă la dreapta dacă
xRy  xzRyz z  S .

Vom arăta în cele ce urmează că orice automat finit induce o relaţie de echivalenţă
invariantă la dreapta de indice finit pe mulţimea şirurilor de intrare.

Teorema 2.3.1 (Teorema Myhill- Nerode)


Fie L un limbaj. Următoarele afirmaţii sunt echivalente :
(1) Limbajul L este acceptat de un automat finit.
(2) L este reuniunea unor clase de echivalenţă invariante la dreapta de indice finit.
(3) Relaţia de echivalenţă R definită de:
xRy  z  Σ , xz  L  yz  L
este de indice finit.
▼ Demonstraţie:
a) Arătăm că (1)  (2) :
Fie L=T(M), M  (Q, Σ, δ, q 0 , F) . Fie R’ o relaţie de echivalenţă definită de
xR' y  δ(q 0 , x)  δ(q 0 , y)  p .
Demonstrăm că relaţia R’ este invariantă la dreapta de indice finit:
δ(q , xz)  δ(p, z) 
- z  Σ * ,  0   evident δ(q 0 , xz)  δ(q 0 , yz)
δ
 0(q , yz)  δ (p, z) 
deci R’ este invariantă la dreapta
- R’ este de indice finit pentru că numărul claselor de echivalenţă nu poate
depăşi numărul stărilor (care e finit). L este reuniunea claselor de
echivalenţă de indice card( F) pentru că x  L  δ(q 0 , x)  F .
b) Arătăm că (2)  (3) :
Fie R’ o relaţie de echivalenţă invariantă la dreapta de indice finit peste L. Deoarece L
este reuniunea claselor de echivalenţă din R’,
x, y  L : xR' y  z  L : xzR' yz
xR' y  xzR' yz  yz  L  xz  L   xRy
Dacă R’ este de indice finit atunci şi R este de indice finit (relaţia R’ este o rafinare a lui R,
deoarece clasele de echivalenţă al lui R’ sunt conţinute în clasele de echivalenţă ale lui R).
c) Arătăm că (3)  (1) :
Presupunem xRy. Atunci:
pentru fiecare w, z  * , xwz  L  ywz  L
 xwRyw  R invariantă la dreapta.

- 54 -
Fie Q’ mulţimea finită a claselor de echivalenţă induse de R, [x] Q' conţinând x.
Definim δ([x], a)  [xa] . Definiţia e consistentă pentru că R este invariantă la
dreapta.
Fie - q 0  [λ]
- F  {[x] x  L}
Automatul finit M   (Q, Σ, δ, q 0 , F) acceptă L pentru că
δ(q0 , x)  [λx]  [x] .
În concluzie, x  T(M' )  [x]  F'  x  L .

Teorema 2.3.2
Automatul finit acceptând limbajul L este unic relativ la un izomorfism (o redenumire a
stărilor ) şi este dat de M’ din Teorema 2.3.1 .

▼ Demonstraţie:
Fie M acceptând L, M  (Q, Σ, δ, q 0 , F) şi relaţia de echivalenţă R definită de
Teorema 2.3.1(3) .
Conform teoremei 2.3.1, orice automat finit determină o relaţie de echivalenţă R’ care
este o rafinare a lui R. Deci numărul claselor de echivalenţă induse de R’ este cel puţin cât cel
al claselor de echivalenţă induse de R. Rezultă că numărul de stări ale automatului M este
indicele relaţiei R’, şi este mai mare sau cel mult egal cu numărul stărilor lui M’ din Teorema
2.3.1 .
Aşadar, fie q  Q o stare din M;  x  Σ astfel încât δ(q 0 , x)  q . Dar q poate

fi scos din Q şi găsit un automat mai mic identificând q cu starea δ(q0 , x) , din M’.
Dacă δ(q 0 , x)  δ(q 0 , y)  q  atunci xRy  deci δ(q 0 , x)  δ(q 0 , y) ,
ceea ce trebuia demonstrat.

Observaţia 2.3.1 Teorema 2.3.1 furnizează un mijloc de a demonstra că anumite limbaje


nu sunt regulate.

Fie limbajul L  {a i  I} şi I  {i j j  N} o mulţime monoton


i
Observaţia 2.3.2
crescătoare. Se consideră diferenţa d j  i j1  i j , j  1,2,...
Urmează că L este de tip 3  d j e periodic.
a i Ra j  i  jmod d  , unde d=max{dj}.

Observaţia 2.3.3 Se poate construi un cel mai mic automat care acceptă un limbaj T(M), prin
eliminarea stărilor inaccesibile şi comasarea celor redundante.

- 55 -
Stările redundante sunt determinate prin partiţionarea stărilor automatului în clase de
echivalenţă astfel încât fiecare clasă conţine stări care nu se pot distinge între ele şi este atât de
mare cât este posibil.
Definiţia 2.3.4 Fie M  (Q, Σ, δ, q 0 , F) un automat finit determinist şi q1,q2 două stări
distincte. Spunem că x  Σ distinge q1 de q2 dacă:

(q 1 , x) ├* (q 3 , λ)
(q 2 , x) ├* (q 4 , λ)
şi una şi numai una dintre stările q3 şi q4 este stare finală adică:
q3 F  q4 F
şi q4 F  q3 F.
k
Definiţia 2.3.5 Spunem că q1 şi q2 sunt k-nedistinctibile ( q1  q 2 ) dacă şi numai dacă nu
există x, cu |x| k, astfel încât x distinge q1 de q2.

Definiţia 2.3.6 Spunem că q1 si q2 sunt nedistinctibile ( q1q2 ) dacă sunt k-nedistinctibile


pentru  k0.

Definiţia 2.3.7 O stare q este inaccesibilă dacă nu există x astfel încât (q 0 , x) ├ (q, λ) .

Definiţia 2.3.8 M este un automat redus dacă nici o stare nu este inaccesibilă şi nu există două
stări nedistinctibile.

Teorema 2.3.3
Fie M  (Q, Σ, δ, q 0 , F) un automat finit determinist cu n stări. Stările q1 şi q2 sunt
nedistinctibile dacă şi numai dacă sunt (n-2)-nedistinctibile.

▼ Demonstraţie:
Implicaţia directă ("" ) este evidentă; să demonstrăm implicaţia inversă ("" ) :
a) Dacă F are 0 sau n stări demonstraţia este imediată.
b) Presupunem că 0  card(F)  n.
n 2 n 3 1 0
Vom demonstra că      ...   .
Observăm că pentru q1,q2Q avem:

q 1  q   δ(q1 , λ), δ(q 2 , λ)  F sau Q \ F  q1 , q 2  F sau, respectiv,  F 
0

(1)
 k
 k -1 k -1

(2) q 1  q   q 1  q 2  a  , δ(q1 , a)  δ(q 2 , a) 
  
0
Relaţia  partiţionează Q în două clase de echivalenţă: F şi K\F.
 k 1 k   k 1  k 
Dacă    atunci  este o rafinare a lui  şi conţine cel puţin o clasă de
echivalenţă în plus.

- 56 -
0
Pentru că sunt cel mult n-1 stări în F sau Q\F ,   cel mult n-2 rafinări a lui  .
k   k 1 k 
Aşadar,  este prima relaţie  pentru care    .

Observaţia 2.3.4 Două stări sunt distinctibile dacă ele se pot distinge pe un şir de intrare de
lungime mai mică decât numărul stărilor.

M2.U2.3 Algoritmi pentru minimizarea automatului finit

(A) Algoritm de minimizare[1]

Fie M=(Q,,,q0,F). Se construieşte M’ redus parcurgând următorii trei paşi:

A.1 Se elimină întâi nodurile inaccesibile (conform algoritmului (B))


0 1
A.2 Se construiesc relaţiile de echivalenţă , ,... până când relaţia se stabilizează adică
k   k 1
  .
k 
Alegem    .
A.3 Se construieşte M’=(Q’, , ’, q0, F’) unde Q’ e mulţimea claselor de echivalenţă ale
lui Q, astfel:
’([q],a)=[p] dacă (q,a)=p
q0’=[q0]
F’= [q]  qF 

(B) Algoritm de eliminare a stărilor inaccesibile. Pentru eliminarea stărilor inaccesibile se


poate folosi orice algoritm din teoria grafurilor de eliminare a nodurilor inaccesibiel din nodul
reprezentând starea iniţială, unde avem:
Intrare - Graful (Q,) cu (q,p)=a  (q,a)=p
- q0Q
Ieşire Mulţimea de noduri Q’Q astfel încât există un drum de la q0 la pQ’.
Algoritmul marchează succesiv nodurile accesibile din q0 printr-un drum. Astfel,
găseşte nodurile accesibile şi le elimină pe celelalte. Prezentăm în continuare două variante ale
acestui algoritm:

Varianta I
BI.1 Iniţializează Q’={q0} şi marchează q0 cu 0.

BI.2 Pentru qQ’ caută pQ astfel încât există un arc (q,p); marchează p cu 1+ marca
lui q (dacă p nu e marcat) şi adaugă pe q la Q’; reia pasul BI2.
Dacă qQ’ şi p astfel încât (q,p), p este marcat atunci stop.

Sau:

- 57 -
Varianta a II-a
BII.1 Iniţializează L= q0 , marchează q0.
BII.2 Dacă L e vid stop .
Dacă nu, alege primul element q din L şi îl scoate din L.
BII.3 Pentru pQ astfel încât (q,p), dacă p nu e marcat, marchează p şi adaugă p în
capul listei L. Salt la pasul BII2.
Vom arăta în continuare că automatul obţinut prin algoritmul de minimizare este
automatul cu număr minim de stări.

Teorema 2.4.1
Automatul M’ definit de algoritmul de minimizare (A) este automatul cu cel mai mic
număr de stări acceptând L(M).
▼ Demonstraţie:
Presupunem că există un automat M’’, care are mai puţine stări decât M’ şi că
L(M”)=L(M).
Pentru că fiecare clasă de echivalenţă indusă de relaţia de echivalenţă
nedistinctibilitatea, , este nevidă, rezultă că fiecare stare din M’ este accesibilă.
Pentru că M” are mai puţine stări decât M’ rezultă că w,x două cuvinte astfel încât:
(q 0 , w) ├*M” (q, λ)
(q 0 , x) ├*M” (q, λ)
unde q 0 este starea iniţială a lui M”.
Dar w şi x conduc M’ în stări diferite, deci w şi x conduc M în stări diferite, şi atunci:
(q 0 , w) ├*M (p, λ)
(q 0 , x) ├*M (r, λ) stări care sunt distinctibile, adică
y* astfel încât (p,y)F şi (r,y)  F

 (q0,wy)F şi (q0,xy)F

 wyT(M) iar xyT(M), pe când ”(q0,wy)=”(q0,xy)

deci wy şi xy sunt deodată în T(M”)=T(M)  contradicţie.


- 58 -
Exemplul 2 Să minimizăm automatul definit de următorul tabel al funcţiei de
tranzitie, unde stările finale sunt 1, 2, şi 5:

a b
0 1 2
1 3 4
2 4 3
3 5 5
4 5 5
5 5 5

C1. Toate nodurile sunt accesibile deci trecem la :


C2. Tabelul iniţial este cu toate perechile nemarcate.

0
_
1
_ _
2
_ _ _
3
_ _ _ _
4
_ _ _ _ _
5

C3. Marcheză perechile: (stare finală, stare nefinală).


0
X 1
X _ 2
_
X X 3
_
X X _ 4
X _ _ X X 5
C4. (i) Alegem acum o pereche nemarcată, (0,3). Pentru intrarea a, 0 şi 3 trimit
automatul în 1 şi 5, notat (0,3) → (1,5). Deoarece perechea (1,5) nu este
marcată, nu vom marca nici (0,3). Cu intrarea b, avem (0,3) → (2,5), care tot
nemarcată estedeci nu vom marca perechea (0,3) nici acum. Continuam să
verificăm perechile şi observăm că pentru perechea (1,5) simbolul a realizează
(1,5) → (3,5), unde perechea (3,5) este marcată., deci marcăm perechea (1,5).

Verificând toate perechile nemarcate se obţine tabelul următor:

0
X 1
X _ 2
_
X X 3
_
X X _ 4
X X X X X 5

(ii) Acum mai facem o trecere prin tabel fiindcă s-a modificat linia stării 5.

- 59 -
Vom obţine:

0
X 1
_
X 2
X X X 3
X X X _ 4
X X X X X 5

Tabel care nu se mai modifică.


C5. Stările echivalente sunt date de perechile nemarcate: (1,2) şi (3,4), deci
automatul redus va fi:

a b
0 1 1
1 3 3
3 5 5
5 5 5
Să ne reamintim...

Algoritmul de minimizare a unui automat finit se bazează pe partiţia


mulţimii starilor automatului în clase de echivalenţă.

Algoritmul se aplică unui automat finit determinist după eliminarea stărilor


inaccesibile din starea iniţială.

Algoritmul se opreşte când relaţia s-a stabilizat sau când fiecare clasă de
echivalenţă cunţine un singur element.

Test de evaluare a cunoştinţelor


I. Întrebări.
1. De la ce tip de automat fint porneşte algoritmul de minimizare şi
cum se poate obţine acesta?
II. Exerciţii propuse.
1. Să se transforme următorul automat nedeterminist într-unul
determinist şi apoi să se minimizeze:

- 60 -
M2.U2.5 Rezumat

Unitatea de învăţare prezintă fundamentul teoretic al minimizării unui


automat finit determinist, doi algoritmi de minimizare şi exemple de utilizare
ai acestor algoritmi. In plus se mai prezintă şi algoritmi de eliminare astărilor
inaccesibile din starea iniţială, algoritmi specifici algoritmicii grafurilor.

- 61 -
Unitatea de învăţare M2.U3. Gramatici regulate şi expresii
regulate

Cuprins
M2.U3.1. Introducere .............................................................................................. 62
M2.U3.2. Obiectivele unităţii de învăţare ................................................................ 62
M2.U3.3. Gramatici de tip 3 şi expresii regulate ...................................................... 62
M2.U3.4. Algoritm de transformare a gramaticii regulate într-o expresie regulată ... 65
M2.U3.5. Rezumat.......................................................................................................70

M2.U3.1. Introducere

Limbajele de tip 3 pot fi recunoscute de automate finite sau generate de gramatici


de tip 3. Vom prezenta, în această unitate de învăţare, un nou mod de reprezentare,
cel mai compact, al limbajelor de tip 3 şi anume expresiile regulate.

In prima parte se definesc expresiile regulate şi proprietăţile operatorilor folosiţi


iar apoi se face legatura cu limbajele de tip 3 printr-un algoritm de construcţie a
unei expresii regulate pornind de la o gramatică de tip3. .

M2.U3.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice gramaticile generative;
 construiască propriile expresii regulate care să reprezinte un limbaj anume;
 construiască expresii regulate pornind de la o gramatică de tip 3;
 programeze un algoritm de transformare a unie gramatici intr-o expresie
regulată.

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M2.U3.3 Gramatici regulate şi automate finite

Să considerăm următorul exemplu în care folosim operaţiile cu limbaje definite în Modulul 1:

Exemplul 1 Fie următoarele două alfabete:


L={A,B,…,Z,a,b,…,z}, alfabetul literelor mari şi mici
C={0,1,…,9}, alfabetul cifrelor din baza 10.

Cu aceste alfabete, pe care le putem chiar considera limbaje formate din cuvinte

- 62 -
de lungime 1, putem construi numeroase alte limbaje, cum ar fi:
(a) L  C = mulţimea literelor şi a cifrelor;
(b) LC = mulţimea cuvintelor de lungime 2, formate din o literă urmată de o
cifră;
(c) L4 = mulţimea cuvintelor formate din exact patru litere;
(d) L* = mulţimea cuvintelor formate din oricâte litere (inclusiv cuvântul
vid);
(e) L( L  C )* = mulţimea cuvintelor de lungime cel puţin 1, formate din
litere şi cifre, primul caracter fiind obligatoriu o literă;
(f) C+ = mulţimea şirurilor numerice formate din cel puţin o cifră.

Modul de reprezentare al limbajelor de mai sus sugerează un alt mod de descriere al limbajelor
de tip 3 şi anume cu ajutorul expresiilor regulate.

Definiţia 2.7.1 Se numeşte expresie regulată o expresie care poate fi construită cu


următoarele reguli:
1.  este o expresie regulată indicând mulţimea vidă.
2. λ este o expresie regulată indicând limbajul format doar din cuvântul vid, {λ}.
3. Dacă a  VT , atunci a este o expresie regulată indicând limbajul format dintr-un cuvânt
de lungime 1, construit cu simbolul a şi anume limbajul {a}.
4. Dacă e1 şi e2 sunt expresii regulate indicând limbajele L1 şi L2, atunci următoarele
expresii sunt regulate:
a) Alternarea (e1)|(e2), indicând L1  L 2 ;
b) Concatenarea (e1)(e2), indicând L1  L 2 ;

c) Închiderea Kleene (e1*), indicând L1 .
Observaţia 2.6.1 Parantezele ( ) pot fi eliminate în următoarele cazuri:
({ }) = { }
(|) = |
(( )) = ( )
Observaţia 2.6.2
a) Operaţiile de alternare, |, concatenare, ., şi închidere, *, au precedenţa descrescând de la cea
mai mare ,  , la cea mai mică , | .
b) Toate operaţiile sunt asociative iar alternarea este şi comutativă.

Există un număr de reguli algebrice pentru expresii regulate care pot fi folosite pentru a le
transforma în alte expresii echivalente, conform tabelului următor.
Tabelul 2.6.1
Regulă Descriere
r|s=s|r Alternarea este comutativă
r|(s|t)=(r|s)|t Alternarea este asociativă
(rs)t=r(st) Concatenarea este asociativă
r(s|t)=(rs)|(rt) Concatenarea este distributivă la stânga
(s|t)r=(sr)|(tr) şi la dreapta faţă de alternare

- 63 -
λr=r Cuvântul vid este element neutru pentru concatenare
rλ=r
r*=(r|λ)*
r**=r* Idempotenţa închiderii (produs Kleene)
Operatorii folosiţi pentru scrierea expresiilor regulate sunt analogi cu forma BNF de descriere
a limbajelor (sunt simboluri ale metalimbajului).

Exemplul 2 Exemple de expresii regulate:


a) Expresia 110 reprezintă limbajul format dintr-un singur cuvânt {110}.
b) Expresia 0|1 reprezintă limbajul {0,1}.
c) Expresia 1* reprezintă limbajul {1i | i=0,1,2,…}.

d) a*b* reprezintă limbajul a b m, n  0 ;
m n

(ab)* reprezintă limbajul (ab) m0 ; 
m
e)
f) (aa|ab|ba|bb)* reprezintă mulţimea şirurilor peste {a,b} de lungime pară.

Vom defini în continuare egalitatea a două expresii regulate.

Definiţia 2.6.3 Două expresii regulate sunt egale (=) sau echivalente dacă ele reprezintă
acelaşi limbaj.

Exemplul 3 00* = 000*|0 (ele reprezintă acelaşi limbaj, al şirurilor peste


alfabetul {0} formate din cel puţin un simbol 0).

Exemplul 4 Elementele unui limbaj de programare pot fi definite atât în termenii


gramaticilor regulate cât şi în cei ai expresiilor regulate. Spre exemplu, un
identificator format din litere mici şi cifre, începând cu o literă, poate fi descris de
gramatica regulată ale cărei reguli sunt:

S  aA | bA | cA | ... | zA | a | b | c | ... | z
A  aA | bA | cA | ... | zA | 0A | 1A | ... | 9A | a | b | c | ... | z | 0 | 1 | ... | 9

şi de expresia regulată:

(a|b|c| . . . |z) (a|b|c| . . . |z|0|1| . . . |9)*

Putem folosi <literă> pentru a scurta reprezentarea lui a | b | c | ... | z şi


<cifră> pentru 0 | 1 | ... | 9 , expresia putând fi scrisă în acest caz astfel:

<literă>(<literă>|<cifră>* .

- 64 -
M2.U3.4. Algoritm de transformare a unei gramatici regulate într-o expresie regulată

Expresiile regulate pot fi utilizate în ecuaţii şi deci pot fi evaluate. De exemplu, A=aA|a este o
ecuaţie cu o expresie regulată validă.

Pentru a prezenta o metodă de a converti o gramatică regulată într-o expresie regulată,


considerăm gramatica regulată care generează limbajul a m ba n n, m  1:
S  aS
S  aB

B  bC
C  aC

C  a
Înlocuind operatorul de rescriere "" cu unul de echivalenţă (“=”) şi combinând toate
regulile care au acelaşi membru stâng într-o singură expresie prin folosirea operatorului de
alternare, gramatica poate fi scrisă ca o mulţime de ecuaţii:
S  aS | aB

B  bC

C  aC | a
Prin rezolvarea acestui sistem de ecuaţii, se obţine o expresie regulată cu un singur simbol
terminal, care reprezintă acelaşi limbaj ca şi cel generat de gramatica regulată.

Să rezolvăm mai întâi ecuaţiile definite doar prin ele însele. În acest sistem, ecuaţia pentru C
are soluţia:
C= a*a
Verificăm prin înlocuirea acestei soluţii în ecuaţia pentru C. Se obţine

a*a = a a*a | a,
sau altfel scris
a*a = (a a* | λ) a,

dar a a* | λ = a* şi deci se verifică

a*a = a*a.

Soluţia pentru C poate fi înlocuită în a doua ecuaţie, obţinând sistemul:


S  a(S | B)

B  ba * a
Apoi B poate fi înlocuit în prima ecuaţie
 S  a(S | ba * a)
sau expresia echivalentă:
S = aS | aba*a
şi se vede imediat că o soluţie a acestei ecuaţii este:
S= a*aba*a

- 65 -
care este o expresie regulată reprezentând acelaşi limbaj ca şi limbajul generat de gramatica
regulată iniţială.

Prezentăm în continuare algoritmul de trecere de la o gramatică regulată la o expresie regulată.

Algoritm de transformare [EXPRESII REGULATE]

Intrare O gramatică regulată G, având regulile X i  ψ, ψ {aX j , a} , cu X1, simbol


iniţial.
Ieşire Expresia regulată echivalentă cu G.
Pas 1. Transformarea în ecuaţii regulate:
- Pentru fiecare regulă X i  ψ a lui G,
Execută:
- Dacă ecuaţia Xi nu a fost iniţializată
Atunci defineşte X i  ψ
Altfel schimbă X i  α prin X i  α | ψ , unde α este
partea definită anterior a lui Xi)

Pas 2. Aducerea în formă intermediară a sistemului de ecuaţii:


- Pentru fiecare i=1,2,…,n-1
Execută:
- Transformă ecuaţia Xi în forma X i  α i X i | ψ i , unde ψ i este de forma
β 0,i | β i1,i X i1 | ... | β n,i X n iar αi şi fiecare βj,i sunt expresii regulate peste VT.
- Pentru fiecare j=i+1,i+2,…,n
Execută:
- Înlocuieşte Xi cu  i * ψi în ecuaţia pentru Xj.

Pas 3. Rezolvarea ecuaţiilor:


- Pentru fiecare i=n,n-1,…,2,1
Execută:
- Transformă ecuaţia Xi din forma X i  α i X i | ψi , unde ψi este o expresie
regulată peste VT, în X i   i  * ψi .
- Pentru fiecare j=i-1,i-2,…,2,1
Execută:
- Înlocuieşte soluţia  i  * ψi a lui Xi în ecuaţia pentru Xj.

Pas 4. Stabilirea soluţiei:


- Soluţia este 1 * ψ1
- 66 -
Observaţia 2.7.1
a) Primul pas al algoritmului transformă gramatica regulată într-o mulţime de ecuaţii de
forma:
X i  δ1 | δ 2 | ... | δ m | ψ j X j | ψ k X k | ... | ψ l X l ,
unde fiecare δ i , ψ i  VT .

b) Pasul al doilea al algoritmului transformă fiecare ecuaţie în forma:


Xi  α i Xi | β 0,i | β i1,i Xi1 | ... | β n,i X n ,
lucru posibil efectuând o serie de transformări algebrice.

c) În pasul al treilea se face substituţia înapoi pentru a rezolva mulţimea de ecuaţii. Soluţia
pentru Xn este uşor de găsit pentru că această ecuaţie este de forma X n  α n X n | β 0,n şi
deci soluţia este X n  α n * β 0,n . Această soluţie se poate înlocui apoi în fiecare din ecuaţiile
precedente din sistem, acolo unde apare Xn. În general, îndată ce ecuaţia pentru Xi a fost
rezolvată şi înlocuită în ecuaţiile precedente rezultă că este rezolvată şi ecuaţia pentru X i-1,
care are numai variabilele X i şi Xi-1 în membrul drept, iar Xi a fost înlocuit.

Exemplul 1 Folosind algoritmul [EXPRESII REGULATE], să transformăm în


expresie regulată gramatica definită mai jos:
G  S, A, B, a, b, c, S, P  , unde P este formată din regulile:
S  aA
S  a
A  aA

A  bB
A  a
B  bB

B  c

S  aA | a
Pas 1. A  aA | bB | a

B  bB | c
Pas 2. Nu este necesar

Pas 3. i  3  B  b*c
A  aA | bb * c | a
i2 
A  {a}bb * c | {a}a
S  a(a * bb * c | a * a) | a
i 1 
S  aa * bb * c | aa * a | a
Pas 4. Soluţie: S= aa*bb*c | aa*. Limbajul reprezentat de această expresie
  
regulată este a b c | n, m  1  a | n  1 .
n m n

- 67 -
Exemplul 2 Folosind algoritmul [EXPRESII REGULATE], să transformăm
în expresie regulată gramatica G  S, A, B, C, a, b, c, S, P  , unde P este
formată din regulile:
S  aA
A  aA
A  aB
B  bC

C  cB
C  c

S  aA
Pas 1. A  aA | aB
B  bC

C  cB | c
Singura ecuaţie care nu este în formă intermediară este ecuaţia pentru
variabila C şi anume C = cB|c. Este necesar atunci pasul 2 pentru
transfomarea în formă intermediară:
S  aA
Pas 2. A  aA | aB
B  bC

C  cbC | c
Pas 3. i  4  C  cbC | c
C  cb  * c
i3  B  bcb  * c
A  {a}aB
i2 
A  a * ab(cb) * c
S  aA
i 1 
S  aa * ab(cb) * c
Pas 4. Soluţie: S = aaa*b(cb)*c sau, echivalent, S = aaa*bc(bc)*. Limbajul

reprezentat de această expresie regulată este a (bc) | n  2, m  1 .
n m

1. Pentru expresiile regulate de mai jos, să se precizeze limbajele asociate:


a. E1=(0|1)*00(0|1)*;

- 68 -
b. E2=(1|(10))*;
c. E3=(0|1)*011.
2. Se dă gramatica G=({P,Q,R},{0,1},P, W), unde mulţimea de reguli W =
{P0Q|1P, Q0R|1P, R 0R|1R|0}. Să se găsească expresia regulată
corespunzătoare acestei gramatici.
3. Precizaţi o expresie regulată pentru următoarele:
a. mulţimea cuvintelor peste {0,1}* unde există cel puţin o pereche de
zerouri consecutive;
b. mulţimea cuvintelor peste {0,1}* unde nu există nici o pereche de
zerouri consecutive.
4. Să se construiască câte o expresie regulată peste alfabetul {0,1} pentru
fiecare dintre limbajele următoare:
a. mulţimea cuvintelor care conţin trei de 0 separaţi de un număr impar
de 1;
b. mulţimea cuvintelor pentru care fiecare apariţie a lui 1 este urmată de
cel puţin două apariţii ale lui 0;
c. mulţimea cuvintelor care se termină în 111.

Să ne reamintim...

Expresie regulată este o expresie ce se poate construi cu următoarele reguli:


  este o expresie regulată indicând mulţimea vidă.
 λ este o expresie regulată indicând limbajul format doar din cuvântul
vid, {λ}.
 Dacă a  VT , atunci a este o expresie regulată indicând limbajul
format dintr-un cuvânt de lungime 1, construit cu simbolul a şi
anume limbajul {a}.
 Dacă e1 şi e2 sunt expresii regulate indicând limbajele L1 şi L2, atunci
următoarele expresii sunt regulate:
1. Alternarea (e1)|(e2), indicând L1  L 2 ;
2. Concatenarea (e1)(e2), indicând L1  L 2 ;

3. Închiderea Kleene (e1*), indicând L1 .
Algoritmul Expresii Regulate
Intrare Gramatica G, cu regulile, X i  ψ, ψ  {aX j , a} , X1, simbol iniţial.
Ieşire Expresia regulată echivalentă cu G.
Pas 1. Transformarea în ecuaţii regulate

- 69 -
Pas 2. Aducerea în formă intermediară a sistemului de ecuaţii:
Pas 3. Rezolvarea ecuaţiilor
Pas 4. Stabilirea soluţiei

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Ce sunt expresiile regulate şi care este precedenţa operatorilor?

II. Exerciţii propuse.


1. Să se construiască expresii regulate pentru fiecare dintre limbajele:

a. toate cuvintele peste {0,1}* care nu conţin aa;

b. toate cuvintele peste {0,1}* care au număr par de a şi de b;

c. toate cuvintele peste {0,1}* care conţin cel puţin un a şi un b.

2. Să se construiască o expresie regulată care să reprezinte limbajul


generat de gramatica:

S → aA
S → bB
A → aA
A → aB
B → bA
B→b

M2.U3.5. Rezumat. Această unitate de învăţare şi-a propus ca obiectiv familiarizarea


studenţilor cu expresiile regulate, care se folosesc atât în construcţia compilatoarelor, cât
şi în sistemele de operare, în realizarea unor editoare de texte şi în multe alte domenii
conexe informaticii.

Legatura dintre gramaticile de tip 3 şi expresiile regulate a fost realizată printr-un


algoritm de transformare şi, datorită acestei legături, limbajele de tip 3 se mai numesc şi
limbaje regulate.

- 70 -
Unitatea de învăţare M2.U4. Expresii regulate şi automate finite

Cuprins
M2.U4.1. Introducere ....................................................................................................... 71
M2.U4.2. Obiectivele unităţii de învăţare ........................................................................ ..71
M2.U4.3. Algoritm de construcţie a automatului finit pornind de la o expresie regulată.....71
M2.U4.4. Rezumat.................................................................................................................76

M2.U4.1. Introducere

Expresiile regulate sunt importante pentru construirea unui generator de analizor


lexical, care foloseşte ca intrare expresii regulate.

Vom prezenta în cele ce urmează metode de generare a unui acceptor cu număr


finit de stări dintr-o expresie regulată sau generarea unei expresii regulate dintr-un
automat finit nedeterminist. Vom arăta deci că expresiile regulate şi mulţimile
acceptate de automate finite nedeterministe sunt echivalente, deci că mulţimile
regulate şi expresiile regulate reprezintă aceleaşi mulţimi.

M2.U4.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice relaţia dintre expresiile regulate şi limbajele de tip 3;
 construiască propriile automate finite pornind de la o expresie regultă;
 programeze un algoritm de trecere de la o expresie regultă, sub forma unui
arbore sintactic, la un automat finit nedeterminist..

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M2.U4.3. Algoritm de construcţie a unui automat finit pornind de la o expresie regulată

Pentru construcţiile ce vor urma, este necesară următoarea definiţie.

Definiţia 2.9.1 Un automat finit nedeterminist cu λ-tranziţii este un ansamblu M=(Q, Σ, δ, q0,
F) ale cărui componente au aceleaşi semnificaţii ca la un automat finit oarecare, doar că funcţia
de tranziţie este definită astfel:

- 71 -
δ : Q  Σ  λ  P(Q) .

Avem o λ-tranziţie între două configuraţii (p, w) ├ (q, w) dacă şi numai dacă
q  δ(p,λ) , p  Q, w  Σ  . În reprezentarea grafică, o astfel de tranziţie, practic fără citirea
benzii de intrare la acel pas, arată astfel:

λ
p q
Figura 2.9.1
Teorema 2.8.1.
Mulţimea cuvintelor recunoscute de automatele finite cu λ-tranziţii este aceiaşi cu
mulţimea cuvintelor recunoscute de automatele finite nedeterministe.

▼Demonstratie
Se arată în [5] că automatele finite nedeterministe cu λ-tranziţii sunt echivalente cu cele
fără λ-tranziţii.

Vom da aici un exemplu de utilizare a homomorfismului pentru a da o altă


demonstraţie [6] a acestei afirmaţii.
Fie automatul finit cu λ-tranziţii M = (Q, Σ, δ, q0, F), unde considerăm λ un simbol care
nu este în Σ. Considerăm acum automatul finit nedeterminist M’, peste alfabetul Σ{λ}:

M’ = (Q, Σ{λ}, δ, q0, F) ,

Definim acum acceptarea pentru automatul cu cu λ-tranziţii după cum urmează: pentru
orice x din Σ*, automatul M acceptă x dacă există y în (Σ{λ})* astfel încât:
- M’ acceptă y relativ la definiţia acceptării unui automat finit nedeterminist;
- x este obţinut din y prin ştergerea tuturor apariţiilor simbolului λ; atunci x =
h(y), unde:
h: (Σ{λ})* → Σ*,
este homomorfismul definit de :
h(a) = a pentru a  
h(λ) = λ.

În acest fel L(M) = h(L(M’)). Dar mulţimea L(M’) este regulată şi conform teoremei
2.9.11 va rezulta că şi L(M) este o muţime regulată.

Algoritmul de conversie a unei expresii regulate într-un AFN este următorul:
Algoritmul 2.8.1. Construcţia unui automat finit nedeterminist cu -tranziţii pentru o
expresie regulată.

Intrare: o expresie regulată r peste un alfabet , sub forma unui arbore sintactic.
Ieşire: un AFN, N pentru limbajul L(r)
- 72 -
Metodă: construim N, parcurgând arborele sintactic de jos în sus, aplicând regulile (1) şi
(2) şi combinând automatele obţinute la fiecare nod, cu ajutorul regulei (3) unde:
pentru , construim automatul

start
i  f
cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {}.
2. pentru a, construim automatul

start a
i f
cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {a}.
3. dacă N(s) şi N(t) sunt AFN pentru expresiile regulate s şi t atunci:
a) Pentru expresia regulată s|t construim următorul automat N(s|t)

N(s)
 
start f
i
 N(t) 

cu i noua stare iniţială a lui N(s|t) şi f noua stare finală. Avem _tranziţii de la i la fostele stări
iniţiale ale lui N(s) şi N(t) şi _tranziţii de la fostele stări finale ale lui N(s) şi N(t) la f. Astfel,
automatul N(s|t) recunoaşte L(s) U L(t).
b) Pentru expresia regulată st construim următorul automat N(st)

N(s) N(t)
start f
i

unde i, starea iniţială pentru N(s) a devenit starea iniţială pentru N(st) şi f starea finală pentru
N(t) a devenit starea finală pentru N(st). Starea finală pentru N(s) este identificată cu starea
iniţială pentru N(t) şi noua stare creată în N(st) îşi pierde statutul de stare iniţială sau finală.
Astfel, automatul N(st) recunoaşte limbajul L(s)L(t).
c) Pentru expresia regulată s* construim automatul N(s*)

start i  
N(s) f

- 73 -
cu i noua stare iniţială şi f noua stare finală pentru N(s*). Stările iniţială şi finală pentru N(s) îşi
pierd acest statut. Astfel automatul N(s*) recunoaşte limbajul L(s)*.

Exemplul 1 Să folosim algoritmul 2.3. pentru a construi AFN N(r) din expresia
regulată r=(a|b)*abb. Arborele sintactic al expresiei regulate date este:

Parcurgând acum arborele vom avea:


start a
3
Pentru simbolul a avem: 2
start b
Pentru simbolul b avem: 4 5
Pentru a|b avem:

 2 3
 a
0
 6 
start
1 7
 b 
4 5

Continând acest proces, în final vom obţine automatul următor:

a
2 3
start
 
 b 9 b
0  1 6 7 a 8 10
 
b
4 5


- 74 -
Toate automatele construite astfel sunt nedeterministe cu λ-tranziţii.

Teorema 2.8.1
Fiind dată o expresie regulată R, există un automat F cu număr finit de stări,
nedeterminist şi cu λ-tranziţii, care acceptă limbajul generat de R.
▼ Demonstraţie:
- se face prin inducţie în raport cu fiecare din cele trei operaţii ale expresiilor regulate.
Construcţia formală se deduce din diagramele de stare definite mai sus.

Teorema 2.8.2
Fiind dat un automat cu număr finit de stări, determinist, care acceptă limbajul L, există
o expresie regulată care reprezintă limbajul L.

▼ Demonstraţie:
- se aplică algoritmul de transformare a automatului finit determinist într-o gramatică de tip
3, după care se aplică acesteia algoritmul de determinare a expresiei regulate echivalente.

1. Să se construiască câte un automat finit pentru fiecare dintre limbajele


descrise de următoarele expresii regulate:

a. (11|0)*(00|1)*;

b. (1|01|001)*(0|00)*.

Să ne reamintim...

Un automat finit nedeterminist cu λ-tranziţii este un ansamblu M=(Q, Σ, δ,


q0, F) ale cărui componente au aceleaşi semnificaţii ca la un automat finit
oarecare, doar că funcţia de tranziţie este definită astfel:
δ : Q  Σ  λ  P(Q) .
Teorema 2.8.1.
Mulţimea cuvintelor recunoscute de automatele finite cu λ-tranziţii
este aceiaşi cu mulţimea cuvintelor recunoscute de automatele finite
nedeterministe.
Teorema 2.8.1
Fiind dată o expresie regulată R, există un automat F cu număr finit de
stări, nedeterminist şi cu λ-tranziţii, care acceptă limbajul generat de R.
Teorema 2.8.2
Fiind dat un automat cu număr finit de stări, determinist, care acceptă
limbajul L, există o expresie regulată care reprezintă limbajul L.

- 75 -
Test de evaluare a cunoştinţelor
I. Întrebări.
1. Ce legătură există între automatele finite şi expresiile regulate?
2. De la ce porneşte un algoritm de construcţie a automatului finit
pornind de la o expresie regulată şi ce tip de automate finite se
folosesc?

II. Exerciţii propuse.


1. Se dă expresia (00|11)00(0|1)*. Să se construiască AFN-ul
corespunzator.

M2.U4.4. Rezumat. În unitatea de învăţare M2.U3. am prezentat trecerea de la o


gramatică de tip 3 la o expresie regulată. Asta însă nu demonstrează echivalenţa
dintre expresii regulate şi limbajele de tip 3.

Această unitate de învăţare întregeşte imaginea asupra expresiilor regulate făcând


legatura dintre expresii regulate şi automatele finite cu λ-tranziţii, automate
echivalente cu automatele nedeterministe si deci cu cele deterministe. Algoritmul
prezentat porneşte de la o expresie regulată sub forma unui arbore sintactic,
descompunere care este specifică fazei de analiză sintactică a procesului de
compilare şi care va fi tratată în cursul de tehnici de compilare.

- 76 -
Modulul 3. Proprietăţi ale limbajelor regulate
Cuprins
Introducere ........................................................................................................... .....77
Competenţe .......................................................................................................... .....77
U1. Proprietăţi de închidere pentru limbaje regulate ............................................ .....78
U2. Lema de pompare pentru limbaje regulate.............................................................86
Introducere
Acest modul se referă la proprietăţi ale familiei limbajelor regulate care permit atât
construcţia de noi limbaje, gramatici, automate finite şi expresii regulate at şi
demonstrarea unui rezultat foarte interesant enunţat în modulul 1 şi anume: clasa
limbajele de tip 3 nu este egală cu clasa limbajelor independente de context.

Datorită rezultatelor prezentate în modulul 2 de unde rezultă că limbajele regulate


pot fi private ca limbaje generate de gramatici de tip 3, recunoscute de automatele
finite sau reprezentate de expresii regulate, In demonstraţii se poate folosi oricare
dintre aceste reprezentări.

Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
 Construiască automate finite deterministe şi nedeterministe pentru limbaje
compuse din mai multe alte limbaje;
 Construiască gramatici generative de tip 3 nedeterministe pentru limbaje
compuse din mai multe alte limbaje;
 Construiască expresii regulate nedeterministe pentru limbaje compuse din
mai multe alte limbaje;
 Implementeze algoritmii prezentaţi într-un limbaj de programare general

- 77 -
Unitatea de învăţare M3.U1. Proprietăţi de închidere pentru
limbaje regulate
Cuprins
M3.U1.1. Introducere ................................................................................................ 78
M3.U1.2. Obiectivele unităţii de învăţare .................................................................. 78
M3.U1.3. Proprietăţi de închidere ale limbajelor regulate ..................................... .....78
M3.U1.4. Rezumat .................................................................................................... 85

M3.U1.1. Introducere
Vom studia o serie de proprietăţi ale limbajelor regulate dintre care o parte
importantă o formează proprităţile de închidere ale familiei limbajelor regulate la
operaţiile cu limbaje introduse în modulul 1. Pentru că limbajele de tip 3 pot fi
generate de gramatici de tip 3, recunoscute de automatele finite sau reprezentate de
expresii regulate, în demonstraţii vom folosi oricare dintre aceste reprezentări.

M3.U1.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 Inţeleagă şi să explice algoritmii de construţie a unor gramatici, automate
finite sau expresii regulate pormind de la alte gramatici, automate finite sau
expresii regulate;
 Construiască gramatici, automate finite sau expresii regulate pormind de la
alte gramatici, automate finite sau expresii regulate;;
 Folosească proprităţile în contruire de noi limbaje;
 Implementeze algoritmii prezentaţi într-un limbaj de programare general

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M3.U1.3 Proprietăţi de închidere pentru limbaje regulate

Teorema 2.9.1
Clasa limbajelor de tip 3 este închisă în raport cu reuniunea.

▼ Demonstraţie:

- 78 -
Demonstraţia se poate face folosind automate finite nedeterministe sau folosind
gramaticile generative de tip 3. Alegem cea de a doua variantă (prima poate constitui un
exerciţiu).
Fie L1, L2 două limbaje de tip 3 generate de gramaticile G1, G2:

G 1  (VN , VT , S1 , P1 ) , unde 
 L(G 1 )  L1 \  λ
(1) (1)

 
  L(G 2 )  L 2 \  λ

(2) (2)
 2
G (V N
, VT
, S 2
, P2
)
Presupunem că VN  VN   (în caz contrar, se poate face o redenumire a variabilelor
(1) (2)

astfel încât condiţia să fie îndeplinită fiindcă variabilele nu apar în cuvintele limbajului) şi
construim:
G 3  (VN(1)  VN(2)   S3 , VT(1)  VT(2) , S3 , P3 ) ,

S3  VN(1)  VN(2)
unde 
P3  P1  P2   S3  α S1  α  P1 sau S2  α  P2 

Dacă λ  L1  L 2 atunci la mulţimea regulilor se adaugă S 3  λ (adică dacă
S1  λ  P1 sau S 2  λ  P2 ).
Fie w  L 1 . Atunci:

w  L   S  α  *
  α*
w , S3  α  P3  .
 w  
 G G   G 
1 1
1 1 3

Similar pentru w  L 2 .

 
* * *
Dacă α  w , α  S3 , atunci α  w sau α  w după cum α  VN  VT
(1) (1) *
sau
G3 G1 G2

α  VN(2)  VT(2)  .
*

Teorema 2.9.2
Clasa limbajelor de tip 3 este închisă în raport cu complementarea.

▼ Demonstraţie:
Să arătăm această proprietate folosind automate finite deterministe.
Fie M  (Q, Σ, δ, q 0 , F) un automat finit determinist, astfel încât T(M)=L.
Fie Σ 1  Σ şi s o nouă stare ( s Q ).
Construim M 1  (Q  {s}, Σ 1 , δ1 , q 0 , (Q \ F)  {s}) , unde:
δ1 (q, a)  δ(q,a), pentru q  Q, a  Σ


δ1 (q, a)  s, pentru q  Q, a  Σ1 \ Σ


δ1 (s, a)  s, pentru a  Σ1

- 79 -
M1 este construit adăugând o stare “capcană” la mulţimea stărilor, stare în care automatul
intră pentru orice simbol care nu e în Σ şi rămâne în ea indifferent de simbolul de intrare citit, iar
apoi schimbând stările finale cu cele nefinale.
Un cuvânt din Σ1 \ T(M) este sau un cuvânt din Σ* de la care M nu ajunge în stare
*

finală, deci care nu e acceptat de M, adică δ(q 0 , x)  Q \ F , sau este un cuvânt care conţine
simboluri din Σ 1 \ Σ şi în momentul depistării unui astfel de simbol M1 intră în starea s în care
rămâne până analizează tot cuvântul.

Teorema 2.9.3
Clasa limbajelor de tip 3 este închisă în raport cu intersecţia.

▼ Demonstraţie:
Varianta 1.
Folosim pentru această demonstraţie una dintre relaţiile lui DeMorgan, din teoria
mulţimilor:
L1  L 2  L1  L 2 ,
unde L reprezintă complementara lui L.
Din teoremele 2.6.1 şi 2.6.2 rezultă deci că dacă L1 şi L2 sunt limbaje regulate, atunci şi
limbajul L1  L 2 este regulat.
Sigur ca aceasta este o demonstraţie elegantă a teoremei dar ea nun e furnizează nici un
mijloc de a construe gramatica sau automatul pentru L1  L 2 când cunoaştem gramaticile,
respectiv automatele, pentru L1 şi L2. Prezentăm in continuare o astfel de demonstraţie, care se
poate face construind un automat finit care să simuleze în paralel cele două automate M1 si M2
astfel:

Varianta 2.
Fie M 1  (Q1 , Σ1 , δ1 , q 1 , F1 ) şi M 2  (Q 2 , Σ 2 , δ 2 , q 2 , F2 ) două automate finite
deterministe. Ele acceptă mulţimile regulate T(M1) = L1, respectiv T(M2) = L2.
Presupunem că Q1  Q 2   (dacă nu, se face o simplă redenumire a stărilor fiecăruia
dintre ele, de exemplu prin renumerotare).
Putem presupune că Σ 1  Σ 2  Σ (dacă nu, creăm Σ  Σ 1  Σ 2 ).
Construim automatul finit nedeterminist M3 care acceptă intersecţia L1  L 2 , după cum
urmează:
M3 = (Q1 x Q2, , 3, [q0,q1], F1 x F2), unde 3 este definit de :

3([q,p], a) = [r,t]  1(p,a) = r şi 2(q,a) = t

Evident că automatul M3 intră într-o sare finală din F1 x F2 dacă şi M1 intră intr-o stare finală din
F1 şi M2 intră intr-o stare finală din F2.

- 80 -
Din teoremele 2.6.1, 2.6.2 şi 2.6.3 rezultă că:

Teorema 2.9.4
Clasa mulţimilor regulate este o algebră booleană.

Teorema 2.9.5
Clasa mulţimilor regulate este închisă în raport cu operaţia de oglindire.

▼ Demonstraţie:
Fie un automat finit M  (Q, Σ, δ, q 0 , F) . Considerăm mulţimea regulată L=T(M).
Definim automatul finit nedeterminist M’ astfel încât să funcţioneze “invers” faţă de M:
M   (Q  {q 0 }, Σ, δ, q 0 , F) , unde:
F  {q 0 } dacă λ  T(M)
sau F  {q 0 , q 0 } dacă λ  T(M)
având tranziţiile:
p  δ(q0 , a) dacă δ(p, a)  F



p  δ(q, a) dacă δ(p, a)  q
~
Este uşor de demonstrat acum că T(M)  L (vezi şi definiţia oglindirii unui limbaj, în
capitolul I, paragraful § 1.3).

Teorema 2.9.6
Clasa mulţimilor regulate este închisă în raport cu operaţia de concatenare.

▼ Demonstraţie:
Fie M 1  (Q1 , Σ1 , δ1 , q 1 , F1 ) şi M 2  (Q 2 , Σ 2 , δ 2 , q 2 , F2 ) două automate finite
deterministe. Ele acceptă mulţimile regulate T(M1), respectiv T(M2).
Presupunem că Q1  Q 2   (dacă nu, se face o simplă redenumire a stărilor fiecăruia
dintre ele, de exemplu prin renumerotare).
Putem presupune că Σ 1  Σ 2  Σ (dacă nu, creăm Σ  Σ 1  Σ 2 ).
Construim automatul finit nedeterminist M3 care acceptă concatenarea T(M 1 )T(M 2 ) după cum
urmează:
M 3  (Q1  Q 2 , Σ, δ 3 , q 1 , F3 )
p  δ 3 (q, a) , dacă q  Q1 , p  Q1 \ F1 şi δ1 (q, a)  p


cu {q 2 , p}  δ 3 (q, a) , dacă q  Q1 , p  F1 şi δ1 (q, a)  p


p  δ 3 (q, a) , dacă q, p  Q 2 şi δ 2 (q, a)  p

- 81 -
şi F2 , dacă λ  L 2

F3  

F2  F1 , dacă λ  L 2
Automatul finit M3 astfel construit va simula pe M1 până când acesta va intra într-o stare
finală, moment în care M3 poate intra în starea iniţială a lui M2 sau poate continua să simuleze
M1. Atunci când M3 ajunge în starea iniţială a lui M2, îl va simula pe acesta din urmă până la
oprire.
Se demonstrează uşor că T(M 3 )  T(M 1 )  T(M 2 ) .

Teorema 2.9.7
Clasa mulţimilor regulate este închisă în raport cu închiderea Kleene.
▼ Demonstraţie:

Fie M  (Q, Σ, δ, q 0 , F) un automat finit determinist acceptând limbajul regulat


L=T(M).
Construim automatul finit nedeterminist:
M   (Q  {q 0 }, Σ, δ, q 0 , F  {q 0 })
Dac ă δ(q 0 , a)  p  F, atunci δ(q 0 , a)  {p, q 0 }

Dac ă δ(q 0 , a)  p  F, atunci δ(q 0 , a)  {p}


Dac ă δ(q, a)  p  F, atunci δ(q, a)  {p, q 0 }


Dac ă δ(q, a)  p  F, atunci δ(q, a)  {p}
Se adaugă astfel o nouă stare iniţială q 0 pentru că, dacă λ trebuie să aparţină lui T(M) *,
nu putem forţa q0 să aparţină lui F3 căci M ar putea intra în q0 şi pe parcursul acceptării unui
cuvânt când q 0  F .
a) Dacă x  L atunci:
*

x  λ şi δ( q 0 , λ)  q 0  F3
sau
x=x1 x2…xn cu x i  L , iar în acest caz sunt posibile situaţiile:
a.1) ( q 0 ,x1x2…xn)├* (p, x2…xn), p  F (pentru că x 1  L ) dar în continuare nu e sigur
că automatul va conduce la acceptare (pornind din starea p cu şirul rămas).
Alegem atunci a doua variantă:

a.2) ( q 0 ,x1 x2…xn)├* (q0,x2…xn)├* (q0,x3…xn)├*…├*(q0,xn) ├ (r,λ) unde r  F .


Aşadar x  T(M ) .

b) Dacă x  T(M ) şi x=a1a2…am , atunci există stările q1,q2,…,qm astfel încât:

- 82 -
q 1  δ(q 0 , a 1 )

q i 1  δ(q i , a i 1 )


q m  F


şi q 1 , q 2 ,...,q m  Q
Atunci, pentru un anume i avem:
q i 1  q 0
sau   sau δ(q i , a i 1 )  q i 1 .

δ(q i , a i 1 )  F

Deci x poate fi scris în forma x=x1x2…xn, unde x j  L ( δ(q0 , x j )  F ).


Teorema 2.9.8
Clasa mulţimilor regulate este închisă relativ la substituţia cu mulţimi regulate.

▼ Demonstraţie:
Fie R  Σ o mulţime regulată şi pentru fiecare a  Σ fie R a  Δ o mulţime
 

regulată.
Fie f : Σ  Δ o substituţie regulată, f(a)=Ra.

Pentru ca R şi Ra, pentru fiecare a din R, sunt mulţimi regulate rezultă că există câte o
expresie regulată care să le reprezinte, expresii care conţin un număr finit de opratori *, . ,sau |.
Se observă ca substituţia unei reuniuni, a unei concatenări sau a unui produs Kleene este
reuniunea, concatenarea, respectiv produsul Kleene al substituţiilor:
f(R 1  R 2 )  f(R 1 )  f(R 2 )


f(R 1  R 2 )  f(R 1 )  f(R 2 )


f(R)  f(R )
 

Dar reuniunea concatenarea şi respectiv produsul Kleene sunt reprezentate de cei trei operatori
ai unei expresii regulate: *, . , | . Deci şi pentru două expresii regulate e1 si e2 vom avea:
f(e 1 | e 2 )  f(e 1 ) | f(e 2 )

f(e 1  e 2 )  f(e 1 )  f(e 2 )
  
f(e)  f(e )
Folosind inducţia relativ la numărul de operatori folosiţi de expresia regulată rezultă că: dacă r
este o expresie regulată atunci f(r) este tot o expresie regulată, ceea ce trebuia demonstrat.

În modulul 1 s-a definit operaţia de homomorfism. Să introducem şi inversa acesteia:

Definiţia 2.9.9 Definim homomorfismul invers astfel:

- 83 -
h 1 (L)  x h(x)  L
h 1 (w)  x h(x)  w
h 1 (w)  x  h(x)  w
h(a)  1

Teorema 2.9.10
Clasa mulţimilor regulate este închisă în raport cu homomorfismul şi cu homomorfismul
invers.

▼ Demonstraţie:
Deoarece h(a) e un caz particular de substituţie, Teorema 2.9.10 justifică prima cerinţă a
acestei teoreme.
Fie L un limbaj de tip 3 şi M automatul finit care recunoaşte L = T(M).
Construim un automat finit M’ pentru h-1(L) care simulează în controlul său finit
funcţionarea lui M corespunzător cu Fig.2.9.1.

a0 a1 … ai … an …

h(ai)
Fig.2.9.1

CF pt.M

Automatul M va fi un automat cu λ-tranziţii care citeşte câte un simbol ai de pe banda de


intrare şi generează pentru simbolul de intrare citi cuvântul h(ai) într-o zonă de memorie din
controlul său finit. Apoi efectuează o serie de λ-tranziţii în şirul de intrare, adică nu mai citeşte
nici un simbol de intrare, şi în acest timp simulează acţiunea automatului M în controlul său finit.
Când M termină de citit h(ai) şi starea sa este o stare finală (adică M acceptă h(ai)) atunci M’ işi
goleşte zona sa de memorie în care reprezenta h(ai) şi citeşte un nou simbol de intrare(această
gilire se poate face şi pe parcurs reţinând în zona de memorie numai partea necitită din h(ai)). M’
continuă de această manieră pînă când nu mai are nici un simbol de intrare de citit şi zona sa de
memorie este goală. Evident M’ termină de citit şirul său de intrare numai dacă M a acceptat
fiecare h(ai) pentru i de la 1 la n.

- 84 -
Pentru formalizare vom considera fiecare stare a lui M’ de forma [α,q]unde α este partea
necitită din h(ai) iar q este o stare a lui M. Funcţia de tranziţie, ’, a lui M’ se defineşte astfel:
’([λ,q],a) = [h(a),q] M’ generează h(a), în memoria lui
’([bα,q], λ) = [α, (b,q)] M’ simuleză, funcţionarea lui M pe un sufix al lui h(a), în
controlul său finit.

Să ne reamintim...

Limbajele regule formează o familie de limbaje care este închisă la


următoarele operaţii:
 Reuniune,
 Complementară,
 Intersecţie,
 Produs Kleene,
 Oglindire,
 Substituţie,
 Homomorfism,
 Homohorfism invers.

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Precizaţi 4 dintre proprietăţile limbajelor de tip 3 şi demonstraţi 2
dintre ele.

II. Exerciţii propuse.


1. Arătaţi că următoarele limbaje sunt regulate:
L1 = {awa | w{a,b}*};
L2 = {aw1aaw2a | w1,w2{a,b}*};

M3.U1.4 Rezumat
Unitatea de învăţare prezintă proprietăţile de închidere ale familiei limbajelor
regulate. . Pentru că limbajele de tip 3 pot fi generate de gramatici de tip 3,
recunoscute de automatele finite sau reprezentate de expresii regulate, în
demonstraţii s-au folosit una sau alta dintre aceste reprezentări.

- 85 -
Unitatea de învăţare M3.U2. Lema de pompare pentru limbaje
regulate
Cuprins
M3.U2.1. Introducere ............................................................................................. 86
M3.U2.2. Obiectivele unităţii de învăţare ............................................................... 86
M3.U2.3. Proprietăţi ale limbajelor regulate ........................................................... 86
M3.U2.4. Lema de pompare ................................................................................... 88
M3.U2.5. Rezumat......................................................................................................90

M3.U2.1. Introducere

Această unitate de învăţare prezintă câteva dintre proprietăţile limbajelor regulate,


care nu sunt proprităţi de închidere. Una dintre cele mai importante este lema de
pompare, care dă o caracterizare a mulţimilor regulate şi anume fiind dată o
mulţime şi un cuvânt suficient de lung, se poate găsi un subcuvânt nevid al acestui
cuvânt care se poate repeta de oricâte ori astfel încât cuvântul obţinut prin repetare
rămâne în mulţimea regulată dată.

M3.U2.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 recunoască limbajele de tip 3 folosind proprietăţi ale acestora;
 înţeleagă şi să explice lema de pompare;
 recunoască şi să demonstreze că anumite limbaje nu sunt de tip 3, folosind
lema de pompare;

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M3.U2.3. Proprietăţi ale limbajelor regulate

Teorema 2.9.5
Toate mulţimile finite sunt limbaje de tip 3.

▼ Demonstraţie:

- 86 -
Dacă L este o mulţime finită de cuvinte, atunci L  {w 1 ,..., w n } .
Arătăm întâi că pentru fiecare cuvânt w i  L , există Gi o gramatică de tip 3, astfel încât
L(G i )  w i . Fie wi= a1a2. . . an. Atunci mulţimea de reguli:
S → a1A1
A1 → a2A2
.............
An-2 → an-1An-1
An-1 → an
generează cuvântul wi adică:
*
S w i
G3

Deci limbajele w i i 1,n sunt regulate.

Cum L este un limbaj finit, L  w i , folosind Teorema 2.6.1 rezultă că L este un limbaj de
n

i 1
tip 3.
O demonstraţie echivalentă se poate face şi construind un automat finit M, astfel încât
T(M)=L.

Teorema 2.9.9
Clasa mulţimilor regulate este cea mai mică clasă conţinând toate mulţimile finite şi fiind
închisă în raport cu operaţiile de reuniune, concatenare şi închidere Kleene.

▼ Demonstraţie:
În baza teoremelor anterioare, este suficient acum să demonstrăm că cea mai mică clasă
M conţinând toate mulţimile finite şi închisă la reuniune, concatenare şi închidere Kleene
conţine clasa mulţimilor regulate.
Fie L1 mulţimea acceptată de un anume automat finit,
M  (q 1 ,...,q n , Σ, δ, q 1 , F)
Fie R ij mulţimea tuturor şirurilor x astfel încât δ(qi , x)  q j şi dacă
(k)

δ(q i , y)  q l pentru y care nu e prefix al lui x (desigur şi y  x, y   ) , atunci l  k .


(k)
Deci R ij este mulţimea tuturor şirurilor de intrare x care conduc automatul finit din
starea qi în starea qj fără a trece printr-o stare ql cu l mai mare decât k. Se observă că i şi j pot fi
mai mari decât k.
Putem defini recursiv aceste mulţimi, astfel:
R ij(k)  R ik(k -1) (R (kkk-1) ) * R (kkj -1)  R ij(k -1)

 (0)
R ij  {a δ(q i , a)  q j }

(k)
În definirea recursivă a lui R ij s-a folosit faptul că intrările care îl fac pe M să treacă din qi
în qj fără a trece printr-o stare ql cu l > k sunt:
- 87 -
(k -1)
- sau în R ij , adică trec automatul M din qi în qj fără a trece printr-o stare de indice mai
mare decât k-1,
- sau trec din starea i în k fără a trece prin stări de indice mai mare decât k-1 şi apoi din
starea k în j fără a trece prin stări de indice mai mare decât k-1.
 
(k)
Să arătăm că R ij 0 k  n este o clasă de mulţimi inclusă în cea mai mică clasă care conţine
mulţimile regulate. Vom face acest lucru prin inducţie matematică în raport cu k.
Pentru k=0, R ij  {a δ(q i , a)  q j }  R ij
(0) (0)
este o mulţime finită, deci şi regulată (v.
Teorema 2.6.5)  R ij(0)  M .
Presupunând adevărată afirmaţia pentru k (o notăm P(k)), verificăm P(k+1):
R ij(k 1)  R ik
(k)
(R (k) ) * R (k)  R ij(k)
 (k)
kk kj

R ik , R kk , R kj , R ij  M
(k) (k) (k)

dar M este închisă la produs Kleene, concatenare şi reuniune,


 R ij(k)  M , deci inducţia se încheie aici.
Revenind la limbajul L1 considerat iniţial, acesta se poate scrie sub forma:
L1   R 1jn  M .
q j F

În concluzie, L1 este inclus în cea mai mică mulţime care conţine toate mulţimile finite şi
e închisă la reuniune, concatenare şi produs Kleene.
Implicaţia inversă este evidentă şi deci teorema este demonstrată.

Consecinţa 2.9.1 Orice expresie formată dintr-un şir finit de simboluri peste Σ şi un număr finit
de operatori , ,  cu paranteze pentru a determina ordinea operaţiilor, este o mulţime regulată.
În plus, rezultă că orice mulţime acceptată de un automat finit determinist este de această
formă. Se obţine şi de aici un mod convenabil de a nota mulţimile regulate şi anume prin
intermediul expresiilor regulate.
Astfel următoarele mulţimi sunt reulate:
a) mulţimea cuvintelor care se pot forma cu simbolurile a,b,c se poate scrie sub forma a, b, c .
b) mulţimea cuvintelor formate din simbolurile 0 şi 1, având trei 0 consecutivi, se poate scrie sub
forma: 0,1 0000,1 .
 

M3.U2.4 Lema de pompare pentru limbaje regulate


Această lemă dă o caracterizare a mulţimii regulate şi anume fiind dată o mulţime şi un
cuvânt suficient de lung, se poate găsi un subcuvânt nevid al acestui cuvânt care se poate repeta
de oricâte ori astfel încât cuvântul obţinut prin repetare rămâne în mulţimea regulată dată.

Teorema 2.5.1
Fie L o mulţime regulată . Atunci există o constantă p , astfel încât dacă un cuvânt wL şi
|w|p atunci w poate fi scris w=xyz, unde:

- 88 -
- 0  |y| p
- xyizL, i0.

▼ Demonstraţie:
Fie M=(Q,,,q0,F) un automat finit cu n stări astfel încât T(M)=L.
Fie p=n.
Dacă wT(M) şi w n, atunci considerăm configuraţiile succesive ale lui M, în acceptarea
lui w;
  cel puţin n+1 configuraţii, deci trebuie să fie cel puţin două stări identice p = qi = qj astfel
încât:
(q 0 , w) ├* (q i , w) ├* (q j , z) ├* (r, λ)
De aici rezultă că w=xw’ şi w’=yz şi deci w=xyz.
Fie j cel mai mic indice pentru care qi = qj de unde şi 0  |y| n.
Dar atunci :
(q 0 , xy i z) ├* (p, yi z) ├* (p, y i-1z) ├* …├* (p, z) ├* (r, λ)
Deci xyizT(M), i0.

Pentru i = 0 :
(q 0 , xz) ├* (p, z) ├* (r, λ) .

Consecinţa 2.5.1. Clasa limbajelor de tip 3 este o subclasă proprie a clasei limbajelor
independente de context.

▼Demonstraţie.
Din ierarhia lui Chomsky rezultă ca regulile de tip 3 sunt şi de tip 2, deci familia limbajelor
regulate este inclusă în familia limbajelor de tip 2 adică independente de context
Pentru ca lema de pompare dă o caracterizare a mulţimilor regulate ea poate fi folosită şi
pentru a demonstra că limbajele care nu respectă lema de pompare nu sunt regulate.
Vom arăta că limbajul L=  aibi  i1 , pentru care am arătat că există o gramatică
independentă de context care sa-l genereze, nu este o mulţime regulată.
Presupunem că p astfel încât pentru wL : |w| p, w=xyz, |y|) p şi w’=xyizL.
- dacă y=aj cu ji, atunci  ai+jbiT(M) , ceeace contrazice structura limbajului deci este
imposibil;
- dacă y=bj, atunci  aibj+iT(M) ceeace contrazice din nou structura limbajului deci este
imposibil;
- dacă y=ajbk cu ji şi ki, atunci  aibkajbiT(M) din nou imposibil
 L= aibi  i1  nu e o mulţime regulată pentru că nu respectă lema de pompare.
Deci există un limbaj ,L, care nu este de tip 3 dar este de tip 2, deci clasa limbajelor regulate
este o subclasă proprie a clasei limbajelor independente de context.

- 89 -
Să ne reamintim...

Lema de pompare dă o caracterizare a mulţimilor regulate şi anume


dacă intr-o mulţime regulată există un cuvănt suficient de lung
atunci mulţimea este infinită.

Toate mulţimile finite sunt mulţimi regulate.

Clasa mulţimilor regulate este cea mai mică clasă conţinând toate
mulţimile finite şi fiind închisă în raport cu operaţiile de reuniune,
concatenare şi închidere Kleene.

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Care este lema de pompare pentru limbajele regulate?

II. Exerciţii propuse.


1. Să se demonstreze că următoarele limbaje nu sunt regulate:
L1= {wcw | w{a,b}*};
L2 = {ww | w{a,b}*}.

M3.U2.5 Rezumat
Această unitate de învăţare prezintă câteva dintre proprietăţile limbajelor regulate,
care nu sunt proprietăţi de închidere. Una dintre cele mai importante este lema de
pompare, care dă o caracterizare a mulţimilor regulate.
Conform lemei de pompare pentru mulţimi regulate, fiind dată o mulţime
regulată şi un cuvânt suficient de lung, se poate găsi un subcuvânt nevid al acestui
cuvânt care se poate repeta de oricâte ori astfel încât cuvântul obţinut prin repetare
rămâne în mulţimea regulată dată.
Această proprietate are multe aplicaţii printre care şi aceea că ne permite să
demonstrăm că anumite limbaje nu sunt regulate, prin faptul că nu respectă această
lemă.

- 90 -
Temă de control I
1. Să se construiască o gramatică de tip 3 şi un automat finit care să
genereze, respectiv să accepte limbajul:
L = {0n1m | n≥0, m≥1} {1n0m | n≥0, m≥1}
2. Fie automatul nedeterminist de mai jos:

Să se construiască un automat finit determinist, A’, echivalent cu


automatul dat şi să se construiască apoi o gramatica care sa
genereze T(A’).

3. Să se minimizeze automatul M = ({s1, s2, s3, s4, s5, s6},{0,1}, , s1,


{s3, s4, s5}), cu următoarea tabelă de tranziţii:

4. Pentru expresia regulată E1=(0|1)*00(0|1)* să se precizeze limbajul


asociat:

5. Se dă gramatica G=({P,Q,R},{0,1},P, W), unde mulţimea de reguli W =


{PaP|bR, RbQ|aP, Q aQ|1Q|0}. Să se găsească expresia regulată
corespunzătoare acestei gramatici.
6. Să se construiască o expresie regulată pentru mulţimea cuvintelor peste
alfabetul {0,1}, care se termină în 111.
7. Să se construiască un automat finit pentru limbajul descris de următoarea
expresie regulată:

(11|0)*(00|1)*;

- 91 -
Modulul 4. Limbaje independente de context
Cuprins
Introducere .............................................................................................................. .92
Competenţe ............................................................................................................. .92
U1. Arbori de derivaţie pentru gramatici independente de context ........................... .93
U2. Simplificarea gramaticilor independente de context.şi forme normale ............... .99
U3. Lema de pompare pentru limbaje independente de contex ............................... .115
U4. Automate push-down şi legătura lor cu gramaticile independente de context ... .121
U5. Proprietăţi de închidere ale familiei limbajelor de tip 2 .................................... .135

Introducere
Modulul 4 este dedicat limbajelor de tip 2 din ierarhia lui Chomsky, numite
limbaje independente de context. Se defineşte noţiunea de arbore de derivaţie,
noţiune foarte importantă în teoria compilării, iar apoi se introduc formele
normale: Chomsky şi Greibach, pentru gramaticile independente de context. Se
introduce aici un nou tip de automat, numit automat push-down nedeterminist, şi
se demonstrează că acest automat recunoaşte limbajele independente de context.

Este prezentat şi automatul push-down determinist, care recunoaşte o subclasă


proprie a limbajelor indpendente de context şi anume clasa limbajelor
independente de context deterministe.

Se studiază proprietăţile limbajelor independente de context printre care şi o lemă


de pompare pentru limbajele independente de context.

Competenţe
La sfârşitul acestui modul studenţii vor fi capabili să:
- Folosească noţiunile definite în descrierea limbajelor formale;
- Construiască gramatici generative şi analitice pentru diferite limbaje;
- Construiască algoritmi normali în sens Markov cu o intrare şi o ieşire
fixată.
- implementeze algoritmii prezentaţi într-un limbaj de programare general

- 92 -
Unitatea de învăţare M4.U1. Arbori de derivaţie pentru gramatici
independente de context
Cuprins
M4.U1.1. Introducere ............................................................................................. 93
M4.U1.2. Obiectivele unităţii de învăţare ............................................................... 93
M4.U1.3. Arbori de derivaţie pentru gramaticile I.D.C. .......................................... 93
M4.U1.5. Rezumat......................................................................................................98

M4.U1.1. Introducere
Limbajele independente de context sunt generate de gramaticile de tip 2 din
ierarhia lui Chomsky, adică gramatici de forma: G = ( VN, VT, S, P),unde
mulţimea regulilor P este de forma: A  α,, cu A variabilă din VN, iar α un şir
format din variabile şi terminale, adică α  (VN VT)*.

Vom prezenta o metodă vizuală de descriere a oricărei derivaţii într-o gramatică


I.D.C. sub forma unui arbore de derivaţie.

M4.U1.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice algoritmii de construcţie ai unui arbore de derivaţie
pornind de la o gramatică independentă de context;
 transforme un arbore de derivaţie în alt arbore de derivaţie înlocuind un
subarbore al arborelui iniţial prin alt subarbore.

Durata medie de parcurgere a unităţii de învăţare este de 2 ore.

M4.U1.3 Arbori de derivaţie pentru gramaticile I.D.C.

Definiţia 3.1.1 Un graf de tip arbore este un graf cu următoarele proprietăţi:


i) există un nod în care nu intră nici un arc, numit rădăcină;
ii) în oricare alt nod intră exact un arc;
iii) există un drum de la rădăcină către oricare nod (graf conex);
iv) nodurile din care nu pleacă nici un arc se numesc frunze.
Definiţia 3.1.2 Fie G= ( VN,VT,S,P) o gramatică I.D.C. Un arbore de derivaţie în G este un
arbore în care:
i) fiecare nod este etichetat cu un simbol din VN  VT ;
ii) eticheta rădăcinii este S;
iii) dacă nodul A are cel puţin un descendent atunci el are o etichetă din VN;

- 93 -
iv) dacă A1, A2, A3,….,Ak sunt toţi descendenţii direcţi ai lui A în ordine de la stânga
spre dreapta atunci : A  A1A2…Ak este o regulă din P.

A  A1A2…Ak
A1 A2 … Ak

Exemplul 1 ▼ Fie G = ({S,A,B},{a,b},S,P), unde mulţimea P conţine regulile:


S  aAB
S  a S

S  bBA

S  b a A B
A  aS

B  bS
a S b S

b a

Fig. 3.1.1.
Pentru această gramatică, un arbore de derivaţie având frunzele a,a,b,b şi a este
cel din figura 3.1.1. Figura 3.1.1.
Definiţia 3.1.3 Se numeşte rezultat al unui arbore cuvântul format din etichetele frunzelor
citite de la stânga spre dreapta.

Conform acestei definiţii rezultatul arborelui de derivaţie din figura 3.1.1. este cuvântul
aabba.
Vom arăta mai târziu că dacă α este rezultatul unui arbore de derivaţie, atunci:
*
S  α.
G
Definiţia 3.1.4 Se numeşte subarbore al unui arbore graful format dintr-un nod împreună cu
toţi descendenţii săi.
*
Exemplul 2 Fie arborele de derivaţie de mai jos. Atunci există derivaţia A  ab.
G

*
a S ( A  ab)
G

Figura
- 94 3.1.2.
-
Teorema 3.1.1

Fie G =(VN,VT,A,P ) o gramatică I.D.C. Atunci pentru α  λ , (S  α )  există un
G
arbore de derivaţie în gramatica G al cărui rezultat este α .
▼ Demonstraţie:

Vom demonstra că dacă GA=(VN,VT,A,P) atunci pentru orice A în VN avem (A  α )
GA

dacă şi numai dacă există un subarbore cu rădăcina A al cărui rezultat este α .


Se observă că regulile din P sunt aceleaşi pentru orice gramatică GA, deci
 
( A  α )  (A  α )
GA GB

şi, pentru că G = GS, avem


 
(A  α )  (A  α ).
GA G

a) Presupunem că α este rezultatul unui arbore de derivare în gramatica GA; demonstrăm prin

inducţie, în raport cu numărul de noduri care nu sunt frunze, că A  α :
GA

a1) Dacă există un singur nod care nu e frunză atunci arborele arată ca în
figura 3.1.3.

A1 A2 … Ak

Rezultă că α =A1A2…Ak şi, din definiţia arborelui deFigura


derivaţie, avem A  α  P, deci
3.1.3.

Aα .

a2) Presupunem că α este rezultatul unui arbore A cu n noduri care nu sunt frunze şi
că rezultatul anterior este valabil pentru arbori cu cel mult n-1 noduri care nu sunt frunze.
Considerăm descendenţii direcţi ai lui A: A1,A2,…,Ak , deci (A  A1….Ak P).
Dacă Ai nu e o frunză, rezultă că Ai este o variabilă, rădăcină a unui subarbore cu
rezultatul α i şi cu cel mult n-1 noduri care nu sunt frunze.
Dacă Ai este o frunză, punem Ai = α i.
Se observă că dacă j < i atunci nodul Aj şi toţi descendenţii săi se află la stânga lui Ai şi a
tuturor descendenţilor săi.
Rezultă că α = α 1 α 2…… α k .
Deoarece din ipoteza inducţiei α i este rezultatul unui subarbore cu rădăcina Ai şi cu
*
cel mult n-1 noduri care nu sunt frunze, rezultă că (Ai  α i).
G

- 95 -

Deci A  A1A2…Ak  α1α 2 ...α k  α ,
G G
*
adică (A  α ).
G

b) Presupunem acum că A  α . Vom arăta că există un arbore de derivaţie cu rezultatul α în
GA

GA, prin inducţie relativ la numărul de paşi ai derivaţiei.


b1) Dacă A  α într-un singur pas rezultă că ( A  α  P ) şi dacă α =A1A2…Ak
GA

rezultă din definiţia arborelui de derivaţie că există un arbore cu rezultatul α :

A1 A2 … Ak


b2) Presupunem că A  α în n paşi şi că pentru orice derivaţie a lui β3.1.4
Figura cu numărul de
GA
*
paşi mai mic decât n există o derivaţie cu rezultatul β . Fie primul pas al derivaţiei A  α de
forma A  A1A2…Ak. Atunci orice simbol al lui α este sau unul dintre Ai sau derivat dintr-un
Ai în cel mult n-1 paşi. Deci, există subarborii T1,T2,..,Tk de rădăcini A1,A2,…,Ak, cu rezultatele

α1 , α 2 ,...,α k atunci când Ai  α i .
GA

Deci dacă la arborele din Figura 3.1.4 adăugăm subarborii Ti, obţinem:

A1 A2 … Ak

T1 T2 Tk

α1 α2 … αk Figura 3.1.5

Rezultă că arborele din Figura 3.1.5 (în care câte un arbore Tj poate fi vid, dacă Aj  VT) are
rezultatul format din rezultatele subarborilor T1, …,Tk în ordine de la stânga α1α 2 ....α k  α .

1. Fie gramatica G=({S, A, B},{a, b}, S, P) cu mulţimea producţiilor P:


S  SS

- 96 -
S  aSb
S  ab
Să se construiască arbori de derivare, dacă este posibil, pentru cuvintele:
x1 = a2b2a2b2,
x2 = aababb,
x3 = babab,
x4 = aabbab.
Dacă nu este posibil să se justifice de ce.

Să ne reamintim...

Fie G= ( VN,VT,S,P) o gramatică I.D.C. Un arbore de derivaţie în G este un


arbore în care:
i) fiecare nod este etichetat cu un simbol din VN  VT ;
ii) eticheta rădăcinii este S;
iii) dacă nodul A are cel puţin un descendent atunci el are o etichetă din
VN;
iv) dacă A1, A2, A3,….,Ak sunt toţi descendenţii direcţi ai lui A în ordine
de la stânga spre dreapta atunci : A  A1A2…Ak este o regulă din P.
Teorema 3.1.1
Fie G =(VN,VT,A,P ) o gramatică I.D.C. Atunci pentru α  λ ,

(S  α )  există un arbore de derivaţie în gramatica G al cărui
G
rezultat este α .

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Ce este un arbore de derivare într-o gramatică IDC G?

II. Exerciţii propuse.


2. Se consideră arborele din figura următoare. Să se construiască o
gramatică IDC G, astfel încât arborele din imagine să fie arbore de
derivaţie în G.

a S S b
S
 a

- 97 -
M4.U1.4 Rezumat
Unitatea de învăţare prezintă un mod vizual de reprezentare al unei derivaţii într-o
gramatică îndependentă de context, arborele de derivaţie. Obţinerea acestui arbore
de derivaţie este rezultatul esenţial al fazei de analiză sintactică din construcţia
compilatoarelor. În plus arborele de derivaţie este folosit pentru de monstrarea
multor rezultate privind limbajele independente de context.

- 98 -
Unitatea de învăţare M4.U2. Simplificarea gramaticilor
independente de context şi forme normale

Cuprins
M4.U2.1. Introducere ............................................................................................. 99
M4.U2.2. Obiectivele unităţii de învăţare ............................................................... 99
M4.U2.3. Simplificarea gramaticilor I.D.C. ............................................................ 99
M4.U2.4. Forme normale pentru gramatici I.D.C. . .............................................. 105
M4.U2.5. Rezumat. . ............................................................................................ 114

M4.U2.1. Introducere
Regulile independente de context sunt de forma A  α,, cu A variabilă din VN, iar
α un şir format din variabile şi terminale, adică α  (VN VT)*. Pentru că
membrul drept al regulei de rescriere α poate avea orice formă este greu de spus
ceva relativ la numărul de paşi şi lungimea unui cuvânt dintr-o derivaţie.

Se pot însă gasi alte forme de gramatici echivalente care pot fi folosite foarte bine
în demonstraţii sau în construcţii de limbaje independente de context. Astfel de
forme sunt forma normala Chomsky şi forma normală Greibach care se obţin
printr-o serie de transformări pornind de la o gramatică generală independentă de
context.

M4.U2.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice algoritmii de simplificare ai gramaticilor
independente de context;
 înţeleagă şi să explice algoritmii de de construcţie ai formelor normale
pentru gramatici independente de context;
 să foloseasca algoritmii anteriori în construirea unor gramatici în formă
normala Chomsky sau Greibach.

Durata medie de parcurgere a unităţii de învăţare este de 3-4 ore.

M4.U2.3 Simplificarea gramaticilor I.D.C.

Vom arăta întâi cum se poate verifica dacă un limbaj generat de o gramatică I.D.C.
este vid sau nu.

Teorema 3.2.1
Există un algoritm pentru a determina dacă limbajul generat de o gramatică I.D.C. este
vid sau nu.
▼ Demonstraţie:
- 99 -
*
Fie G=(VN,VT,S,P) o gramatică I.D.C.; presupunem că S  w pentru un anume
w  VT* .
Considerăm un arbore de derivaţie al lui w în gramatica G. Presupunem că există un
drum în arbore cu două noduri n1 şi n2 cu aceeaşi etichetă A şi cu n2 descendentul lui n1; fie w1
şi w2 rezultatele arborilor n1 respectiv n2.
* *
Astfel, avem derivaţiile A w 1 şi A w 2 , iar w2 este un subcuvânt al lui w1.
Rezultă că w poate fi descompus în forma w=w3 w1 w4 , unde w3 sau w4 pot fi λ.
Dacă înlocuim subarborele n1 cu n2, obţinem:
*
S  w 3 w 2 w 4  L(G) .
G
În această derivaţie am eliminat cel puţin un nod n1 cu eticheta A. Procesul se poate
repeta, până când în arbore nu mai există nici un drum cu două noduri cu aceeaşi etichetă.
Acest proces este finit, deoarece la fiecare pas se elimină cel puţin un nod.
Considerăm acum ultimul arbore obţinut. Dacă gramatica G are m variabile, atunci în
arborele de derivaţie nu poate exista un drum de lungime mai mare decât m, pentru că în caz
contrar un nod s-ar repeta.
În concluzie, dacă gramatica G generează vreun cuvânt, atunci există o derivaţie a unui
cuvânt a cărui arbore nu conţine nici un drum de lungime mai mare decât m. Rezultă
următorul algoritm:
Formăm o mulţime M de arbori corespunzători derivaţiilor din G, după cum urmează:
 arborele format din nodul S aparţine mulţimii M;
 dacă arborele A  M, se adaugă arborele obţinut din A prin aplicarea unei singure reguli
dacă sunt respectate următoarele două condiţii:
 arborele obţinut nu este în M;
 arborele obţinut nu are drumuri de lungime mai mare decât m.
Procedeul acesta este finit, deoarece există un număr finit de paşi (numărul este
dependent doar de numărul variabilelor m şi de numărul de reguli din P).
*
În final, dacă M conţine vreun arbore al cărui rezultat este din VT , atunci L(G) este
nevid. În caz contrar, L(G)   .

Observaţia 3.2.1 Teorema 3.2.1 este foarte importantă în simplificarea gramaticilor I.D.C.;
însă acest rezultat nu mai este valabil pentru gramaticile D.C.

Teorema 3.2.2
Fie G=(VN,VT,S,P) o gramatică I.D.C. Atunci există o gramatică G1, echivalentă cu G,
*
astfel încât A  VN , α  VT astfel încât A  α ( adică L(G A )   ).
*
GA

▼ Demonstraţie:
Fie A  VN . Considerăm GA=(VN, VT, A, P). Conform teoremei 3.2.1, se poate
determina dacă L(GA) este vid sau nu.
Dacă L(G A )   , atunci scoatem A din VN, adică VN  VN \ {A} şi scoatem din P
toate regulile care îl conţin pe A (indiferent în ce membru, stâng sau drept).
După ce eliminăm toţi neterminalii A pentru care L(G A )   , obţinem gramatica
G1=( VN1 ,VT,S,P1). Evident că L(G 1 )  L(G) . Să arătăm că L(G) \ L(G 1 )   :

- 100 -
Presupunem că există un cuvânt w  L(G) \ L(G 1 ) . Atunci există o derivare
* *
S α1Aα 2  w , cu A  VN \ VN1 .
Astfel, am obţinut două afirmaţii contradictorii:
*
 pe de o parte, w1  VT astfel încât A w 1 (deci w 1  L(G A ) );
*
G

 pe de altă parte, deoarece A  VN \ VN1 , avem L(G A )   .


Din contradicţia obţinută rezultă că A  VN , L(G A )   .

În continuare vom elimina simbolurile care nu apar în nici o derivaţie.

Definiţia 3.2.1 Fie G=(VN,VT,S,P) o gramatică I.D.C.



i) A  VN este un simbol inaccesibil dacă nu există S  α1Aα 2 ;
ii) A  VN este un simbol neutilizabil dacă nu există nici o derivare de forma:

S  α1Aα 2  w 1 w 3 w 2 , unde w i VT* .

Teorema 3.2.3
Fie G=(VN,VT,S,P) o gramatică I.D.C., astfel încât L(G)   . Atunci există
gramatica G1, echivalentă cu G, astfel încât VN1 nu conţine simboluri neutilizabile,
adică:
* *
A  VN1 există o derivaţie S w 1Aw 2  w 1 w 3 w 2 cu w i  VT* .
▼Demonstraţie:
Presupunem că G este o gramatică deja redusă conform Teoremei 3.2.2 (adică
A  VN , L(G A )   }. Construim în continuare gramatica G1= (VN1 , VT , S, P1 ) .
Mulţimea neterminalelor VN1 se determină iterativ:
 S VN1
 dacă A VN1 , atunci adăugăm în VN1 toate variabilele B pentru care există în P
câte o regulă A  α1 Bα 2
Procesul se opreşte când nici o nouă variabilă nu mai poate fi adăugată.
*
Fie atunci B  VN1 ; în acest caz, există măcar o derivaţie B  w 3  VT şi există
*

A1,A2,…,Ak astfel încât:


S  α1A1α1  P

A1  α2 A 2 α2  P *
 şi B w 3 ,
...

A i  αi 1A i 1αi1  P, i  1, k

A k  αk 1 Bαk1  P
de unde rezultă următoarea derivaţie:

- 101 -
* *
S  α1A1α1  α1α2 A 2 α2α1 α1α2 ...αk 1Bαk1αk ...α1 w1 w 3 w 2

Deci G1 satisface condiţiile teoremei şi este uşor de demonstrat că L(G)=L(G1), unde


P1 se obţine din P înlăturând toate regulile care conţin simboluri din VN \ VN1 .

Sintetizând teoremele anterioare, rezultă următorii algoritmi cu valoare practică:

Algoritm Eliminare Simboluri Inaccesibile:

Intrare G=(VN,VT,S,P)
1
Ieşire G1=(V N ,VT,S,P)

Pas 1 V0={S} , i=1


Pas 2 Vi=Vi-1  { A VN  B  αAβ  P , B Vi-1 }
Pas 3 Dacă Vi  Vi-1 atunci i=i+1, salt la Pas 2 ;
altfel VN1=Vi , P1={ A  α A  V N }
1

Algoritm Eliminare Simboluri Neutilizabile:

Intrare G=(VN,VT,S,P)
2
Ieşire G2=( VN ,VT,S,P2)

Pas 1 Vo=  , i=1


Pas 2 Vi=Vi-1  { A A  α  P, α ( Vi-1  VT)* }
Pas 3 Dacă Vi  Vi-1 atunci i=i+1, salt la Pas 2
altfel VN =Vi , P2= { A  α A  VN }
2 2

Exemplul 7 Să se simplifice gramatica G=({S,A,B,C}, {a,b}, S, P), unde


mulţimea regulilor este dată de următoarele reguli:
S  A
S  B
B  AB

B  Ba
P:
A  aB
A  bS
A  b
C  AS

C  b
▼ Rezolvare:
Eliminăm simbolurile inaccesibile:
V0={S} , i=1
V1={S}  {A,B}={S,A,B} , i=2
V2={S,A,B}  {  }  V1=V2  VN1 ={S,A,B}

- 102 -
S  A | B 
P1= 
B  AB | Ba 


A  aB | bS | b 
Eliminăm şi simbolurile neutilizabile:
V0=  , i=1
V1=   {A}={A} , i=2
V2={A}  {S} , i=3
V3={A,S}    V3=V2  VN ={A,S}
2

S  A 
P2 =  
A  bS

A  b 

Definiţia 3.2.2 Fie G o gramatică I.D.C. Spunem că o derivaţie în G este o derivaţie la


stânga dacă la fiecare pas al derivaţiei se înlocuieşte cel mai din stânga neterminal.

Aşadar, dacă α1  α 2  α 3  ...  α n este o derivaţie la stânga, atunci


i {1,..., n  1} w1i  VT , A  VN , β i2 , β i3  (VN  VT ) astfel încât:
α i  w1i Aβ i2 , α i1  w1i β i3β i2 .

Lema 3.2.1

Fie G o gramatică I.D.C. Dacă S  w, atunci există o derivaţie la stânga a lui w în G.
▼Demonstraţie:
Demonstraţia se face prin inducţie în raport cu numărul de paşi dintr-o derivaţie.
Pentru n = 1 S  w evident;
Presupunem teorema adevărată pentru orice derivaţie cu lungimea  n-1 şi fie o
derivaţie în n paşi : S  α1  α 2  ...  w .
Luăm în considerare simbolurile primului cuvânt derivat α 1 =A1A2…Ak; atunci

w=w1 w2…wk cu Ai  wi în cel mult n-1 paşi.

Deci există o derivaţie la stânga Ai  wi, pentru fiecare i  1, k .
Atunci S  A1A2…Ak  ...  w1 w2…wk şi deci există derivaţia la stânga de forma:
  
S  A1A2…Ak  w1A2…Ak  w1w2A3…Ak  ...  w1 w2…wk.

Definiţia 3.2.3 Fie G o gramatică I.D.C. G = (VN, VT, S, P). O regulă de forma
A  B  P, unde A, B  VN , se numeşte redenumire.

Teorema 3.2.4
Fie G o gramatică I.D.C.; atunci există gramatica G 1  G fără redenumiri.
▼Demonstraţie
Fie G = (VN, VT, S, P). Construim o nouă mulţime de producţii P1 prin includerea
tuturor producţiilor din P care nu sunt redenumiri.

- 103 -
*
Presupunem că A  B pentru A, B  VN ; atunci adăugăm în P1 toate regulile de
G

forma A  α , unde B  α  P nu este o redenumire. Se observă că este suficient să


*
considerăm numai acele şiruri de derivaţii A  B a căror lungime este mai mică decât
G
cardinalul mulţimii VN, aceasta deoarece, în caz contrar, în şirul redenumirilor ar apărea cel
puţin o variabilă de două ori, aceasta însemnând că şirul respectiv de redenumiri este
echivalent cu unul mai scurt, în care fiecare variabilă apare o singură dată.
Se obţine astfel gramatica modificată G1=(VN,VT,S,P1). Să verificăm echivalenţa
acesteia cu gramatica G iniţială:
*
a) dacă A  α  P1 , atunci A  α . Deci dacă w  L(G 1 ) , atunci w  L(G) .
G

Aşadar L(G 1 )  L(G) .


b) fie cuvântul w  L(G) şi considerăm o derivaţie la stânga a lui w în gramatica G:
S  α 0  α1  α 2  ...  α n  w .
G G
Dacă α i  α i 1 (pentru 0  i  n) printr-o producţie care nu e redenumire, atunci
G

α i  α i 1 .
G1

Dacă α i-1  α i printr-o regulă care nu este redenumire (i  0)


G

şi α i  α i1 printr-o regulă de tip redenumire


G

şi α i1  α i2 ... α j prin reguli care nu sunt redenumiri


G G G

şi α j  α j1 printr-o regulă care nu este redenumire,


G

atunci α i , α i 1 ,...,α j au aceeaşi lungime şi, pentru că derivaţia este o derivaţie la stânga,
simbolul înlocuit în fiecare pas este pe aceeaşi poziţie. Dar atunci
α i  α j1 printr-o producţie din P1 \ P .
G1

Deci α n  L(G 1 ), L(G)  L(G 1 ) .


Din a) şi b) rezultă că L(G 1 )  L(G) .

În practică putem aplica următorul algoritm:

Algoritm Eliminare Redenumiri:

Intrare Gramatica G, independentă de context, G=(VN,VT,S,P)


Ieşire Gramatica G1, independentă de context, fără redenumiri, echivalentă cu G:
1
G1=( VN ,VT,S,P1)

Varianta I
Pas 1 P0={ A  α  P nu este redenumire } , i=1
*
Pas 2 Pi=Pi-1  {A  α j A  B  P  B  α j  Pi 1}

- 104 -
Pas 3 Dacă Pi  Pi-1 atunci i=i+1, salt la Pas 2; altfel
P1=Pi şi V N  {A  VN A  α  P1}
1

Sau

Varianta a II-a
Mai întâi, pentru fiecare A  VN se construieşte RA=  

B A  B astfel:
 
Pas a R0={A} , i=1
Pas b Ri=Ri-1  {C B  C  P, B  R i1}
Pas c Dacă Ri  Ri-1 atunci i=i+1, salt la Pas a;
altfel RA=Ri .
Construcţia propriu-zisă:
Pas 1 P1  
Pas 2 Fie B  α  P . Dacă α  VN atunci salt la Pas 4 ;
altfel continuă cu Pas 3 .

Pas 3 P1  P1  A  α B  R A 
Pas 4 P= P \ B  α. Dacă P   atunci salt la Pas 2 ;
altfel continuă cu Pas 5 .

Pas 5 G1=( V N , VT , S, P1 ), unde VN  A A  α  P1
1 1

M4.U2.4 Forme normale pentru gramatici I.D.C.

Vom arăta, în cele ce urmează, că pentru orice gramatică independentă de context, există o
gramatică echivalentă în care regulile au forme particulare, forme uşor de utilizat în
demonstraţii.

Forma normală Chomsky

Teorema 3.3.1 (Forma normală Chomsky)


Orice limbaj I.D.C. poate fi generat de o gramatică în care toate regulile sunt de forma
A  BC sau A  a, cu A,B,C  VN şi a  VT.

▼Demonstraţie:
Fie G o gramatică I.D.C. Din teorema 3.3.4 rezultă că există o gramatică echivalentă
G1=(VN,VT,S,P) în care nu există reguli A  B, A,B  VN. Deci dacă o regulă are un singur
simbol în partea dreaptă atunci el este un terminal.
Construim forma normală Chomsky în două etape:

a) Considerăm o regulă în P de forma:


A  B1B2…Bm cu m  2 (3.3.1)
Dacă Bi  VT îl înlocuim cu Ci, o nouă variabilă, şi adăugăm regula Ci  Bi la P.
Deci regula (3.3.1) se înlocuieşte cu mulţimea de reguli:
A  C1C2…Cm unde Ci=Bi dacă Bi  VN

- 105 -
Ci  Bi dacă Bi  VT
Atunci mulţimea variabilelor se modifică în V'N =VN  {Ci | Bi VT} iar P’ va fi mulţimea
noilor reguli.
Fie G2=(V'N,VT,S,P’). Vom demonstra că L(G2)=L(G1).

a1) Din construcţia lui G2, dacă ( α  β ) atunci ( α  β ) şi deci L(G1)  L(G2) .
G1 G2

a2) Vom demonstra prin inducţie în raport cu numărul de paşi într-o derivaţie că dacă
 
A  w ,A  VN, w VT  atunci A  w.
G2 G1

Pentru n=1 afirmaţia este evidentă.



Presupunem afirmaţia adevărată pentru orice derivaţie în k paşi şi fie A  w prin k+1
G2

paşi. Primul pas în derivaţie trebuie să fie de forma:


A  C1C2…Cm , m  2.
G2

Atunci w=w1 w2…wm, unde Ci  wi, 1  i  m în cel mult k paşi. Rezultă că şi în gramatica G
G2

avem: Ci  wi.
G1

Dacă Ci  V'N\VN atunci se poate folosi numai regula Ci  ai pentru ai VT, de unde ai
= wi.
Aşadar, din construcţia lui P’ există o regulă A  B1B2…Bm a lui P cu Bi = Ci dacă Ci  VN şi
Bi=ai dacă Ci  V’N\VN.

Pentru aceşti Ci avem derivaţiile în G2: Ci  wi pentru că nu sunt mai mulţi de k paşi
G2

în derivaţie. Atunci Bi  wi.
G1

Deci A  w, şi în concluzie L(G2)  L(G1).
G1

b) Modificăm acum G2 prin adăugarea unor noi simboluri şi a unor noi reguli şi anume:
- o regulă de forma A  B1B2…Bm cu m  3, A,Bi  VN se înlocuieşte cu
A  B1 D1

D 1  B 2 D 2 , unde Di sunt noi variabile.

...

D m  2  B m 1 B m
 
Astfel rezultă G3 şi evident (A  w)  (A  w) .
G2 G3

Exemplul 1 Fie gramatica G = ({S,T,L}, {a,b,+,*,[,]}, S, P), cu regulile P:


S  T+S
S T

T  L*T
T L

- 106 -
L  [S]
L a
L b
Să se realizeze transformarea în forma normală Chomsky.
▼ Aplicăm algoritmul ce rezultă din demonstraţia teoremei 3.3.1 :
Pas 1: Eliminăm întâi redenumirile S  T  . Atunci mulţimea de reguli
 
T  L
S  T  S S L*T S  [S]
T  L * T T  [S] Sa 
devine: 
 

L  [S] Ta Sb 
L  a Tb 
 

L  b 

Pas 2: Regulile aflate deja în forma normală Chomsky sunt păstrate ca atare:

L  a Ta S  a
 
L  b Tb S  b

Celelalte reguli sunt înlocuite fiecare în modul următor:

  S  TD1
S  TC1S se înlocuieste cu 
S  T  S se înlocuieste cu  D1  C1S
C  
 1
  T  LD 2
T  LC 2 T se înlocuieste cu 
T  L * T se înlocuieste cu  D 2  C 2 T
C  *
 2
 L  C 3 D 3
L  C 3SC 4 se înlocuieste cu 

L  [S] se înlocuieste cu  D 3  SC 4
C 3  [
C 4 ]
  S  LD 5
S  LC 5 T se înlocuieste cu 
S  L * T se înlocuieste cu  D 5  C 5 T
C  *
 5
 T  C 6 D 6
T  C 6SC7 se înlocuieste cu 

T  [S] se înlocuieste cu  D 6  SC7
C 6  [
C 7 ]
În final, gramatica în formă normală Chomsky va fi G3=(VN,VT,S,P3),
unde VN= {S, L, T}  {C i | i  1,7}  {D i | i  1,6} iar P3 conţine următoarele
reguli:

- 107 -
S  TD1 T  LD 2 
D  C S D2  C2T 
 1 1

C1   C2  * 
 
S  LD 5 T  C6 D6 L  C3D3 
 
D 5  C 5 T D 6  SC7 D 3  SC 4 
C  * C6  [ C3  [ 
 5 
 C 7 ] C 4 ] 
S  a Ta La 
 

S  b Tb Lb 

Forma normală Greibach

În această formă normală fiecare regulă are membrul drept începând cu un terminal,
eventual urmat de variabile.

Lema 3.3.1
Definim o A-regulă ca fiind o regulă cu A în membrul stâng. Fie G=(VN,VT,S,P) o
gramatică I.D.C. şi fie A  α1 Bα 2 o regulă din P, astfel încât
{B  β 1 ,B  β 2 ,…,B  β r} este mulţimea tuturor B-regulilor din P.
Atunci L(G)=L(G1) unde G1=(VN,VT,S,P1), în care P1 se obţine din P prin eliminarea
regulei A  α1 Bα 2 şi adăugarea regulilor A1  α 1β 1α 2 , A  α1β 2 α 2 ,…, A 
α 1β r α 2 .

▼Demonstraţie:
Evident L(G1)  L(G) căci dacă A  α1 Bα 2 e folosită într-o derivaţie, atunci sigur
există i astfel încât: A  α1 Bα 2  α 1β i α 2 şi deci A  α 1β i α 2 .
G G G1

Pentru a demonstra că L(G)  L(G1) observăm că A  α1 Bα 2 este singura regulă din


G care nu este în G1. Ori de câte ori este folosită A  α1 Bα 2 , variabila B trebuie să fie
înlocuită într-un târziu de un β i. Aceşti doi paşi pot fi înlocuiţi de unul singur: A  α 1β i α 2 .

Lema 3.3.2
Fie G = (VN, VT, S, P) o gramatică I.D.C. şi mulţimea A-regulilor pentru care A este cel
mai din stânga simbol al părţii drepte (reguli cu recursie stângă) de forma: {A  Aα 1 ,
A  Aα 2 , . . . , A  Aα r }.
Fie A  β 1 , A  β 2 ,…, A  β s , restul A-regulilor din P. Fie G1=(VN  {Z},VT,S,P1)
gramatica I.D.C., formată prin adăugarea variabilei Z la VN şi înlocuirea tuturor A-
regulilor cu:
(1) A  βi

- 108 -
A  β iZ, 1  i  s
(2) Z αi
Z  α iZ, 1  i  r

Atunci L(G)=L(G1)

▼Demonstraţie:
Înainte de a demonstra lema să observăm că numai A-regulile generează, prin
derivarea la stânga, limbajul regulat:
{ β1 , β 2 ,...,β s}{ α1 , α 2 ,.., α r}* ,
aceasta fiind şi mulţimea generată de A-regulile lui G.

a) Fie x  L(G). Dintr-o derivaţie la stânga a lui x în G putem construi o altă derivaţie a lui
x în G, după cum urmează:
De câte ori apare în derivaţia lui x în G o secvenţă de forma:
tA γ  tA α j1 γ  tA α j2 α j1 γ  …  tA α jp α jp-1 γ  t β i α jp α jp-1… α j1 γ ,
G G G G G
înlocuim întreaga secvenţă cu:
tA γ  t β iZ γ  t β i α jpZ γ  …  t β i α jp.. α j2Z γ  t β i α jp… α j2 α j1 γ .
G1 G1 G1 G1 G1

Rezultă o derivaţie în G1, care nu este neapărat o derivaţie la stânga. Folosind acest
rezultat ori de câte ori într-o derivaţie se folosesc reguli cu recursie stângă, rezultă că
L(G)  L(G1).

b) Considerăm acum o derivaţie la stânga a lui x în G1. De câte ori Z apare într-o
derivaţie, reordonăm derivaţia astfel încât Z să fie imediat eliminat. Dacă într-o derivaţie la
stânga folosim regula Z  α Z, atunci α va genera un şir terminal şi va fi folosită altă regulă
cu Z în partea stângă. Este clar că în această secvenţă α poate fi lăsat neschimbat, temporar, şi
poate fi aplicată imediat o regulă de rescriere a lui Z. Desigur, derivaţia nu va fi mai lungă
decât derivaţia la stânga. În final o regulă Z  β i va fi folosită, unde β i nu are Z. Apoi
cuvintele α generate şi β pot să continue generarea normal. Rezultatul derivaţiei rearanjate
este acelaşi ca în derivaţia iniţială.
Înlocuim şirul rezultat de paşi din derivaţie care conţin variabila Z, şi anume:
tA α t β i Zγ  tβ i α jp Zγ  ...  tβ i α jp… α j2Z γ  tβ i α jp… α j2 α j1 γ
G1 G1 G1 G1

prin
tAγ  tAα j1 γ  tAα j2 α j1 γ ...  tAα jp… α j1 γ  tβ i α jp… α j1 γ
G G G G
Rezultatul este o derivaţie a lui x în G. Rezultă L(G1)  L(G).

Teorema 3.3.2 (Forma normală Greibach)


Fiecare limbaj I.D.C. poate fi generat de o gramatică pentru care fiecare regulă este de
forma A  aα cu A  VN, a  VT, α  VN ( α un şir de variabile, posibil vid).

▼Demonstraţie:
Fie G=(VN,VT,S,P) o gramatică în forma normală Chomsky generând limbajul L
independent de context.
Presupunem că VN = {A1,A2,…,Am}.

- 109 -
Pas I. În primul pas modificăm regulile astfel încât dacă Ai  Aj γ este o regulă atunci j > i.
Aceasta se poate face în modul următor, începând cu A1 şi terminând cu Am:
Presupunem că producţiile au fost modificate astfel încât pentru orice i, 1  i
k, Ai  Aj γ este o regulă numai dacă j > i.
Vom modifica acum Ak+1- regulile.
Dacă Ak+1  Aj γ este o regulă cu j < k+1, generăm o nouă mulţime de reguli,
înlocuind Aj cu partea dreaptă a tuturor Aj-regulilor conform Lemei 3.3.1. Repetând procedeul
de k-1 ori cel mult vom obţine reguli de forma Ak+1  Al γ cu l  k+1. Regulile cu l = k+1
sunt acum înlocuite în conformitate cu Lema 3.3.2, introducând noi variabile Zk+1.
Repetând procedeul pentru fiecare variabilă vom avea reguli de forma:

Ak  Al γ l > k
Ak  a γ a VT
Zk  γ γ (VN  {Z1,Z2,…,Zm})*.

Pas II. Observăm că pentru Am membrul drept trebuie să înceapă cu un terminal. Partea
dreaptă a oricărei Am-l reguli este sau Am sau un terminal. Când este Am, putem genera noi
reguli înlocuind Am cu membrul drept al unei Am-reguli conform cu Lema 3.3.1. Atunci aceste
reguli trebuie să aibă membrul drept începând cu un terminal. Continuăm de această manieră
cu Am-2,…,A1 până când membrul drept al fiecărei reguli pentru un Ai, începe cu un terminal.

Pas III. La un ultim pas, examinăm regulile pentru noile variabile Z1,Z2,…,Zm. Aceste reguli
încep sau cu un simbol terminal sau cu o variabilă originală. Astfel încă o aplicare a Lemei
3.3.2 completează demonstraţia.

Exemplul 2 Să se aducă la formă normală Greibach gramatica:


1) A 1  A 2 A 3
2) A  A A


2 3 1
G=({A1,A2,A3},{a,b},A1,P) unde P:
3) A 2  b
4) A  A A
 3 1 2


5) A 3  a
▼Rezolvare:

Pas I. Toate A1-regulile şi A2-regulile respectă forma cerută de Teorema 3.3.2 la


acest pas. Dintre A3-reguli, regula 4 are în membrul drept primul simbol pe A1,
deci de indice inferior, necesitând înlocuirea acestui prim simbol cu ajutorul A1-
regulilor (adică regula 1) aplicând Lema 3.3.1:
1) A 1  A 2 A 3
2) A  A A


2 3 1

3) A 2  b
4) A  A A A
 3 2 3 2


5) A 3  a
După înlocuirea lui A1 în regula 4, se vede că trebuie reaplicată Lema
3.3.1, deoarece A3-regula 4' obţinută anterior are în membrul drept primul simbol

- 110 -
pe A2, tot de indice inferior, necesitând înlocuirea acestui prim simbol cu ajutorul
A2-regulilor (adică regulile 2 şi 3). Se înlocuieşte deci regula 4' cu regulile
{4'',4'''}:
1) A1  A 2 A 3
2) A  A A
 2 3 1

3) A 2  b

4)A 3  A 3 A1 A 3 A 2
4)A 3  bA3 A 2
5) A  a
 3

Pentru a avea toate A3-regulile în forma cerută de teorema anterioară la


acest pas, mai este necesară înlocuirea regulii recursive 4'' cu un nou set de
reguli, conform Lemei 3.3.2, introducând variabila Z3, astfel:
A 1  A 2 A 3
A  A A
 2 3 1

A 2  b
A 3  bA 3 A 2 Z 3

A  aZ
 3 3

A 3  bA 3 A 2

A 3  a
Z  A A A
 3 1 3 2


Z 3  A1A 3 A 2 Z 3
Astfel, toate regulile au ajuns de forma Ai  Aj γ , cu j > i.

Pas II. Toate A3-regulile au în membrul drept primul simbol un terminal.


Folosind setul de A3-reguli, obţinem aceeaşi proprietate şi pentru A2-reguli, prin
înlocuiri conforme cu Lema 3.3.1:

A 2  bA 3 A 2 Z 3 A 1
A  aZ A


2 3 1
A2-reguli:
A 2  bA 3 A 2 A 1
A  aA
 2 1


 2
A  b
Similar, pentru A1-reguli, se înlocuieşte setul de A2-reguli în apariţiile din
membrii drepţi, obţinând:
A 1  bA 3 A 2 Z 3 A 1 A 3
A  aZ A A


1 3 1 3
A1-reguli:
A 1  bA 3 A 2 A 1 A 3
A  aA A
 1 1 3


A 1  bA 3
Astfel, toate regulile au ajuns să aibă membrul drept începând cu câte un
terminal.

- 111 -
Pas III. Pentru noua variabilă Z3 introdusă, Z3-regulile trebuie aduse şi ele la
aceeaşi formă cu celelalte (membrul drept să înceapă cu un terminal).
Regula Z 3  A 1 A 3 A 2 se înlocuieşte cu setul de reguli de mai jos (A1 se
înlocuieşte folosind A1-regulile existente):

Z 3  bA 3 A 2 Z 3 A 1 A 3 A 3 A 2
Z  aZ 3 A 1 A 3 A 3 A 2


3
(*) Z 3  bA 3 A 2 A 1 A 3 A 3 A 2
Z  aA 1 A 3 A 3 A 2
 3

Z 3  bA 3 A 3 A 2

Similar, regula Z 3  A 1 A 3 A 2 Z3 se înlocuieşte cu setul de reguli de mai


jos:

Z 3  bA 3 A 2 Z 3 A 1 A 3 A 3 A 2 Z 3
Z  aZ 3 A 1 A 3 A 3 A 2 Z 3


3

(**) Z 3  bA 3 A 2 A 1 A 3 A 3 A 2 Z 3
Z  aA 1 A 3 A 3 A 2 Z 3
 3

Z 3  bA 3 A 3 A 2 Z 3

Astfel, Ai-regulile ( i  1,3 ), obţinute la pasul II, împreună cu cele două


seturi (*) şi (**) de Z3-reguli, obţinute la pasul III, formează noua mulţime de
producţii, în forma normală Greibach. Se observă acum două aspecte importante:

 Pe de o parte, forma normală Greibach a unei gramatici permite ca la fiecare


pas al derivării unui cuvânt să se obţină câte exact un terminal, cunoscând
astfel cu exactitate numărul de paşi ai unei derivări.

 Pe de altă parte, aplicarea algoritmului din Teorema 3.3.2 se vede că


îmbogăţeşte extrem de mult mulţimea de reguli (de la doar 5 reguli iniţiale,
am obţinut anterior 26 reguli pentru forma normală Greibach).

1. Să se elimine simbolurile neutilizabile şi cele inaccesibile din gramatica


G = ({S, A, B, C, D},{a, b, c, d}, S, P) cu regulile:
S  a| aA | B | C
A  aB | b
B  Aa
C  cCD
D  ddd

- 112 -
2. Considerăm gramatica G = ({S, T, L},{a, b, +, -, x, /, [, ]}, S, P) unde
mulţimea P este formată din regulile:

ST+S TLxT L  [S]


ST–S TL/T La
ST TL Lb
a. Să se construiască o derivaţie şi un arbore de derivaţie pentru

cuvântul a + [a x b – b / a]

b. Să se aducă gramatica la forma normală Chomsky.

3. Considerăm gramatica G = ({L},{p, ~, [, ], }, L, P), unde mulţimea P =


{Lp, L~L, L[L  L]}. Să se construiască forma normală Chomsky
şi apoi forma normală Greibach.

Să ne reamintim...
Forma normală Chomsky
Orice limbaj I.D.C. poate fi generat de o gramatică în care toate
regulile sunt de forma A  BC sau A  a, cu A,B,C VN şi a  VT.

Forma normală Greibach


Orice limbaj I.D.C. poate fi generat de o gramatică pentru care
fiecare regulă este de forma A  aα cu A VN, a  VT, α  VN

( α un şir de variabile, posibil vid).

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Cum arată o gramatică IDC în formă normală Chomsky? Descrieţi
algoritmul de construcţie a unei gramatici în formă normală
Chomsky echivalentă cu o gramatică IDC oarecare.

II. Exerciţii propuse.


1. Fie gramatica G = ({S, A, B},{a, b}, S, P) cu regulile:
S  bA
S  aB
A  bAA
A  aS
Aa
B  aBB
B  bS
Bb
Să se găsească o gramatică IDC, G„, în formă normală Chomsky,
echivalentă cu G.

- 113 -
2. Fie gramatica G = ({x1, x2, x3},{a, b}, x1, P) cu regulile:
(a) x1  x2 x3
(b) x2  x3 x1 | b
(c) x3  x1 x2 | a
Să se determine o gramatică echivalentă cu G care este în formă
normală Greibach.

M2.U2.5 Rezumat
Unitatea de învăţare prezintă o serie de transformări care pot fi făcute asupra
gramaticilor indeprndente de context, fără a schimba limbajul generat, astfel încât
membrul drept al unei reguli de rescriere să semene cu cel al regulilor te tip 3. Asfel
în forma normală Chomsky membrul drept are lungimea 2 sau 1 iar în forma
normală Greibach membrul drept începe cu un terminal. Deşi prin aceste
transformări numărul variabilelor gramaticii iniţiale şi cel al regulilor creşte foarte
mult, aceste forme normale sunt deosebit de utile în demonstraţii, aşa cum vom
vedea în continuare.

- 114 -
Unitatea de învăţare M4.U3. Lema de pompare pentru limbaje
independente de context
Cuprins
M4.U3.1. Introducere ........................................................................................... 115
M4.U3.2. Obiectivele unităţii de învăţare ............................................................. 115
M4.U3.3. Lema de pompare pentru limbaje I.D.C. ............................................... 115
M4.U3.4. Rezumat....................................................................................................120

M4.U3.1. Introducere
În unitatea de învăţare M4.U3 am arătat că se pot elimina dintr-o gramatică acele
reguli care nu conduc la cuvinte terminale. De fapt, se poate face mai mult. Putem
testa dacă un limbaj generat de un neterminal este finit sau nu şi să eliminăm acele
variabile (cu excepţia simbolului iniţial al gramaticii) din care se poate genera
numai un număr finit de cuvinte.
.

M4.U3.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice lema de pompare pentru limbaje I.D.C. şi deosebirea
faţă de cazul limbajelor regulate;
 recunoască şi să demonstreze că un anumit limbaj nu este I.D.C., folosind
lema de pompare

Durata medie de parcurgere a unităţii de învăţare este de 3 ore.

M4.U3.3 Lema de pompare pentru limbaje I.D.C. (lema Bar-Hillel)

Teorema 3.4.1 (lema de pompare Bar-Hillel )


Fie un limbaj I.D.C., notat L. Atunci există constantele p şi q, depinzând de L, astfel
încât: dacă z L cu | z |  p , atunci z poate fi scris sub forma: z = uvwxy, unde
| vwx |  q
 astfel încât pentru fiecare întreg i  0 ,
| vx |  0 (v, x nu sunt ambele λ)
uv i wx i z  L .

▼Demonstraţie:
Fie G=(VN,VT,S,P) o gramatică I.D.C. în formă normală Chomsky, pentru L. Dacă G
are k variabile, atunci fie p=2k-1 şi q=2k. Este uşor de observat că, pentru o gramatică în formă
normală Chomsky, dacă un arbore de derivaţie nu are drumuri de lungime mai mare decât j,

- 115 -
atunci cuvântul derivat nu este mai lung decât 2j-1, această valoare reprezentând maximul de
frunze într-un astfel de arbore (binar, datorită formei Chomsky).

Deci, dacă z L şi | z |  p , atunci arborele unei derivaţii a lui z în gramatica G


conţine un drum de lungime mai mare decât k. Să considerăm cel mai lung drum, R, cu
lungimea mai mare decât k.

Atunci există două noduri n1 şi n2 în R astfel încât:

 n1 şi n2 sunt etichetate identic;


 n2 este subarborele lui n1 ;
 subarborele n1 nu are drumuri de lungime mai mare decât k+1.

Pentru a arăta că n1 şi n2 pot fi astfel găsite, parcurgem drumul R de la frunză înspre
rădăcină. Din primele k+2 noduri, numai o frunză are ca etichetă un simbol terminal. Cele
k+1 noduri rămase nu pot avea etichete distincte.

Subarborele T1, cu rădăcina n1, reprezintă derivaţia unui subcuvânt de lungime cel
k
mult 2 (şi deci de lungime cel mult q), pentru că în T1 nu există nici un drum de lungime mai
mare decât k+1, din cauză că R a fost drumul cel mai lung.

Fie z1 rezultatul subarborelui R. Dacă T2 este subarborele generat de nodul n2 şi z2 este


rezultatul lui T2, atunci z1 se poate scrie z3z2z4. În plus, z3 şi z4 nu pot fi ambele λ, pentru că
prima regulă folosită în derivaţia lui z1 e de forma A  BC , unde B,C VN . Subarborele T2
trebuie să fie completat în interior sau de subarborele lui B sau de subarborele lui C.

A  z 3 Az 4  z 3 z 2 z 4 , unde | z 3 z 2 z 4 |  q . De aici rezultă că


* *
Avem atunci
G G
* *
A  z i3 Az i4  z i3 z 2 z i4 pentru i  0 .
G G

Evident şirul z poate fi scris sub forma uz 3 z 2 z 4 y , pentru anumiţi u şi y.


Vom pune acum v=z3, w=z2 şi x=z4, demonstraţia fiind astfel încheiată.

Exemplul 1 Fie gramatica G=({A,B,C},{a,b},A,P), unde
P: A  BC
B  BA
C  BA
Aa
Bb
Fie un arbore de derivaţie în gramatica G de forma din figura 3.4.1. a).
Atunci se vede că există un drum marcat în care se repetă nodul A. Alegem
ultimile două apariţii alee lui A şi notăm
z3=bb z2=a z4=λ z=bbbaba
Putem obţine un nou arbore de derivaţie dacă înlocuim penultimul sum
arbore de etichetă A cu ultimul subarbore de etichetă A, ca în figura 3.4.1.b).
Repetând acest procedeu obţinem un nou arbore de derivaţie în figura 3.4.1.c),
arorae care nu mai prezintă nici un drum pe care se repete vreo variabilă.

- 116 -
a)

A
Legendă: drum R
B C

B A n B A
1

b B C b a

b B A n
2

b a

b) c)

A n
1
A n
2
B C
a
b B A n
2 Figura 3.4.1
b a

Teorema 3.4.2
Există un algoritm pentru a determina dacă o gramatică G generează un număr finit
sau infinit de cuvinte.
▼Demonstraţie:

Fie p şi q constantele definite în Teorema 3.4.1. Deci dacă z  L(G) şi | z | > p, atunci z
poate fi scris ca uvwxy, unde pentru fiecare i  0, uviwxiy  L şi deasemenea | v | + | x | > 0.
Deci dacă există un astfel de cuvânt atunci L(G) este infinit.
Presupunem că L(G) este infinit. Rezultă că există cuvinte de lungime arbitrară deci şi
cuvântul z, cu | z | > p+q. Acest cuvânt poate fi scris ca uvwxy cu | vwx | < q şi | v |
+ | x | > 0 şi, conform teoremei de pompare,

uwy  L şi | uwy | > p şi | uwy | < | wwwxy |

Dacă | uwy | > p+q atunci repetăm procedura până găsim un cuvânt în L de lungime l
cu p < l  p+q.

Atunci L este infinit dacă şi numai dacă el conţine un cuvânt de lungime l,

p < l  p+q.

- 117 -
Se poate testa dacă există un cuvânt de lungime mai mare decât p şi de cel mult p+q,
construind toţi arborii de derivaţie care conţin numai drumuri de lungime  p+q şi verificând
condiţia.

Deci dacă există un arbore cu un drum cu lungime mai mare decât p, atunci rezultă că
L este infinit (unde p=2k ).

Observaţia 3.4.1 Teorema 3.4.1 se poate aplica pentru a demonstra că L={ak bkck |
k  0} nu este I.D.C.

▼Demonstraţie:
Să presupunem, prin absurd, că limbajul L este I.D.C., ceea ce ar însemna că sunt
îndeplinite consecinţele Teoremei 3.4.1., care permit "pomparea" anumitor subcuvinte din
interiorul unor cuvinte suficient de lungi ale limbajului L.
Se observă, însă, că indiferent de lungimea cuvintelor alese din L, ele fiind de forma z
= akbkck (k  0), nu este posibilă alegerea vreunei descompuneri de forma z=uvwxy cu
proprietăţile specificate în teorema amintită şi astfel încât uv i wx i y  L .

Să urmărim cazurile posibile. Fie m, n, p  0 ,  k  0). Atunci cuvintele v, w şi x pot fi


de una din următoarele forme:

z=u(vwx)y v w x Motiv uv wx z  L
i i

Grupul de simboluri "a" se


I.
a n1
a n2
a n3 alungeşte independent de grupurile
am(an)ak-m-nbkck
"b" şi "c".
Grupurile de simboluri "a" şi "b" se
alungesc în mod independent. În
a n1 a n2 a n3 b n plus, dacă n3,n  0 , simbolurile "a"
şi "b" se amestecă.
II. Grupurile de simboluri "a" şi "b" se
am(ak-mbn)bk-nck a n1 a n 2 b n3 b n4 alungesc în mod independent.
Grupul de simboluri "b" se
alungeşte independent de grupurile
a n1 b n 2 b n3 b n4 "a" şi "c". În plus, dacă n1,n2  0 ,
simbolurile "a" şi "b" se amestecă.
Grupul de simboluri "b" se
III.
b n1 b n2 b n3 alungeşte independent de grupurile
akbm(bn)bk-m-nck
"a" şi "c".
IV.
Similar cazului II. …
akbm(bk-mcn)ck-n
Grupul de simboluri "c" se
V.
c n1
c n2
c alungeşte independent de grupurile
n3
akbkcm(cn)ck-m-n
"a" şi "b".
În concluzie, prin pompare se va afecta cel puţin una din proprietăţile limbajului
considerat: numărul de simboluri a, b, respectiv c este acelaşi (deci nu se pot multiplica

- 118 -
subcuvinte formate dintr-unul din cele trei simboluri), iar ordinea caracterelor în cuvânt este
strict alfabetică (deci nu se pot multiplica subcuvinte formate din "îmbinarea" a două
simboluri distincte, ab sau bc, căci se amestecă).
Rezultă că {akbkck | k  0}L1 \ L2 deci clasa limbajelor independente de context este
diferită de cea a limbajelor dependente de context:
L1  L2 .

Teorema 3.4.3
Fiind dată o gramatică I.D.C., G1, se poate găsi o gramatică echivalentă G2, pentru
care, dacă A este o variabilă în G2 alta decât simbolul iniţial, atunci există o infinitate
de cuvinte iniţiale derivate din A.

▼Demonstraţie:
Dacă L(G1) este finit atunci L={u1,u2,…,un} şi putem considera G2 cu mulţimea
regulilor P2={S  ui | i=1,n}.
Dacă L(G1) este infinit, G1=(VN,VT,S,P1), considerăm pentru fiecare A  VN gramatica
GA=(VN,VT,S,P1). Prin Teorema 3.4.2 se poate determina dacă L(GA) este finit sau nu.
Presupunem că A1,A2,…,Ak sunt variabilele care generează o infinitate de cuvinte şi că
B1,B2,…,Bm sunt variabilele care generează un număr finit de cuvinte.
Creem mulţimea de reguli P2 din P1 în modul următor:
Presupunem că C0  C1C2…Cr este o regulă din P1, iar C0  {A1,A2,…,Ak}. Atunci
regula C0  u1u2…un este o regulă din P2, unde:
1. Dacă Ci  VT  ui=ci
2. Dacă Ci  {A1,A2,…,Ak}  ui=ci
3. Dacă Ci  {B1,B2,…,Bm}  ui este unul din cuvintele (în număr finit) generate

de ci (ci  ui).
Rezultă că P2 nu conţine nici o regulă cu Bi la dreapta.
' '
Considerăm acum G2=( VN ,VT,S,P2) unde VN ={A1,A2,…,Ak}. Observăm că S trebuie
'
să aparţină lui VN pentru că L(GS) este infinit.
* 
a) Evident, dacă ( α  β ) atunci (α  β ) deci L(G1)  L(G2).
G2 G1

b) Pentru a demonstra L(G2)  L(G1), demonstrăm prin inducţie asupra numărului de


 
paşi din derivaţie că dacă Ai  w 1  i  k unde w VT atunci Ai  w.
*
G1 G2

Rezultatul este evident pentru o derivaţie într-un pas. Presupunem că este adevărat
pentru o derivaţie în cel mult j paşi. Considerăm o derivaţie în j+1 paşi şi presupunem că
prima regulă folosită este Ai  C1C2…Cr .

Putem astfel scrie w sub forma w1 w2…wr unde Ci  wi , 1  i  r.
G1

Atunci există o regulă în G2 de forma Ai  u1u2…ur,


w i dacă C i  VT  {B1 ,..., B m }
unde u i   .
 i
C dacă C i  {A 1 ,..., A k }
 
Dar ci  wi în cel mult j paşi  (Ci  wi) .
G1 G2

- 119 -

Deci A  u1u2…ur  w1 w2…wr .
G2 G2

Exemplul 2 Fie gramatica G=({S,A,B},{a,b,c,d},S,P), unde P={S  ASB,
S  AB, A  a, A  b, B  c, B  d}). Să aplicăm Teorema 3.4.3.

▼Rezolvare:
Variabilele A şi B generează numai cuvintele a şi b respectiv c şi d, dar S
generează o infinitate de cuvinte. Atunci se construieşte G2=({S},{a,b,c,d},S,P2),
mulţimea regulilor fiind:

P2 : S  aSc S  ac
S  aSd S  ad
S  bSc S  bc
S  aSd S  bd

Să ne reamintim...

Lema de pompare Bar-Hillel spune că dacă într-un limbaj


independent de context există cuvinte suficient de lungi atunci pot
exista în acele cuvinte cel mult două subcuvinte care pot fi
“pompate”, adică repetate, de ori câte ori şi se obţin cuvite care
aparţin aceluiaşi limbaj.

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Să se enunţe teorema de pompare pentru limabje IDC.

II. Exerciţii propuse.


1. Să se arate că limbajul L = {anbj | n = j2} nu este independent de
context.
2. Să se arate că limbajul L = {ww | w  {a, b}* } nu este independent
de context.

M4.U3.4. Rezumat. Această unitate de învăţare prezintă lema de pompare Bar-Hillel,


care spune ca dacă într-un limbaj independent de context există cuvinte suficient de
lungi, atunci limbajul este infinit.
Această lemă reprezintă un mod de caracterizare al limbajelor de tip 2, IDC, şi poate fi
folosită şi pentru a demonstra că există limbaje care nu sunt de tip 2 dar sunt de tip 1.
De asemenea acest rezultat se foate folosi într-un algoritm de decizie pentru a verifica
dacă un limbaj independent de context dat este infinit sau nu.

- 120 -
Unitatea de învăţare M4.U4. Automate push-down şi legătura lor
cu gramaticile independente de context
Cuprins
M4.U4.1. Introducere ........................................................................................... 121
M4.U4.2. Obiectivele unităţii de învăţare ............................................................. 121
M4.U4.3. Automate push-down ........................................................................... 122
M4.U4.4. Legătura dintre automate push-down şi gramatici de tip 2 .................... 126
M4.U4.5. Rezumat ............................................................................................... 132

M4.U4.1. Introducere

Vom introduce un nou tip de dispozitiv care să accepte limbajele I.D.C., numit
automat push-down.

Un automat push-down are, pe lângă o bandă de intrare, şi o stivă (o listă LIFO).

Într-o astfel de stivă, intrarea şi ieşirea unui simbol se face numai la capul stivei.
Când un simbol intră în stivă, simbolul care anterior a fost capul stivei devine al
doilea, cel care a fost al doilea devine al treilea ş.a.m.d. În mod similar, când un
simbol este scos din stivă, simbolul care anterior acestei scoateri era al doilea,
ajunge în capul stivei, cel care era al treilea devine al doilea ş.a.m.d.

O astfel de stivă se poate compara cu un teanc de farfurii în care se ridică sau se


pune o farfurie deasupra teancului.
.

M4.U4.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice funcţionarea unui automat push-down determinist şi
a unui nedeterminist;
 construiască propriul automat push-down pentru un anumit limbajdat;
 construiască o gramatică pentru un anumit limbaj, pornind de la un automat
push-down;
 construiască un automat push-down pentru un anumit limbaj, pornind de la
o gramatică I.D.C. în formă normală Greibach;
 construiască un program într-un limbaj oarecare care să simuleze
funcţionarea unui automat push-down;
 programeze construcţiile anterioare într-un limbaj de programare oarecare.

Durata medie de parcurgere a unităţii de învăţare este de 3-4 ore.

- 121 -
M4.U4.3 Automate push-down

Exemplul 1 Să utilizăm o stivă de "farfurii", cuplată cu un control finit pentru a


recunoaşte o mulţime neregulată.
▼ Fie limbajul I.D.C. L={ wcw ~ | w {0,1} }, care nu este regulat (posibil de
demonstrat acest lucru folosind lema de pompare) şi fie gramatica
G=({S},{0,1,c},S,P)
unde mulţimea regulilor este P= {S  0S0, S  1S1, S  c} .
Pentru a recunoaşte limbajul L, vom utiliza un control finit cu două stări
q1 şi q2 şi o memorie push-down pe care vom plasa "farfurii" albastre, roşii şi
verzi. Dispozitivul va opera după următoarele reguli:
1) Maşina porneşte cu o farfurie roşie pe stivă şi cu controlul finit în
starea q1.
2) Dacă simbolul de intrare este 0 şi starea este q 1, dispozitivul
plasează o farfurie albastră pe stivă, iar dacă simbolul de intrare este 1 şi starea
q1, atunci plasează o farfurie verde pe stivă şi, în ambele cazuri, rămâne în starea
q1.
3) Dacă intrarea este c şi starea q1, îşi schimbă starea în q2 fără a
acţiona asupra stivei.
Dacă intrarea este 0, starea q2 şi pe stivă se află o farfurie albastră, scoate farfuria
şi rămâne în q2, iar dacă este 1, starea q2 şi pe stivă este o farfurie verde, scoate
farfuria şi rămâne tot în q2.
1) Dacă dispozitivul este în starea q2 şi pe stivă este o farfurie roşie, scoate
farfuria indiferent de intrare.
2) În alte situaţii dispozitivul nu face nici o mişcare.
Dispozitivul acceptă şirul de intrare dacă, după citirea lui, stiva devine goală.

Vom defini un automat push-down ca fiind un dispozitiv format din: bandă de intrare, control
finit şi memorie push-down (stivă), precum în Figura 3.6.1..
Dispozitivul este nedeterminist, având un număr finit de şanse de mişcare în fiecare situaţie.
Mişcările vor fi de două tipuri:

ai … Banda de intrare

CONTROL Z Capul stivei


FINIT (Q)

Z0
Figura 3.6.1
- 122 -
I. - tranziţie cu simbol de intrare: în funcţie de simbolul de intrare, de capătul stivei şi de
starea controlului finit, sunt posibile anumite mişcări care constau fiecare din: o nouă stare a
controlului finit şi un şir (posibil vid) de simboluri care înlocuieşte capul stivei. După alegerea
unei mişcări posibile, dispozitivul avansează cu un simbol pe banda de intrare.

II. - "λ-tranziţie" : este similară cu mişcarea tip I., dar nu e utilizat nici un simbol de
intrare.

Limbajul acceptat de un automat push-down se poate defini în două moduri:


 mulţimea şirurilor de intrare care conduc la golirea memoriei push-down sau
 mulţimea şirurilor de intrare pentru care automatul intră într-o stare finală.

Cele două tipuri de acceptări sunt echivalente.


Formal, un automat push-down se defineşte prin:

Definiţia 3.6.1 Un automat push-down nedeterminist, M, este un sistem format din:


M = (Q, Σ, Γ, δ, q 0 , Z 0 , F) ,
unde:
 Q este o mulţime finită de stări
 Σ este un alfabet finit al benzii de intrare
 Γ este un alfabet finit al memoriei push-down
 q 0  Q stare iniţială
 Z 0  Γ simbol de start al memoriei push-down
 F  Q mulţimea stărilor finale
 δ : Q  (Σ  λ)   P (Q   )
*

Vom utiliza următoarele notaţii:


 litere mici de la începutul alfabetului pentru Σ
 litere mici de la sfârşitul alfabetului pentru şiruri din Σ*
 litere mari ale alfabetului pentru elemente din Γ
 litere greceşti pentru cuvinte din Γ*
Interpretarea expresiei δ(q, a, Z)  {(p 1 , γ1 ), (p 2 , γ 2 ),..., (p m , γ m )} , unde
q, p i  Q, a  Σ, Z  Γ, γ i  Γ* , i  1, m , este aceea că automatul push-down aflat în starea
q, cu a pe banda de intrare şi Z în capul stivei, poate trece într-una din stările pi înlocuind pe Z
cu γ i şi apoi avansează cu un simbol pe banda de intrare.

Interpretarea expresiei δ(q, λ, Z)  {(p 1 , γ1 ), (p 2 , γ 2 ),..., (p m , γ m )} , unde


q, p i  Q, Z  Γ, γ i  Γ* , i  1, m , este aceea că automatul push-down aflat în starea q şi
având pe Z în capul stivei, indiferent de simbolul aflat pe banda de intrare îşi schimbă starea
într-una din stările pi şi înlocuieşte pe Z cu γ i fără să avanseze pe banda de intrare.

- 123 -
Exemplul 2 În exemplul anterior, automatul push-down acceptă limbajul
~ | w {0,1} } prin memorie vidă. Să descriem formal acest automat.
{ wcw


M=({q1,q2},{0,1,c},{R,A,V},δ,q1,R,  )

δ(q1 ,0, R)  {(q 1 , AR)} δ(q1 , c, A)  {(q 2 , A)}


δ(q ,1, R)  {(q , VR)} 
δ(q1 , c, V)  {(q 2 , V)}
 1 1

δ(q1 ,0, A)  {(q 1 , AA)} δ(q1 , c, R)  {(q 2 , R)} 



 
δ(q1 ,0, V)  {(q 1 , AV)} δ(q2 ,0, A)  {(q 2 , λ)} 
δ(q1 ,1, A)  {(q 1 , VA)} δ(q2 ,1, V)  {(q 2 , λ)} 
 
δ(q1 ,1, V)  {(q 1 , VV)} δ(q2 , λ, R)  {(q 2 , λ)} 

Observaţia 3.6.1 Automatul din Exemplul 3.6.2 este determinist pentru că are o singură
posibilitate de mişcare la fiecare pas.

Un astfel de automat, indiferent dacă este determinist sau nedeterminist, se poate şi el


reprezenta printr-o diagramă de tranziţie[23], similară cu cea pentru automatul finit, cu
excepţia faptului ca una dintre etichetele unui arc între starea p şi starea q, este de forma:
(a, A→ BC) dacă (q, BC)  (p,a,A)
sau, folosind forma din [13]:
(a, A, BC) dacă (q, BC)  (p,a,A)
Să considerăm automatul push-down, definit printr-o diagramă de tranziţie, din figura
2.3.2, care recunoaşte cuvintele limbajului:
{anbn | n ≥ 0}.
0, A → AA
0, Z0 → AZ0
q p

1, A → λ

λ, Z0 → λ
r 1, A → λ
s
λ, Z0 → λ

Figura 3.2.2

- 124 -
Definiţia 3.6.2 O configuraţie instantanee este o pereche (q, γ) , unde q  Q şi γ   ,
*

unde cel mai din stânga simbol al lui γ este vîrful stivei push-down, iar γ reprezintă
conţinutul stivei.
Dacă a  Σ  {λ} , γ, β Γ , Z Γ şi (p,β)  δ(q,a, Z) , atunci scriem:
*

a : (q,Zγ)├ M (p,βγ) (Intrarea "a" trece automatul M din (q,Zγ) în (p,βγ).)


Dacă pentru fiecare a 1 ..., a n  Σ  {λ} , q 1 ,...,q n 1  Q şi şirurile γ1 ,..., γ n 1  Γ ,
*

avem:
ai : (qi,γi)├ M (qi+1,γi+1) i  1, n ,
atunci scriem:
*
a1… an : (q1,γ1)├ M (qi+1,γi+1)

Similar, se poate folosi descrierea instantanee, constituită din tripletul q, aw, Zα  şi
atunci scriem:
q, aw, Zα  ├ M (p,w,βα) dacă (p, β) δ(q,a, Z) .
Definiţia 3.6.3 Limbajul acceptat prin stări finale de către automatul M este
L(M)  {w w  Σ* , (q 0 , w, Z0 ) ├ *M p, λ, γ , γ  Γ* , p  F}.

Definiţia 3.6.4 Limbajul acceptat prin stivă vidă de către automatul M este
N(M)  {w w  Σ* , (q 0 , w, Z0 ) ├ *M p, λ, λ , p  Q} .

Exemplul 3 Să construim automatul push-down care acceptă limbajul


~ | w {0,1} }.
{ ww


M=({q1,q2},{0,1},{z0,A,B},δ,q1,Z0,  )

δ(q1 ,0, Z 0 )  {(q 1 , AZ 0 )} δ(q2 ,0, A)  {(q 2 , λ)} 


δ(q ,1, Z )  {(q , BZ )} 
δ(q2 ,1, B)  {(q 2 , λ)} 
 1 0 1 0

δ(q1 ,0, A)  {(q 1 , AA), (q 2 , λ)} 


 
δ(q1 ,0, B)  {(q 1 , AB)} δ(q1 , λ, Z 0 )  {(q 1 , λ)} 
δ(q1 ,1, A)  {(q 1 , BA)} δ(q2 , λ, Z 0 )  {(q 2 , λ)}
 
δ(q1 ,1, B)  {(q 1 , BB), (q 2 , λ)} 

Spre exemplu, şirul de intrare 001100 este acceptat de automatul


push-down deoarece există un calcul de configuraţii care se finalizează prin golirea
memoriei push-down după citirea benzii de intrare:

(q 1 ,001100, Z 0 ) ├ M (q 1 ,01100, AZ 0 ) ├ M (q 1 ,1100, AAZ 0 ) ├ M


├ M (q 1 ,100, BAAZ 0 ) ├ M (q 2 ,00, AAZ 0 ) ├ M (q 2 ,0, AZ 0 ) ├ M

- 125 -
(q 2 , λ, Z 0 ) ├ M
├ M (q 2 , λ, λ) ,

deci 001100 N(M) .


Problema care apare în acest exemplu este de a determina mijlocul
cuvântului de pe banda de intrare. Pentru determinarea mijlocului, singura condiţie
cunoscută este de a avea pe banda de intrare doi de 0 consecutivi sau doi de 1
consecutivi. Însă această condiţie nu determină în mod precis mijlocul cuvântului
de intrare, situaţia nefiind unică. Astfel, automatul push-down poate "bănui" că a
ajuns la mijlocul cuvântului de intrare ori de câte ori apar doi de 0 sau doi de 1
consecutivi. Deci, de câte ori automatul întâlneşte două simboluri identice pe
banda de intrare, are de ales între două variante: "bănuieşte" că aici este mijlocul şi
trece în starea q2, care începe să şteargă stiva, sau "bănuieşte" că nu este la mijloc
şi continuă să memoreze în stivă. Dacă a "bănuit" corect atunci va reuşi să-şi
golească stiva.
De aici apare nedeterminismul.

Observaţia 3.6.2

a) Un automat push-down este determinist dacă sunt îndeplinite următoarele condiţii:


- pentru fiecare q  Q, a  Σ şi Z  Γ corespunzătoare, δ(q,a, Z) nu conţine mai mult de
un element;
- pentru fiecare q  Q şi Z   , dacă δ(q,λ, Z)   atunci δ(q,a, Z)  , a  
(aceste condiţii evită situaţia în care ar fi posibile atât o λ-mutare cât şi o mutare nevidă,
generând astfel nedeterminism).

b) Pentru automatele push-down în general, modelul determinist şi cel nedeterminist nu sunt


echivalente.

M4.U4.4 Legătura dintre automatele push-down nedeterministe şi limbajele


independente de context

În cele ce urmează vom discuta numai despre automate push-down nedeterministe, pe


care le vom numi simplu automate push-down, iar atunci când ele nu sunt nedeterministe vom
preciza acest lucru.

Teorema 3.7.1
Un limbaj L este acceptat prin stivă vidă de către un automat push-down M1, (L=N(M1)
) dacă şi numai dacă el este acceptat prin stări finale de către un automat push-down
M2, ( L=N(M2) ).
▼Demonstraţie:

I. Fie L=T(M2), unde M2= (Q, Σ, Γ, δ, q 0 , Z 0 , F) .


Construim M1= (Q  {q λ , q 0 }, Σ, Γ  {X}, δ, q 0 , X, ) , unde δ este definit după cum
urmează:

- 126 -
1) (q 0 , Z 0 X)  δ(q 0 , λ, X)
2) δ(q, a, Z)  δ(q, a, Z) , q  Q, a  Σ  λ, Z  Γ
3) Pentru toţi q  F, Z  Γ  {X}  q λ , λ  δ(q, λ, Z)
4) Pentru toţi Z  Γ  {X}  q λ , λ  δ(q λ , λ, Z)
Regula 1) îl face pe M1 să intre în configuraţia iniţială a lui M2, dar simbolul iniţial al
stivei este X. Regula 2) simulează pe M2 până când intră într-o stare finală. Regulile 3) şi 4)
golesc stiva când M2 intră într-o stare finală.
Se observă că regulile 2) pot goli stiva lui M2 şi pentru un cuvânt care nu este în T(M2),
iar acesta este motivul pentru care M1 are propriul său simbol iniţial al stivei, X.
Să demonstrăm echivalenţa celor două automate:

a) Fie w  T(M 2 ) . Atunci:


q 0 , w, Z 0  ├ *M 2 (q,λ,γ) pentru q Q .
Fie acum w intrarea lui M1;
conform regulei 1), rezultă că q 0 , w, Z 0  ├ M1 (q0,w,Z0X)
*
-
conform regulei 2), rezultă că q 0 , w, Z 0 X  ├ M1 (q,λ,γX) (M1 simulează pe M2)
*
-
conform regulilor 3) şi 4), rezultă în final că q, λ, γX  ├ M1 (qλ,λ,λ)
*
-
Aşadar  w  N(M 1 ) .

b) Dacă w  N(M 1 ) , atunci se vede că stiva este complet ştearsă numai dacă sunt aplicate
regulile 3) şi 4), deoarece regulile lui M2 nu pot şterge pe X. Aşadar, este necesar ca M2 să
intre într-o stare finală cu aceeaşi intrare ca M1, ca să poată fi aplicate reguli de tip 3 şi 4.

II. Reciproc, fie M1= (Q, Σ, Γ, δ, q 0 , Z 0 , ) astfel încât L=N(M1).


Definim M2= (Q  {q 0 , q f }, Σ, Γ  {X}, δ, q 0 , X, {q f }) , unde δ este definit după cum
urmează:
1) (q 0 , Z 0 X)  δ(q 0 , λ, X)
2) q  Q, a  Σ  λ, Z  Γ  δ(q, a, Z)  δ(q , a, Z)
3) q  Q  (q f , λ)  δ(q, λ, X)
Regula 1) îl face pe M2 să intre în configuraţia iniţială a lui M1. Regula 2) simulează pe
M1 până îşi goleşte stiva la citirea intrării. Regula 3) îl determină pe M2 să intre într-o stare
finală dacă M1 şi-a golit stiva iar în stiva lui M2 este doar X.
Demonstraţia este similară cu I.

Teorema 3.7.2
Dacă L este un limbaj independent de context, atunci există un automat push-down M
astfel încât L=N(M).
▼Demonstraţie:
Fie o gramatică independentă de context G=(VN,VT,S,P) în formă normală Greibach,
astfel încât L=L(G). Presupunem că λ  L(G) (demonstraţia se poate adapta şi pentru cazul
contrar).

- 127 -
Construim M= ({q 1 }, VT , VN , δ, q 1 , S, ) , unde δ(q 1 , a, A) conţine (q 1 , γ) pentru
fiecare regulă A  aγ  P .
Pentru a arăta că L(G)=N(M), observăm că:

(xAβ  xaα β)  q1 , a, Aβ  ├ M q 1 , λ, αβ 


G

Prin inducţie asupra numărului de paşi dintr-o derivaţie rezultă că:


*
(xAβ  xyα pentru x, y  VT* , A  VN , α, β  VN* )  (q 1 , y, Aβ )├ *M (q 1 , λ, α)
G
Atunci :
*
S  x  (q 1 , x, S) ├ *M (q 1 , λ, λ) .
G
Se observă că M nu face λ-mutări.

Teorema 3.7.3
Dacă L este acceptat prin stivă vidă de către un automat push-down M (L=N(M)),
atunci L este un limbaj independent de context.

▼Demonstraţie:
Fie M un automat push-down, M= (Q, Σ, Γ, δ, q 0 , Z 0 , ) .
Definim gramatica G= (VN , Σ, S, P) , unde:
VN  {[q, A, p] q, p  Q, A  Γ}  {S}
iar P este definit după cum urmează:
S  [q 0 , Z 0 , q] pentru q  Q
-pentru fiecare tranziţie (q 1 , B1 B 2 ...Bm )  δ(q, a, A) se generează un set de reguli în
gramatică, astfel:
q 2 ,...,q m , p  Q  [q, A, p]  a[q 1 , B1 , q 2 ][q 2 , B 2 , q 3 ]...[q m , B m , p]  P
Dacă m=0, atunci q1=p, (p, λ)  δ(q,a, A) şi apare doar regula [q, A, p]  a  P .
Regulile au fost astfel definite încât să simuleze funcţionarea lui M cu intrarea x. În
particular, variabilele gramaticii G corespund simbolurilor memoriei push-down când M a
văzut din şirul de intrare exact atât cât a derivat gramatica G.
Se demonstrează că L(G)=N(M) prin inducţie relativ la numărul de paşi dintr-o
derivaţie a lui G, respectiv numărul de mişcări ale lui M, adică:
 [q, A, p]
*
x   (q, x, A) ├ *M (p, λ, λ) 
 (3.7.3)
 G

Luând apoi q=q0 şi A=Z0, rezultă următoarele:
[q , Z , p]*
x   (q 0 , x, Z0 ) ├ *M (p, λ, λ) 
 0 0
 G

Dar prima regulă din G este S  [q 0 , Z 0 , p] pentru p  Q , de unde rezultă:

 * 
S x   x  N(M)  .
 G 
Rămâne doar să demonstrăm echivalenţa (3.7.3):

- 128 -
I. Să arătăm prin inducţie în raport cu i că
(q, x, A) ├ (p, λ, λ)    [q, A, p] x  ,
i
i

 
M
G

a. Dacă i=1,
definitia δ
(q, x, A) ├ (p, λ, λ)   (p, λ)  δ(q,x, A) 

|x|  1 (deoarece x  VT sau x  λ )

[q, A, p]  x  P   [q, A, p] x  .


definitia G *

 G

b. Presupunem afirmaţia I adevărată pentru i şi o demonstrăm pentru i+1:
Fie
(q, x, A) ├ iM1 (p, λ, λ)  şi
există a VT , y VT astfel încât x=ay, y=y1…yt şi
*

(q, ay, A) ├ (q 1 , y, B1 ...Bt ) ├ i (p, λ, λ) .

Dar (q k , y i , B i ) ├ (q k1 , λ, λ) în cel mult i paşi şi qi+1=p, deci:


*

(q, ay, A) ├ (q 1 , y1 ...y t , B1 ...Bt ) ├ * (q 2 , y 2 ...y t , B 2 ...Bt ) ├ * …├ * (p, λ, λ) .

Atunci, folosind regulile gramaticii G şi ipoteza inducţiei, vom obţine:

[q, a, p]  a[q 1 , B1 , q 2 ][q 2 , B 2 , q 3 ]...[q k , B k , p]


*
şi [q k , Bk , q k 1 ] y k k  1, t

*
rezultă că [q, A, p] ay1 y 2 ...yt .
G


II. Reciproc, se arată că  [q, A, p]
*
x   (q, x, A) ├ *M (p, λ, λ)  , prin inducţie relativ la
 G

lungimea unei derivaţii (demonstraţia este similară celei de mai sus).

Astfel, demonstraţia este încheiată.


- 129 -
Exemplul 1 Fie automatul push-down:
M= ({q 0 , q 1 ),{0,1}, {X, Z 0 }, δ, q 0 , Z 0 , )
δ(q0 ,0, Z 0 )  {(q 0 , XZ 0 )} δ(q1 ,1, X)  {(q 1 , λ)} 

unde δ(q ,0, X)  {(q , XX)} 
0 0
δ(q1 , λ, X)  {(q 1 , λ)} 
δ(q ,1, X)  {(q , λ)} δ(q1 , λ, Z 0 )  {(q 1 , λ)}
 0 1 
Să se construiască gramatica echivalentă acestui automat.
▼ Conform demonstraţiei teoremei 3.7.3, construim G=(VN,  ,S,P) care
generează chiar limbajul N(M) astfel:
VN  {S,[q 0 , X, q 0 ], [q 0 , X, q1 ], [q 1 , X, q 0 ], [q 1 , X, q1 ],
[q 0 , Z 0 , q 0 ], [q 0 , Z 0 , q1 ], [q 1 , Z 0 , q 0 ], [q 1 , Z 0 , q1 ]}
S  [q 0 , Z 0 , q 0 ]
S  [q , Z , q ]
 0 0 1

[q 0 , Z 0 , q 0 ]  0[q 0 , X, q 0 ][q 0 , Z 0 , q 0 ]



[q 0 , X 0 , q 0 ]  0[q 0 , X, q 1 ][q 1 , Z 0 , q 0 ]
[q 0 , X, q 0 ]  0[q 0 , X, q 0 ][q 0 , X, q 0 ]

[q 0 , X, q 0 ]  0[q 0 , X, q 1 ][q 1 , X, q 0 ]

[q , Z , q ]  0[q 0 , X, q 0 ][q 0 , Z 0 , q 1 ]
P: 0 0 1
[q 0 , Z 0 , q 1 ]  0[q 0 , X, q 1 ][q 1 , Z 0 , q 1 ]
[q 0 , X, q 1 ]  0[q 0 , X, q 0 ][q 0 , X, q 1 ]

[q 0 , X, q 1 ]  0[q 0 , X, q 1 ][q 1 , X, q 1 ]
[q , X, q ]  1
 0 1

[q 1 , X, q 1 ]  1
[q , X, q ]  λ
 1 1


 1 0 1]  λ
[q , Z , q
În final, putem urmări şi elimina regulile inutile şi, de asemenea,
simbolurile neterminale neutilizabile, obţinând următoarea variantă redusă:
VN  {S, [q 0 , X, q1 ], [q 1 , X, q1 ], [q 0 , Z 0 , q 1 ],[q 1 , Z 0 , q1 ]}
S  [q 0 , Z 0 , q1 ]
[q , Z , q ]  0[q , X, q ][q , Z , q ]
 0 0 1 0 1 1 0 1

[q 0 , X, q1 ]  0[q 0 , X, q1 ][q 1 , X, q1 ]



P : [q 0 , X, q1 ]  1
[q , X, q ]  1
 1 1

[q 1 , X, q1 ]  λ
[q , Z , q ]  λ
 1 0 1

Observaţia 3.7.1 Din teoremele 3.7.1, 3.7.2 şi 3.7.3 rezultă că următoarele afirmaţii sunt
echivalente:
i) L este un limbaj independent de context;
ii) L=N(M1) pentru un automat push-down M1 nedeterminist;

- 130 -
iii) L=T(M2) pentru un automat push-down M2 nedeterminist.

1. Fie automatul push-down:


P = ({s0, s1, s2}, {a, b}, {z, a, b}, , s0, z, {s2})
cu funcţia  defintă astfel:
 (s0, a, z) = {(s0, az)}
 (s0, b, z) = {(s0, bz)}
 (s0, a, a) = {(s0, aa), (s1, )}
 (s0, a, b) = {(s0, ab)}
 (s0, b, a) = {(s0, ba)}
 (s0, b, b) = {(s0, bb), (s1, )}
 (s1, a, a) = {(s1, )}
 (s1, b, b) = {(s1, )}
 (s1, , z) = {(s2, )}
a. Să se arate că L(P) = {u ~ u | u{a, b}+}, unde ~
u reprezintă
oglinditul lui u.
b. Ce fel de automat push-down este P?
2. Să se construiască automate push-down pentru fiecare dintre mulţimile
următoare:
a. {w | w  {0,1}* N0(w) = N1(w)}, unde N0(w) reprezintă numărul
de apariţii ale simbolului 0 în w;
{ai bj | i ≤ j ≤ 2i}
b.Mulţimea cuvintelor generate de gramatica:
G = ({S,A}, {a,b}, S, { S → aAA, A → bBS, A → aS, A → a})
3. Să considerăm gramatica care generează expresiile artimetice cu
operatorii + şi *, parantezele (, ), şi operandul id, (unde operatorul este
cuprins între doi operanzi), dată de regulile gramaticale:
{ E → E + E, E → E * E, E → (E), E → id }
Gramatica cu regulile:
{ P→ + PP, P → * PP, P → id }
generează aceleaşi expresii aritmetice dar în forma poloneză prefixată,
scriere care permite eliminarea parantezelor. Să considerăm următoarea
expresie aritmetică:
id * (id + id) + id
În forma poloneză prefixată expresia devine:
+ * id + id id id
Să se construiască un program care să traducă o expresie de forma de mai
sus, e1, în forma poloneză prefixată, e2, utlizând următoarea tehnică:
 Se simuleză funcţionarea unui a.p.d. care analizează expresia
aritmetică e1 şi se construieşte un arbore de derivaţie pentru e1;
 Pentru fiecare vârf al arborelui de derivaţie, determină
acţiunea care defineşte traducerea în forma e2.

- 131 -
Să ne reamintim...
Un automat push-down nedeterminist, M, este asemănător cu un automat
finit dar conţine în plus şi o memorie de tip stivă.
Limbajul acceptat prin stări finale de către automatul M este
L(M)  {w w  Σ* , (q 0 , w, Z0 ) ├ *M p, λ, γ , γ  Γ* , p  F}.
Limbajul acceptat prin stivă vidă de către automatul M este
N(M)  {w w  Σ* , (q 0 , w, Z0 ) ├ *M p, λ, λ , p  Q} .

Test de evaluare a cunoştinţelor


I. Întrebări.
1. Să se definească automatele push-down deterministe şi
nedeterministe.
II. Exerciţii propuse.
I. Să se construiască o gramatică IDC şi un automat push-down care
să recunoască limbajul L = { w {a, b}* | w conţine un număr egal
de a şi b}
2. Fie automatul push-down:
P = ({s0, s1, s2, s3}, {a, b, c}, {z, a}, , s0, z, {s3})
cu  dat prin:
 (s0, a, z) = {(s0, aaz)}
 (s1, a, a) = {(s1, aaa)}
 (s1, b, a) = {(s2, )}
 (s1, c, a) = {(s2, )}
 (s2, b, a) = {(s2, )}
 (s2, c, a) = {(s2, )}
 (s2, , z) = {(s3, )}
a. Să se arate că L(P) = {anw| w{b, c}+, |w| = 2n, n ≥ 1}.
b. Ce fel de automat push-down este P?

M4.U4.5 Rezumat
Unitatea de învăţare prezintă un alt tip de automat , automatul push-down cu
varianta deterministă şi cu cea nedeterministă şi legatura dintre automatele
push-down nedeterministe şi gramaticile de tip 2.
Spre deosebire de automatele finite, la automatele push-down cele două
variante nu sunt echivalente, automatele push-down deterministe
recunoscând o subclasă proprie a limbajelor Independente de context numită
clasa limbajelor deterministe. Aceasta clasă a limbajelor deterministe este
utilizată în construcţia compilatoarelr moderne şi anume pentru construcţia
analizoarelor sintactice.

- 132 -
Unitatea de învăţare M4.U4. Proprietăţi de închidere pentru
familia limbajelor de tip 2
Cuprins
M4.U5.1. Introducere....................................................................................... 133
M4.U5.2. Obiectivele unităţii de învăţare ......................................................... 133
M4.U5.3. Proprietăţi de închidere pentru limbaje I.D.C. .................................. 133
M4.U5.4. Rezumat ........................................................................................... 143

M4.U5.1. Introducere
Vom considera întâi anumite operaţii cu limbaje care păstrează limbajele
independente de context. Apoi vom prezenta operaţii la care familia limbajelor
independente de context nu este închisă.
Aceste operaţii se pot folosi atât pentru a demonstra că un limbaj este I.D.C. cât
şi pentru a demonstra că un limbaj nu este I.D.C.
.

M4.U5.2. Obiectivele unităţii de învăţare


La sfârşitul acestei unităţi de învăţare studenţii vor fi capabili să:
 înţeleagă şi să explice proprietăţile de închidere ale familiei limbajelor
I.D.C.;
 construiască propria gramatică pentru un anumit limbaj, care poate fi
descompus în mai multe limbaje, folosind proprietăţile de închidere;
 construiască propriul automat push-down pentru un anumit limbaj, care
poate fi descompus în mai multe limbaje, folosind proprietăţile de
închidere;
 programeze construcţiile anterioare într-un limbaj de programare oarecare.

Durata medie de parcurgere a unităţii de învăţare este de 3-4 ore.

M4.U5.3 Proprietăţi de închidere pentru limbaje I.D.C.

Teorema 3.8.1
Limbajele independente de context sunt închise la reuniune, concatenare şi produs
Kleene.
▼Demonstraţie:
- 133 -
Fie L1 şi L2 generate de G 1  (V1 , T1 , S1 , P1 ) şi G 2  (V2 , T2 , S 2 , P2 ) . Presupunem
că V1  V2=  . Atunci putem realiza următoarele construcţii de gramatici I.D.C:

a) Limbajul L1  L 2 este generat de G 3  (V1  V2  {S3 }, T1  T2 , S3 , P3 ) , unde


P3  P1  P2  {S3  S1 , S3  S2 } .
Să demonstrăm că L1  L 2  L(G 3 ) :
 Fie w  L1  L 2 ; înseamnă că w aparţine cel puţin unuia din cele două limbaje:
i {1,2} : w  L i , altfel spus i {1,2} : w  L(G i ) . Există deci o derivare a lui w
în una din cele două gramatici date, Gi, pornind de la simbolul iniţial al respectivei

gramatici: Si  w . Deoarece toate regulile din gramatica Gi sunt şi reguli ale gramaticii
Gi

construite G3, înseamnă că aceeaşi derivare are loc şi în gramatica G3. În plus, putem
obţine simbolul Si printr-o derivare într-un pas pornind de la S3, şi anume folosind una din
cele două reguli nou adăugate la P3, obţinând următoarea derivaţie în G3:


i {1,2} : S3  Si  w , deci w  L(G 3 ) .
G3 G3

Rezultă că L1  L 2  L(G 3 ) .
 Fie w  L(G 3 ) ; înseamnă că w poate fi generat cu regulile P3, pornind de la S3:

S3  w .
G3

 Deoarece singurele S3-reguli sunt cele două redenumiri {S3  S1 , S3  S 2 } , rezultă că


primul pas al derivaţiei amintite nu poate fi decât rezultatul aplicării uneia din aceste două
reguli:
 
i {1,2} : S3  Si  w , deci Si  w .
G3 G3 G3

Putem observa faptul că, în afară de primul pas al acestei derivări, toate regulile
folosite în obţinerea lui w pornind de la S3 sunt chiar reguli din Pi, i {1,2} , în funcţie de
simbolul Si obţinut în primul pas. Deoarece V1  V2=  , rezultă că

Si  w ,
Gi

deci w  L(G i ) =Li.


S-a arătat astfel că w  L 1 sau w  L 2 , adică w  L1  L 2 .
Rezultă că L1  L 2  L(G 3 ) .
Ţinând cont de cele două implicaţii rezultă că limbajul L1  L 2 este generat de
gramatica G3.
Următoarele construcţii se demonstrează în mod asemănător, constituind un bun
exerciţiu:

b) Limbajul L1 L 2 este generat de G 4  (V1  V2  {S 4 }, T1  T2 , S 4 , P4 ) , unde


P4  P1  P2  {S 4  S1S 2 } .

- 134 -
c) Limbajul L*1 este generat de G 5  (V1  {S5 }, T1 , S5 , P5 ) , unde
P5  P1  {S 5  S5S1 , S5  λ} .

Teorema 3.8.2
Familia limbajelor independente de context este închisă la substituţie.

▼Demonstraţie:
Fie L un limbaj I.D.C., L  Σ şi pentru fiecare a  Σ fie La un limbaj I.D.C.
*

Fie o gramatică G care generează limbajul iniţial, L=L(G). De asemenea, pentru


fiecare simbol a  Σ considerăm câte o gramatică astfel încât La=L(Ga).
Presupunem că variabilele lui G şi ale lui Ga sunt distincte, oricare ar fi a  Σ .
Construim gramatica G  I.D.C. în felul următor:
 Variabilele lui G  sunt variabilele lui G şi cele ale lui Ga, pentru a  Σ ;
 Terminalele lui G  sunt terminalele lui Ga ;
 Simbolul iniţial al lui G  este simbolul iniţial al lui G;
 Regulile lui G  sunt cele ale lui Ga, pentru a  Σ , şi regulile lui G în care fiecare a  Σ
se înlocuieşte cu Sa (simbolul iniţial al Ga).

Exemplul 1 Fie L limbajul cuvintelor cu număr egal de a şi b. Să urmărim


aplicarea celor demonstrate în teorema anterioară.


Avem gramatica generativă G  ({S},{a, b},S, P) , unde mulţimea
regulilor este P  {S  aSbS,S  bSaS,S  λ} . Se poate verifica faptul că
L=L(G). Să considerăm limbajele de substituţie:
 La  {0 n1n | n  1} , generat de regulile
P(Ga)={Sa  0S a 1, Sa  01} ;
 ~ | w {0,2}* }, limbaj generat de mulţimea de reguli
L b  {ww

P(Gb)= {S b  0S b 0, S b  2S b 2, S b  λ} .

Atunci, conform construcţiei efectuate în demonstraţia Teoremei 3.8.2,


gramatica rezultată este G  = ({S, Sa , S b },{0,1,2}, S, P) , cu mulţimea de
reguli:

- 135 -
S  Sa SSb S
S  S SS S
 b a

S  λ

Sa  0S a 1
P : 
Sa  01
S b  0S b 0

S b  2S b 2
S  λ
 b
Să generăm un cuvânt la întâmplare cu aceste reguli:
S  Sa SSb S  01SS b S  01S b S  012S b 2S  0120S b 02S 
 012002S  012002

Observaţia 3.8.1 Teorema 3.8.1 se poate obţine folosind Teorema 3.8.2 şi ţinând cont că
a, b  Σ avem:
 {a, b} este I.D.C.
 {a  b} este I.D.C.
 a  este I.D.C.
Dacă acum f(a)=La şi f(b)=Lb, atunci, datorită proprietăţii de închidere la substituţie,
rezultă că:
 L a  L b este I.D.C.
 L a  L b este I.D.C.
 La este I.D.C.
Pentru că homomorfismul este un caz special de substituţie, în care card(La)=1,
obţinem şi următorul corolar.

Corolar 3.8.1 Clasa limbajelor I.D.C. este închisă la homomorfism.

Teorema 3.8.3
Clasa limbajelor independente de context este închisă la homomorfismul invers.

▼Demonstraţie:
Fie h : Σ  Δ un homomorfism şi L un limbaj I.D.C.; atunci există un automat push-
down M  (Q, Δ, Γ, δ, q 0 , Z 0 , F) astfel încât L=T(M).
Construim un automat push-down M  care să accepte h (L) , astfel:
1

- 136 -
Intrarea lui M'

Controlul
lui M' h
Buffer Stiva lui
Controlul
lui M M şi M'

Figura 3.8.1
Cu intrarea a pentru automatul M', acesta generează h(a) şi simulează execuţia lui M
cu această intrare h(a). Dacă M' ar fi un automat cu număr finit de stări, atunci M' şi-ar
schimba numai stările. În cazul automatului push-down, M' poate şi să pună o mulţime de
simboluri pe stivă şi, în plus, fiind nedeterminist are o mulţime de posibilităţi de mişcare.
De aceea, dotăm M' cu un buffer (o zonă tampon) în care el poate să memoreze h(a).
Atunci M' poate să simuleze orice λ-mutare a lui M, dacă doreşte, şi să consume simbolurile
lui h(a) câte unul la fiecare moment, la fel cum face M. Pentru ca buffer-ul să fie o parte a
controlului finit al lui M', el nu poate fi oricât de lung. Se poate realiza asta permiţându-i lui
M' să citească un simbol de intrare numai când buffer-ul este gol. Astfel, în buffer este păstrat
în fiecare moment un sufix al lui h(a), pentru un anume a preluat de pe banda de intrare a lui
M'.
Automatul push-down M' acceptă cuvântul de intrare w dacă buffer-ul este vid şi M
este într-o stare finală. În acest fel, M a acceptat h(a) pentru fiecare simbol de intrare a, deci a
acceptat h(w).
Astfel, L(M')= {w h(w)  L(M)} , adică:
1
L(M')= h (L(M))
Construcţia formală este dată în continuare.

M   (Q, Σ, Γ, δ,[q 0 , λ], Z 0 , F  λ) ,


unde:
Q‟ = {[q,x] | q  Q, iar x este un suffix al lui h(a),a }

Funcţia de tranziţie δ :

1) ([p, x], γ)  δ([q, x], λ, Y) pentru fiecare (p, γ)  δ(q,λ, Y) .


Astfel, M' simulează λ-mutările lui M, indiferent de conţinutul din buffer.
2) ([p, x], γ)  δ([q, ax], λ, Y) dacă (p, γ)  δ(q,a, Y) .
Astfel, M' simulează mutările lui M pe intrarea a din Σ, eliberând a din capul buffer-ului.
3) ([q, h(a)], Y)  δ([q, λ], a, Y) pentru toţi a  Σ şi Y Γ .
În acest mod, M' încarcă în buffer h(a), citind a de pe intrarea M', în timp ce starea şi stiva
lui M rămân neschimbate.

- 137 -
1
Să demonstrăm că L(M')= h (L(M)) .

a) Mai întâi, să observăm că printr-o aplicare a regulii (3) urmată de o aplicare a


regulilor (1) şi (2),
dacă (q, h(a), α) ├ M (p, λ, β) ,

atunci ([q, λ], a, α) ├ M ([q, h(a)], λ, α) ├ M ([p, λ], λ, β) .

Astfel, dacă M acceptă h(a), adică dacă (q 0 , h(w), Z 0 ) ├ M (p, λ, β) pentru p  F şi


β Γ , atunci
([q 0 , λ], w, Z 0 ) ├ M ([p, λ], λ, β) ,
astfel încât M' acceptă w.

Deci L(M')  h (L(M)) .


1

b) Reciproc, să presupunem că M' acceptă intrarea w=a1a2…an. Atunci, pentru că regula (3)
poate fi aplicată numai cu buffer-ul vid (precum arată a doua componentă a stării lui M),
şirul de mişcări ale lui M' ce conduc la acceptare poate fi scris ca:
c)
([q 0 , λ], a 1a 2 ...a n , Z 0 ) ├ M
  
├ M ([p 1 , λ], a 1a 2 ...a n , α1 ) ├ M ([p 1 , h(a 1 )], a 2 ...a n , α1 ) ├ M
  
├ M ([p 2 , λ], a 2 ...a n , α 2 ) ├ M ([p 2 , h(a 2 )], a 3 ...a n , α 2 ) ├ M
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .
  
├ M ([p n , λ], a n , α n ) ├ M ([p n , h(a n )], λ, α n ) ├ M
├ M ([p n 1 , λ], λ, α n 1 ) , unde pn+1  F.

Tranziţia din starea [p i , λ] în [p i , h(a i )] se face prin regula (3) iar celelalte tranziţii
prin regulile (1) şi (2).
Astfel,

(p1 , α1 )  δ(q 0 , λ, Z 0 )
şi i : (p i 1 , α i 1 )  δ(p i , h(a i ), α i )

deci obţinem o recunoaştere şi din partea lui M:

(q 0 , h(a 1a 2 ...a n ), Z 0 ) ├ M ([p 1 , λ], a 1a 2 ...a n , α1 ) ├ M


   
├ M ([p 2 , λ], a 2 ...a n , α 2 ) ├ M …├ M ([p n , λ], a n , α n ) ├ M
├ M ([p n 1 , λ], λ, α n 1 ) , unde pn+1  F.

Există câteva proprietăţi ale mulţimilor regulate care nu se păstrează la mulţimile


I.D.C., şi anume proprietăţile de închidere la intersecţie şi complementare.

Teorema 3.8.4

- 138 -
Clasa limbajelor I.D.C. nu este închisă relativ la intersecţie.

▼Demonstraţie:
Să presupunem, prin absurd, că intersecţia oricăror limbaje I.D.C. este tot un limbaj
I.D.C. Să construim un contraexemplu:
Am demonstrat că limbajul L  {a b c i  1} nu este independent de context (v.
i i i

Observaţia 3.4.1). Considerăm acum două limbaje care sunt I.D.C.:

L1  {a i b i c j i  1, j  1}
L 2  {a i b jc j i  1, j  1}

Pentru aceste limbaje este uşor să construim câte un automat push-down sau sau câte o
gramatică I.D.C.; spre exemplu, o gramatică pentru generarea limbajului L2 ar putea avea setul
de reguli:
{S  AB, A  aA, A  a, B  bBc, B  bc}.
Dar L  L1  L 2 şi L nu este I.D.C., ceea ce contrazice presupunerea făcută.

Corolar 3.8.2
Clasa limbajelor I.D.C. nu este închisă relativ la complementare.

▼Demonstraţie:
Ştim că clasa limbajelor I.D.C. este închisă la reuniune. Presupunând că ar fi închisă şi
la operaţia de complementare, şi ţinând cont de relaţiile lui de Morgan privind
complementarea reuniunii ( C(A  B)=C(A)  C(B) ), am obţine concluzia că are loc
închiderea şi la intersecţie, ceea ce contrazice Teorema 3.8.4.

Teorema 3.8.5
Dacă L este un limbaj I.D.C. iar R este o mulţime regulată, atunci L  R este un
limbaj I.D.C.

▼Demonstraţie:
Fie L=T(M), M fiind un automat push-down:
M  (Q M , Σ, Γ, δ M , q 0 , Z 0 , FM )
Fie şi R=T(A), unde A este un automat finit nedeterminist:
A  (Q A , Σ, δ A , p 0 , FA )

- 139 -
Construim un automat push-down M' pentru limbajul L  R , într-un mod care să
simuleze funcţionarea în paralel a lui M şi A:

Intrarea lui A, M şi M'

Controlul
Controlul Controlul Stiva lui
lui M'
lui A lui M M şi M'


Figura 3.8.2

M' simulează mişcările lui M pe intrarea λ fără a schimba starea lui A. Când M face o mişcare
pe simbolul de intrare a, M' simulează această mişcare şi de asemenea simulează schimbarea
stării lui A pentru simbolul a. Automatul M' acceptă o intrare dacă şi numai dacă atât A cât şi
M o acceptă.
Construcţia formală a lui M' este următoarea:
M   (Q A  Q M , Σ, Γ, δ, [p 0 , q 0 ], Z 0 , FA  FM ) ,
unde δ este definit astfel:
δ A (p, a)  p
([p, q], γ)  δ([p, q], a, X) atunci când 
(q , γ)  δ M (q, a, X)
Desigur, dacă a  λ atunci p  p .

Să demonstrăm acum faptul că L  R =T(M').

a) Se demonstrează uşor prin inducţie relativ la i că:


dacă ([p 0 , q 0 ], w, Z 0 ) ├ M ([p, q], λ, γ) , atunci
i

(q 0 , w, Z 0 ) ├ iM (q, λ, γ)
i
şi (p 0 , w) ├ A (p, λ)
 pentru i=0 rezultatul e trivial, deoarece luăm p=p0, q=q0, γ=Z0 şi w=λ.
 presupunem afirmaţia adevărată pentru i-1 şi fie
([p 0 , q 0 ], xa, Z 0 ) ├ iM-1 ([p', q'], a, β) ├ M ([p, q], λ, γ) ,
unde w=xa şi a  Σ sau a=λ.
Conform ipotezei de inducţie, rezultă că:
δ A (p 0 , x)  p
(q 0 , x, Z 0 ) ├ M (q , λ, β)
În plus, conform definiţiei,
δ A (p, a)  p
şi (q , a, β) ├ M (q, λ, γ)

- 140 -
Utilizând toate acestea, obţinem:
δ A (p 0 , xa)  p
(q 0 , xa, Z 0 ) ├ M (q, λ, γ)
xa  T(A)
sau, altfel scris,  , ceea ce trebuia demonstrat.
 xa  T(M)

b) Reciproc, se procedează într-o manieră similară, pentru a arăta că:

(q 0 , w, Z 0 ) ├ iM (q, λ, γ)
dacă i
şi (p 0 , w) ├ A (p, λ)

atunci ([p 0 , q 0 ], w, Z 0 ) ├ M ([p, q], λ, γ) ,

Teorema 3.8.6
Clasa limbajelor independente de context este închisă în raport cu operaţia de
oglindire.

▼Demonstraţie:
Fie G o gramatică independentă de context de forma:
G = (VN, VT, S, P)
şi L = L(G).
Construim o nouă gramatică G‟ = (VN, VT, S, P”), în care fiecare regulă din mulţimea
regulilor, P, este înlocuită cu o regulă similară în care membrul drept este oglinditul
membrului drept al regulei corespunzătoare din P:
P’ = {A → ~ u | A → u  P}
Se observă că regulile din P’ sunt tot independente de context. Este uşor de demonstrat
că:
~
L(G’) = L

Exemplul 2 Fie limbajul L  {ww w {a, b} } . Să se exemplifice


proprietăţile de închidere.


Limbajul L este format din cuvintele ale căror jumătate stângă este
identică cu jumătatea dreaptă. Presupunem că acest limbaj ar fi I.D.C.
Din Teorema 3.8.5 rezultă că limbajul L1  L  a b a b ar fi şi el
   

I.D.C.; dar L1  {a b a b i  1, j  1} nu este de acest tip, fapt ce se poate


i j i j

vedea cu ajutorul teoremei de pompare:


Fie p,q N . Alegem z = a b a b = uvwxy, unde |v| + |x| > 0, |vwx| 
q q q q

q. Posibilităţile de alegere ale subcuvântului vwx sunt multiple (aibj cu i+j  q , bi

- 141 -
cu i  q , bj-iai cu i  j  q ), ele însă nu permit crearea de cuvinte uv wx y care
i i

să fie tot din L1 (proprietatea egalităţii jumătăţilor nu se poate păstra prin


pompare).
Din contradicţia obţinută rezultă că limbajul L considerat iniţial nu este
I.D.C.
Să mai observăm şi faptul că se poate demonstra că L1 nu este I.D.C. şi
fără a folosi teorema de pompare, reducând acest limbaj la limbajul
L 2  {a i b jc i d j i  1, j  1} .
1
Fie h(a)=h(c)=a şi h(b)=h(d)=b. Atunci h (L1 ) este format din toate

cuvintele de forma x1x2x3x4, unde x1 şi x3 au aceeaşi lungime în {a, c} , iar x2 şi

x4 au aceeaşi lungime în {b, d} .
Atunci h (L1 )  a b c d  L 2 .
1 * * * *

Dacă L1 ar fi I.D.C., atunci (din Teoremele 3.8.3 şi 3.8.5) rezultă că L2 ar


fi şi el I.D.C., ceea ce ştim că este fals.
Astfel s-a arătat, din nou, faptul că L1 nu este I.D.C.

Să ne reamintim...
Familia limbajelor independente de context este închisă la:
 reuniune,
 concatenare,
 produs Kleene,
 oglindire,
 substituţie,
 homomorfism,
 homomorfismul invers,
 intersecţia cu mulţimi regulate..
Familia limbajelor independente de context nu este închisă la:
 intersecţie,
 complementara relative la un alphabet.

Teste de evaluare/autoevaluare
I. Intrebări.
1. Să se enunţe şi să se demonstreze 4 proprietăţi de închidere
pentru limbajele de tip 2.
II. Exerciţii.
1.Se consideră limbajul L = {an bn | n ≥ 1}  {an b2n| n ≥ 1}. Să se
arate că L este un limbaj independent de context (se construieşte un
automat push-down nedeterminist sau o gramatică IDC folosind
proprietatea de închidere a limbajelor IDC la reuniune.)

- 142 -
M4.U5.4. Rezumat. Această unitate de învăţare prezintă proprietăţi de închidere ale
familiei limbajelor de tip2, adică independente de context. Datorită faptului că
limbajele independente de context pot fi generate de gramatici de tip 2 sau recunoscute
de automatele push-down nedeterministe, în demonstrarea acestor proprietăţi se va
folosi una sau alte dintre reprezentăti.
Spre deosebire de familia limbajelor de tip 3, limbajele regulate, familie limbajeor
independente de context nu este închisă la o serie de operaţii cum ar fi intersecţia şi
complementara faţa de un alfabet.
Proprităţile de închidere pot fi folosite în demonstrarea anumitor rezultate. În plus
construcţiile folosite în demonstrarea acestor proprietăţi se pot folosi în construirea de
gramatici, respective automate push-down pentru anumite limbaje particulare.

- 143 -
Bibliografie.

[1]. AHO, A.V., ULLMAN, J. D. “The theory of parsing, translation and compiling” Prentice
Hall- London, 1972.
[2]. AHO, A.V., SETHI, R., ULLMAN, J.D. “Compiling, Principles, Techniques and Tools”,
Addison-Wesley, Reading, Mass., 1988.
[3]. GRIES, D. “Compiler construction for digital computers”, New-York, John Weley, 1971.
[4]. HOPCROFT, J.E., ULLMAN, J. D. “Formal Languages and their relation to Automata” ,
Addison-Wesley, Reading, Mass., 19769.
[5]. HOPCROFT, J.E., ULLMAN, J. D. “Introduction to automata theory, Languages and
Computation” , Addison-Wesley, 1979.
[6]. IACOB P., MARINESCU D. "An Optimal Representation of the Nondeterministic Finite
Automaton by a Set - Union Knapsack Problem" Proceedings of the International
Conference "Symetry and Antisymetry in Mathematics, Formal Languages and Computer
Science" Brasov 1996 pp 47-48.
[7]. KOZEN, D.C.,“ Automata and Computability”, Springer, 1997.
[8]. LIVOVSCHI, L. GEORGESCU, H. “Bazele informaticii”, Ed. Didactică şi
Pedagogică, Bucureşti, 1985.
[9]. MARCUS, S., “ Lingvistica Matematică”, Ed. Didactică şi Pedagogică, Bucureşti, 1973.
[10]. JALOBEANU C., MARINESCU D.,. - “Bazele teoriei calculului-Limbaje formale şi
automate”, Ed. Albastră, Cluj, 2007.
[11]. MARINESCU D., - “A bidimensional Turing machine for the cutting stock problem with
quillotine restrictions” - Proceeding of the scientific symposion with the contribution of
teachers and researchers from the Republic of Moldova , Brasov, 1991, pp 73-83.
[12]. MARINESCU D., - “Limbaje Formale şi Teoria Automatelor”, Ed. Univ. Transilvania
Braşov, 2003.
[13]. MARINESCU D., " The Use of Didactic Software JFLAP for Formal Languages "Report
TR--HH-10-97 Restructuring of the (re)training of school teachers In Computer science,
Computer Libris Agora, ISBN 973-97515-1-2, Cluj-1997, pp.240-251.
[14]. MARINESCU D., IACOB P., VLADAREAN C.- “ An Algorithm for Optimal
Representation of a Nondeterministic Finite Automaton By a set-union Knapsack
Problem”, Proceedings of the 2-th International Conference "Symetry and Antisymetry in
Mathematics, Formal Languages and Computer Science"- Satelite Conference of 3 ECM-
Brasov 2000, pp 199-206.
[15]. MOLDOVAN, G., CIOBAN, V., LUPEA, M.A,M. “ Limbaje Formale şi Teoria Automatelor-
Culegere de probleme”, Ed. Mesagerul, Cluj-Napoca, 1997.

- 145 -
[16]. MARUŞCIAC, I. “Teoria Algoritmilor”, Ed. Didactică şi Pedagogică, Bucureşti, 1966.
[17]. ORMAN, G. “Limbaje Formale”, Ed. Tehnică, Bucureşti, 1982.
[18]. ORMAN, G. “Limbaje Formale şi acceptori”, Ed. Albastră, Cluj-Napoca, 2002.
[19]. PĂUN, GH.,. “ Gramatici matriceale”, Ed. Ştiinţufică şi Enciclopedică, Bucureşti, 1981.
[20]. PĂUN, GH.,. “ Mecanisme generative ale proceselor economice”, Ed. Tehnică, Bucureşti,
1982.
[21]. PĂUN, GH.,. “ Probleme actuale în Teoria Limbajelor Formale”, Ed. Ştiinţufică şi
Enciclopedică, Bucureşti, 1984.
[21]. SALOMAA, A. “Formal Languages”, Academic Press, New-York, 1973.
[22]. SIMOVICI, D. “Limbaje Formale şi Tehnici de compilare”, Ed. Didactică şi Pedagogică,
Bucureşti, 1978.
[23]. SIPSER, M. ” Introduction to the theory of computation”, PWS publishing Company,
Boston, 1996.

- 146 -

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