Sunteți pe pagina 1din 17

Capitol 1.

Noţiuni introductive de teoria limbajelor formale

1. NOŢIUNI INTRODUCTIVE DE TEORIA LIMBAJELOR


FORMALE

Această lucrare tratează modelarea proceselor economice care prezintă paralelism in


evoluţia activităţilor care compun aceste procese. Pentru că modelarea se va face prin
gramatici matriciale care sunt de fapt limbaje formale, este necesară o introducere in
teoria limbajelor formale. Noţiunile prezentate vor sta la baza prezentării gramaticilor
matriciale din capitolul 3, a proprietăţilor acestor gramatici şi a modului cum aceste
gramatici pot modela procese economice cu paralelism in evoluţia lor.

1.1 Limbajul formal mijloc de descriere a proceselor economice

Am ales gramaticile ca mijloc de modelare pentru că după cum am prezentat şi in


capitolul introductiv gramaticile pot fi asociate cu orice sisteme (sau procese) care
presupun un set de intrări, nişte reguli de funcţionare şi un set de ieşiri.
Ca definiţie generală un limbaj formal descrie un sistem formal. Sistemul formal are
ca intrări un set de axiome(adevăruri) şi pe baza unor reguli de compunere generează la
ieşire teoreme. In literatura de ştiinţa calculatoarelor limbaje formale sunt asociate cu
gramaticile formale.
La fel ca orice alt sistem o gramatică pleacă de la un set de simboluri de intrare, are
un set de reguli de construcţie şi generează la ieşire secvenţe (şiruri) de simboluri.
Mulţimea acestor secvenţe de simboluri formează un anumit limbaj. Gramaticile si
limbajele modelează fenomene naturale sau artificiale. Paralelismul unui limbaj formal
poate fi cel al fenomenului modelat sau chiar intrinsec gramaticii respective. Tot paralele
pot fi considerate unele operaţii cu limbaje cum ar fi shuffle.
Un limbaj in sens general este o colecţie (finita sau nu) de secvenţe finite formate cu
elementele (simbolurile) unui vocabular finit. Semnificaţia elementelor vocabularului
determină şi semnificaţia si aria de aplicare a limbajului. Pot fi limbaje
naturale(elementele sunt cuvinte), limbaje de programare (teoria compilatoarelor),

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={λ}

Conform acestor definiţii, închiderea tranzitivă şi reflexivă a mulţimii V in raport cu


operaţia de concatenare este V*
Orice submulţime L ⊆ V* este un limbaj pe vocabularul V iar V* este limbajul
universal peste V. Limbajul V* fără şiruri vide se notează cu V+ = V* - {λ}.
Exemple de limbaje peste alfabetul V={ a, b, c, λ } includ:

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

Fie V = { a1 , a2 , … , an } un alfabet fixat. Privind limbaje ca mulţimi se pot defini


reuniunea, intersecţia, diferenţa şi complementara faţă de V* în mod uzual. Se vor nota
aceste operaţii cu ∩ , ∪ , - , C . Există insă o serie de operaţii specifice limbajelor privite
ca mulţimi de şiruri. Majoritate acestor operaţii se definesc după următoarea schemă.
Fie α : V* X V* → P(V*) o operaţie binară cu şiruri. S-a notat cu X produsul cartezian

de mulţimi şi cu P(A) mulţimea părţilor mulţimii A. Dacă L1 , L2 sunt două limbaje peste

V atunci se defineşte operaţia α asupra celor două limbaje astfel:

α (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

Cu aceste notaţii descrierea formală a operaţiilor uzuale cu limbaje este:


• reuniunea: L1 ∪ L2 = { x : x∈ L1 sau x∈ L2 }
• intersecţia: L1∩ L2 = { x : x∈ L1 si x∈ L2 }
• diferenţa: L1 - L2 = { x : x∈ L1 si x∉ L2 }
• complementul lui L faţă de V*: C (L) = V*- L = { x : x∈ V* şi x∉ L }
• concatenarea: L1L2 = { xy : x∈ L1 si y∈ L2 } pentru care avem
proprietatea:
L{λ} = {λ}L = L
• iteraţia (concatenare repetată):
L0 = {λ}
L1 = L
L2 = LL
....
Li+1 = LLi

• închiderea Kleene a lui L : L = U Li
*

i =0

• închiderea Kleene plus a lui L : L+ = U Li .Pentru limbaje care nu conţin
i =1

cuvântul nul λ numite şi limbaje λ-libere are loc egalitatea: L+=L*-{λ},


relaţie valabilă şi pentru vocabulare (alfabete).
• câtul stâng al lui L1 în raport cu L2 : L2\L1={ x : există y∈L2 astfel ca yx∈L1}
• derivata stângă a lui L în raport cu y : ∂ly={y}\L={x : yx∈L}
• prefixul lui L⊆V*: Pref(L)={ x : există xy∈L}
• câtul drept al lui L1 în raport cu L2 : L1/L2={ x : există y∈L2 astfel ca xy∈L1}
• derivata dreaptă a lui L în raport cu y : ∂dyL=L/{y}={x : xy∈L}
• sufixul lui L⊆V*: Suf(L)={ x : există yx∈L}
• imaginea în oglindă a lui L : L-1={ x : x-1∈L}

Pentru două vocabulare V şi U şi o funcţie s : V*→Ƥ (U*) cu proprietăţile:

15
Capitol 1. Noţiuni introductive de teoria limbajelor formale

s(λ)={ λ } , s(xy)=s(x)s(y)

funcţia s se numeşte substituţie . Cu Ƥ (U*) s-a notat mulţimea părţilor mulţimii U* .


În funcţie de proprietăţile lui s se pot enumera ca operaţii cu limbaje:
• substituţie finită: dacă card(s(a))<∞ pentru orice simbol a∈V (cu card(A) s-a
notat cardinalul mulţimii A = numărul de elemente ale lui A, iar card(s(a))<∞
semnifică că A este finită),
• homomorfism: dacă card(s(a))=1 pentru orice simbol a∈V şi atunci se scrie
s(a)=x în loc de s(a)={x}
• substituţie λ-liberă /homomorfism λ-liber: dacă λ∉s(a) pentru orice simbol a∈V

• homomorfism invers: h-1: U* → Ƥ (V*) definit prin h-1(x)={x∈ V*: h(y)=x∈U*}

unde h:V*→ Ƥ (U*) este un homomorfism direct


Există forme particulare de homomorfism cum ar fi homomorfism cu ştergere k-
liniară in raport cu un limbaj L sau homomorfism k-restrâns pe L. Funcţia s() de
substituţie se va nota cu h() pentru homomorfism. Homomorfismul cu ştergere k-liniară
are proprietatea că |x|≤k|h(x)| pentru orice x∈L şi k fixat, adică reduce cu k elemente
lungimea şirurilor din V* faţă de şirurile din U* . Fie V un vocabular şi un simbol c în
afara lui. Fie L un limbaj peste V∪{c} cu proprietatea că L⊆(V{λ,c,...ck-1})* pentru k≥1
fixat. Un homomorfism h definit prin h(c)= λ, h(a)=a pentru a∈V este homomorfism k-
restrâns pe L.
Fie ℒ o familie arbitrară de limbaje şi fie α o operaţie arbitrară cu limbaje. Dacă

α(L1,L2)∈ℒ, pentru orice L1,L2∈ℒ, atunci se spune că ℒ este închisă la operaţia α.

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

1.2 Gramatici clasice Chomsky

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:

L(G) = { w : S ⇒*G w şi w∈T*}

În alte cuvinte L(G) este setul(mulţimea) de şiruri terminale generate de derivări

17
Capitol 1. Noţiuni introductive de teoria limbajelor formale

secvenţiale plecând de la simbolul de start S. În continuare sunt prezentate câteva


exemple de gramatici care generează limbajele din exemplu 1.1.

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 }

Clasificarea Chomsky a limbajelor

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:

• tip 0 = structurată în fraze sau gramatică recursivă: RE(recursive grammar)


dacă şi numai dacă nu are nici o restricţie asupra formei producţie: orice este permis
şi în partea stângă şi în partea dreaptă a regulilor de rescriere.
• tip 1 = gramatici monotone dacă şi numai dacă orice producţie este de forma:
w→ v cu |w| ≤ |v| şi w ≠ λ
• gramatică dependentă de context: CS (context-sensitive grammar) dacă şi
numai dacă orice producţie este de forma:
u1Au2 → u1wu2 cu u1, u2, w ∈ ( N ∪ T )*, A ∈ N şi w ≠ λ
(excepţie posibila regulă S → λ caz în care S nu apare in partea dreaptă a nici unei
producţii). Regula A → w se aplică numai dacă A este încadrat in contextul u1, u2.
• tip 2 = gramatică independentă de context: CF (context-free grammar) dacă şi
numai dacă orice producţie este de forma:
A→w cu A∈N, w∈ (N ∪T)*
• gramatici liniare: LIN dacă şi numai dacă orice producţie este de forma:
A→x sau A → yBz cu A,B∈N şi x,y,z∈T*

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*

Se observă că de sus în jos restricţiile sunt din ce in ce mai puternice. Gramaticile


monotone şi dependente de context generează aceiaşi familie de limbaje şi se pot încadra
amândouă la tipul 1. Gramaticile drept(stâng) liniare şi gramaticile regulate generează şi
ele acelaşi tip de limbaj şi anume limbajul de tip 3.
Un limbaj este de tipul i (i = 0,1,2,3) dacă este generat de o gramatică de tip i .
Familia limbajelor de tip i se notează cu ℒi .
Limbajul (4) este de tip ℒ1 (dependent de context) fiind generat de gramatica din
exemplu 1.4 care este dependentă de context. Limbajele (3) şi (5) sun de tip ℒ2
(independente de context) fiind generate de gramaticile CF din exemplele 1.3 şi 1.5.
Limbajele (1) şi (2) sunt de tip ℒ3 limbaje regulate fiind generate de gramatici regulate
din exemplu 1.1 pentru limbajul (2) sau de o gramatică REG trivială: S→a|b|c|λ pentru
limbajul (1). (S-a folosit notaţia BNF-Backus Naur Form, în care semnul | separă
alternativele pentru producţiile lui S. S→a|b|c|λ este echivalent cu S→a, S→b, S→c,
S→λ ).
Unul din cele mai timpurii şi importante rezultate din teoria limbajelor formale
ierarhia Chomsky a limbajelor care arată incluziunile stricte:

ℒ3 ⊂ ℒLIN⊂ ℒ2 ⊂ ℒ1 ⊂ ℒ0

sau cu alte notaţii:


ℒREG ⊂ ℒLIN⊂ ℒCF ⊂ ℒCS ⊂ ℒRE

De notat că fiecare gramatică generează un limbaj unic. Totuşi, un limbaj poate fi


generat de mai multe gramatici diferite. In capitolul consacrat limbajelor matriciale se va

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.

1.3 Operaţii paralele cu limbaje

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:

Shuf(x,y)={x1y1 x2y2… xpyp : xiyi∈V*, x=x1x2…xp , y=y1y2…yp , p≥1 }

Pentru două limbaje L1,L2⊆V* se defineşte operaţia de amestecare:


Shuf(L1,L2) = { Shuf(x,y) : x∈L1 , y∈L2 }

Închiderea tranzitivă şi reflexivă a relaţiei Shuf pentru un limbaj L se notează cu Shuf*


şi este definită prin:
Shuf0(L)={λ}, Shuf1(L)=Shuf({λ},L}={L},….,SShufn+1=Shuf(Shufn(L),L)

Shuf * ( L) = U Shuf i ( L)
i =0

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| :

SShuf(x,y)=λ dacă x=y= λ


SShuf(x,y)=a1b1a2b2....akbk dacă x= a1a2....ak şi y= b1b2....bk , ai,bi∈V

21
Capitol 1. Noţiuni introductive de teoria limbajelor formale

Dacă |x|≠|y| operaţia SShuf nu este definită pentru şirurile x şi y.


Pentru două limbaje L1,L2⊆V* se defineşte:
SShuf(L1,L2)={ SShuf(x,y) : x∈L1 , y∈L2 }.

Analog se definesc SShuf0(L), SShuf1(), SShuf*(L) ca la operaţia Shuf. Paralelismul


acestei din urmă operaţii constă in faptul că amestecarea celor două şiruri este făcută prin
întrepătrunderea element cu element a simbolurilor celor două şiruri. Este ca şi cum s-ar
fi făcut derivări simultane (in paralel) în cele două şiruri.
Pentru exemplificare să luăm un proces simplu de fabricaţie. Se prelucrează o piesă
de tip p1 pe un post de lucru, acţiune notată cu a. Se prelucrează altă piesă de tip p2 pe un
alt post de lucru (diferit de primul post), acţiune notată cu b. Apoi se asamblează cele
două piese rezultând un produs finit, acţiune notată cu c. Prelucrarea pieselor p1 şi p2
poate fi făcută in orice ordine. Limbajul pentru fabricare unui singur produs finit este
L={abc,bac}. Pentru fabricarea a 2 produse finite dacă operaţiile de prelucrare nu se
desfăşoară in paralel şi operaţia de asamblare finală nu trebuie făcută la numai la sfârşit
limbajul de fabricaţie este:

Shuf2(L)=Shuf(L,L)={abcabc, abcbac, bacabc, bacbac, aabcbc, ababcc, abacbc,


abbacc, bbacac, babacc, baabcc, bbaacc, aabcbc, abbcac, babcac, aabbcc }

Analog pentru n produse limbajul este Shufn(L). În aceste limbaje şirurile au


proprietatea că simbolul c apare după cel puţin o pereche de simboluri a,b care pot apărea
în orice ordine.
Dacă operaţiile de prelucrare a şi b se pot desfăşura în paralel pe patru posturi de
lucru limbajul pentru fabricarea a două produse este:
SShuf2(L)={ aabbcc, abbacc, baabcc, bbaacc }

Analog pentru n produse a căror fabricaţie se desfăşoară în paralel şi asamblarea se


face la final limbajul de fabricaţie este SShufn(L).

22
Capitol 1. Noţiuni introductive de teoria limbajelor formale

Proprietăţile gramaticilor

In continuare vom nota cu litere mari simbolurile neterminale şi cu litere mici


terminalele. Şirurile de simboluri terminale şi neterminale se vor nota de asemenea cu
litere mici.

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

Operaţiile cu limbaje se extind şi la gramatici. Uniunea, concatenarea şi închiderea


Kleene stelat sunt numite operaţii regulate. Fiecare dintre familiile de limbajele ℒi cu
i=0,1,2,3 sunt închise la operaţii regulate.
Proprietăţile închiderii pentru familiile de limbaje clasice sunt arătate in tabelul
următor. Semnul + are semnificaţia de “da” in sensul ca familia de limbaje este închisă la
operaţia respectivă(cu limbaje din aceiaşi familie) , iar semnul minus are semnificaţia de
“nu”.

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.

Proprietăţile de închidere la operaţiile Shuf sunt prezentate in tabelul următor:

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

• problema apartenenţei: pentru G∈G şi x∈V* un şir arbitrar aven sau nu x∈


L(G)
• problema finitudini: limbajul L(G), G∈G este finit sau nu
• problema trivialităţii: limbajul L(G), G∈G este vid sau nu
Referitor la cele patru familii de bază din ierarhia lui Chomsky avem următorul tabel cu
rezolvarea acestor probleme de decizie (semnul + înseamnă “da” iar semnul - “nu”):

RE CS CF REG
Echivalenţă - - - +
Incluziune - - - +
Apartenenţă - + + +
Finititudine - - + +
Trivialitate - - + +
Tabelul 1.2

Problema apartenenţei se concretizează prin existenţa unui mecanism de recunoaştere


a şirurilor generate de un acel tip de gramatică. Aceste mecanisme sunt automatele,
fiecărui tip de gramatică corespunzându-i un anumit tip de automat: RE-Maşina Turing,
CS-Automatul liniar mărginit, CF-Automatul push-down, REG-Automatul finit.

Gramatici independente de context


O gramatica CF se spune ca este in forma normală Chomsky(CNF=Chomsky normal
form) dacă fiecare din regulile sale au una din următoarele forme:
X →a : X∈N, a∈T
X→YZ : X,Y,Z∈N
Pentru orice gramatică CF λ-liberă există o gramatica echivalentă CNF.
O gramatică CF se spune ca este in forma normală Greibach (GNF=Greibach
normal form) dacă fiecare din regulile sale au următoarea formă:
A→aX : A∈N, a∈T, X∈N*
Pentru orice gramatică CF λ-liberă exista o gramatică echivalentă GNF.
O gramatica CF este redundantă dacă conţine neterminale nefolosite. Un neterminal
este nefolosit in doua situaţii: daca nici un şir terminal nu este generat (derivabil) din el
(=neterminal inactiv sau mort) sau nu apare in nici un şir generat din S (=neterminal la

25
Capitol 1. Noţiuni introductive de teoria limbajelor formale

care nu se poate ajunge = de neatins). In mod formal, pentru o gramatică CF G=(N,T,S,P)


un neterminal A∈N este inactiv dacă si numai dacă limbajul generat de GA =(N,T,A,P)
este vid şi simbolul A este “de neatins” dacă si numai dacă şi numai dacă limbajul
generat de gramatica GλA=((N{A})∪T, {A}, S, P1∪ {X→λ : X∈(N-{A})∪T})={λ}. P1 este
setul de reguli P dupa ce s-au scos producţiile care au ca A in partea lor dreaptă.
O Gramatica CF este nonredundantă sau redusă dacă fiecare simbol neterminal este
si activ si de atins. Pentru orice gramatica CF se poate construii efectiv(algoritmic) o
gramatică nonredundantă.
Problema deciziei dacă un limbaj este sau nu independent de context este probată de
lema Bar-Hillel. Ea permite decizia de apartenenţă la limbaje CF prin analiza structurii
şirurilor acelui limbaj si are următoarea definiţie:
pentru orice L∈CF există constantele p,q>0 astfel încât pentru orice z∈L cu |z|>p
avem z=uvwxy, cu u,v,w,x,y ∈T*, |vwx|≤q,|vx|>0 şi uviwxiy∈L pentru orice i≥0.
Pentru ca nu toate limbajele satisfac lema Barr-Hillel este evident că exista limbaje care
nu sunt independente de context ca limbajul din exemplul 1.4.

1.4 Arbori de derivare

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

Succesiunea de derivări extrem stânga pentru acest şir este:


S→ aAbC→ aabbC→ aabbc
Întotdeauna arborele de derivare este reprezentat cu rădăcina in sus. Rezultatul citirii
de la stânga la dreapta a frunzelor arborelui este şirul generat prin procesul de derivare:
aabbc.

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

S-ar putea să vă placă și