Documente Academic
Documente Profesional
Documente Cultură
Capitol 1
Capitol 1
12
Capitol 1. Noţiuni introductive de teoria limbajelor formale
limbaje ce descriu procese economice sau activităţi umane (vocabularul este constituit din
codificări ale evenimentelor elementare), limbaje ce descriu procese biologice (sisteme
Lindenmayer).
Cu toate ca vocabularul este finit limbajul poate fi infinit. Un limbaj infinit nu poate fi
enumerat, el poate fi descris si manipulat prin reguli de formare a frazelor (şiruri de
simboluri) sale. Aceste reguli sunt descrise prin limbaje formale care sunt gramaticile
asociate limbajelor. Regulile din cadrul unei gramatici furnizează un mecanism de
generare şi un criteriu de corectitudine a frazelor limbajului.
Definiţia formală a limbajului şi apoi a gramaticii este tratata in continuare.
Limbajul
Un alfabet sau vocabular V este un set finit de elemente. Aceste elemente se numesc
simboluri. Daca V = { a1 , a2 , … , an } este un vocabular atunci orice secvenţă de
simboluri de forma x = a i1 a i2…a ir cu r≥1, aij ∈ V, j=1,2,…r este un cuvânt sau şir
peste mulţimea V. Lungimea unui şir se notează cu | x | si este egală cu numărul de
simboluri din şir, in cazul nostru | x | = r. Şirul vid se notează cu λ şi nu conţine nici un
simbol, |λ|=0
Mulţimea tuturor şirurilor peste alfabetul V se notează cu V* şi se obţine prin
concatenarea repetată a simbolurilor şi şirurilor peste V. Operaţia de concatenare se
defineşte pentru 2 şiruri x = ai1ai2…air şi y = bj1bj2…bjs ca fiind şirul xy =
ai1ai2…airbi1bi2…bjs cu |xy|=|x|+|y|=r+s. Concatenarea de şiruri este o operaţie
asociativă dar necomutativă peste V*, adică pentru orice x,y ∈ V* : xy ∈ V*. Concatenarea
repetată ( iterată ) a unui şir x este descrisă prin exemplul următor:
Dacă x=ab atunci x2=xx=abab=(ab)2, x3=(ab)3 =ababab,.., xi+1=xxi, x0={λ}
13
Capitol 1. Noţiuni introductive de teoria limbajelor formale
Exemplu 1.1
L = { a,b,c,λ } (1)
L = { anbk : n≥1 şi k≥1 } (2)
L = { anbnck : n≥1 şi k≥1} (3)
L = {anbnc n: n≥1 } (4)
L = { x : x∈{a,b}+ şi |x|a=|x|b } (5)
unde cu |x|y se notează numărul de apariţii ale lui y în x.
Fie două şiruri x, y ∈ V* . Dacă y=uxv , pentru u, v ∈ V* , atunci spunem că x este un
subşir (subcuvănt) al lui y . Dacă y=xv , v∈ V* atunci x se numeşte prefix a lui y,iar dacă
y=ux , u∈ V* atunci x este sufix al lui y . Pentru y∈ V* se notează cu Sub(x) , Pref(x) ,
Suf(x) mulţimea subcuvintelor, prefixelor şi, respectiv sufixelor lui y .
Dacă x = ai1ai2…air este un şir din V atunci imaginea în oglindă (mirror) a lui x
notată cu mi(x) sau x-1 este mi(x)=x-1= air.....ai2ai1 şi are proprietăţile:
(x-1)-1=x, (x-1)i=(xi)-1 pentru orice i≥0 .
Operaţii cu limbaje
de mulţimi şi cu P(A) mulţimea părţilor mulţimii A. Dacă L1 , L2 sunt două limbaje peste
α (L1L2 ) = Uα (x , x )
1 2
x1 ∈L1
x2 ∈L2
adică operaţia aplicată asupra a două limbaje L1 , L2 este reuniunea tuturor operaţilor
aplicate asupra perechilor de şiruri din cele doua limbaje. La fel dacă α : V*→ P(V*) este
operaţie unară cu şiruri atunci se defineşte operaţia α peste un limbaj L în felul următor:
14
Capitol 1. Noţiuni introductive de teoria limbajelor formale
α ( L) = Uα ( x)
x ∈L
i =0
∞
• închiderea Kleene plus a lui L : L+ = U Li .Pentru limbaje care nu conţin
i =1
15
Capitol 1. Noţiuni introductive de teoria limbajelor formale
s(λ)={ λ } , s(xy)=s(x)s(y)
Dacă α este o operaţie unară cu limbaje astfel încât α(L)∈ℒ pentru orice limbaj L din ℒ
atunci se spune că ℒ este închisă la operaţia α.O familie ℒ este închisă la substituţii cu
limbaje dintr-o familie ℒ ’ dacă şi numai dacă oricare ar fi L∈ℒ , L⊆V* şi s:V*→ Ƥ (U*)
astfel încât s(a)∈ℒ’ pentru orice a∈V, atunci s(L)∈ℒ . O familie se numeşte pur şi simplu
închisă la substituţie dacă este închisă la substituţii cu limbaje din ea însăşi.
Particularizând, obţinem noţiunea de închidere la homomorfisme şi homomorfisme
inverse.
16
Capitol 1. Noţiuni introductive de teoria limbajelor formale
Problema corectitudinii şirurilor unui limbaj şi a generării de şiruri care aparţin unui
limbaj este rezolvată de gramatica asociată limbajului. Fiecare limbaj are asociată cel
puţin o gramatică. Un limbaj poate fi generat de mai multe gramatici echivalente.
O gramatică (formală) clasică in sens Chomsky este un cvadruplu:
G = (N,T,S,P)
unde N,T sunt alfabete(vocabulare) disjuncte ( N ∩ T = φ ), S∈N şi P este un set finit
de perechi (w,v) astfel încât w,v ∈ ( N ∪ T )* şi w conţine cel puţin o literă din N .
Elementele mulţimii N se numesc neterminale (sau simboluri auxiliare), elementele lui T
se numesc terminale, S se numeşte simbol de start sau axiomă. Perechile (w,v) din P se
numesc reguli de rescriere sau producţii şi se notează uzual w → v . Neterminalele apar
cel puţin o dată in partea stângă (în şirul w) a unei producţii iar terminalele apar numai în
partea dreaptă a producţiilor.
Pentru o gramatică dată G=(N,T,S,P) şi două şiruri w,v∈(N∪T)* se defineşte relaţia
numită derivare imediată sau directă (intr-un singur pas) notată w⇒G v dacă şi numai
dacă există u1,u2∈(N∪T)* astfel încât w=u1αu2 , v=u1βu2 şi există o regulă α→β∈P. Se
spune că α derivează direct in β . Şirul sau simbolul α se poate alege ca cel mai din
stânga sau cel mai din dreapta din şirul w, derivarea numindu-se extrem stânga sau
extrem dreapta.
Prelungirea tranzitivă a relaţiei ⇒G se notează cu ⇒+G iar închiderea tranzitivă şi
reflexivă a relaţiei ⇒G se notează cu ⇒*G . Pentru o gramatică G=(N,T,S,P) şi
w,v∈(N∪T)*, o derivare w ⇒*G v are loc dacă şi numai dacă sau w=v sau există
z∈(N∪T)* astfel încât w⇒*G z şi z ⇒G v . Altfel spus w derivează in y în unul sau mai
mulţi paşi.
Limbajul generat de o asemenea gramatică este definit de:
17
Capitol 1. Noţiuni introductive de teoria limbajelor formale
Exemplu 1.2
Fie G = ( N,T,S,P ) o gramatică astfel încât:
N = { S, A, B }
T = { a, b }
P = { S → aA, A → bB, A → aA, B→ b, B → bB, B→λ }
Limbajul generat de G este limbajul (2):
L = { anb k: n≥1 and k≥1 }
Exemplu 1.3
Fie G = ( N,T,S,P ) o gramatică astfel încât:
N = { S, A, C }
T = { a, b, c }
P = { S→abc, S→aAbC, A→aAb, A→ab, C→cC, C→ c}
Limbajul generat de G este limbajul (3):
L={anbnck: n≥1 and k≥1}
Exemplu 1.4
Fie G = ( N,T,S,P ) o gramatică astfel încât:
N={S,A,B}
T={a,b,c}
P={S → abc, S → aAbc, Ab → bA, Ac → Bbcc ,bB → Bb, aB → aaA, aB → aa}
Limbajul generat de G este limbajul (4):
L(G) = { anbncn : n ≥ 1 }
Simbolul A se deplasează peste simbolurile terminale b spre dreapta până la întâlnirea
simbolului terminal c când se transformă in B generând şi perechea bc. Simbolul B se
deplasează spre stânga peste aceleaşi simboluri b până la întâlnirea simbolului a când se
transformă sau în a (se termină derivarea) sau în aA pentru un nou ciclu de deplasari şi
derivări.
18
Capitol 1. Noţiuni introductive de teoria limbajelor formale
Exemplu 1.5
Fie G = ( N,T,S,P ) o gramatică astfel încât:
N={S,A,B}
T={a,b}
P={S → aB, S → bA, A → a, A → aS ,A → bAA, B →b, B → bS, B → aBB}
Limbajul generat de G este limbajul (5):
L(G) = { w : w ∈ {a,b}+ and |w|a=|w|b }
Gramaticile pot fi clasificate in funcţie de diverse criterii. Cel mai utilizat criteriu este
forma producţiilor. După acest criteriu gramaticile se clasifică în următoarele tipuri:
19
Capitol 1. Noţiuni introductive de teoria limbajelor formale
• gramatici drept(stâng liniare) dacă şi numai dacă orice producţie este de forma:
A→x sau A → yB (respectiv A → By) cu A,B∈N şi x,y∈T*
• tip 3 = gramatici regulate: REG (regular sau finite state grammar) dacă şi
numai dacă orice producţie este de forma:
A → xB sau A → x cu A,B ∈ N, x ∈ T*
ℒ3 ⊂ ℒLIN⊂ ℒ2 ⊂ ℒ1 ⊂ ℒ0
20
Capitol 1. Noţiuni introductive de teoria limbajelor formale
arata căci gramatica din exemplul 1.4 poate fi generată şi de o gramatică matricială.
Două gramatici se numesc echivalente dacă generează acelaşi limbaj şi sunt puternic
echivalente daca ambele generează acelaşi limbaj de şiruri şi acelaşi limbaj de
arbori(sintactici). In paragraful 1.4 vom prezenta arborii sintactici. Gramaticile (şi in
special cele independente de context) nu generează numai şiruri ci şi arbori, fiecare
arbore este asociat cu un şir arătând in mod grafic cum şirul este derivat din gramatică.
Echivalenţa simplă a gramaticilor nu implică ca ele fac parte din aceiaşi familie.
Una din operaţiile folosite pentru descrierea activităţilor care se desfăşoară paralel este
operaţia de amestecare notată Shuf. Pentru V un vocabular oarecare şi două şiruri x,y∈V*
se defineşte operaţia de amestecare:
Operaţia Shuf este asociativă, comutativă şi are element neutru {λ}. De observat că
această operaţie este definită şi pentru şiruri inegale ca lungime. Operaţia înrudită cu Shuf
dar mai strictă este amestecarea strictă SShuf (strict shuf) definită pentru un vocabular V
şi două şiruri x,y de lungime egală |x|=|y| :
21
Capitol 1. Noţiuni introductive de teoria limbajelor formale
22
Capitol 1. Noţiuni introductive de teoria limbajelor formale
Proprietăţile gramaticilor
Gramatici λ-libere
La gramaticile dependente de context restricţia w ≠ λ , este impusă de regula de la
gramatici monotone |w| ≤ |v| care impune ca partea stângă a producţiei să fie mai mică
în lungime ca partea dreaptă. O gramatică care respectă această restricţie, nu are reguli cu
părţi drepte λ se numeşte gramatică λ-liberă.
Gramaticile independente de context si cele de sub ele (în ierarhia Chomsky), liniare
şi regulate pot avea şi producţii de tipul A → λ. Pentru orice gramatică G independentă de
context(CF) se poate construi o gramatică CF echivalentă G’ astfel încât părţile drepte ale
producţiilor să fie toate diferite de λ cu excepţia cazului când λ∈L(G). În acest din urmă
caz S→λ este singura regulă cu partea dreaptă λ iar S nu apare in nici o parte dreapta a
vreunei producţii. Această proprietate este valabilă şi pentru gramatici liniare sau
regulate(REG).
Operaţii cu gramatici
23
Capitol 1. Noţiuni introductive de teoria limbajelor formale
RE CS CF LIN REG
Reuniune + + + + +
Concatenare + + + - +
Închiderea Kleene + + + - +
Închiderea Kleene plus + + + - +
Intersecţie + + - - +
Complement - + - - +
Intersecţie cu limbaje regulate + + + + +
Imagine in oglindă + + + + +
Substituţie + - + - +
Substituţie λ-liberă + + + - +
Homomorfisme + - + + +
Homomorfisme λ-libere + + + + +
Homomorfisme k-liniare + + + + +
Homomorfisme inverse + + + + +
Câtul stâng/drept + - - - +
Cătul stâng / drept cu limbaje regulate + - + + +
Derivata stângă / dreaptă + + + + +
Sub + - + + +
Pref + - + + +
Suf + - + + +
Tabelul 1.1.
RE CS CF REG
Shuf + + - +
SShuf + + - +
Shuf* + + - -
SShuf* + + - -
Probleme de decizie
Pentru G o clasa de gramatici (de tip 0,1,2,3), o problemă de decizie asupra lui G este o
întrebare la care se poate răspunde cu “da” sau “nu” referitore la gramaticilor din G. O
asemenea problemă este decidabilă dacă şi numai dacă există un algoritm unic care dă
răspuns la întrebare pentru orice gramatică din G. Ca exemple de probleme de decizie se
pot enumera:
• problema echivalenţei: două gramatici G1,G2∈G sunt echivalente
• problema incluziunii: pentru G1,G2∈G avem L(G1)⊆ L(G2)
24
Capitol 1. Noţiuni introductive de teoria limbajelor formale
RE CS CF REG
Echivalenţă - - - +
Incluziune - - - +
Apartenenţă - + + +
Finititudine - - + +
Trivialitate - - + +
Tabelul 1.2
25
Capitol 1. Noţiuni introductive de teoria limbajelor formale
Reprezentarea grafică comună pentru procesul de derivare (în particular pentru gramatici
independente de context) este un arbore numit arbore de derivare. Fiecărei derivări din
gramatica G=(N,T,S,P) putem să-i asociem un arbore de derivare în felul următor:
nodurile sunt simboluri neterminale iar frunzele (noduri fără descendenţi) sunt simboluri
terminale; rădăcina arborelui este marcată cu simbolul iniţial S; pentru un nod ce conţine
simbolul neterminal A care este rescris cu regula A→x1x2....xr (cu xi simboluri terminare şi
neterminale), nodul A are r descendenţi direcţi marcaţi x1, x2, ... .xr . Pentru gramatica din
exemplu 1.3 şi şirul generat a2b2c arborele de derivare este prezentat în figura următoare.
a A b C
a b c
26
Capitol 1. Noţiuni introductive de teoria limbajelor formale
In mod formal un arbore de derivare este definit ca: T=(V,D), unde V este un set de
noduri şi D este o relaţie de dominare, Relaţia D este o relaţie binară in V care satisface
condiţiile:
i. D este o ordine slabă
- reflexivă: pentru orice a∈V : aDa
- anti-simetrică: pentru orice a,b∈V, dacă aDb şi bDa atunci a=b
- tranzitivă: pentru orice a,b,c∈V, dacă aDb şi bDc atunci aDc
ii. condiţia rădăcină: există r∈V astfel încât pentru orice b∈V : rDb
iii. condiţia non-ramură: pentru orice a,a’,b∈V, dacă aDb şi a’Db atunci aDa’ sau
a’Da
Cazuri speciale ale relaţiei de dominare D sunt:
- a domină strict b (aSDb) dacă şi numai dacă aSDb şi a≠b, astfel SD este o
ordine strictă în V şi este ireflexivă (nu avem aSDa)
- a domină imediat b (aIDb) dacă şi numai dacă aSDb şi nu există nici un c
astfel încât aSDc şi cSDb
Pentru un nod se defineşte gradul nodului ca fiind deg(b)=|{a∈V : bIDa}| adică
numărul de noduri imediat descendente. Conform acestei definiţii avem:
- b este nod terminal sau frunză dacă şi numai dacă deg(b)=0
- b este un nod unar dacă şi numai dacă deg(b)=1
- b este un nod cu ramuri dacă şi numai dacă deg(b)>1
Alte relaţii privitore la noduri sunt:
- a este un nod mamă al lui b (aMb): dacă şi numai dacă aIDb
- a este un nod soră cu b (aSb): dacă şi numai dacă există d astfel încât dMa şi
dMb
Pentru o gramatică CF dată G, un şir w∈L(G) este ambiguu dacă şi numai dacă w are
27
Capitol 1. Noţiuni introductive de teoria limbajelor formale
cel puţin doi arbori de derivare in G. Gramatica G este o gramatică ambiguă dacă şi
numai dacă există şiruri(cel puţin un şir) în L(G) care sunt ambigui. Limbajul L este un
limbaj independent de context cu ambiguitate moştenită dacă şi numai dacă orice
gramatică CF care generează L este ambiguă. Un exemplu de gramatică ambiguă este
gramatica:
G=( {S}, {a,+,*}, S, {S→S+S, S→S*S, S→a} )
Şirul w=a*a+a are doi arbori de derivare diferiţi în gramatica G de mai sus:
S S
S * S S + S
a a
S * S
S + S
a a a a
Cei doi arbori de derivare corespund la succesiuni de derivări extrem stânga diferite.
Cel din stânga are derivările: S→ S*S→ a*S→ a*S+S → a*a+S→ a*a+a.
Arborele din dreapta corespunde la succesiune de derivări
S→ S+S→ S*S+S→ a*S+S→ a*a+S→ a*a+a.
Înălţimea maximă a posibililor arbori de derivare pentru un şir generat w de lungime
n se notează cu h(n). Această înălţime poate fi considerată ca o măsură a paralelismului
orizontal din interiorul unei derivări a şirului w. Pentru cele două derivări de mai sus n=6
şi h(n)=3 după cum se vede şi în figura următoare:
S
S * S
a
S + S
a a
Liniile întrerupte reliefează cele 2 nivele de paralelism din arborele de derivare.
28