Documente Academic
Documente Profesional
Documente Cultură
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.
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
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.
- 10 -
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.
În cele ce urmează vom folosi ca simboluri cifrele, literele latine şi greceşti mari şi mici şi
simboluri speciale cum ar fi $, #.
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.
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
- 11 -
programelor.
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 uvvu) 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:
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.
- 12 -
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ă
L4L:
Din (i) =a0b0L .
Dacă akbkL prin (ii) aakbkbL adică ak+1bk+1L, deci prin inducţie
rezultă că L4L.
- 13 -
Exemplul 5 Fie L’ definit după cum urmează :
(i) L’
(ii) Dacă xL’, atunci axbL’ şi bxaL’
(iii) Dacă x1L, x2L’ atunci x1x2L’
(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, baL”. 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.
▲
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ă cuvintele u,
SR
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.
- 14 -
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 PW
(ii) Dacă P1*P2 şi P2P3 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ă.
Să ne reamintim...
Definiţiile pentru: alphabet, simbol, cuvânt, subcuvânt, prefix, sufix,
cuvânt vid, limbaj, regulă de rescriere, sistem de rescriere, derivaţie,
axiomă.
.
- 15 -
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 descrie mulţimea de cuvinte din L.
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.
- 16 -
Unitatea de învăţare M1.U2. Algoritmi normali în sens Markov
Cuprins
M1.U2.1. Introducere ..................................................................................................17
M1.U2.2. Obiectivele unităţii de învăţare ...................................................................17
M1.U2.3. Algoritmi normali în sens Markov .............................................................17
M1.U2.4. Exemple de algoritmi normali.....................................................................18
M1.U2.5. Rezumat.......................................................................................................24
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.
.
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ă, F1F 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.
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.
- 17 -
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
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 α.
- 18 -
Exemplul 8 Fie algoritmul cu alfabetul { a, x, y, # } şi regulile:
1. yaay
2. xaayx
3. x
4. a##x
5. #a#
6. #
7. ya
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 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
- 19 -
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
# 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
- 20 -
Exemplul 15 Cel mai mare divizor comun a două numere naturale:
ai#ajacmmdc(i,j)
1. axxa
2. a#ax#
3. a##y
4. ya
5. xz
6. za
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 -
-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
- 21 -
Exemplul 16 Împărţirea a două numere naturale:
a i # a j a i / j # a i ji / 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 xa2 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
- 22 -
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 αxxβ, 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 αxxβ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.
Să ne reamintim...
- 23 -
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?
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.
- 24 -
Unitatea de învăţare M1.U3. Gramatici generative şi analitice
Cuprins
M1.U3.1. Introducere ................................................................................................ 25
M1.U3.2. Obiectivele unităţii de învăţare ................................................................. 25
M1.U3.3. Gramatici generative şi analitice .............................................................. 25
M1.U3.4. Ierarhia lui Chomsky ................................................................................ 29
M1.U3.5. Operaţii cu limbaje ................................................................................... 34
M1.U3.6. Rezumat.....................................................................................................37
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.
.
- 25 -
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| wV *, S w }
Vom introduce o noţiune duală celei de gramatică generativă şi anume cea de gramatică
analitică.
Definiţia 1.2.3 Două gramatici, G şi G1, se numesc gramatici echivalente atunci şi numai atunci când
L(G)=L(G1).
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ă).
▼ Demonstraţie:
Dacă G este o gramatică generativă vom demonstra că pentru orice cuvânt din (VNVt)* avem
* *
(1.2.1) S S
G G1
- 26 -
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
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.
Exemplul 3 Fie G = ({S, B, C}, {a, b, c}, S, P}), unde mulţimea P este formată
din:
SaSBC
SaBC
CBBC
bBbb
bCbc
cCCc
aBab
Să încercăm o derivaţie în gramatica G:
- 27 -
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: x0x1x2x3 x1x2ix1yi
x1x2 yijjyi
pentru fiecare i şi j din {0,1}
x3 yix3x2ix3
ix2x2i
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² | n1} 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 : x0a
x0axx2z
x2zaa
xaaa
yaaa
x2zy1yxz
xx1x1yx
yx1y1yx
xy1x1y
yy1y1y
ax1axxyx2
x2yxy2
y2yyy2
y2xyx2
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².
ⁿ
Exemplul 6 [21] ] Pentru generarea limbajului L = { a2 | n0 }vom avea
următoarele reguli gramaticale
x0yxy
yxyz
zxxxz
- 28 -
zyxxy
xa
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
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 u1Au2u1wu2 , unde u1,
u2V*, AVN ş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.
(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, BVN şi aVT.
- 29 -
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 uv
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
uv unde |u| |v|. Presupunem că regula uv 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ă uv 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
……………………………………………………………..
C1 B2 … Bn → B1 B2 … Bn
Fie acum gramatica G” = (VN {C1, C2, …, Cm}, VT, S, P\ {uv} P(u,v) ).
Este uşor de demonstrat acum că L(G) = L(G”).
- 30 -
Procedând de aceeaşi maniera cu fiecare regula monotonă care nu este dependentă de context se obţine
în final gramatica echivalentă G’.
▲
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 C1 B
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.
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.
- 31 -
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:
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:
Î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 S1VNVT. 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 :
P1=P{S1 │ S P }
Observăm că S1VNVT 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ă wL(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 :
- 32 -
*
S w
G G
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
adică wL(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.
▲
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.
- 33 -
Reuniunea a două limbaje
L1L2={ w | wL1 sau wL2 }
i 0
- 34 -
adică câtul drept al limbajelor:
L/{u}
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 .
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.
- 35 -
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 SVN şi P este o mulţime finită de
perechi ordonate (u,v), astfel încât v este un cuvânt din V*, unde V=VNVT şi u
este un cuvânt din V* care conţine cel puţin o literă din VN.
Teste de evaluare/autoevaluare
I. Întrebări.
1. Ce este o gramatică generativă?
2. Câte tipuri de gramatici 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 =
{SSS, SSS, SS, SA, AA’, Ap, Aq, Ar }.
Să se verifice dacă pqrpqr L(G).
2. Să se construiască o gramatică G care generază următorul limbaj:
L = {a2nbn | n>0}
- 36 -
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..
- 37 -
Soluţiile testelor de autoevaluare pentru Modul 1
M1.U1.
I. Întrebări.
Raspuns: Vezi Definitiile 1.1.1 – 1.1.9.
II. Rezolvare
1. L1 = {00,11,010,001}
L2 = {1 n 00| n>0}
L3 = {1 n 0m| n>0, m>1}
2. Lungimea cuvântului “limbaj” = numarul de caractere pentru “limbaj”, adică 6 caractere.
Nu, “aba” nu este subcuvânt pentru cuvântul“limbaj”.
Rezultatul este concatenarea cuvantului “limbaj” cu el însuşi de 3 ori, adică:
limbajlimbajlimbaj.
3. n=1 aab
n=2 aaaabb
n=3 aaaaaabbb
n=4 aaaaaaaabbbb
L={ aab, aaaabb, aaaaaabbb, aaaaaaaabbbb}
M1.U2.
I. Întrebări.
Raspuns: Vezi Definiţiile 1.1.10 – 1.1.9
II. Rezolvare:
1. Stim ca w este din {a,b,c}*, ceea ce înseamnă că în L avem cuvinte formate numai din
simbolurile a,b,c. Algoritmul îin sens Markov este următorul:
AN = (, P) unde = {a, b, c, 0}
a 0
P : b 0
c 0
M1.U3.
I. Întrebări.
Raspuns: Vezi Definiţiile 1.2.1
II. Rezolvare:
- 38 -
1. Este suficient sa se construiască o derivaţie în gramatica G pentru cuvântul dat:
2. Avem limbajul:
L = {a2nbn | n>0}
Trebuie să obţinem o gramatică de forma G = (VN, VT, P, S). Limbajul este format din cuvinte de
forma aab, aaaabb, aaaaaabbb. De aici deducem comportamentele multimii de terminale
VT={a,b}. Multimea de neterminale se initializeaza cu {S}.Vom adauga membri la această
multime pe masura ce vom avea nevoie. Pentru a ajunge la cuvinte de forma a2nbn, cu n oricat
de mare, pornind de la simbolul de start, avem nevoie de o definitie recursiva, cu alte cuvinte
simbolul de start trebuie sa apara si in dreapta unei productii. Este evident faptul că obtinerea
cuvantului aaaabb din cuvantul aab se face adaugand doi de a la început si un b la sfarsit. Acest
rationament ne conduce la o producµie de genul S aaSb. Derivând succesiv după aceasta
regula, pornind de la simbolul de start, obţinem:
SaaSbaaaaSbbaaaaaaSbbb...
Evident, aceasta regulă nu este suficientă, deoarece ori de cate ori o aplicăm, nu vom obţtine
niciodată un cuvânt format numai din terminale. Avem nevoie de o altă regulă pentru încheierea
derivării. Alegem spre aplicare regula Saab, deoarece aab este cuvântul de lungime minimă
ce se poate genera, adică gramatica nu poate genera cuvântul vid.
- 39 -