Documente Academic
Documente Profesional
Documente Cultură
1
2
generative pentru denirea unei gramatici \sintactice" pentru limba engleza. Printre
alte rezultate referitoare la gramaticile formale, ^n anul 1956, acesta le clasica pe
tipuri, clasicare care ^i poarta numele.
Denitia 1.1.1 Numim alfabet o multime nita si nevida (elementele sale le numim
simboluri). Vom numi cuv^ant peste V o aplicatie p : f1; 2; :::; ng ! V; numarul
n = jpj numindu-se lungimea cuv^antului p:
Notatia 1.1.1 Prin V n = fp=pS : f1; 2; :::; ng ! VSg ^ntelegem multimea cuvintelor
de lungime n: Notam cu V = V n si cu V = V n:
+
n 0 n 1
3
Introducere 4
1; n 1:
Denitia 1.1.5 Limbajul generat de gramatica G este L(G) = fp=p 2 VT ; 9 x =)
G 0
pg:
Denitia 1.1.6 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Vom nota prin
F P (G) = f= 2 V ; 9 x =) g multimea formelor propozitionale pen-
0
G 0
tru gramatica G: Mai general, putem considera F P (; G) = f= =) ; 2
G
V g; 8 2 V :
Observatia 1.1.1 Denitia 1.1.6 este o generalizare a Denitiei 1.1.5 deoarece
L(G) = F P (G) \ VT = F P (x ; G) \ VT :
0
dreapta a vreunei reguli din gramatica; se mai numesc si gramatici sensibile la
(dependente de) context;
gramatica de tip 2: regulile sale sunt de tipul x ! r, unde x 2 VN ; r 2 V ; se
mai numesc si gramatici libere (independente) de context;
Generari de limbaje 5
asemenea adevarata, dar demonstratia ei necesita c^ateva rezultate auxiliare [9, 11].
Aceste incluziuni justica denumirea de ierarhia lui Chomsky.
gramaticile din Exercitiile 1.2.2 (sau 1.2.3, 1.2.4) si 1.2.5 genereaza limbaje care
sunt sensibile la context, dar care nu sunt independente de context; de aici
rezulta incluziunea stricta L L ;
2 1
gramaticile din Exercitiile 1.2.2 (sau 1.2.3, 1.2.4) genereaza un limbaj care se
poate obtine prin intersectia a doua limbaje independente de context (generate
de gramaticile din Exercitiile 1.3.6 si 1.3.7); cum, ^nsa, acesta nu este indepen-
dent de context, putem deduce rezultatul: Clasa limbajelor independente de
context nu este ^nchisa la intersectie.
Notatia 1.2.1 Fie gramatica G: Facem urmatoarele conventii:
i
Prin =) vom ^ntelege ca derivarea directa a folosit regula cu numarul i:
G
( )
i;
Prin =) vom ^ntelege ca derivarea s-a facut aplic^and i pasi (reguli); daca
G
i = 1;
atunci poate sa lipseasca;
Prin =G) vom ^ntelege ca derivarea foloseste sirul de reguli (analizarea sintac-
tica) ;
Generari de limbaje 6
Prin =) vom ^ntelege ca se aplica mai multe reguli, dar cel putin una;
+
G
Prin =) vom ^ntelege ca se aplica mai multe reguli, posibil niciuna;
G
i ;j
Prin =) vom ^ntelege ca se aplica regula i de j ori;
( )
G
De obicei, egalitatea L = L(G) se demonstreaza prin dubla incluziune. Astfel,
dat limbajul L; dupa constructia gramaticii (de fapt, ^n timpul constructiei acesteia)
trebuie sa m convinsi ca toate cuvintele din limbaj sunt generate (L L(G)) si
abia apoi sa vericam ca se genereaza numai cuvinte din L (L(G) L).
^In general, incluziunea L L(G) este mai simpla si se demonstreaza prin
\inductie dupa un parametru dependent de limbaj", ^n timp ce incluziu-
nea L(G) L -cea care creeaza probleme- se poate demonstra folosind \tehnica
invariantilor" (inductie dupa un parametru dependent de gramatica, cum
ar lungimea derivarii).
Exercitiul 1.2.1 Fie gramatica G = (fx g; fa; bg; x ; fx
0 0 0 ! a b; x ! a x bg):
0 0
Cu alte cuvinte, trebuie sa aratam ca exista o derivare x =) an bn ; 8 n 1:
0
G
! Presupunem ca nu am stiut care este limbajul generat de G: Atunci, ar trebuit
sa facem mai ^nt^ai o cercetare prin inductie. Sa determinam, pentru ^nceput,
derivarile de lungime 1. Avem situatiile: x0 =) a b sau x0 =) a x0 b: Consider^and
(1) (2)
G G
derivari de lungime 2, obtinem x0 =) a x0 b =) a a x0 b b sau x0 =) a x0 b =) a a b b:
(2) (2) (2) (1)
G G G G
Acum putem sa formulam armatia:
Vom demonstra aceasta prin inductie dupa k (ce coincide ^n acest caz cu lungimea
derivarii).
Baza: Pentru k = 1 si k = 2, s-a facut vericarea mai sus;
Pasul inductiv: Presupunem armatia adevarata pentru k = n si sa o demonstram
pentru k = n + 1: Astfel, avem derivarile x =n;) an x bn =) an bn sau x =n;)
(1)
+1 +1
0
G 0
G 0
G
an x0 bn =) an+1 x0 bn+1 ; adica exact armatia (2) pentru k = n + 1:
(2)
G
Generari de limbaje 7
Cu aceasta, ind vericate cele doua etape ale inductiei matematice, rezulta in-
cluziunea (1):
: Sa demonstram ca
(3) L(G) fan bn =n 1g:
Cu alte cuvinte, trebuie sa aratam ca an bn sunt singurele cuvinte generate de gra-
matica G: ^In acest sens, avem doua moduri de abordare:
plecam de la simbolul de start si aratam ca derivarile din armatia (2) sunt
singurele posibile, adica
(4) fw= w 2 V ; 9 x =k;) wg fak x bk ; ak bk g
0
G 0
{ (ii) ^n orice forma propozitionala , simbolul a apare ^naintea lui b (notatie
a < b; formal, a < b () a = (i); b = (j ) cu i < j );
{ (iii) N (a) = N (b); 8 2 F P (G): 2
Vom aborda problema prin primul mod, adica vom demonstra armatia (4) prin
inductie dupa k:
Baza: Pentru k = 1; conform celor doua reguli ale gramaticii, este clar ca fw= w 2
V ; 9 x =) wg fa x b; a bg;
0
G 0
Pasul inductiv: Presupunem ca armatia (4) este adevarata pentru k = n si o
demonstram pentru k = n + 1:
an x bn folosind regulile 1 si 2; obtinem exact doua
Astfel, din derivarea x =n;)
G 0 0
reguli P este:
1. x ! a b c
0
2. x ! a x b c
0 1
3. x b ! b x
4. x c ! x b c c
1 1
1 2
5. b x ! x b
6. a x ! a a x
2 2
2 1
2 N (a) reprezinta numarul de aparitii distincte ale simbolului a ^n forma propozitionala :
Generari de limbaje 8
7. a x2 ! a a
a) sa se determine ce tip de gramatica este G;
b) sa se demonstreze ca L(G) = fan bn cn = n 1g:
Solutie a) Se deduce imediat, folosind Denitia 1.1.7, ca gramatica G este de tip
~
0 (din cauza regulilor 3 si 5 nu este de tip 1);
Se stie ca: \Orice gramatica monotona 3 se poate reduce la o gramatica sensibila
la context" (amanunte ^n Sectiunea 4.3); cum gramatica din Exercitiul 1.2.2 este
monotona, rezulta ca exista G0 de tip 1 echivalenta cu G; deci limbajul generat de G
este de tip 1; asadar, putem spune ca gramatica G este de tip 0; iar limbajul generat
de G este de tip 1 (vom vedea mai t^arziu ca acest limbaj nu este de tip 2):
b) Fiind vorba de multimi, vom proceda prin dubla incluziune.
: Sa demonstram ca
(1) L(G) fan bn cn = n 1g:
Cu alte cuvinte, trebuie sa aratam ca exista o derivare x =) an bn cn ; 8 n 1:
G 0
Procedam ca la Exercitiul 1.2.1, adica vom face mai ^nt^ai o cercetare inductiva.
Pentru n = 1 se obtine: x =) a b c sau x =) a x b c:
0
(1)
G 0
(2)
G 1
Pentru n = 2 obtinem: x =) a x b c =) a b x c =) a b x b c c =) a x b b c c:
0
(2)
G 1
(3)
G 1
(4)
G 2
(5)
G 2
G 2
G 2
a a x b b c c:
1
n 2 n ; n
pas. Deci x =) a x bn cn =G) an x bn cn ; iar a doua derivare
( +1) + 2 (6)
+1 +1 +1 +1 +1
0
G 2 1
n 2 n ; n
este x =) a x bn cn =) an bn cn adica exact armatia (2) pen-
( +1) + 2 (7)
+1 +1 +1 +1 +1
0
G 2
G
tru k = n + 1:
Cu aceasta, ind vericate cele doua etape ale inductiei matematice, rezulta
incluziunea (1): ^Inainte de a trece la cealalta incluziune, vom preciza cum am
dedus numarul k + k 1. Am considerat sirul (ak )k , dat prin a = 1 si
2
1 1
4; dupa care k aplicari a regulii 5 si ^n sf^arsit o aplicare a regulii 6 sau 7). Deci avem:
a =11
ak = ak + 2k + 2
+1
D^and valori lui k 2 f1; 2; :::; n 1; ng si reduc^and \telescopic" termenii din membrul
st^ang cu cei din membrul drept, se obtine an = 1 + 2(n 1) + 2(1 + 2 + ::: + n 1) =
1 + 2(n 1) + n(n 1) = n + n 1: 2
: Sa demonstram ca (3) L(G) fan bn cn =n 1g: Analog cu Exercitiul 1.2.1,
avem doua moduri de abordare:
aratam ca derivarile din armatia (2) sunt singurele posibile, adica vom
demonstra armatia:
2
(4) fw= w 2 V ; 9 x k =k) ; wg fak x bk ck ; ak bk ck g
+ 1
0
G 1
(ii) ^n orice forma propozitionala avem: a < x < c; a < x < c; a < b < c;
1 2
Pasul inductiv: Presupunem ca armatia (4) este adevarata pentru k = n si o
demonstram pentru k = n + 1: Mai ^nt^ai, sa observam ca derivarea x =) an bn cn
G 0
La fel, singura regula care se poate aplica este 3; de altfel pe care o vom aplica de
n 1 ori. Obtinem:
n
an b x bn cn = 1 ) an bn x cn
1
G
1
1
Generari de limbaje 10
Acum, singura regula care se poate aplica este 5; pe care o vom aplica de n ori:
an b n x b cn +1
=n) an x bn cn +1 +1
2
G 2
Abia acum avem \nedeterminism", adica putem aplica regula 6 sau 7: Rezulta, deci,
singurele formele propozitionale de forma an x bn cn si an bn cn : +1
1
+1 +1 +1 +1 +1
(n + 1) + (n + 1) 1:
2
reguli P este:
1. x ! a x x x
0 0 1 2
2. x ! a x x
3. x x ! x x
0 1 2
2 1 1 2
4. a x ! a b
5. b x ! b b
1
6. b x ! b c
2
7. c x ! c c
2
G G
Pasul inductiv: Presupunem armatia adevarata pentru k = m si o demonstram
pentru k = m + 1: Folosind ipoteza inductiva si regulile 1 sau 2, obtinem:
m; m
x = ) a x (x x )m =) am x (x x )m sau
0
G 0 1 2
(1)
G
+1
0 1 2
+1
Generari de limbaje 11
m; m
x =) a x (x x )m =) am (x x )m
0
G 0 1 2
(2)
G
+1
1 2
+1
ak bk ck :
Numarul de pasi care s-a facut ^n derivarea precedenta este k k +1+ k 1+1+ (
2
1)
k 1 = k k : Daca dorim sa vedem c^ati pasi sunt ^n total (adica, pentru derivarea
( +3)
x =) ak bk ck ), adunam k; si obtinem k k pasi. Putem astfel spune ca s-au facut
2
( +5)
0
G 2
kk
( +3)
2
1, pasi p^ana la obtinerea cuv^antului ak bk ck ; deci tot O(k ): Deci \cea mai 2
buna" dintre acestea este cea din Exercitiul 1.2.4. Ca tema, studiati si gramaticile
echivalente din Exercitiul 1.3.18.
: Vom demonstra aceasta incluziune folosind invarianti. Din derivarile precedente,
se deduce destul de usor ca putem alege invariantii:
(i) L(G) fa; b; cg ; +
c; 8 2 F P (G);
(iii) N (a) = N (x ) + N (b) = N (x ) + N (c); 8 2 F P (G):
1 2
^Inainte de a trece la demonstrarea lor, sa observam ca relatiile (i), (ii) si (iii) implica
L(G) fan bn cn =n 1g: Din (i), deducem ca L(G) contine numai cuvinte peste
fa; b; cg: ^In ceea ce priveste (ii), cazul c^and N (x ) 6= 0; lucrurile stau putin diferit. 0
Initial se aplica de un numar de ori regula 1 (caz ^n care N (x ) = 1), apoi regula 2 0
(caz ^n care N (x ) = 0). Aceasta derivare este singura posibila la ^nceput, deoarece
0
x nu apare ^n partea dreapta dec^at a regulii 1 (si este o singura aparitie). Deci, se
0
deci de acum ^nainte ne ocupam de acest caz. Astfel, din a < b si b < c; 8 2
F P (G); rezulta ca simbolurile a apar ^naintea lui b; care, la r^andul lor, apar ^naintea
simbolurilor c: Cum L(G) contine numai cuvinte terminale, rezulta ca lu^and ^n (iii)
N (x ) = 0 si N (x ) = 0; obtinem N (a) = N (b) = N (c): Deci, avem L(G)
1 2
fan bn cn = n 1g:
Trecem acum la demonstrarea invariantilor.
(i) Imediat, din VT (G) = fa; b; cg si din Denitia 1.1.5;
Generari de limbaje 12
(ii) Vom demonstra cele sase relatii prin inductie dupa lungimea derivarii, pe care
o notam cu k:
Baza: Pentru k = 1, avem x =) a x x x sau x =) a x x , deci pentru
(1) (2)
0
G 0
G 1 2 0 1 2
implicati nu apar unul dupa altul ^n partea dreapta a reguli 6. Invariantul b < c este
adevarat deoarece b apare ^naintea lui c ^n partea dreapta a regulii 6.
Analog, se demonstreaza si celelalte cazuri.
(iii) La fel, vom utiliza inductie dupa lungimea derivarii (pe care o notam cu k).
Baza: Pentru k = 1; obtinem formele propozitionale 2 fa x x x ; a x x g: Se 0 1 2 1 2
x =n;) si sa demonstram pentru 8 2 F P (G); x n=); : Este clar ca din +1
0
G G 0
n ;
x =) rezulta ca exista 2 (V [ V ) astfel ^nc^at
+1
N T +
0
G
=) :
x =n;)
0
G G
Din ipoteza inductiva, avem
N (a) = N (x ) + N (b) = N (x ) + N (c):
1 2
Dar =) ^nseamna aplicarea unei reguli din G: De exemplu, daca se aplica regula
G
1, avem N (a) = N (a) + 1; N (x ) = N (x ) + 1; N (x ) = N (x ) + 1; si, deci, ^n
1 1 2 2
nal, obtinem
N (a) = N (x ) + N (b) = N (x ) + N (c):
1 2
Analog se verica si pentru celelalte reguli. Asadar, am demonstrat (iii), deci inclu-
ziunea L(G) fan bn cn = n 1g este aratata.
Exercitiul 1.2.4 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de re-
guli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c
Generari de limbaje 13
a a a b b c B c =) a a a b b B c c =) a a a b b b c c c
(4) (3)
G G
Putem astfel presupune ca
(1) L(G) = fan bn cn = n 1g:
Ca de obicei, procedam prin dubla incluziune.
: Demonstram ca an bn cn 2 L(G): Sa gasim deci o derivare A =G) an bn cn ; 8 n 1:
Mai ^nt^ai, vom demonstra prin inductie dupa k armatia:
wg;
(2) fak b c B k ; ak A B k g fw=A =k;)
1
8 k 2 N :
G
G G
Pasul inductiv: Presupunem armatia (2) adevarata pentru k = m si o demon-
stram pentru k = m + 1: Folosind ipoteza inductiva si regulile 1 sau 2; obtinem:
m; m m; m
A= )
G
a A B m =) am b c B m sau A =
G
(1)
+1
) a A B m =G) am A B m .
G
(2)
+1 +1
G G G
;m
=) ak bm B cm B k m =) ak bm cm B k m :
(4) 1 (3)
1 +1 +1 1
G G
Fiind demonstrate cele doua etape ale inductiei matematice, rezulta ca armatia (3)
este adevarata. Particulariz^and acum j = k ^n relatia (3); obtinem derivarea
(4) ak b c B k =) ak bk ck :
1
G
Dar, din relatia (2); rezulta ca exista derivarea
(5) A =) ak b c B k : 1
(ii) ^In orice forma propozitionala avem: a < A < B; b < B; a < b < c;
(iii) N (a) = N (B ) + N (b) = N (B ) + N (c); 8 2 F P (G):
Pentru simplitate, vom proceda prin prima metoda. Plecam de la simbolul de
start. Putem aplica doar regulile 1 sau 2. Deci putem ajunge la formele propozitionale
a b c sau a A B: Din a b c nu mai putem deriva nimic si se obtine incluziunea (6) pentru
n = 1:
Pentru a A B nu se mai poate aplica dec^at 1 sau 2: Deoarece aplicarea regulii 1
implica faptul ca nu se mai poate aplica apoi regula 2, rezulta ca putem presupune,
fara a restr^ange generalitatea, ca se aplica regula 2 de c^ateva ori, sa zicem de k ori,
si apoi se aplica regula 1: Mentionam ca pe parcursul aplicarii regulii 2 nu se puteau
aplica regulile 3 si 4: Deci am obtinut forma propozitionala:
ak b c B k 1
Generari de limbaje 15
Vom demonstra ca de aici, vom deduce, ca unic cuv^ant, ak bk ck : ^In mod unic, se
poate aplica doar regula 4; si obtinem ak b B c B k : Acum se pot aplica doar regulile 2
i = k + k + ::: + ks ; m = j + j + ::: + js + i g
1 1 2 1 1 2 1
Baza: Se verica imediat pentru m = 0 ca are loc relatia (7);
Pasul inductiv: Presupunem relatia (7) adevarata pentru m si o demonstram
pentru m + 1. Astfel, avem derivarea:
m; k i1
k b c B k = ) a b B j1 ck1 B j2 ck2 :::ck 1 B j c B k m ;
1
G
+1 s s
unde i = k + k + ::: + ks
1 1 2 1 si m = j + j + ::: + js + i : Este clar ca putem aplica
1 2 1
ck 1 B j c B k m : Notam i0 = i +1; j 0 = 0; k0 = 1; j 0 = j 1; k0 = k ; j 0 =
s s
j ; :::; ks0 = ks ; js0 = js : Sa vericam conditiile din pasul inductiv. Avem
1 1 1 1 2 1 2 1 3
1 2 1 1 2 +1 1
^n cazul aplicarii regulii 4, aceasta se poate aplica ^n mai multe locuri.
Fara a restr^ange generalitatea, presupunem ca s-a aplicat ^n pozitia t
(t = 1; n), adica ak bi1 B j1 ck1 B j2 ck2 :::B j ck B j +1 :::ck 1 B j c B k m =)
(4)
+1 t t t s s
G
ak bi1 B j1 ck1 B j2 ck2 :::B j ck B c B j +1 :::ck 1 B j c B k m :
+1 t t 1 t 1 s s
jt
anume, i0 = i = k + k + ::: + kt + kt 1 + 1 + kt + ::: + ks = k0 + k0 +
+1 1 +1
1 2 +1 +2 +1 1
Cu aceasta, demonstratia incluziunii (7) s-a ^ncheiat. Deci limbajul generat de gra-
matica este fan bn cn = n 1g:
Gramaticile din Exercitiile 1.2.2, 1.2.4 si 1.2.3 genereaza acelasi limbaj, dar sunt
distincte. O gramatica este cu at^at mai simpla (\mai redusa") cu c^at are mai putine
reguli. Dintre acestea, gramatica din Exercitiul 1.2.4 este cea mai redusa.
Exercitiul 1.2.5 Fie gramatica G = (fS; A; B; C g; fag; S; P ); unde regulile P
sunt urmatoarele:
1. S ! B A B
Generari de limbaje 16
2. B A ! B C
3. C A ! A A C
4. C B ! A A B
5. A ! a
6. B !
a) sa se determine tipul gramaticii G ;
b) sa se demonstreze ca L(G) = fa2 = n 0g:
n
Solutie a) Datorita regulilor 3 si 6, rezulta ca gramatica G nu este de tip 1; deci
este de tip 0. Datorita regulii 6; gramatica G nu este monotona, deci nu stim daca
se poate reduce la o gramatica de tip 1; totusi, daca facem o mica modicare, prin
considerarea simbolului B terminal (sa zicem ''), atunci dispare regula 6; si deci
gramatica G0 obtinuta este monotona. Astfel G se poate reduce la una de tip 1,
limbajul generat ind L(G0 ) = f a = n 0g: Asadar, cu exceptia \capetelor"
n
2
G
(5)
G
(6) (6)
G
; ;
Pentru n = 1 avem S =) B A B =) B C B =) B A A B =) B a a B =)
G G G
(1)
G
(2)
G
(4) (5) (5) (6) (6)
a a; deci aa 2 L(G);
Pentru n = 2 avem S =) B A B =) B C B =) B A A B =) B C A B =)
G G
(1)
G
(2)
G G
(4) (2) (3)
B A A C B =) B A A A A B =) a a a a; unde ^n ultima derivare (=)) se
(4)
G G G
^ntelege ca s-au aplicat de patru ori regula 5 si de doua ori regula 6:
+1
Sa demonstram ca din cuvinte de forma B A B obtinem B A B sau a (fara
j j j
2 2 2
cazuri:
Cazul I: Se aplica regula 2 si obtinem:
B A B =) B C A B
j (2) j
2 2 1
elimina C; deci nu putem obtine cuvinte din limbaj. Daca aplicam 6 la ultimul
B nu mai putem elimina neterminalul C: Daca aplicam 6 la primul neterminal
B obtinem C A +1 B dupa care suntem obligati sa aplicam regula 3 de 2j 1
j
2 1
ori si obtinem A C B , altfel daca aplicam 5 sau 6 obtinem cuvinte din care
j
2 2
Generari de limbaje 17
nu +1putem elimina C: ^In continuare, putem aplica numai 4; 5 si 6 si obtinem
a :
j
2
; +1 +1
BCA B =) B A C B =) B A B
j (3) j (4) j
2 1 2 2 2
B A B =) B Al a A l B:
j (5) j
2 2 1
{ b) l > 0: Se pot aplica regulile 5 si 6 si se obtine a sau se poate aplica
j
2
posibile:
{ a) Se aplica regula 6 primului B , deci se obtine cuv^antul A B: Mai departe
j
2
6 se obtine a :
j
2
Deci, ^n concluzie, am demonstrat ca singurele derivari care conduc la cuvinte din
limbaj sunt:
B A B =) B A B
+1
(1)
j j
2 2
G
(2) B A B =) a
j j
2 2
G
B A B =) a
+1
(3)
j j
2 2
G
Sa demonstram ca L(G) = fa = n 0g: La fel, procedam prin dubla incluziune.
n
2
un k arbitrar, k 2: 0
Avem derivarea S =) B A B . Dar cuv^antul B A B = B A B , deci vom aplica 2
G
(1) de k ori si vom obtine
; ; ;
B =) B A B =) B A B =) a :
(1) k (5) (6) k
2 2
G G G
Generari de limbaje 18
: Fie p 2 L(G). Rezulta ca avem derivarea S =) p: Dar derivarea S =) p trebuie
G G
sa e de forma S =) B A B =) p si cum B A B este de forma B A B cu j = 0 si
j
2
G G
noi am demonstrat ca din B A B se obtin cuvinte formate din terminali numai de
j
2
! Solutia se putea prezenta demonstr^and prin inductie dupa n armatia
~
unde am presupus, fara a restr^ange generalitatea, ca regula 2 s-a aplicat de n ori.
Daca notam cu f (n) numarul de aparitii ale simbolului neterminal A unde n este
numarul de aplicari ale regulii 2 (sau, echivalent numarul de aparitii distincte ale
simbolului neterminal C ), atunci gramatica G \calculeaza" functia exprimata recursiv:
f (0) = 1;
f (n) = 2 f (n 1);
8 n 1:
Evident, limbajul generat de G se poate scrie L(G) = faf n = 8 n 0g: ( )
G
Generari de limbaje 19
G
(9)
G
; ;
Pentru n = 2 putem considera derivarea S =) A A B B =)
(3)
G
(8) (9) +
G
aaaa
Pentru n = 3 consideram derivarea S =) A A B B =) X A A B B =)
(3)
G
(4)
G
(5)
G
A X A B B =G) A A X B B =G) A A A A B X B =G)
(5) (6) (6)
; ;
=) A A A A B A A B X =) A A A A B A A B B =) a
(6) (7) (8) (9) +
9
G G G
Astfel, putem acum sa formulam armatia pe care o vom demonstra prin inductie
dupa n:
Daca notam cu (1) derivarea S =a) ; 2 fA; B g , atunci avem: n
G
(i) = Ai1 B j1 ::: Ai B j ; k k
(iii) i + i + ::: + ik = n n;
1 2
2
(iv) j + j + ::: + jk = n:
1 2
an = an + (n 1) + 2: 1
2
3 2
2(n 2) + n n n = n n n :
( 1) (2 1) 2 3 +13 24
Cum pasul initial al inductiei a fost deja facut (pentru n 2 f0; 1; 2; 3g), ^n
6 6
G
a +1 0
prietatile (i),(ii),(iii),(iv). Sa demonstram ca forma propozitionala 0 cu S =) n
G
satisface proprietatile:
(i') 0 = As1 B t1 ::: As B t ; h h
(iv') t + t + ::: + th = n + 1:
1 2
G
Se vede ca (i') este imediata. Punctul (ii') rezulta din (ii) deoarece aplicarea
regulilor 4; 5; 6; 7 nu micsoreaza numarul de aparitii a lui A si B: Sa demonstram
acum punctele (iii') si (iv'). Aplicarea regulilor 4 si 5 nu afecteaza numarul de aparitii
a lui A sau B: ^In schimb, aplicarea regulii 6 va determina aparitia a doua simboluri A
Generari de limbaje 20
pentru o aparitie a lui B: ^In sf^arsit, regula 7 implica aparitia unui simbol B: Asadar,
obtinem:
(iii') s + s + ::: + sh = i + i + ::: + ik + 2(j + j + :::jk ) = n n + 2n =
1 2 1 2 1 2
2
(n + 1) (n + 1);
2
7). Astfel, putem presupune, fara a restr^ange generalitatea, ca pentru formele
propozitionale ale gramaticii G, exista cel mult un X ;
daca se aplica regula 5 obtinem forma propozitionala A A X B B de unde
aplic^and regula 6 de doua ori obtinem A A A A B A A B X . Acum X \va dis-
pare"
2
cu regula 7 si obtinem A2 B A B , care folosind regulile 8; 9 obtinem
4 2 2
2
De aici rezulta, utiliz^and regulile 8 si 9, cuv^antul an :
~
Astfel am demonstrat si cealalta incluziune.
Un alt mod de a demonstra incluziunea este arat^and prin inductie dupa n ca
f= S =) ; 2 fA; B g g f A n
G
2(
B A n B ::: A B B g
1) 2( 2) 2
~ Daca notam cu f (n); g (n) si NA(X ) numarul de aparitii distincte ale simbolului
neterminal A; B; respectiv ale lui X , pentru n = NA(X ); gramatica G \calculeaza"
functiile exprimate recursiv:
8
> f (0)
= 2;
<
g(0) = 2;
: f (n) = f (n 1) + 2 g (n 1); 8 n 1;
>
g(n) = g(n 1) + 1; 8 n 1:
Evident, limbajul generat de G se poate scrie L(G) = f af n ( 2)+ (gn 2)
= 8 n
2g [ f ; a g:
Generari de limbaje 22
G
(6)
G
(7)
G
(2)
G 1
(4)
G 1 1
(6)
G
i i C =) i i
(7)
1 1
G 1 1
; ;
Pentru n = 2 consideram derivarea S =) i A B i C =) i i A Yi2 i C =)
G G
(1) (2) (4)
G 1 1
(2)
1 2 1
(3)
i i A i Yi2 C =) i i A i B i C =) i i A B i i C =) i i i i C =)
(4) (5) (6) (7)
1 2 1
G 1 2 1 2
G 1 2 1 2
G 1 2 1 2
G
i i i i
1 2 1 2
;n
=) i i ::: ik ik A Yi +1 i i ::: ik C =)
(2) (3)
G 1 2 +1
G k 1 2
;n
=) i i ::: ik ik A i i ::: ik Yi +1 C =)
(3) (4)
G 1 2
G
+1 1 2 k
;n
=) i i ::: ik ik A i i ::: ik B ik C =)
(4) (5)
G 1 2 +1 1 2 +1
G
;n
=) i i ::: ik ik A B i i ::: ik ik C:
(5)
G 1 2 +1 1 2 +1
ak = ak + 2k + 2: +1
ai derivarii pentru obtinerea unui cuv^ant terminal (de forma w w; cu jwj = k) este
k + k + 3:
2
: La fel ca la Exercitiul 1.2.6, vom arata ca acestea sunt singurele cuvinte generate
de gramatica G:
La ^nceput, se poate aplica doar regula 1 (care se aplica numai acum deoarece
S nu mai apare ^n partea dreapta a vreunei reguli). Obtinem forma propozitionala
A B C: ^In acest moment, se poate aplica regula 2; 6; sau 7 :
daca se aplica regula 6, atunci obtinem C , de unde ind obligati sa aplicam
regula 7, obtinem , care este un cuv^ant de forma w w; w = ;
daca se aplica regula 7, atunci se obtine A B si deci se poate aplica 2 sau 6:
{ daca se aplica 6; se obtine (de forma w w; cu w = );
{ daca se aplica 2; obtinem i A Yi (i 2 f0; 1g), si nu mai ce regula sa aplicam;
daca se aplica regula 2 se obtine i A Yi C; care, daca aplicam 7 ne \blocam", iar
daca aplicam 4 obtinem i A B i C:
Astfel, putem trage concluzia ca regula 7 se aplica \la sf^arsit" (adica dupa aplicarea
regulii 6), altfel ar conduce la blocaj.
Deci, putem presupune ca ajungem la forma propozitionala generala
w A B w C; w = i i ::: in; ij 2 f0; 1g; j = 1; n:
1 2
Vom arata ca singurele cuvinte care se pot obtine de aici sunt w w si w i A B w i C .
! Aici singurele cuvinte se refera la primul cuv^ant terminal care se obtine, res-
pectiv la prima forma propozitionala care \seamana" cu cea de la care am pornit
(forma generala).
^In acest sens, putem aplica regula 6; 7 sau 2:
Exercitii propuse spre rezolvare 24
~
s-a ^ncheiat.
^In generarea unui astfel de cuv^ant (de forma w w; w 2 f0; 1g ), este esential
sa stim care este \mijlocul" sau si care este \sf^arsitul" sau. Astfel grupul de neter-
minali A B reprezinta mijlocul cuv^antului si neterminalul C reprezinta capatul din
dreapta. Presupunem ca ne referim la forma propozitionala w A B w C: Pentru a ge-
nera w a A B w a C; a 2 f0; 1g parcurgem urmatorii pasi:
\distrugem" simbolul B; inser^and la st^anga lui A un simbol a; iar la dreapta
un neterminal (marcator) asociat acestui a; sa zicem Ya ; tinem cont ca mijlocul
cuv^antului este marcat prin A; forma propozitionala arata acum w a A Ya w C ;
trebuie sa parcurgem cu acest Ya subcuv^antul w; ne oprim c^and ^nt^alnim mar-
catorul de sf^arsit C ; forma propozitionala arata acum w a A w Ya C ;
acum trebuie sa transformam Ya ^ntr-un simbol a (si, eventual, ^ntr-un mar-
cator care trebuie sa parcurga ^napoi w p^ana la mijlocul cuv^antului); forma
propozitionala arata acum w a A w B a C ;
asa cum am spus mai sus, simbolul B ajunge la mijlocul cuv^antului; forma
propozitionala arata acum w a A B w a C :
Putem alege gramatica G = (fS g; fa; bg; S; fS ! a S j b S j g); care este de tip 3.
Exercitiul 1.3.2 Fie gramatica G = (fAg; fa; bg; A; P ) cu regulile P de forma A !
a a A j b j : Sa se determine tipul gramaticii si sa se arate ca G genereaza limbajul
L = fa agb [ fa ag:
Exercitiul 1.3.3 Sa se gaseasca o gramatica G (de tip c^at mai mare) care sa
genereze limbajul L = fw= w 2 f0; 1g ; 2=Nw (0); 2=Nw (1)g; si sa se arate ca
L(G) = L:
X ! 1 X j 0 X ; X ! 1 X j 0 X ; X ! 1 X j 0 X g):
1 0 2 2 3 1 3
1 2
2
3
0
0 0 1 3
Exercitiul 1.3.4 Sa se gaseasca o gramatica G (de tip c^at mai mare) care sa
genereze limbajul L = f0m 1n 2p = m; n; p 2 Ng; si sa se arate ca L(G) = L:
Exercitiul 1.3.6 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bm cn = m; n 1g:
Exercitiul 1.3.7 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bm cm = m; n 1g:
~
b x c j g).
0 1 1
Exercitiul 1.3.8 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bn cm = n; m 1g:
Exercitiul 1.3.9 Sa se arate ca gramatica G = (fS; A; B; C; Dg; f0; 1; 2g; S; P ) cu
regulile P :
1. S ! A B j C D
2. A ! 0 A 1 j
3. B ! 2 B j
4. C ! 0 C j
5. D ! 1 D 2 j
genereaza limbajul L = f0i 1j 2k =i = j sau j = k g:
Exercitiul 1.3.10 Sa se gaseasca o gramatica (de tip c^at mai mare) care sa genereze
limbajul L = f0i 1j 2k = i = j sau i = k sau j = k; i; j; k 2 Ng:
limbajul L = fan w=n 1; w 2 fb; cg ; jwj = 2ng:
+
genereaza expresiile aritmetice care se pot construi cu simbolurile din multimea
f+; ; (; ); ag:
! Gramatica G din Exercitiul 1.3.12 este sub forma normala operator 5 . Se
observa ca daca redenumim toti neterminalii la fel 6 , obtinem gramatica G0 =
(fE g; f+; ; (; ); ag; E; fE ! E + E j E E j ( E ) j ag); echivalenta cu G:
Exercitiul 1.3.13 Sa se arate ca gramatica G = (fS; T g; f1; +; =g; S; fS ! 1 S 1 j +
T; T ! 1 T 1 j =g) genereaza limbajul L = f1n + 1m = 1m n =m; n 0g: +
5^In partea dreapta a regulilor nu exista doi neterminali consecutivi (vom reveni ^n Sectiunea 3.5).
6 Aceste gramatici sunt utile ^n tehnicile de constructie a compilatoarelor, G ind gramatica de
precedenta slaba [1, 7]
Exercitii propuse spre rezolvare 27
Exercitiul 1.3.14 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul
L = fan bn am bm = m; n 0g:
Exercitiul 1.3.15 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul
L = fan bn k ck = n; k 0g:
+
ale lui w:
! Limbajul L din Exercitiul 1.3.16 se numeste limbajul lui Dyck.
Exercitiul 1.3.17 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul
L = fw= w 2 fa; bg; Nw (a) = Nw (b)g:
(b) X ! abX
0 2
(c) X X !X X
2 1 1 2
(d) bX ! bb
1
(e) X !c
2
(b) A ! abC
(c) CB !EB
(d) EB !EF
(e) EF !BF
(f) BF !BC
(g) C !c
(h) bB ! bbc
7. G7 = (fX0 ; X1 ; X2 ; X3 ; Y; Z g; fa; b; cg; X0; P7 ) cu regulile P7 :
(a) X !X Y
0 1
(b) X ! aX c
1 1
(c) X c ! X cZ
1 2
(d) aX ! abX
2 3
(e) X c ! cX
3 3
(f) X Z c ! X cZ
3 2
(g) cX ! X c
2 2
(h) bX ! bbX
2 3
(i) X ZY !
3
Solutia I: generalizarea Exercitiului 1.2.3; se alege gramatica monotona G =
(fx ; x ; :::; xk g; fa ; a ; :::; ak g; x ; P ) unde regulile P sunt:
1 2 1 2 1
1. x ! a x x x ::: xk
2. x ! a x x ::: xk
1 1 1 2 3
1 1 2 3
3. xj xi ! xi xj ; 8 i; j; 2 i < j k ;
4. a x ! a a
1 2 1 2
5. ai xi ! ai ai ; 8 i = 2; k 1;
6. ai xi ! ai ai ; 8 i = 2; k 1;
7. ak xk ! ak ak
+1 +1
! Sunt k2 k reguli si k neterminali, adica O(k ) reguli si O(k) neterminali.
+ +2
2
1. S ! A a ::: ak
2. A ! A a X
1 2
1 1 1 1
3. Xi ai ! ai Xi ; 8 i = 1; k 1;
4. Xi ai ! ai ai Xi ; 8 i = 1; k 2;
5. Xk ak ! ak ak
+1 +1 +1 +1
6. A ! a
1 1
! Sunt 2k + 1 reguli si k + 1 neterminali, adica O(k) reguli si O(k) neterminali;
retinem ca aceasta gramatica este mai redusa dec^at prima (^n plus, este si \determi-
nista").
Exercitiul 1.3.21 Sa se gaseasca o gramatica care genereaza limbajul
Putem alege gramatica G = (fS; A; B; X g; fa; bg; S; fS
L = fan bm an bm = m; n 1g:
! A b; A !
a A a j B j b; B ! b B X j b; X a ! a X; X b ! b bg):
Exercitiul 1.3.22 Sa se gaseasca o gramatica care genereaza limbajul
2: A ! A a X j a
3: X a ! a X
1
1 1
4: X b ! b b X
1 2
5: X b ! b X
6: X c ! c X
2 2
2 2
Exercitii propuse spre rezolvare 31
7: X a ! a a X
2 3
8: X a ! a X
9: X b ! b b
3 3
L = fai bi ci k = i 1; k x; k 0g:
+
L = fan bn cm = m; n 1; m ng:
L = fan bn cm = m; n 1; n m 2 ng:
L = fai bj ck = i; j; k 0; i 6= j 6= kg:
L = fai bj ck = i; j; k 1; i 6= j 6= k 6= ig:
unde:
L 1 = fai bj ck = i > j > k > 0g;
L = fai bj ck = j > i > k > 0g;
= fai bj ck = i > k > j > 0g;
2
L 3
L 6
Exercitii propuse spre rezolvare 32
G 2 2
G 3 = (fS; A; B; X g; fa; b; c; g; S; f1; 3; 9; 10; 11; 12; 13; 26; 27g);
3
G = (fS; A; B; C; X g; fa; b; c; g; S; f1; 3; 20; 21; 22; 23; 24; 25; 26; 27g);
= (fS; A0 ; B 0 ; X g; fa; b; c; g; S; f2; 28; 34; 35; 36; 37; 38; 39; 40g);
4 4
G
= (fS; A0 ; B 0 ; X g; fa; b; c; g; S; f2; 28; 29; 30; 31; 32; 33; 39; 40g);
5 5
G 6 6
Exercitiul 1.3.28 Sa se arate ca gramatica G = (fS; D; Lg; fag; S; P ); unde regu-
lile P sunt 1: S ! S D; 2: S ! L; 3: a D ! D a a; 4: L D ! L a; L ! a; genereaza
limbajul L = fa = n 0g:
n
2
0g:
Exercitiul 1.3.30 Sa se gaseasca o gramatica care genereaza limbajul Lk =
fak = n 0g; k 2 natural xat.
n
Exercitii propuse spre rezolvare 33
Se poate alege gramatica G = (fS; A; X; Y g; fag; S; P ) unde regulile P sunt:
1. S ! Y A Y
2. Y A ! Y X
3. X A ! A | A{z::: A} X
de k ori
4. X Y ! A | A{z::: A} Y
de k ori
5. A ! a
6. Y !
! Se observa ca sunt 6 reguli si 4 neterminali, deci avem O(1) reguli si O(1)
neterminali. Vom vedea ca ^n cazul gramaticilor care genereaza alte tipuri de functii
(nk ; nk + nk+1 + ::: + 1; P (n)), vor necesare mai multe reguli (care vor depinde de
k).
3
Exercitiul 1.3.31 Sa se gaseasca o gramatica care genereaza limbajul L = f an
= n 0g:
Exercitiul 1.3.32 Sa se gaseasca o gramatica care genereaza limbajul Lk = f an
k
de Ck1 ori
! a; 8 j = 0; k:
de Cki ori
7. Aj
! Se observa ca sunt 2k + 6 reguli si k + 3 neterminali, deci avem O(k) reguli si
O(k) neterminali.
Exercitiul 1.3.33 Sa se gaseasca o gramatica care genereaza limbajul
1 :::
L = f an n = n 0g;
k k
+ + +1
Se poate alege gramatica sensibila la context
G = (fS; A ; A ; :::; Ak ; X g; fag; S; P );
0 1
5. X Ak ! A0 A1 A2 ::: Ak 1 Ak
6. Ai ! a; 8 i = 0; k:
! Se observa ca sunt 2k + 5 reguli si k + 3 neterminali, deci avem O(k) reguli si
O(k) neterminali.
Exercitiul 1.3.34 Sa se gaseasca o gramatica care genereaza limbajul
L = faP n = n 0g;
( )
P:
1. S ! A C
2. A ! i A Yi ; 8 i 2 f0; 1g;
3. Yj i ! i Yj ; 8 i; j 2 f0; 1g;
4. Yi C ! i C; 8 i 2 f0; 1g;
5. A !
6. C !
a) sa se determine tipul gramaticii G;
b) sa se demonstreze ca L(G) = fw w= w 2 f0; 1g g:
Exercitiul 1.3.37 Fie (an )n sirul lui Fibonnacci . Sa se gaseasca o gramatica
7
0
1. S ! a 13. B A ! A B 6 6
2. S ! A X B Y 14. X A ! A X
3. A ! A A A 15. A A ! A A
6 7
1 2 7 7
4. A A ! A A
2 16. A A A ! A A A
2 1 7 1 2
5. A X ! X A 17. A A X ! A
6. A B ! B A 18. A B ! A A
2 3 1 7 8
3 3 8 8
7. A Y ! Y B A
3 19. A Y ! X
4 8
8. A B ! A B 20. A ! a
9. A ! A Y 21. B ! a
4 5
4 5
10. A Y ! A Y 22. X !
11. B A ! A B 23. Y !
4 5
~
5 5
12. Y A ! A Y 5 6
de an+2 ori
! Metoda a II-a: ([13]) Putem alege gramatica G = (fS; A; B; X; Y; Z g; f; ag;
S; P ); cu regulile P :
1. S ! a
7 a0 = a1 = 1; an+2 = an+1 + an ; 8 n 2 N:
Exercitii propuse spre rezolvare 36
2. S ! a a
3. S ! X A B
4. X A ! A B X
5. X B ! A X
6. X ! Y
7. A Y ! Y A
8. B Y ! Y B
9. Y ! X
10. Y ! Z
11. Z A ! a Z
12. Z B ! a Z
13. Z !
Metoda a III-a: (Reducerea celei de-a doua metode)
Putem alege gramatica G = (fS; A; B; X g; f; ag; S; P ); cu regulile P :
1. S ! a
2. S ! A B
3. A ! X A
4. X A ! A B X
5. X B ! A X
6. X !
7. A ! a
8. B ! a
Exercitiul 1.3.38 (generalizarea Exercitiului 1.3.37)
Fie (an )n un sir dat prin urmatoarea recurenta:
0
(a = p
0 0
a =q
an = p an + q an ; 8 n 2; p; q 2 N
1 0
1 2
Sa se gaseasca o gramatica care genereaza limbajul L = f aan =n 0g:
Consideram gramatica G de mai jos cu 6 neterminali si 15 reguli, ^n care regulile
1; 2; 3 sunt de start, regulile 4; 5 creeaza recurenta, regulile 6 10 conduc la terminali,
iar regulile 11 15 conduc la urmatoarea forma propozitionala. Fie gramatica G =
(fS; A; B; X; Y; Z g; f; ag; S; P ); cu regulile P :
1. S ! ap0
2. S ! aq0
3. S ! X Ap0 B q0
4. X A ! Ap C X
5. X B ! B q X
6. X ! Y
7. A Y ! Y a
8. B Y ! Y a
Exercitii propuse spre rezolvare 37
9. C Y ! Y
10. Y !
11. X ! Z
12. A5 Z ! Z A
13. B Z ! Z A
14. C Z ! Z B
15. Z ! X
Automate nite
2.1 Introducere
Denitia 2.1.1 Se numeste automat nit determinist (notatie AFD) un 5-uplu
A = (S; ; Æ; s ; F ) unde:
0
38
Introducere 39
Notatia 2.1.1 ^In reprezentarea unui automat nit cu ajutorul grafului de tranzitie,
se fac urmatoarele conventii:
\cercul" ce deneste starea initiala sa aiba o \sageata" care atinge cercul;
\cercurile" starilor nale sa e dublate de ^nca un cerc concentric (pentru exem-
plicare, consultati Exercitiul 2.1.1).
Exercitiul 2.1.1 Fie automatul dat prin graful de tranzitie (sau, echivalent, prin
tabela de tranzitie):
A = (fs ; s ; s g; fa; bg; Æ; s ; fs ; s g)
1 2 3 1 2 3
Z~# #
a
a b
S
- b
"!
SoS
s
1
"!
7
a
s2
s 1 s1 s2
S a
#
s s s
SS
b b
2 1 3
S / s s s
"!
3 2 1
s3
Æ(Æ(Æ(s ; a a); b); b) = Æ(Æ(Æ(Æ(s ; a); a); b); b) = Æ(Æ(Æ(s ; a); b); b) = Æ(Æ(s ; b); b) =
1 1 1 1
Æ(s ; b) = s : Acum, folosind Denitia 2.1.3 si faptul ca s 2 F; rezulta ca a a b b 2
2 3 3
L(A):
Pentru al doilea cuv^ant, se poate proceda analog. Noi, ^nsa, vom da o
solutie bazata pe Exercitiul 2.10.1 sau prima parte a Observatiei 2.1.1. Astfel,
avem Æ(s ; a b b b) = Æ(Æ(s ; a); b b b) = Æ(s ; b b b) = Æ(Æ(s ; b); b b) = Æ(s ; b b) =
1 1 1 1 2
Exercitiul 2.1.2 Sa se construiasca un automat nit determinist care sa accepte
limbajul L = fa b cn = n 1g:
2
----
Rs c
0
a s 1
b
a; c
s2
b
a; b
s 3
c
s
4
sR
a; c
a; b
b; c
? +
s
a; b; c
5
Pentru simplicarea calculelor, vom face o notatie first : ! [ fg; astfel
first(a w) = a (este vorba de prima litera a unui cuv^ant).
Daca first(w) = b sau first(w) = c, atunci automatul ajunge ^n starea s 5
w 2= L(A); contradictie;
{ daca first(w ) = b atunci w = b w deci Æ(s ; w ) = Æ(Æ(s ; b); w ) =
1 1 2 1 1 1 2
arbitrar.
Obtinem w = a w = a b w = a b b w = a b b c w = a b b c cm, deci exista n 2
1 2 3 4
N ; n = m + 1 astfel ^nc^at w = a b cn : 2
Cu aceasta, ambele incluziuni sunt demonstrate, deci are loc relatia L(A) = L:
Sumatorul binar 41
Sn Rn an bn Sn Rn +1 +1
0,1 0 0 0 0 0
0,1 0 0 1 1 0
0,1 0 1 0 1 0
0,1 0 1 1 0 1
0,1 1 0 0 1 0
0,1 1 0 1 0 1
0,1 1 1 0 0 1
0,1 1 1 1 1 1
Sumatorul binar 42
Citirea acestui tabel se face pe linii. Din starea (Sn ; Rn ) cu simbolul (an ; bn ) ajungem
^n starea (Sn ; Rn ): De exemplu, Æ((0; 1); (1; 0)) = (0; 1):
+1 +1
b) Reprezentarea automatului prin modul tabelar a fost deja facut la punctul a).
^Insa pentru claritate, vom mai prezenta ^nca o reprezentare tabelara a automatului.
Aceasta este mai redusa, av^and doar 4 linii si 4 coloane.
sn nin (0,0) (0,1) (1,0) (1,1)
(0,0) (0,0) (1,0) (1,0) (0,1)
(0,1) (1,0) (0,1) (0,1) (1,1)
(1,0) (0,0) (1,0) (1,0) (0,1)
(1,1) (1,0) (0,1) (0,1) (1,1)
Citirea acestui tabel se face pe linii si pe coloane. Se citeste de pe prima coloana
starea, iar de pe prima linie simbolul din banda de intrare. Apoi, la intersectia
dintre linia si coloana respectiva, se citeste starea ^n care ajungem. De exemplu,
Æ((0; 1); (0; 0)) = (1; 0):
Deoarece ultimele doua linii sunt egale cu primele doua, rezulta ca putem scrie o
forma de reprezentare tabelara si mai redusa.
sn nin (0,0) (0,1) (1,0) (1,1)
(0,0),(1,0) (0,0) (1,0) (1,0) (0,1)
(0,1),(1,1) (1,0) (0,1) (0,1) (1,1)
Cea mai economicoasa reprezentare din punct de vedere a spatiului de memorie este
^nsa denirea analitica a functiei de tranzitie a automatului. Astfel
Æ((Sn ; Rn ); (an ; bn )) = ((an + bn + Rn ) mod 2; (an + bn + Rn ) div 2)
unde a mod b, respectiv a div b; ^nseamna restul, respectiv c^atul, ^mpartirii lui a la b:
Se verica imediat echivalenta cu moduri anterioare de reprezentare a functiei de
tranzitie. De exemplu, Æ((1; 0); (1; 1)) = ((1 + 1 + 0) mod 2; (1 + 1 + 0) div 2) = (0; 1):
O ultima reprezentare pe care o dam este graful de tranzitie. Aceasta este utila
c^and se urmareste acceptarea unui cuv^ant de lungime sucient de mare si este rapida
pentru exemplele care se testeaza intuitiv.
Sumatorul binar 43
#?
~
(0; 0)
#
(0; 1); (1; 0)
"!
"!
-
(1; 1)
(0; 0) (0; 1)
6 (0; 0) 6
(0; 1); (0; 0) (1; 1)
(0; 1);
# #
(1; 0)
(1; 0)
? (1; 1) ?
"!
(1; 0)
(0; 0)
"!
(1; 1)
disjunctiva . 1
Rn $ an $ bn ; 2
(a ^ b) _ (R ^ b) _ (R ^ a):
d) Am vazut deci ca daca Æ((Sn ; Rn ); (an ; bn )) = (Sn ; Rn ) atunci Sn +1 +1 +1
pastreaza suma binara dintre an ; bn si bitul de transport Rn : Pentru a face suma
a doua numere folosind sumatorul binar, trebuie mai ^nt^ai sa reprezentam ^n baza 2
cele doua numere. Astfel, e a = a a :::an si b = b b :::bm . Daca m 6= n; atunci
1 2 (2) 1 2 (2)
se completeaza cu zerouri ^n fata numarul mai mic p^ana se obtine un numar egal de
cifre. Deci se rescriu cele doua numere astfel ^nc^at m = n: Consideram acum perechea
formata din oglinditele acestor doua cuvinte peste f0; 1g: Aceasta va
(an an :::a a ; bn bn :::b b )
1 2 1 1 2 1
1 Pentru orice formula booleana propozitionala F exista o formula booleana propozitionala F 0 ^n
forma normala disjunctiva astfel ^nc^at F 0 F: O formula booleana propozitionala este ^n forma
normal a disjunctiv a daca este o conjunctie de subformule care sunt disjunctii de literali. Un
literal este un atom sau negat ia sa.
2 a $ b (ea _ b) ^ (a_eb) (ea^eb) _ (a ^ b)
Relatiile A;s0 si L 44
Deoarece cuvintele au fost oglindite la ^nceput, pentru a scrie a + b trebuie sa le mai
oglindim o data. Astfel, obtinem:
(
a+b=
Rn Sn Sn :::S S S
+1 +1 3 2 1 (2) daca Rn +1 6= 0
Sn Sn :::S S S
+1 3 2 1 (2) daca Rn +1 =0
Sa facem suma pentru numerele prezentate la punctul d). Din a = 1010 si b = 1101
formam cuv^antul w = (0; 1)(1; 0)(0; 1)(1; 1): Pornind din starea initiala (0; 0) obtinem
sirul tranzitiilor:
(0; 0) ` (1; 0) ` (1; 0) ` (1; 0) ` (0; 1)
Cuv^antul w este acceptat si conform procedeului de mai sus, obtinem a + b = 10111:
0 0
!
L
Referitor la relatiile din Denitia 2.3.1, putem spune ca:
reprezinta functia caracteristica asociata unei multimi, L : A ! f0; 1g
astfel:
L = 1 daca x 2 A
n
0 daca x 2= A
Relatia L se mai numeste si relatia lui Nerode, dupa numele celui ce a denit-o;
Se observa imediat ca A;s0 L (amanunte ^n [9, 10, 11]);
Relatia L se poate deni si fara a avea un automat, ci doar limbajul L :
^In continuare, vom prezenta un exercitiu ^n care se demonstreaza o identitate
necesara pentru simplicarea calculelor din Exercitiul 2.3.2.
Exercitiul 2.3.1 Fie I = fi ; i g: Sa se demonstreze urmatoarea egalitate:
1 2
i I [ fi g fi g i I = fi g [ I i i I :
2 1
+
2
+
1 2
+
2 1
Relatiile A;s0 si L
45
! Reamintim ca i I = fi u=u 2 I g; fi g = fik =k 1g; fi g fi gi I =
fik il i u=k; l 1; u 2 I g:
1 2 1
2 2 1
+
1 1
+
2 1
p 2 fi g fi g i I :
1 2 1 2
+ +
1 2 1
Cazul I: p 2 i I deci p = i u; cu u 2 I ;
2 2
deci p 2 M ;
1 1
2 1 2
si obtinem: p = ik il i i u 2 I i i I :
1 2 1 1 2 1
1
1 2 2 1 2 1
2 1
Cazul I: p 2 fi g 2
+
adica p = ik ; k 1: Scriem p = i ik 2 i I M ; deci 2
1
2 1
p2M :
2 2
{ Subcazul II.2: u = ik u ; k 1; u 2 I ; =) p = i ik u i i v 2 i I
2 1 1 2 2
1
1 2 1 2
M; 1
fi g fi g i I M deci p 2 M ;
1 2 1 2 1
+ +
1 2 1 1 1
^In concluzie, M = M : 1 2
R
s 0
i1
- s 1 i 1
i 2 i
2
?
?
s 3
i1
Y s 2 i 2
i ;i1 2
Deci u = i v: Sa vedem unde \mergem" cu alte simboluri. Deocamdata suntem ^n
1
starea s ; deoarece Æ(s ; i ) = s : ^In starea s putem, eventual, \sta citind" simbolul
1 0 1 1 1
putem citi i de oric^ate ori sau \mergem" cu simbolul i ^n starea s si ne-am blocat.
2 1 3
Deci, cum s este stare nala, cuvintele v care vor genera u 2 L(A); sunt de forma
2 1
1 2 1 2
noteaza doar [si ]; c^and este vorba de un singur automat). Folosind acum Denitia
2.3.1, rezulta ca p A;s0 q () 9 si 2 S astfel ^nc^at p 2 [si ]; q 2 [si ]: ^In acest sens,
vom calcula multimea c^at (factor) relativ la aceasta relatie de echivalenta. ^In cazul
exercitiului nostru, avem:
=A;s = f[s ] ; [s ] ; [s ] ; [s ] g
0 0 A;s 0 1 A;s 0 2 A;s 0 3 A;s 0
Urmarind graful de tranzitie al automatului A; deducem imediat urmatoarele clase
de echivalenta:
[s ] 0 = fp=Æ(s ; p) = s g = fg;
0 A;s 0 0
3 Starea s este stare de blocare daca s 2= F si Æ(s; i) = s; 8 i 2 : Aceste stari au proprietatea
ca acele cuvinte care ajung ^n s; nu sunt acceptate. De aceea, aceste stari se folosesc pentru a putea
deni total functia de tranzitie a automatului.
Relatiile A;s0 si L 47
[s ]
1
0
A;s
= fp=Æ(s ; p) = s g = fi
0 g ; 1 1
+
[s ] 0 = fp=Æ (s ; p) = s g = fi g fi g ;
+ +
2 A;s 0 2 1 2
[s ]
0 = fp=Æ (s ; p) = s g = fi g fi g i I [ i I :
+ +
3 A;s 0 3 1 2 1 2
! E clar ca j =A;s0 j = jS j; adica cardinalul multimii c^at este egal cu numarul
starilor automatului A:
Folosind Exercitiul 2.3.1, multimea de cuvinte din clasa s este [s ] 0 = fi g [ +
I i i I :
3 3 A;s 2
2 1
contradictie, deci q apartine clasei ramase prin eliminare, adica q 2 fg: Astfel,
e subcazurile:
{ Subcazul I.1: Presupunem, prin reducere la absurd, ca q 2 fi g ; adica +
2 2
1 2 2 1 2
1 2 1 2
contradictie;
{ Subcazul I.3: Presupunem q 2 fi g [ I i i I ; deci distingem situatiile:
2
+
2 1
1 2 1 2
2 1 1 2
Æ(s ; u i i v) = s ; contradictie .
0 2 1 3
4
4^In acest subcaz, se vede utilitatea Exercitiului 2.3.1, calculele ind mai rapide.
Relatiile A;s0 si L 48
Cum toate subcazurile au esuat, rezulta prin metoda eliminarii ca q 2 fg;
adica (p; q) 2 A;s0 ;
Cazul II: p 2 fi1 g+ ; adica p = ik1 ; k 1:
{ Subcazul II.1: q = ; si din (p; q) 2 L; rezulta ca L (ik r) = L (r); 8 r 2
: Observam ca acest subcaz este simetric cu subcazul I.1. Mentionam
1
1 1 2
2 2
1) si obtinem 0 = 1;
q 2 I i i I adica q = u i i v: Din (p; q) 2 L ; deducem relatia
L (ik r) = L(u i i v r): Contradictia se obtine pentru r = il ; l 1:
2 1 2 1
1 2 1 2
Deci q 2 fi
g ; si cum p 2 fi g ; rezulta (p; q) 2 A;s0 ;
1
+
1
+
cazuri, de data aceasta vom proceda direct (se poate si indirect, adica analog
cu procedeul din cazurile I si II). Relatia L (p r) = L(q r) pentru r = devine
L(p) = L (q): Dar L (p) = 1; deci L (q) = 1; si cum exista o singura stare
nala, rezulta q 2 fi g fi g ; deci, ^n acest caz, am obtinut incluziunea fara
1
+
2
+
Astfel am eliminat toate cazurile, adica L A;s0 ; de unde rezulta ca L = A;s0 ;
d) Automatul minimal coincide cu cel initial deoarece A;s0 = L ;
! De fapt, automatul minimal coincide p^ana la un izomorsm cu A, deoarece se
pot renumerota starile, scriindu-se corespunzator acestei bijectii Æ si F (amanunte la
pagina 54)
Exercitiul 2.3.3 Fie automatul A = (fs1 ; s2 ; s3 ; s4 ; s5 ; s6 g; f0; 1g; Æ; s1; fs3 ; s4 ; s5 g)
cu Æ denit prin graful de tranzitie:
Relatiile A;s0 si L 49
R -
0
s 1
s 2
1
?
?
1
s 3
1 0
s 4
j
0 1
?+ ?
6
s 5
1
- o s 6
0; 1
0
a) sa se calculeze A;s1 ;
b) sa se calculeze L(A);
c) sa se determine L ;
d) sa se determine automatul minimal corespunzator limbajului L(A):
Solutie a) A determina o relatie de echivalenta ^nseamna, de fapt, a-i calcula clasele
de echivalenta. ^In acest sens, vom calcula =A;s1 = f[s ]; [s ]; [s ]; [s ]; [s ]; [s ]g:
E clar ca [s ] 1 = fp=Æ(s ; p) = s g = f(00)g deoarece ^n s se poate ajunge
1 2 3 4 5 6
1 A;s 1 1 1
[s ] 1 = fp=Æ(s ; p) = s g = f(00)01g;
3 A;s 1 3
lent, 010 );
5 A;s 1 5
+
! Ca si ^n Exercitiul 2.3.2 (precedent), avem si ^n acest automat o stare de blocare.
Este vorba de starea s : 6
c) Avem ca A;s1 L ; deci =L =A;s1 ; deci clasele de echivalenta asociate
relatiei L sunt printre clasele de echivalenta ale relatiei A;s1 :
5 Spunem ca o multime de v^arfuri C a unui graf orientat G este componenta tare conexa daca
pentru orice x; y 2 C; exista ^n G drumuri de la x la y si de la y la x:
Relatiile A;s0 si L 50
L; adica L (p r) = L(q r): Apoi vom arata ca pentru cuvintele q 2
A;s A;s
(1) L (p r) = L (q r); 8 r 2 :
Fiindca L este dat prin intermediul unui automat nit determinist, rezulta
ca L (p r) = 1 () Æ(s ; p r) 2 F (unde s este starea initiala). Cuv^antul
r poate avea una din formele ; 0k ; 0k 1 ; k 0: Cazul r = este banal,
1 1
4 4 5
I.1.2: k > 0: Dupa cum k este par sau impar, vom distinge cazurile:
I.1.2.1: k par, adica k = 2 l; l > 0: Avem Æ(s ; p 0 l 1 ) = 1
2
1 3 1 2 3
Relatiile A;s0 si L 51
q 2= [s ] 1 ;
6 A;s
!
A;
Date A; B doua multimi (de cuvinte), facem notatia A B
8 y 2 B:
() x y; 8 x 2
Cazul II: Fie p 2 [s2 ]A;s1 : Deoarece s-a aratat ca [s1 ]L [s2 ]; rezulta si [s2 ]L [s1 ]
(deoarece relatia L este simetrica). Apoi se arata asemanator ca ^n cazul I ca
q 2= f[s ]; [s ]; [s ]; [s ]g astfel ^nc^at p L q:
3 4 5 6
rezulta ca nici [s ]L [s ] si [s ]L[s ] nu este adevarat. Apoi, se arata ca
3 1 3 2
Cazul IV: Asemanator cu cazul III, se arata ca [s4 ]L [s5 ] si nu avem [s4 ]L [s6 ];
Cazul V: La fel ca ^n cazul III, se arata ca nu are loc [s5 ]L [s6 ]:
3 4 5 3 6
[s ]3
C 2
[s ]2
[s ]4
C 1
[s ]1
[s ]5
[s ]6
C 3
C [ C [ C = ; L = C ;
1
2 3 2 L=C 1 [C 3
Consideram acest disc ca ind limbajul ^mpartit de relatia A;s1 ^n sase parti
(le vom desena egale). Asa cum am demonstrat, clasa C cuprinde sectoarele discului 1
~
[s ]:
6
Cele trei clase de echivalenta ale relatiei L se pot acum formula astfel:
Relatiile A;s0 si L 52
!
x2C 3 daca x are (strict) mai mult de un simbol 1:
Mai precis, cele trei clase de echivalenta relative la relatia L ; se pot exprima
astfel:
C 1 = [s ] [ [s ] = f(00) 0; (00)g = 0 ;
1 2
C 2 = [s ] [ [s ] [ [s ] = L = f010g;
3 4 5
C 3 = [ s ] =
6 C 1 C = f0101 g:
2
1 2 3
-
- C -
1
1
C2
1
C3
^In continuare, vom prezenta un tip de aplicatie foarte important ^n probleme de
tipul \Limbajul L nu este regulat". Ideea este tocmai folosirea relatiilor L si A;s0 :
Exercitiul 2.3.4 Limbajul L = fanbn =n 0g nu este regulat.
Solutie Am vazut ^n Exercitiul 1.2.1 ca exista o gramatica de tip 2 care genereaza
limbajul L: Dar oare nu exista o gramatica de tip 3 care genereaza L ? Raspunsul la
aceasta ^ntrebare este negativ.
^In acest sens, presupunem prin reducere la absurd ca limbajul L este regu-
lat. Conform Teoremei Myhill-Nerode, rezulta ca L este o reuniune nita de clase
de echivalenta a relatiei L : Fie sirul innit de cuvinte a; a ; :::; ai ; :::; aj ; ::: :
2
Æ(s ; a ); Æ(s ; a ); :::; Æ(s ; an ); unde n = jS j: Deoarece ^n aceasta secventa, avem
0 1
0 0
Consideram acum 2
un numar2 natural k astfel ca 2k +2 1 > n: 2
Avem Æ(s ; ak ) = Æ(s ; ak j j ) = Æ(Æ(s ; aj ); ak j ) = Æ(Æ(s ; al ); ak j ) =
+
2 0 0
2 0
2 0
^In continuare, vom arata ca acest lucru este fals. Mai precis, vom arata ca
k < k + l j < (k + 1) :
2 2 2
Problema (P2):
Intrare: A = (S; ; Æ; s ; F ) un automat nit determinist;
Iesire: A0 = (S 0 ; ; Æ0 ; s0 ; F 0 ) un automat minimal echivalent cu A:
0
0
{ s = h(s );
02 01
{ F = h(F ):
2 1
Trecem acum la rezolvarea problemei (P1). Formal, vom construi inductiv niste
multimi de stari accesibile, p^ana nu mai gasim nici o stare noua.
(1) = fs g
j = j [ Æ ( j ; );
0 0
+1
Constructia automatului minimal 55
Fara a restr^ange generalitatea, putem presupune ca acest k este minim cu proprietatea
(ii):
Vom demonstra, prin inductie dupa j; ca are loc
(iii) k = k j; + 8 j 1:
Pasul initial: Pentru j = 1 obtinem chiar (ii);
Pasul inductiv: Presupunem adevarata pentru j n si o demonstram pentru j =
n + 1: Avem k n = k n [ Æ( k n ; ) = k [ Æ( k ; ) = k = k :
+ +1 + + +1
Fiind ^ndeplinite cele doua etape ale inductiei matematice, rezulta armatia (iii):
Deci, p^ana acum, am demonstrat ca algoritmul (1) are un numar nit de pasi.
Avem doua conditii de terminare a iteratiilor din algoritmul (1) :
a) k = S ;
b) k = k :
Deci complexitatea timp a relatiei (1) (privita ca un algoritm) este de O(maxfjS j; jS j
+1
Æ(s ; ) = s :
0 0
repeat
i := i + 1;
i := i [ Æ ( i ; )
1 1
until ( i = i ) or ( i = S );
1
aseaza('Starile accesibile=', i );
aseaza('Starile inaccesibile=',S i );
end
Pentru implementare, multimile i se pot reprezenta folosind, ca structura de date, o
stiva sau o coada. ^In primul caz, algoritmul urmeaza o strategie \depth rst search"
(dfs), iar ^n al doilea \breadth rst search" (bfs). Pentru amanunte, cititorii pot
consulta [1].
^In continuare, vom vorbi despre solutia celei de-a doua probleme, adica despre au-
tomatul minimal. Am vazut ca problema determinarii automatului minimal folosind
relatia L este cel putin NP hard, deoarece relatia L foloseste ^n denitia sa
multimea ; care este innita. ^In cele ce urmeaza, vom deni relatia denita
peste multimea de stari (care este nita), si care va conduce la un algoritm polino-
mial pentru deducerea automatului minimal.
Denitia 2.4.4 Fie A = (S; ; Æ; s ; F ) un automat nit determinist. Starile
0
1 2
0 1 2
k
arbitrare. Spunem ca s s daca F (Æ (s ; p)) = F (Æ (s ; p)); 8 p 2 ; jpj k:
1 2 1 2
1 k
T
! Se observa ca = :
k=0
Urmatoarele doua rezultate sunt importante ^n demonstrarea corectitudinii si ni-
titudinii algoritmului pe care^l vom prezenta (pentru demonstratia lor, puteti consulta
[7, 9, 10, 11]).
Constructia automatului minimal 57
s 1 k s () s k s
2 1
1
2 si Æ (s1 ; i)
k
Æ(s ; i); 8 i 2 :
1
2
1
!
2
n
s s () s s :
1
2
2
i := 0;
repeat
i := i + 1;
i
calculeaza (folosind Lema 2.4.1)
i i
until (= ) or (i = n 2);
1
end
Complexitatea timp (una grosiera) a algoritmului precedent este de O(n m); unde 3
n = jS j; m = jj; deoarece bucla \repeat ... until " se executa de cel mult O(n) ori,
k
iar constructia lui necesita O(n m): Pentru implementare, puteti consulta Anexa
2
A sau [1]. Varianta implementata acolo este ^mbunatatita, av^and O(n m) operatii. 2
-
0 1 2 3 4 5 6 7 0 3 4 5 7
6 ~
s s 0
> q
0 2
0 s
3
0
1 0 1
s
-
0 1
K N U 1
1
s
U
7
1
0
s
6
s5
0
s 4
0; 1 1
Constructia automatului minimal 58
= fs ; s ; s g;
1 0 1 2
= fs ; s ; s ; s ; s ; s g;
= fs ; s ; s ; s ; s ; s ; s g;
2 0 1 2 6 3 5
3 0 1 2 6 3 5 4
= ;
Asadar, spunem ca S 0 = fs ; s ; s ; s ; s ; s ; s g este multimea starilor accesibile.
4 3
fs ; s ; s g; fs ; s ; s ; s g
3 4 5 0 1 2 6
multimile calculate la relatia : Pentru aceasta, vom folosi Lema 2.4.1. Luam prima
0
orice doua perechi de stari fs ; s g; fs ; s g; fs ; s g si sa vericam daca ram^an ^n
3 4 3 5 4 5
: Distingem C = 3 cazuri:
1
2
3
Cazul I.1: e perechea fs3 ; s4 g; avem fs3 ; s4 g 2 si Æ (s3 ; 0) = s5 si Æ (s4 ; 0) = s5 ;
0
Cazul I.2: pentru perechea fs3 ; s5 g; avem fs3 ; s5 g si Æ(s ; 0) = s si 2
0
3 5
deci fs ; s g 2;
1
3 5
Cazul I.3: pentru perechea fs4 ; s5 g se poate proceda la fel sau, mai elegant,
k
folosim proprietatile de simetrie si tranzitivitate a relatiilor ; 8 k 2 N: Astfel
din s s ; folosind simetria, rezulta s s ; si apoi, folosind s s ; rezulta,
1 1 1
3 4 4 3 3 5
distingem C = 6 cazuri.
2
4
Cazul II.1: pentru perechea fs0 ; s1 g; avem fs0 ; s1 g si Æ(s ; 0) = s si 2
0
0 1
deci fs ; s g 2;
1
0 1
Cazul II.3: pentru perechea fs0 ; s6 g; avem fs0 ; s6 g si Æ(s ; 0) = s si 2
0
0 1
deci fs ; s g 2;
1
0 6
Cazul II.4: pentru perechea fs1 ; s2 g: Putem proceda ca p^ana acum, sau folosim
simetria si tranzitivitatea relatiei : Astfel, presupunem prin reducere la ab-
0
surd, ca fs ; s g 2 : Utiliz^and cazul II.1, rezulta ca fs ; s g 2; ceea ce este
1 1
1 2 0 2
Cazul II.5: pentru perechea fs1 ; s6 g: Din cazurile II.1 si II.3, rezulta fs1 ; s6 g 2;
1
Cazul II.6: pentru perechea fs2 ; s6 g: Din cazurile II.4 si II.5, rezulta fs2 ; s6 g 62;
1
^In concluzie, din cazurile I si II, obtinem clasele de echivalenta pentru relatia : 1
fs ; s ; s g; fs g; fs ; s ; s g:
~
0 1 6 2 3 4 5
Este vorba de o optimizare a procedeului de mai sus. Pentru cazul I, respectiv II, sunt
suciente doar 2; respectiv 3 subcazuri, fata de cele dezbatute 3; respectiv 6: ^In general,
k
daca o clasa de echivalenta a relatiei are n elemente, atunci sunt suciente n 1
n n
subcazuri, ^n loc de Cn2 = 2 : Acest lucru rezulta imediat din proprietatile relatiei
( 1)
Clasa fs g apartine relatiei ; deoarece nu se mai poate partitiona si nici nu se poate
2
2
! Rezulta o alta ^mbunatatire a Algoritmului (ALG2) si anume ca se partitioneaza
k
doar acele multimi S 0 2; pentru care jS 0 j 2:
Cazul I: Ne referim acum la clasa fs3 ; s4 ; s5 g: Analog cu cazul I pentru relatia
; obtinem fs ; s ; s g 2 :
1
3 4 5
2
Cazul II: ^In ceea ce priveste clasa fs0 ; s1 ; s6 g; ^n mod asemanator cu cazul II de
la relatia ; deducem urmatoarele clase pentru :
1 2
fs ; s g; fs g:
0 6 1
^In mod analog, se calculeaza si se observa ca = : Conform Teoremei 2.4.1 si
3 2 3
c) Conform Denitiei 2.4.3 si punctelor a) si b) de mai sus, rezulta ca automatul
minimal echivalent cu A este A0 = (f[s ]; [s ]; [s ]; [s ]g; f0; 1g; Æ0; [s ]; [s ]); unde Æ0
0 1 2 3 0 3
0
1 0
s
?
[s ]3
0; 1 [s ]2
0; 1
Legatura dintre starile lui A0 si cele ale lui A este imediata:
[s ] = fs ; s g; [s ] = fs g; [s ] = fs g; [s ] = fs ; s ; s g:
0 0 6 1 1 2 2 3 3 4 5
d) Este mai simplu de dedus si demonstrat care este limbajul acceptat de A
folosind automatul minimal echivalent cu A; deoarece are mai putine stari. Asadar
L(A) = L(A0 ) = fp=p 2 [s ] 0 0 g = f(01)1f1; 0g ; (01) 00f1; 0g g = f(01)(1 + + +
3
00)f1; 0g g:
A ;s
+
! Exercitiul 2.4.1 re
ecta un exemplu de automat minimal care are doar jumatate
din numarul de stari ale automatului initial.
Legatura dintre automate nite deterministe si cele nite nedeterministe 61
!
Pentru simplitatea notatiei, Æb se noteaza tot cu Æ:
Daca automatul A este nedeterminist, atunci starea s este accesibila daca
9 w 2 astfel ^nc^at s 2 Æ(s ; w) (adica, cu alte cuvinte, s este accesibila daca exista
0
cel putin un drum ^n A din s0 catre s). Denitia pentru inaccesibilitate este aceeasi
cu cea pentru automate nite deterministe.
Denitia 2.5.3 Daca A este un AF N; numim limbajul acceptat de A, multimea
L(A) = fw=w 2 ; Æ(s ; w) \ F 6= ;g:
0
Metoda: Ca structura de date, vom utiliza o coada queue, necesara pentru memo-
rarea starilor automatului A0 . Deci, queue va un tablou cu m; (m 2n); compo-
nente cu valori submultimi ale multimii f1; 2; :::; ng: De exemplu, ^n limbajul Pascal,
se poate folosi urmatoarea structura de date:
6 P (S ) = fS 0 = S 0 S g se mai noteaza 2S si reprezinta multimea partilor multimii S .
Legatura dintre automate nite deterministe si cele nite nedeterministe 62
const
{ n = 8;
{ m = 256;
type
{ state = set of [1::n];
var
{ queue : array [1::m] of state;
Metoda, scrisa ^n pseudocod, este:
begin
s0 := fs g;
queue[1] := fs g;
0 0
head := 1;
last := 1;
F 0 := ;;
while head last do begin
elem := queue[head];
head := head + 1;
for (each i 2 ) do begin
S 0 := ;;
for (each s 2 elem) do
S 0 := S 0 [ Æ(s; i);
if (S 0 6= ;) and (S 0 2= queue) then begin
last := last + 1;
queue[last] := S 0 ;
if S 0 \ F 6= ; then F 0 := F 0 [ fS 0 g;
end;
Æ0 (elem; i) := S 0 ;
end
end
end:
Teorema 2.5.1 Automatul A0 din Algoritmul (ALG3) este determinist si echivalent
cu A: In^ plus, Algoritmul (ALG3) are un numar nit de pasi.
Demonstratie Faptul ca automatul A0 este determinist rezulta din faptul ca
^n coada queue se introduc tot timpul elemente noi, asa cum arata testul if (S 0 = 6
;) and (S 0 2= queue) then begin . Asadar valoarea variabilei elem va , la ecare
iteratie, distincta de celelalte valori anterioare ale variabilei elem. Faptul ca A si A0
sunt echivalente, rezulta din denitiile lui S 0 ; Æ0 si F 0 din Algoritmul (ALG3) care
sunt conforme cu demonstratia constructiva din [9, 10, 11]. De fapt, acest algoritm
Legatura dintre automate nite deterministe si cele nite nedeterministe 63
fs g
1
(ALG3) foloseste o strategie bfs, vom da ^n continuare denitia pentru nivel. Vom
spune ca starea S este pe nivelul k daca exista w 2 fa; bg; jwj = k astfel
^nc^at S = Æ0 (fs g; w): Vom demonstra, ^n cele ce urmeaza, ca A0 = (P (S )
1
f;g; fa; bg; Æ0; fs g; F 0), unde Æ0 si F 0 pot ram^ane neprecizate (Æ0 (fsi1 ; :::; si g; a) =
1 1
1 +1 k +1 +1 k +1
1 2
Æ(sk ; a) si sk 2 Æ(sk ; b), rezulta ca sk apartine oricarei submultimi de stari de pe
+1 +1
nivelul k + 1:
Sa demonstram acum ca pe nivelul k + 1 se a
a toate submultimile ce contin
sk : Fie S o submultime a lui S ce contine sk : Distingem doua cazuri:
+1 2 +1
unde 2 j k:
Fie S = fsi2 ; si3 ; :::; si ; sk g: Evident S se a
a pe nivelul k conform
ipotezei inductive. Dupa Algoritmul (ALG3), rezulta Æ0 (S ; a) = S : Deci, S
1 1 1 j 1 1
1 2 2
se a
a pe nivelul k + 1:
s 2= S : Deci
1 1
1 2 2
Deci, pe nivelul 1 avem Cn stari, pe nivelul 2 avem Cn stari, ..., pe nivelul n avem
0 1
Cnn stari. ^In total se obtin Cn + Cn + ::: + Cnn = 2n 1 stari, deci un numar
1 0 1 1
exponential.
Cu aceasta, solutia Exercitiului 2.5.1 s-a ^ncheiat.
Exercitiul 2.5.2 Fie automatul nedeterminist A = (fq1 ; q2 ; q3 g; fa; bg; Æ; q1; fq2 ; q3 g)
cu Æ dat prin graful de tranzitie:
#
Z~
a
-
# a; b
"!
SoS
q 1
7 "!
6
a
q 2
S
a
S#/
SS b a; b
"! q 3
a
Folosind Algoritmul (ALG3), sa se determine automatul determinist echivalent cu
A:
Solutie Vom simula executia Algoritmului (ALG3) printr-o coada. La inceput, ^n
coada este starea fq g. Starea curenta este ^ncadrata de linii duble.
1
fq g1
fq g fq ; q g fq g fq ; q ; q g fq ; q g
1 1 2 2 1 2 3 2 3
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
1 1 2 2 1 2 3 2 3 1 3 3
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
1 1 2 2 1 2 3 2 3 1 3 3
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
1 1 2 2 1 2 3 2 3 1 3 3
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g stop
1 1 2 2 1 2 3 2 3 1 3 3
s 2 s 4 s 5
s 3 s 6 s 7
s 4 s 4 s 4
s 5 s 6 s 6
s 6 s 4 s 2
s 7 s 5 s 1
q
W
0
U
U
0 0; 1
-
s1
-
1 s2
1 s 3
gramatica echivalent 0
1. s ! 0 s 2. s ! 1 s 3. s ! 0 s 4. s ! 1 s
5. s ! 1 6. s ! 0 s 7. s ! 1 s 8. s ! 0
1 1 1 2 2 2 2 3
2 3 3 3 3 3
9. s ! 1
3
1. s ! 0 s 2. s ! 1 s 3. s ! 0 s 4. s ! 1 s
1 1 1 2 2 2 2 3
5. s ! 0 s 6. s ! 1 s 7. s !
3 3 3 3 3
! Constructiile din exercitiul precedent ram^an valabile si daca se pleaca de la
un automat nit nedeterminist. De altfel, putem considera la intrare si un sis-
tem tranzitional, tranzitiilor le punem ^n corespondenta reguli de redenumire
(s0 2 Æ (s; ) atunci adaugam ^n gramatica G regula s ! s0 )
~ Care este deosebirea dintre cele doua metode ? Gramaticile G si G0 sunt echiva-
lente, ^nsa G nu are -reguli, cu exceptia, eventual, a regulii s0 ! ; pe c^and G0 are
-reguli. Pentru aceasta metoda de deducere a gramaticilor echivalente prin elimina-
rea -regulilor, puteti consulta [1, 10].
Denitia 2.6.1 Fie G = (VN ; VT ; x ; P ) o gramatica arbitrara. Se numeste
0
Exercitiul 2.6.2 Fie gramatica (de tip 3) G = (fx ; x g; fa; bg; x ; P ) unde regulile
1 2 1
P sunt:
1. x 1 !x 2
2. x 1 ! abx 2
3. x 2 ! ax 2
4. x ! ba
2
5. x !
2
arbitrara de tip 3 (constructia este valabila si pentru gramatici de tip 2). Consideram
multimile:
N = fx=x 2 VN ; x ! 2 P g
1
Ni = Ni [ fx=x ! 2 P; 2 Ni g; i 1:
+1
+
si ca Nk reprezinta multimea simbolurilor neterminale care ajung prin derivari ^n
(se mai spune ca \se pot sterge").
^In cazul exercitiului nostru, obtinem N = fx g si N = fx ; x g = VN , deci ne
0 1 1 1 2
oprim deoarece N = VN . 1
Pentru a deduce gramatica echivalenta, dar care nu are reguli, vom considera
doua cazuri:
Legatura dintre limbaje regulate si automate nite 68
Cazul I: 2
= L(G):
{ regulile de tip x ! se sterg;
{ ecarei reguli care are ^n partea dreapta simboluri din Nk , ^i punem ^n
corespondenta o multime de reguli obtinute prin stergerea a 0; 1; ::: sim-
boluri din Nk (astfel^nc^at sa nu se obtina ). Formal, consideram multimea
de reguli:
P = fx ! r =x ! r 2 P; r; r =
1 1 6 ; r se obtine din r prin stergerea a 0;
1 1
0 0
Astfel, pentru exercitiul nostru (suntem ^n subcazul II.1.), obtinem gramatica
echivalenta (fara reguli) G = (fx ; x g; fa; bg; x ; P ) cu regulile P :
1 1 2 1 1 1
1. x 1 !x 2
2. x 1 !
3. x 1 ! abx 2
4. x 1 ! ab
5. x 2 ! ax 2
6. x 2 !a
7. x 2 ! ba
b) ^In aceasta etapa vom elimina redenumirile. Consideram gramatica G = 2
P 21 = fx ! r=x ! r 2 P ; r 2= VN g; 1
P 22 = fx ! w=x =) y; y ! w 2 P ; w 2= VN ; x; y 2 VN g.
+
G1 1
redenumiri) cu regulile:
Legatura dintre limbaje regulate si automate nite 69
1. x 1 !
2. x 1 ! abx 2
3. x 1 ! ab
4. x 1 ! ax 2
5. x 1 !a
6. x 1 ! ba
7. x 2 ! ax 2
8. x 2 !a
9. x 2 ! ba
c) Pentru aducerea gramaticii G la forma normala, vom pune ^n corespondenta
regulilor de tipul x ! p p ::: pn x0 ; i > 1; pi 2 VT ; 8 i = 1; n urmatoarele reguli (^n
2
1 2
forma normala):
1: x ! p x 1 1
2: x 1 !p x 2 2
...
n: xn ! pn x0
1
1 2 1
1. x 1 !
2. x 1 ! ax 3
3. x 3 ! bx 2
4. x 1 ! ax 4
5. x 4 !b
6. x 1 ! ax 2
7. x 1 !a
8. x 1 ! bx 5
Legatura dintre limbaje regulate si automate nite 70
9. x 5 !a
10. x 2 ! ax 2
11. x 2 !a
12. x 3 ! bx 6
13. x 6 !a
Se poate face o reducere a numarului de reguli si neterminali. Este vorba ca ^n
loc de x sa punem x deoarece singura regula cu x ^n partea st^anga este x ! a:
Astfel dispare regula 13, iar regula 12 devine x ! b x .
6 5 5 5
3 5
unde F = fx; x g
daca x ! 2 P
0 0
fxgaltfel.
Notam cu VN = fx ; x ; :::; xn g; = VT = fi ; i ; :::; im g; Sjk = fxh =xj
1 2 1 2 !
ik xh 2 P g: Pentru denirea functiei de tranzitie, vom construi tabelul:
Æ: xj ! ik 2= P xj ! ik 2 P
Sjk = ; Sjk 6= ; Sjk = ; Sjk 6= ;
Æ(xj ; ik ) fyg Sjk fxg fxg [ Sjk
Æ(x; ik ) fyg
Æ(y; ik ) fyg
x 2 fx ; xg 2 fyg
x fy g fx ; x g
fy g fxg
3 2 6
x 4
x 5 fxg fyg
x fxg fyg
fy g fyg
6
x
y fy g fyg
Eventual, se gaseste automatul minimal echivalent cu acesta.
Lema de pompare a lui Bar-Hillel 71
La fel, conditiile n > l si m 0 se obtin din conditia (i) a Lemei Bar-Hillel.
Distingem iarasi trei cazuri:
{ Subcazul II.1: n = l si m > 0. Luam i = 0 ^n conditia (i) si obtinem ca
an bn m 2 L, ceea ce reprezinta o contradictie, deoarece m > 0;
{ Subcazul II.2: m = 0 si n > l. Luam i = 0 ^n conditia (i) si obtinem ca
al bn 2 L, ceea ce reprezinta o contradictie, deoarece n > l;
{ Subcazul II.3: n > l si m > 0. Luam i = 2 ^n conditia (i) si obtinem ca
al an l bm an l bm bn m 2 L, ceea ce reprezinta o contradictie, deoarece
cuvintele din limbajul L au simbolul a ^naintea simbolului b:
Lema de pompare a lui Bar-Hillel 72
Cazul III:
a| a ::: a{zb b ::: }b b| b{z::: }b b| b{z::: }b
x=an bm y=bl z=bn l m
Faptul ca l > 0 rezulta din conditia (i) a Lemei Bar-Hillel. Lu^and i = 0 ^n
conditia (ii) din Lema Bar-Hillel, obtinem an bn l 2 L, ceea ce reprezinta o
contradictie, deoarece l > 0.
^In concluzie, rezulta ca L nu este regulat.
Exercitiul 2.7.2 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 3. Atunci:
0
Solutie
((=) Fiindca exista w 2 L(G) astfel ^nc^at jwj k; rezulta aplic^and Lema de
pompare ca w = x y z si x yi z 2 L(G); 8 i 2 N; unde 0 < jyj k: Dar multimea N
este innita, deci L(G) este innit.
(=)) Stim ca L(G) este innit. Presupunem ca toate cuvintele din L(G) sunt mai
mici dec^at k; deci L(G) este nit, contradictie (sunt cel mult 1 + jVT j + jVT j + ::: +
2
jVT jk = jjVV jj cuvinte). Deci exista w 2 L(G); astfel ^nc^at jwj k: Procedam
k
1 T 1
T 1
Solutie Presupunem prin reducere la absurd ca limbajul L este regulat. Notam cu
= max ff (j + 1) f (j )g; unde k este constanta din Lema Bar-Hillel.
f j <k
( )
^nc^at f (m +1) f (m ) > k: De aici deducem ca f (m +1) > k: Deci f (t) > k pentru
0 0 0
De aici avem ca f (m) k; deoarece daca f (m) < k, atunci vom avea din denitia
lui ca f (m + 1) f (m) contradictie cu alegerea lui m:
Deci pentru cuv^antul w = af m putem aplica Lema Bar-Hillel, deci exista x; y; z
( )
Deci, din Lema Bar-Hillel, rezulta ca x y z 2 L: Dar avem f (m) < jx y z j < f (m +
2 2
1) (1).
Cum f (m) si f (m + 1) sunt doua valori consecutive ale functiei f; rezulta ca ^ntre
af m si af m nu avem alt cuv^ant din L (de lungime ^ntre f (m) si f (m + 1)).
( ) ( +1)
crescatoare. ^In plus, avem ca pentru 8 n 2 N; 9 m astfel ^nc^at f (m + 1) f (m) > n:
^Intr-adevar, relatia f (m + 1) f (m) > n devine m + 2m + 1 m > n. Putem astfel
2 2
2
alege m > n + 1: Folosind deci Exercitiul 2.7.4, rezulta ca limbajul fan = n 0g
2
1
nu este regulat.
Denitia 2.8.2 Pe multimea starilor S introducem relatia binara ! : S S; astfel:
0
s! s daca s0 2 Æ(s; ):
;
Notam ^nchiderea re
exiva si tranzitiva a relatiei ! cu ! , iar pentru starea s notam
! s0 g. Extinderea lui la submultimi este imediata:
(s) = fs0=s ;
Daca S 0 S; atunci (S 0 ) = f(s)=s 2 S 0 g:
Æb(s; ) = (s); 8 s 2 S ;
Sisteme tranzitionale 75
^nseamna ca exista un sir de tranzitii, apoi se citeste litera \a", dupa care
eventual urmeaza alte tranzitii;
s! ! ::: ! s0 !a ! ::: ! 0
Observatia 2.8.1 Este clar ca R LT (LT reprezinta multimea limbajelor acceptate
de sisteme tranzitionale) deoarece automatele nedeterministe sunt un caz particular
de sisteme tranzitionale.
Teorema 2.8.1 (LT R)
Fie L un limbaj acceptat de un sistem tranzitional T: Atunci L este regulat.
Demonstratie Prezentam doar ideea. Demonstratia completa o gasiti ^n [7, 9, 10,
11].
Fie T = (S; ; Æ; s ; F ) astfel ^nc^at L = L(T ). Construim automatul nit nedeter-
minist A = (S; ; Æ0 ; s ; F 0 ) unde:
0
s fs g fs ; s g ;
fs ; s g fs g ;
2 4 3 5
s3 2 4 5
s4 ; ; fs g 5
s5 ; ; fs g 4
Folosind constructia din teorema precedenta si Denitia 2.8.3, sa se determine
automatul nit nedeterminist echivalent cu T:
Solutie Mai ^nt^ai, deducem multimile (s); 8 s 2 S: Astfel:
Sisteme tranzitionale 76
(s 1 ) = fs ; s ; s g ;
1 2 3
(s 2 ) = fs g;
2
(s 3 ) = fs g;
3
(s 4 ) = fs ; s g;
4 5
(s 5 ) = fs ; s g;
4 5
Æb(s ; a) = (s ) = fs ; s g;
2 4 4 5
Æb(s ; b) = (fs ; s g) = fs ; s ; s g;
2 3 5 3 4 5
Æb(s ; a) = (fs ; s g) = fs ; s ; s g;
3 2 4 2 4 5
Æb(s ; b) = (s ) = fs ; s g;
3 5 4 5
s fs ; s g fs ; s ; s g
s fs ; s ; s g fs ; s g
2 4 5 3 4 5
3 2 4 5 4 5
s ; 4 ;
s ; 5 ;
Exemplul 2.8.1 Pentru sistemul tranzitional din Exercitiul 2.8.1, matricea este:
0 1
; fg fg ; ;
B
B ; ; fbg fag fbg C
C
= B
B ; fag ; fag fbg C
C
@ ; ; ; ; fg A
; ; ; fg ;
Denitia 2.8.5 Fie matricele = (Æij ); = (Æij ) 2 MjSjjSj; i; j = 1; jS j cu
1
1
2
2
elemente submultimi din [fg: Denim doua operatii noi relative la aceste matrice:
adunarea: + e1 = (Æij0 ); i; j = 1; jS j astfel:
2
k=1
iar legea \Æ" se deneste astfel:
8
> ; daca 2= A [A
2A
1 2
<
pentru orice A ; A [fg; avem A ÆA = A 1 daca 2 A 1
1 2
:A
>
1 2
2 daca 2A 1 A 2
Æ = ;
Æ a = a Æ = a; 8 a 2 ;
a Æ b = ;; 8 a; b 2 ;
; Æ a = a Æ ; = ;; 8 a 2 ;
; Æ = Æ ; = ;:
Denitia 2.8.6 Numim puterea a n a a matricei :
n
n = n n=1
1
Æ
e n > 1.
0 1
; : : ;
Notam + = + e ::: si = In +
e 2+ e + , unde In = B
B ; : : ; C
C:
@ : : : : : A
; ; : :
Sisteme tranzitionale 78
Exemplul 2.8.2 Fie din Exemplul 2.8.1. Vom calcula, pe r^and, puterile acestei
matrice. 0 1
; fag fbg fag fbg
B
B ; ; ; fbg fag C
C
= 2 B
B ; ; ; fbg fag C
C
@ ; ; ; fg ; A
; ; ; ; fg
Apoi, avem 0 1
; ; ; fb g fag
B
B ; ; ; fag fbg C
C
= eÆ =
3 2 B
B ; ; ; fag fbg C
C
@ ; ; ; ; fg A
; ; ; fg ;
0 1
; ; ; fag fbg
B
B ; ; ; fbg fag C
C
= eÆ = B
4 3
B ; ; ; fbg fag C
C
@ ; ; ; fg ; A
; ; ; ; fg
0 1
; ; ; fbg fag
B
B ; ; ; fag fbg C
C
= eÆ =
5 4 B
B ; ; ; fag fbg C
C
@ ; ; ; ; fg A
; ; ; fg ;
Astfel obtinem suma
0 1
; f; ag f; bg f; a; bg f; a; bg
B
B ; ; fbg fa; bg fa; bg C
C
+
e 2 +
e 3 +
e 4 +
e 5 = B
B ; fag ; fa; bg fa; bg C
C
@ ; ; ; fg fg A
; ; ; fg fg
Denitia 2.8.7 Fie B matricea care se obtine din B prin eliminarea lui din
elementele lui B (adica daca notam cu B = (bij )1i;j n si B = (b0ij )1i;j n , atunci
b0ij = bij fg; 8 i; j = 1; n).
Exemplul 2.8.3 Pentru din Exemplul 2.8.1, not^and B = +
e +
e +
e +
e , 2 3 4 5
obtinem: 0 1
; fag fbg fa; bg fa; bg
B
B ; ; fbg fa; bg fa; bg C
C
B = B
B ; fag ; fa; bg fa; bg C
C
@ ; ; ; ; ; A
; ; ; ; ;
Observatia 2.8.3 Se vede ca B este reprezentarea automatului nit nedeterminist
din Exemplul 2.8.1.
Sisteme tranzitionale 79
^In continuare, vom prezenta un algoritm ecient care, primind la intrare un sistem
tranzitional, va furniza la iesire un automat nit nedeterminist echivalent.
Algoritmul (ALG4):
Intrare: T = (S; ; Æ; s ; F ) sistem tranzitional, n = jS j;
0
Solutie (i) ^In automatul nit nedeterminist echivalent cu T , pot cel mult jS j
stari, deci orice drum (^n care nodurile sunt distincte) poate avea lungimea cel mult
jS j = n: Asadar = +
+ e +2 e n = B;
e :::+
(ii) Procedam prin inductie dupa k; k 1:
Baza: Pentru k = 1 este clar ca este reprezentarea lui T ;
Pasul inductiv: Presupunem (ii) adevarata pentru k = m, sa demonstram pentru
k = m + 1: Avem m = meÆ, deci folosind Denitia 2.8.5 avem:
+1
jSj
[
Æijm+1
= mÆÆ
Æik kj
k=1
Grac, aceasta poate reprezentata:
s|i ! : !{z::: ! : !}sk ! sj
| {z }
Æik
m
Ækj
Din ipoteza inductiva, rezulta ca din starea si la sk exista un drum de lungime m
m [ fg: Consideram muchia (sk ; sj ). Ea este etichetata cu Ækj :
etichetat cu Æik
Distingem cazurile:
2= Æikm [ Ækj deci eticheta Æijm +1
este ;;
Expresii regulate 80
(iii) Din (ii), pentru k = n, rezulta ca + e + e n va reprezenta toate dru-
e :::+ 2
murile (cu lungimi^ntre 1 si n, dar etichetat cu cel mult un simbol din ) dintre oricare
doua stari. Cum T are n stari, rezulta ca +
e e n = : Deci B = : Acum,
e :::+
+ 2 + +
1 : M = In +;
e
...
1 1
k: M =M 2
k
2
k
Æ
eM 2
k
, unde k este minim astfel ^nc^at 2k n, deci k [log2 n]:
E = (1 + 10) ;
2
E = (0 + 1) 0 1 1;
3
E = 0 1 2;
4
E = 0 0 1 1 2 2.
5
Solutie Limbajele asociate acestor expresii regulate se deduc imediat din Denitia
2.9.2. Astfel
pentru expresia E avem L(E ) = f0; 1g 0 0 f0; 1g, adica L(E ) reprezinta
multimea tuturor cuvintelor peste alfabetul f0; 1g care au doua simboluri 0
1 1 1
consecutive;
pentru expresia E avem L(E ) = f1; 10g; adica L(E ) reprezinta multimea
tuturor cuvintelor peste alfabetul f0; 1g care ^ncep cu 1 si nu au doua simboluri
2 2 2
0 consecutive;
pentru expresia E avem L(E ) = f0; 1g 0 1 1, adica L(E ) reprezinta multimea
tuturor cuvintelor peste alfabetul f0; 1g care se sf^arsesc cu 0 1 1 (care au suxul
3 3 3
0 1 1);
pentru expresia E avem L(E ) = f0g f1g f2g, adica L(E ) reprezinta
multimea tuturor cuvintelor peste alfabetul f0; 1g care au un numar arbitrar
4 4 4
^In cele ce urmeaza vom da un algoritm care, av^and la intrare o expresie regulata
E , furnizeaza la iesire o gramatica G de tip 3 astfel ^nc^at L(E ) = L(G). ^In cea de-a
doua parte, vom da un procedeu de determinare a expresiei regulate echivalente cu
un automat nit (determinist, nedeterminist, sistem tranzitional).
Pentru corectitudinea algoritmului de transformare a unei expresii regulate ^ntr-
o gramatica de tip 3 echivalenta, avem nevoie de ^nchiderile la reuniune, produs si
iteratie a gramaticilor de tip 3.
Expresii regulate 82
Teorema 2.9.1
a) Familia limbajelor de tip 3 sunt ^nchise la reuniune (adica pentru orice G1 ; G2
gramatici de tip 3, exista G3 de tip 3 astfel ^nc^at L(G3 ) = L(G1 ) [ L(G2 ));
b) Familia limbajelor de tip 3 sunt ^nchise la produs;
c) Familia limbajelor de tip 3 sunt ^nchise la iteratie.
Solutie Vom prezenta doar ideea, demonstratia completa este prezentata ^n [10, 11].
Fie G = (VN ; VT ; x ; P ) si G = (VN ; VT ; x ; P ) doua gramatici de tip 3 (astfel
1
1 1
01 1 2
2 2
02 2
^nc^at VN \ VN = ;).
1 2
(L(G )) .
0 1
^In continuare, vom prezenta un algoritm ecient (liniar fata de dimensiunea expre-
siei regulate) care determina pentru o expresie regulata E , o gramatica drept-liniara
G echivalenta (adica L(E ) = L(G)).
Pentru acest algoritm, avem nevoie de:
o stiva care va prelucra subexpresiile expresiei initiale E ; ^n aceasta stiva vom
pune simbolurile din expresia E p^ana c^and ^nt^alnim caracterele ')' sau ''; ^n
prima situatie, ^nseamna ca am terminat de citit o subexpresie (binara) de tipul
(E + E ) sau (E E ), iar ^n a doua situatie ^nseamna ca avem o subexpresie
(unara) de tipul E ;
1 2 1 2
case E of 1
14. E 2 VT : begin
1
15. i := i + 1;
16. VN := VN [ fxi g;
17. P := P [ fxi ! E E g;
1 2
22. lista(x) := lista(x) [ lista(E ); unde x sunt cei din pasul 21;
2
end
end fde la caseg
end fde la if (v^arful stivei este ')')g
Expresii regulate 84
else
24. if (^n v^arful stivei este '') then begin
25. consideram expresia E 0 = E ; E 2 VN [ VT ;
1 1
26. i := i + 1;
27. VN := VN [ fxi g;
28. lista(xi ) = fxi g [ lista(E );
1
31. P := P [ fxi ! E xi ; xi ! g
1
else begin
32. P := P [fxi ! E ; xi ! g[fx ! p xi = x 2 lista(E ); x !
p 2 P; p 2 VT g fx ! p= x 2 lista(E ); x ! p 2 P; p 2 VT g
1 1
33. lista(x) := lista(x) [ lista(xi ); unde x sunt cei din pasul 32;
end
end
else
34. if j = jE j then
35. if (stiva este nevida) then begin
36. if (topul stivei este xi sau (xi ), xi 2 VN ) then
37. G := (VN ; VT ; xi ; P )
else
38. G := (fx g; VT ; x ; fx ! ag);
1 1 1
39. exit
end
else begin
40. j := j + 1;
41. pune ^n stiva caracterul al j lea din sirul de intrare
end
end f de la if (^n v^arful stivei este ')') then begin g
end ; f de la while (stiva este nevida) do begin g
end . f de la begin g
Teorema 2.9.2 Algoritmul (ALG5) este corect si executia sa are un numar nit de
pasi.
Demonstratie Trebuie sa aratam ca bucla \while (stiva este nevida) do begin"
are un numar nit de iteratii. La ecare iteratie:
a) ori se scot din stiva cel putin doua elemente si se introduce unul (pasii 7-13,
14-23, 24-33) deci stiva descreste;
Expresii regulate 85
exact constructia din Teorema 2.9.1, bine^nteles aleg^and regulile cu neterminali accesi-
bili (adica din lista(E )). Cazul E 2 VT este mai simplu, deoarece regula xi ! E E
1 1 1 2
sau E 2 VN :
1
Ultima situatie se refera la citirea unui simbol din expresia regulata sau la pre-
cizarea simbolului de start al gramaticii si iesirea din bucla while (stiva este nevida)
do begin :
daca s-a terminat de citit expresia regulata (pasul 34), vericam daca stiva este
nevida (preciz^and simbolul de start). Distingem si aici doua cazuri:
{ topul stivei este xi 2 VN atunci precizam ca xi este simbol de start (pasii
36,37);
{ topul stivei este a; a 2 VT atunci este clar ca gramatica ce genereaza acest
limbaj este x ! a; x 2 VN (pasul 38).
1 1
Exercitiul 2.9.2 Fie expresia regulata E = ((ab) + ((a + (bb))(a b)) ): Folosind Al-
goritmul (ALG5), sa se determine gramatica G, de tip 3, pentru care L(G) = L(E ):
Solutie Vom desena evolutia stivei din Algoritmul (ALG5) numai pentru situatiile
din pasii 6-33 (pasii 34-41 sau determina iesirea din bucla, sau introduc ^n stiva
c^ate un simbol din expresia regulata). Bine^nteles, vom prezenta constructia lui
Expresii regulate 86
)
b
a
(
(
Dupa executia pasilor 14-19, obtinem
i=1
VN = fx g 1
P = fx ! a bg
1
lista(x ) = fx g
1 1
Expresii regulate 87
)
b
b
(
+
a
(
(
+
x1
(
Dupa executia pasilor 14-19, obtinem
i=2
VN = fx ; x
1 2 g
P = fx1 ! a b; x ! b bg 2
lista(x ) = fx g
1 1
lista(x ) = fx g
2 2
)
x2
+
a
(
(
+
x1
(
Dupa executia pasilor 8-13, obtinem
i=3
VN = fx ; x ; x g
1 2 3
P = fx ! a b; x ! b b; x ! a; x ! x g
1 2 3 3 2
Expresii regulate 88
lista(x ) = fx g
1 1
lista(x ) = fx g
2 2
lista(x ) = fx ; x g
3 2 3
a
(
x3
(
+
x1
(
Dupa executia pasilor 25-31, obtinem
i=4
VN = fx ; x ; x ; x
1 2 g 3 4
P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! g
1 2 3 3 2 4 4 4
lista(x ) = fx g
1 1
lista(x ) = fx g
2 2
lista(x ) = fx ; x g
3 2 3
lista(x ) = fx g
4 4
)
b
x4
(
x3
(
+
x1
(
Dupa executia pasilor 20-23, obtinem
Expresii regulate 89
i=4
VN = fx ; x ; x ; x
1 2 g 3 4
P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! bg
1 2 3 3 2 4 4 4
lista(x ) = fx g
1 1
lista(x ) = fx g
2 2
lista(x ) = fx ; x g
3 2 3
lista(x ) = fx g
4 4
)
x4
x3
(
+
x1
(
Dupa executia pasilor 20-23, obtinem
i=4
VN = fx ; x ; x ; x
1 2 g 3 4
P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! bg
1 2 4 3 4 3 2 4 4 4
lista(x ) = fx g
1 1
lista(x ) = fx g
2 2
lista(x ) = fx ; x ; x ; x g
3 2 3 4 5
lista(x ) = fx ; x g
4 4 5
x3
+
x1
(
Expresii regulate 90
P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
1 2 4 3 4 3 2 4 4 4 5 5
; x ! x g
5 3
lista(x ) = fx g
1 1
lista(x ) = fx g
2 2
lista(x ) = fx ; x ; x ; x g
3 2 3 4 5
lista(x ) = fx ; x g
4 4 5
lista(x ) = fx ; x ; x ; x g
5 2 3 4 5
)
x5
+
x1
(
Dupa executia pasilor 8-13, obtinem
i=6
VN = fx ; x ; x ; x ; x ; x g
1 2 3 4 5 6
P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
1 2 4 3 4 3 2 4 4 4 5 5
; x ! x ; x ! x ; x ! x g
5 3 6 1 6 5
lista(x ) = fx g
1 1
lista(x ) = fx g
2 2
lista(x ) = fx ; x ; x ; x g
3 2 3 4 5
lista(x ) = fx ; x g
4 4 5
lista(x ) = fx ; x ; x ; x g
5 2 3 4 5
lista(x ) = fx ; x ; x ; x ; x ; x g
6 1 2 3 4 5 6
Ultima situatie este re
ectata de pasii 34-39, c^and se precizeaza ca simbolul de start
al gramaticii G este x . 6
Expresii regulate 91
x
6
b x ; x ! x ; x ! ; x ! x ; x ! x g
5 5 3 5 6 1 6 5
^In cea de-a doua parte a sectiunii consacrate expresiilor regulate, vom da un pro-
cedeu (cu un numar polinomial de operatii) de determinare a expresiei regulate echiva-
lente (a claselor de echivalenta A;s0 , pagina 44, a limbajului unui automat) cu un
automat nit determinist, nedeterminist, sau cu tranzitii. Exercitii asemanatoare
sunt prezentate si ^n [12].
Astfel, e A = (S; ; Æ; s ; F ) un automat nit (determinist, nedeterminist, sistem
tranzitional) si e si 2 S o stare arbitrara. Consideram toate arcele care ^nteapa si :
0
ecuatia:
(2) Xi = Xi1 ai1 + Xi2 ai2 + ::: + Xi ai + i k k
n
unde i = daca si este stare initiala sau, echivalent, i = () i = 0:
; altfel
Cum si este o stare arbitrara, rezulta deci ca din (2) putem obtine un sistem de
ecuatii. Acest sistem se poate rezolva prin substitutii, adica putem ^nlocui o expresie
^ntr-o alta ecuatie (mai spunem ca sunt ^nchise la substitutie).
Lema 2.9.1 Ecuatiile de tip (2) sunt ^nchise la substitutie.
Demonstratie Fiind un numar nit de astfel de substitutii este sucient sa aratam
numai pentru doua astfel de ecuatii. Astfel, e
(3) Xi = Xi1 ai1 + Xi2 ai2 + ::: + Xi ai + i k k
unde Xi 6= Yj :
Fie si ; sj starile corespunzatoare expresiilor Xi ; Xj din ecuatiile (3); (4): Rezulta
si 2 Æ(si1 ; ai1 ) [ Æ(si2 ; ai2 ) [ ::: [ Æ(si ; ai ) k k
Daca ecuatiile (3); (4) n-au expresii ^n comun, adica daca Xi 2= fYj1 ; Yj2 ; :::; Yj g si
Yj 2= fXi1 ; Xi2 ; :::; Xi g atunci lema este banala.
h
Fara a restr^ange generalitatea, putem presupune acum ca exista t 2 f1; 2; :::; kg
k
Dupa un numar nit de astfel de substitutii, rezulta ^n cele din urma o ecuatie
\recursiva" (daca limbajul nu este nit), adica de forma:
X =+X (5)
Lema 2.9.2 Solutia ecuatiei (5) este X = :
Demonstratie ^Inlocuind solutia de mai sus ^n relatia (5), avem: = + :
^Insa + = + = ( + ) = deoarece + = pentru orice
+ + +
tranzitional);
Iesire: E expresie regulata astfel ^nc^at L(E ) = L(A);
Metoda:
begin
L := ;;
E := ;;
for i := 1 to jS j do begin
fe Xi = f (X ; X ; :::; XjSj) ecuatia corespunzatoareg
1 2
Exercitiul 2.9.3 Fie automatul determinist A = (fs1 ; s2 ; s3 g; fa; bg; Æ; s1; fs2 ; s3 g)
cu Æ dat prin graful de tranzitie:
Z~ # a
- b
#
"!
SoS
s 1
"!
7
a
s2
S a
SS
S#
/
b b
"! s3
Expresii regulate 94
X =X b+X a
2 1 3
X =X b
3 2
2 2 3
c) L(A) = L(X ) [ L(X ): 2 3
! Exercitiul 2.9.3 este un exemplu ^n care se observa utilitatea acestei metode de
deducere a limbajului acceptat de un automat (sau a expresiei regulate echivalente).
Datorita faptului ca automatul A contine multe circuite, rezulta ca limbajul acceptat
este foarte greu de stabilit direct.
Exercitii propuse spre rezolvare 95
ca:
a) Æ (s; a w) = Æ (Æ (s; a); w); 8 s 2 S; 8 a 2 ; 8 w 2 ;
b) Æ (s; w1 w2 ) = Æ (Æ (s; w1 ); w2 ); 8 s 2 S; 8 w1 ; w2 2 :
Exercitiul 2.10.2 Fie A = (S; ; Æ; s ; F ) un automat nit determinist. Sa se arate
0
ca:
a) daca F = S atunci L(A) = ;
b) daca A este minimal si L(A) = atunci F = S ;
c) daca F = ; atunci L(A) = ;;
d) reciproca punctului c) nu are loc.
Exercitiul 2.10.3 Folosind automatul construit la Exercitiul 2.2.1, sa se efectueze
suma binara dintre numerele (cuvintele) a = 10011 si b = 11101:
Exercitiul 2.10.4 Sa se construiasca automate nite (ne)deterministe pentru lim-
bajele de mai jos:
a) L = fan bm ck =m; n; k 2 N g;
b) L = fan b2 cm =m; n 2 N g;
c) L = fa2n = n 2 Ng;
d) L = fakn = n 2 Ng; k 2 N xat;
e) L = fw= w 2 f0; 1g; jwj = 2k; 8 k 2 Ng:
d) Se considera automatul nit determinist A = (fs1 ; s2 ; :::; sk g; fag; Æ; s1; fs1 g);
cu Æ (si ; a) = si+1 ; 8 i = 1; n 1; iar Æ (sn ; a) = s1 ;
e) Se considera automatul nit determinist A = (fs1 ; s2 ; s3 ; s4 g; f0; 1g; Æ; s1; fs1 g);
cu Æ dat prin
Æ 0 1
s
1 s
3 s2
s
2 s
4 s1
s
3 s
1 s4
s
4 s
2 s3
Æ a b
s
1 s 2 s4
s
2 s 2 s3
s
3 s 4 s3
s
4 s 4 s4
s
2 s 4 s3
s
3 s 5 s2
s
4 s 5 s6
s
5 s 4 s6
s
6 s 4 s5
c) L = fa n=n 0g;
2
+1
k
apartenenta la :
+1
k+1
a) sa se precizeze un algoritm care sa stabileasca apartenenta la relatia a
perechilor (si ; sj ); 8 i; j = 1; n; i 6= j ;
b) care este complexitatea timp si spatiu a algoritmului de la punctul a) ?
c) Folosind aceasta optimizare, sa se rescrie mai amanuntit Algoritmul (ALG2).
Exercitii propuse spre rezolvare 97
Se foloseste algoritmul de ^nchidere re
exiva si tranzitiva a unei relatii.
Exercitiul 2.10.9 Fie automatul nit determinist
A = (fs ; s ; s ; s ; s ; s g; fa; bg; Æ; s ; fs g);
1 2 3 4 5 6 1 6
s
2 s
4 s3
s
3 s
5 s2
s
4 s
5 s6
s
5 s
4 s6
s
6 s
4 s5
s
2 s
1 s3
s
3 s
4 s2
s
4 s
4 s1
s
5 s
4 s6
s
6 s
7 s5
s
7 s
6 s7
s
8 s
7 s4
s fs ; s g fs g
2 1 3 2
s fs ; s g fs g
3 2 3 1
Exercitii propuse spre rezolvare 98
s fs ; s g fs g
2 1 3 3
s 3 fs g fs g 3 3
s fs ; s g fs g
fs g fs ; s g
1 2 3 1
s 2 2 1 3
s 3 fs g fs g
3 3
un automat nedeterminist care are o singura stare nala si accepta limbajul L:
Cum L este limbaj regulat si 2= L, rezulta ca exista o gramatica G de tip 3 fara
reguli pentru care L(G) = L: Folosind constructia de la punctul d) al Exercitiului
2.6.2, rezulta ca exista un automat nit nedeterminist A cu o singura stare nala
(F = fxg) astfel ^nc^at L(G) = L(A): Deoarece gramatica G nu are reguli, rezulta
x ! 2= P , deci x 2= F .
0 0
s
2 s 2 s3
s
3 s 4 s3
s
4 s 4 s4
Exercitiul 2.10.16 Pentru automatul din Exercitiul 2.10.12, sa se determine gra-
matica de tip 3 echivalenta.
Exercitiul 2.10.17 Fie gramatica G = (fx; yg; fa; bg; x; fx ! a x j a y; y ! b y j bg).
Sa se determine un automat nit nedeterminist echivalent.
Exercitiul 2.10.18 Fie gramatica G = (fx; yg; fa; bg; x; fx ! a x j a j y; y !
b y j b jg). Sa se determine un automat nit nedeterminist echivalent.
Exercitiul 2.10.19 Utiliz^and Lema Bar-Hillel sau Exercitiul 2.7.4, sa se arate ca
limbajele din Exercitiul 2.10.7 nu sunt regulate.
Exercitiul 2.10.20 Utiliz^and Lema Bar-Hillel, sa se arate ca urmatoarele limbaje
nu sunt regulate:
L 1 = fan bn k = n 1g; k xat;
+
L 2 = fan b n = n 1g;
2
s 3 fs ; s
3 4 g s2 ;
s 4 s 2 s3 s 1
Folosind Algoritmul (ALG4) sau procedeul din constructia teoretica din Teorema
2.8.1, sa se determine un automat nit nedeterminist echivalent cu A.
Exercitiul 2.10.23 Sa se precizeze un algoritm pentru determinarea sistemului
tranzitional echivalent pentru o expresie regulata data.
Se foloseste un rezultat teoretic din [7, 9, 10, 11] care construieste pentru
ecare subexpresie regulata un sistem tranzitional echivalent si se obtine un algoritm
asemanator cu (ALG5).
Exercitiul 2.10.24 Sa se precizeze un algoritm pentru determinarea unei gramatici
drept liniare echivalente cu un sistem tranzitional dat. Sa se precizeze un algoritm si
pentru reciproca armatiei de mai sus.
Exercitii propuse spre rezolvare 100
Asemanator cu constructia din Exercitiul 2.6.1, cu deosebirea ca o tranzitie
va corespunde ^n gramatica echivalenta cu o regula de redenumire. Reciproca se face
folosind ideile din Exercitiul 2.6.2, evident fara a mai elimina regulile de redenumire.
Exercitiul 2.10.25 Fie L un limbaj generat de o gramatica st^ang liniara. Sa se
arate ca exista o gramatica drept liniara care genereaza limbajul L: Reciproca este
adevarata ?
Exercitiul 2.10.26 Fie gramaticile de tip 3 G = (fX ; X g; fa; b; cg; X ; fX !
1 1 2 1 1
2 2 2 2 3 3 3 3
2.9.1:
sa se construiasca o gramatica G3 astfel ^nc^at L(G3 ) = L(G1 ) [ L(G2 );
sa se construiasca o gramatica G3 astfel ^nc^at L(G3 ) = L(G1 ) L(G2 );
sa se construiasca o gramatica G3 astfel ^nc^at L(G3 ) = (L(G1 )) :
Exercitiul 2.10.27 Folosind Algoritmul (ALG5), sa se determine gramaticile de tip
3 echivalente pentru urmatoarele expresii regulate:
(a + (a b))
((1 + 01 + 001) ( + 0 + 00))
((0 + 1)(0 + 1)) + ((0 + 1)(0 + 1)(0 + 1))
Exercitiul 2.10.28 Sa se demonstreze ca L(E ) = L(E ) (sunt echivalente), unde:
1 2
E = 1 + 0(10)(11 + 0)
1
E = (01) (1 + 00):
~
2
Acest exercitiu se poate folosi pentru a scrie o alta forma a limbajului acceptat de
automatul din Exercitiul 2.4.1 utiliz^and metoda prezentata ^n Sectiunea 2.9.
Exercitiul 2.10.29 Sa se demonstreze ca L(E ) = L(E ) unde:
1 2
a)
E = ( + (a b + a b(a a b) b((b a b + a)(a a b) b)
1
b)
E = (a b + a b(a a b) b((b a b + a)(a a b) b) (b a b + a))(a a b)
1
si
E = (a + b(b a)(a + b b)) b(b a) ;
2
c)
E = a b(a a b) b((b a b + a)(a a b) b)
1
si
E = (a + b(b a) (a + b b)) b(b a) b:
~
2
(2) X =X b+X a
2 1 3
(3) X =X b
3 2
X = X b+X ba
2 1 2
Prin rezolvarea acestei ecuatii, rezulta (4) X2 = X1 b(b a) : ^Inlocuim (4) ^n (1)
si ^n (3), care apoi ^l ^nlocuim tot ^n (1): Deducem:
(5) X = + X a + X b(b a) a + X b(b a) b b
1 1 1 1
(iii) (r + s) = r + s
! Folosind identitatile din Exercitiul 2.10.30, avem:
h) d) l) e)
(i) adevarata, deoarece (r s + r) r = (r s + r ) r = (r(s + )) r = r((s + )r) =
h
r(s r + r) = r(s r + r)
)
Limbaje independente de
context
3.1 Automate pushdown nedeterministe
Denitia 3.1.1 Un automat pushdown nedeterminist nit este un 7-uplu
P = (S; ; ; Æ; s ; z ; F )
0 0
unde
S reprezinta multimea starilor (nita, nevida);
este alfabetul benzii de intrare (nit, nevid);
este alfabetul stivei (memoriei) pushdown (nit, nevid);
Æ : S ( [ fg) ! P (S ) este functia de tranzitie;
s 2 S este starea initiala;
0
104
Automate pushdown nedeterministe 105
+
Notam ; ^nchiderea re
exiva si tranzitiva, respectiv tranzitiva, a relatiei
(1)
: C^and scriem ^nseamna ca s-a aplicat tranzitia cu numarul 1: Daca scriem
;
2 (1)
Astfel, avem (s ; 0 0 1 1; z )
0 (s ; 0 1 1; 0 z )
1 (s ; 1 1; 0 0 z )
1
(s ; 1; 0 z )
2 (s ; ; z )
2 (s ; ; ); si cum s
0 0
(1) n 1;(2)
Trecem acum la cazul general. Avem: (s ; 0n 1n ; z ) 0 (s ; 0n 1n ; 0 z )
1
1
(s ; 1n ; 0n z ) (s ; 1n ; 0n z ) 1
(s ; ; z )
1
(s ; ; ); si la fel cum
s 2 F , rezulta ca 0n 1n 2 L(P ): Cu aceasta, prima incluziune este terminata.
1 2 2 0
: Fie w 2 L(P ); adica exista tranzitia (s ; w; z ) (s ; ; ); 2 (s ind
0 0 0
singura stare nala). Sa aratam ca 9 n 2 N astfel ^nc^at w = 0n 1n: Distingem mai
multe situatii:
Automate pushdown nedeterministe 106
;
0
w = 0n 1n :
Cazul II: w 6= ; deci w = i1 i2 ::: im ; m 1; cu i1 ; :::; im 2 f0; 1g: Presupunem
i = 1. Cum Æ(s ; 1; ) = ;; rezulta ca ne blocam (nu avem ce tranzitie sa
1 0
aplicam).
Asadar i = 0: Fara a restr^ange generalitatea, distingem cazurile:
1
k;+
{ Cazul II.1: w = 0k ; k 1 =) (s ; 0k ; z )
0 (s ; ; 0n z ) si ne-am blocat
1
deoarece Æ(s ; ; ) = ;;
1
0 (s ; 1l u; 0k z )
1 (s ; 1l u; 0k z ). 2
1 1
(s ; 1l k u; z ) 2 (s ; 1l k u; ) si 0
;
Situatia 2: k > l. Obtinem
(4)
;
Situatia 3: k = l. Obtinem
(4) (5)
(s ; u; z ) (s ; u; ) si ne
blocam daca u = 0 u0; deoarece Æ(s ; 0; ) = ;: Deci singura posibilitate
2 0
ram^ane u = . Asadar, w = 0k 1k ; k 1:
Din cazul I, respectiv cazul II.2 (situatia 3), rezulta ca exista n 0; astfel ^nc^at
w = 0n 1n : ^In concluzie, L(P ) = f0n 1n = n 0g:
b) P este un automat pushdown cu stari nale. Pentru cuvintele de forma 0n 1n ; n
1, automatul P poate privit ca ind cu memorie vida.
Cu aceasta, solutia Exercitiului 3.1.1 a luat sf^arsit.
Exercitiul 3.1.2 Fie automatul pushdown
P = (fs ; s ; s g; fa; bg; fz; a; bg; Æ; s ; z; fs g)
0 1 2 0 2
(s ; i ::: in in ::: i i ; i z )
0 2 2 1 1 (s ; in ::: i i ; in ::: i i z ) 0(s ; in 2 1 2 1 0 1
_ ; (7) (8) (9)
::: i i ; in ::: i i z )
2 1 1 2 1 (s ; ; z ) (s ; ; );
1 2
: Fie w 2 L(P ); deci exista tranzitia (s ; w; z ) (s ; ; ); 2 fz; a; bg: Dar 0 2
singura tranzitie care prin care se poate ajunge ^n s este (9), deci ne vor interesa 2
forma cuvintelor pentru care ajungem ^n starea s , iar ^n stiva pushdown avem z: 1
(s ; i i ::: ik ; z )
(5) _ (6a), sau (3b) _ (6b) daca i = i . Oricum, daca aplicam (3b) _ (6b), ajungem
0 1 2 0 2 1
2 1
^n starea s , si de acolo nu mai putem trece ^n starea s . Deci, fara a restr^ange
1 0
generalitatea consideram ca (3a) _ (4) _ (5) _ (6a) s-a aplicat de l ori (0 l k).
Astfel am obtinut tranzitia
a _ _ _ a ;l (3 ) (4) (5) (6 )
(s ; i ::: ik ; i z )
0 2 1 (s ; il ::: ik ; il ::: i z ) 0 +1 1
z ) si il = il (altfel ne blocam). De aici se pot aplica doar regulile (7) sau (8)
+1
(s ; il ::: ik ; il ::: i z )
1 +2 (s ; ; i l k ::: i z )
1 1 1 2 1
(s ; il ::: ik ; il ::: i z )
1 +2 1 1 (s ; ik l ::: ik ; z ) (s ; ik l1 2 2 2
::: ik ; )
si iarasi ne blocam deoarece memoria pushdown a devenit vida;
{ Subcazul II.3: k = 2l Obtinem tranzitia:
_ ;l ; (7) (8) 1 (9)
(s ; il ::: ik ; il ::: i z )
1 +2 1 1 (s ; ; z ) (s ; ; ) 1 2
care este o conguratie de acceptare deoarece s este stare nala. ^In 2
trebuia demonstrat.
b) P este un automat pushdown cu stare nala, dar poate privit si ca un automat
pushdown cu memorie vida. Din punct de vedere al determinismului, P este automat
pushdown nedeterminist.
Exercitiul 3.1.3 Fie automatul pushdown P = (fq ; q ; q ; q g; fa; b; cg; fz; ag; Æ; q ;
0 1 2 3 0
z; fq g) cu Æ dat prin:
3
Sa notam w = i i ::: it . Este clar ca urmatoarea tranzitie va 3 sau 4. Se observa
ca i ; i ; :::; in 2 fb; cg, deoarece altfel ne blocam (nu avem Æ(q ; a; orice) denit,
1 1 2
1 2 2
iar daca aplicam tranzitia 7, ne blocam indca golim memoria pushdown). Sa mai
observam acum ca pentru a ajunge ^n singura stare nala s , trebuie sa aplicam 3
tranzitia 7, deci trebuie vizat ^n memoria pushdown simbolul z . Asadar trebuie eli-
minate toate simbolurile a k prezente ^n stiva pushdown. Deci, daca t < 2k atunci ne
2
blocam deoarece nu avem tranzitie Æ(q ; ; a), iar daca t > 2k ajungem la conguratia
2
1 1 1
incluziune.
b) Automatul P este cu memorie vida, dar si cu stare nala. ^In plus, acesta este
determinist (Denitia 3.6.1).
c) Vom vedea ^n Exercitiul 3.1.5 un procedeu de deducere a gramaticii echivalente cu
un automat pushdown folosind teoria ([11]). Pentru acest exercitiu, vom da ^nsa doua
gramatici echivalente cu P construite direct din forma analitica a limbajului. Acestea
sunt:
G 1 = (fS; Ag; fa; b; cg; S; fS ! a S A A j a A A; A ! b j cg);
G 2 = (fS g; fa; b; cg; S; fS ! a S b b j a S b c j a S c b j a S c c j a b b j a b c j a c b j a c cg).
Lasam ca tema cititorului demonstratia echivalentei dintre G ; G si P . 1 2
Solutie Vom rezolva problema prin doua metode. Prima metoda se refera la
constructia generala din Teorema 3.1.1. Astfel pentru G = (VN ; VT ; x ; P ) construim 0
cu Æ dat astfel:
1. d(s ; a; z ) = (s ; a z );
0 1
2. d(s ; a; a) = (s ; a a);
1 1
3. d(s ; b; a) = (s ; );
1 2
4. d(s ; b; a) = (s ; );
2 2
5. d(s ; c; z ) = (s ; z );
2 3
6. d(s ; c; z ) = (s ; z );
3 3
Demonstratie Se gaseste ^n [7, 11].
! ^In constructia din Teorema 3.1.1, se determina un automat pushdown nedeter-
minist cu o singura stare echivalent cu o gramatica de tip 2. Apoi din Teorema
(reciproca) 3.1.2 avem o constructie a unei gramatici de tip 2 echivalente cu un
automat pushdown nedeterminist. Din aceste doua teoreme rezulta ca pentru orice
automat pushdown nedeterminist cu mai multe stari, exista un automat pushdown
nedeterminist echivalent care are o singura stare. De aici rezulta ca putem elimina
din denitia automatelor pushdown multimea starilor. Dezavantajele sunt distrugerea
"esentei" automatelor pushdown si faptul ca aceasta conversie este de dimensiune
exponentiala. Mai mult, automatul cu o singura stare (care se poate elimina) va
nedeterminist, deci nu vom putea studia proprietatile automatelor pushdown determi-
niste (care formeaza clasa L2DET ).
Automate pushdown nedeterministe 111
(ii) Pentru tranzitii de tipul (r; ) 2 Æ(s; a; z ); 8 a 2 [ fg; trebuie sa punem ^n
corespondenta ^n gramatica G regula [s; z; r] ! a:
(iii) Bine^nteles, trebuie precizate si reguli de start pentru gramatica G, si acestea
sunt x ! [s ; z ; s]; 8 s 2 S:
0 0 0
Cu aceasta constructie, sa vedem ce reguli trebuie sa contina gramatica G echivalenta
cu P .
Pentru prima tranzitie, avem noua reguli ^n gramatica G:
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0 0 1 0 0 0
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0 0 1 1 1 0
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0 0 1 2 2 0
Automate pushdown nedeterministe 112
{ [s
0 ; z; s
1 ] ! 0 [s 1 ; 0; s 0 ] [s0 ; z; s 1 ]
{ [s
0 ; z; s
1 ] ! 0 [s 1 ; 0; s 1 ] [s1 ; z; s 1 ]
{ [s
0 ; z; s
1 ] ! 0 [s 1 ; 0; s 2 ] [s2 ; z; s 1 ]
{ [s
0 ; z; s
2 ] ! 0 [s 1 ; 0; s 0 ] [s0 ; z; s 2 ]
{ [s
0 ; z; s
2 ] ! 0 [s 1 ; 0; s 1 ] [s1 ; z; s 2 ]
{ [s
0 ; z; s
2 ] ! 0 [s 1 ; 0; s 2 ] [s2 ; z; s 2 ]
Pentru tranzitia Æ(s ; 0; 0) = (s ; 0 0), se procedeaza la fel (obtinem tot noua
1 1
reguli).
Pentru tranzitia Æ(s ; 1; 0) = (s ; ), obtinem regula [s ; 0; s ] ! 1:
1 2 1 2
Reguli de start: x 0 ! [s ; z ; s ] j [s ; z ; s ] j [s ; z ; s ]:
0 0 0 0 0 1 0 0 2
Metoda a II-a: Se observa ca limbajul acceptat de acest automat se poate exprima
sub forma analitica, adica L(G) = f0n 1n= n 1g: Alegem, de exemplu, gramatica
G = (fx g; f0; 1g; x ; fx ! 0 x 1 j 0 1g). Se observa ca aceasta gramatica este mai
0 0 0 0
redusa dec^at gramatica din metoda I. Lasam ca exercitiu pentru cititor demonstratia
egalitatii L(G) = L (P ):
! Se observa, ^n constructia din prima metoda, ca pentru o tranzitie de tipul
(r; ) 2 Æ(s; a; z ); avem jS jm reguli, unde m = jj: ^In subsectiunea de mai jos, vom
prezenta un algoritm ecient (dar tot exponential), care construieste gramatica de tip
2 echivalenta cu un automat pushdown nedeterminist.
reguli pentru o tranzitie de tipul (i). De asemeni, trebuie adaugate si regulile de
tipul (ii) si (iii) (din acelasi exercitiu). Asadar, dimensiunea gramaticii ce rezulta din
aceasta constructie este foarte mare.
Exemplul 3.1.1 Pentru limbajul L = f0n1 n =n 1g independent de context, con- 3
sideram automatul pushdown A = (fq ; q ; q g; f0; 1g; fx; z g; Æ; q ; z; ;); unde Æ este
0 1 2 0
dat prin:
1. Æ (q0 ; 0; z ) = f(q1 ; xxxz )g;
2. Æ (q1 ; 0; x) = f(q1 ; xxxx)g;
3. Æ (q1 ; 1; x) = f(q2 ; )g;
Automate pushdown nedeterministe 113
Algoritmul (ALG7):
Intrare: A = (Q; ; ; Æ; q ; z ; ;) un automat pushdown;
0 0
2. := ;
3. P := ;;
1 0
5. := [ f[q; X; q ]g;
6. P := P [ f[q; X; q ] ! ag
1 1 1
end
7. k := 1;
repeat
8. k := k ;
9. for (orice (q ; z z :::zm ) 2 Æ(q; a; X )) do begin
+1
1 1 2
end ;
17. k := k + 1
18. until k = k ; 1
20. k := k [ fS g;
21. for (orice [q ; z ; q] 2 k ) do
0 0
22. P := fS ! [q ; z ; q]g 0 0
end ;
23. V := k ;
Teorema 3.1.3 (corectitudinea Algoritmului (ALG7))
Fie A = (Q; ; ; Æ; q ; z ; ;) un automat pushdown, care este intrare pentru Algo-
0 0
proprietate).
Prin inductie dupa j; aratam ca k = k j ; 8 j 1: Asta ^nseamna ca k este
+
[q; X; temp[m]] care se adauga la pasul 15 din Algoritmul (ALG7). Asadar, la pasul
16 al Algoritmului (ALG7), exista o regula
[q; X; temp[m]] ! [q ; z ; temp[1]][temp[1]; z ; temp[2]]:::[temp[m 1]; zm; temp[m]];
1 1 2
ale Algoritmului (ALG7) este mai mic sau egal dec^at j k j: Astfel, obtinem partea (ii).
Pentru demonstrarea partii (i), trebuie sa aratam ca Algoritmul (ALG7) con-
struieste k (multimea neterminalilor acesibili) si P regulile corespunzatoare. Astfel,
va rezulta L(G0 ) = L (A); unde G0 este gramatica din constructia prezentata ^n
Exercitiul 3.1.5. Dar L(G) = L(G0 ); deci L(G) = L (A):
Automate pushdown nedeterministe 115
Ram^ane sa aratam ca Algoritmul (ALG7) construieste corect gramatica cores-
punzatoare G: Pasul 3 este natural (el corespunde pentru = ;). La pasii 4,5,6 0
1 2 1 2
Punem ?q pentru ca nu este important care stare este pe locul trei. Conform cu
Denitia 3.1.6, obtinem:
temp[2] = temp0[2]; temp[3] = temp0 [3]; :::; temp[m 1] = temp0 [m 1]; q =
0
1
q ; ?q = temp[m]:
Daca 9 k 2 f2; 3; :::; mg astfel ^nc^at temp[k] 6= temp0[k]; atunci rezulta ca trebuie sa
1
gasim o alta variabila pentru a se putea face compunerea. Deci, obtinem pasii 10, 11,
12, 13, 14, 15, 16, 17, 18 din Algoritmul (ALG7). Scopul pasilor 19, 20, 21, 22, 23
este sa introduca un simbol de start ^n multimea de variabile si adaugarea regulilor
corespunzatoare ^n P: Astfel, demonstratia Teoremei 3.1.3 este terminata.
Exercitiul 3.1.6 Fie automatul pushdown din Exemplul 3.1.1. Sa se gaseasca gra-
matica echivalenta folosind Algoritmul (ALG7).
Solutie Obtinem = ;; 0
= f[q ; x; q ]; [q ; x; q ]; [q ; z; q ]g;
P = f[q ; x; q ] ! 1; [q ; x; q ] ! 1; [q ; z; q ] ! g;
1 1 2 2 2 2 0
1 2 2 2 2 0
2= [ f[q ; z; q ]; [q ; x; q ]g;
1 0 0 1 2
1 2 1 2 2 2 2 2 2 2
3 3
P = P [ fS ! [q ; z; q ]g: 0 0
Observatia 3.1.1 Acest tip de rezolvare a problemei este folosit ^n multe probleme:
eliminarea regulilor si regulilor de redenumire, determinarea starilor accesibile
dintr-un automat nit (de tip 3). De asemeni, aceasta metoda este folosita ^n
multiple domenii: logica (rezolutie Robinson), baze de date deductive (Datalog),
grafuri (^nchiderea re
exiva si tranzitiva a unei relatii). Consideram un operator
T : 2V ! 2V denit astfel:
Lema de pompare pentru limbaje de tip 2 116
Obtinem:
fq g ! T ( ) ! T (
0 0 1 ) ! :::
jj jj jj
0 1 2
(iii) x y i z ui v 2 L; 8 i 0:
! Demonstratia Lemei de pompare rezulta din Lema lui Ogden marc^and toate
simbolurile lui w.
Denitia 3.2.1 Fie G = (VN ; VT ; x ; P ) o gramatica independenta de context. Un
0
x 0
. # &
x x . . . xn
1 2
j;
Pasul j =) Pasul j + 1: Presupunem ca avem derivarea x0 =) Æj =) Æj +1 :
Presupunem ca Æj = y ::: yk yk yk ::: ym si ca ^n derivarea Æj =) Æj se aplica
1 1 +1 +1
Æ ^i corespunde arborele de derivare de
regula yk ! r r ::: rt . Daca derivarii x =j;)
1 2 j 0
mai jos
x 0
. # &
y . . yk . . ym
1
x 0
. # &
y . . yk . . ym
. # &
1
r r . . rt 1 2
Se observa ca pentru o derivare exista un unic arbore de derivare, pe c^and reciproc
nu. De exemplu, e gramatica expresiilor aritmetice
G = (fE; T; P g; f+; ; ag; E; fE ! T j E + T; T ! P j T P; P ! ( E ) j ag):
Derivarile de mai jos (distincte)
E =) E + T =) T + T =) T + P =) T P +P
E =) E + T =) E + P =) T + P =) T P + P
Lema de pompare pentru limbaje de tip 2 118
1; 2; 3; 4; 6; 7; 8; 10; 12 sunt marcate. Presupun^and ca suntem ^n notatiile Lemei lui
Ogden, se cere:
a) C^at se poate alege m ?
b) Sa se precizeze drumul de marcare din demonstratia Lemei lui Ogden;
c) Sa se precizeze o innitate de cuvinte care apartin lui L(G) asociate drumului
de marcare dedus mai sus.
Solutie
a) Gramatica G are 3 neterminali, deci constanta dependenta de limbaj din
demonstratia Lemei lui Ogden se poate alege n = 2 + 1 = 9. Astfel cuv^antul w 3
trebuie sa aiba cel putin 9 pozitii marcate. Deci, pentru cuv^antul care l-am ales ^n
exercitiul nostru, putem alege m (numarul de pozitii marcate) astfel^nc^at 9 m 12:
b) Pentru a preciza drumul de marcare din demonstratia Lemei lui Ogden, vom con-
sidera derivarea (st^anga)
x =) x x =) x x x =) x x x x =) x x x x x =) b x x x x =)
1 2 3 3 1 3 1 2 1 3 2 3 2 1 3 3 2 1 3
=) b a x x x =) b a b x x =) b a b x x x =) b a b b x x =) b a b b a x =)
2 1 3 1 3 2 3 3 3 3 3
=) b a b b a x x =) b a b b a x x x =) b a b b a x x x x =) b a b b a a x x x =)
1 2 2 3 2 3 1 3 2 1 3 2
=) b a b b a a x x x x =) b a b b a a b x x x =) b a b b a a b a x x =)
2 3 3 2 3 3 2 3 2
=) b a b b a a b a a x =) b a b b a a b a a x x =) b a b b a a b a a a x =)
2 3 1 1
=) b a b b a a b a a a x x =) b a b b a a b a a a b x =) b a b b a a b a a a b a
2 3 3
^In continuare, vom descrie arborele de derivare corespunzator derivarii de mai sus,
pozitiile marcate din w le vom pune ^ntr-un cerc, iar nodurile drumului de marcare
^ntr-un dreptunghi.
Lema de pompare pentru limbaje de tip 2 120
x 1
j
x
2 x 3
+ R s
x3 x 1 x1 x2
/ N W
U
U
x
? ?
N ?
x x x x x x x
?
1 2 2 3 2 3 3 1
U ? U
?
?
x
2 x
? W
?
3
?
b b ax 3
x 1 a a x 2 x3
b
? ?
a
a x 2 x3 b a
De exemplu, pentru prima derivare directa, s-a aplicat regula x ! x x : Am
b a
1 2 3
ales ca nod marcat pe x deoarece subarborele sau contine mai multe pozitii mar-
3
marcate, pe c^and cel drept 5 pozitii marcate) s.a.m.d. De exemplu, a doua aparitie a
neterminalului x pe drumul de marcare nu determina un punct de ramicare deoarece
1
subarborele drept nu are nici o pozitie marcata. Deci, pentru arborele de radacina x 1
sunt m pozitii marcate, pentru subarborele de radacina x sunt cel putin m pozitii 3
marcate, ..., iar pentru subarborele de radacina x de pe nivelul 6 avem cel putin m5
2
2 2
pozitii marcate. De aceea se alege n un numar exponential ^n raport cu numarul de
neterminali din gramatica G.
c) Pentru a preciza o innitate de cuvinte din G trebuie sa gasim o factorizare pentru
care au loc conditiile (i) si (ii) din Lema lui Ogden. Alegem ca neterminal (ce se
repeta) pe x si obtinem factorizarea:
2
w = b| a{z a |{z}
b b a} |{z} b |{z}
a a| a{zb a};
x y z u v
deci cuvintele b a b b a a b a a a b a 2 L(G);
i i 8 i 0:
Exercitiul 3.2.2 Folosind Lema de pompare (pentru limbaje independente de con-
text), aratati ca limbajul L = fan bn cj = n j 2n; n 0g nu este de tip 2:
Solutie Ca observatie, limbajul L este de tip 1 (cel putin) deoarece este generat
de gramatica din Exercitiul 1.3.25.
Presupunem acum, prin reducere la absurd, ca limbajul L este de tip 2. ^In con-
formitate cu Lema de pompare, consideram constanta n dependenta de limbajul L:
Lema de pompare pentru limbaje de tip 2 121
Fie w = an bn cj ; unde j 2 fn; n + 1; :::; 2ng: Este clar ca jwj 3n > n; deci exista
factorizarea w = x y z u v ce verica conditiile (i), (ii), (iii).
Mai ^nt^ai, sa observam ca y; u au un singur tip de simbol ^n componenta, altfel,
daca, de exemplu y contine si a si b; din conditia (iii) scrisa pentru i = 2, rezulta
ca exista ^n L cuvinte ^n care simbolul a apare dupa b, contradictie. Asadar, vom
distinge doar cazurile:
Cazul I: y = al ; u = am si din conditia (i) din Lema de pompare, rezulta
l + m > 0.
w = a| a{z::: a} a| a{z::: a} a| a{z::: a} a| a{z::: a} a| a ::: a b b{z::: b c c ::: }c :
x y=al z u=am v
Alegem ^n conditia (iii) i = 0 si obtinem w0 = an l m bn cj 2 L: Dar n l m 6=
n deci w0 2= L contradictie;
Cazul II: y = al ; u = bm , deci
w = a| a{z::: a} a| a{z::: a} a| a ::: a{zb b ::: }b b| b{z::: }b b| b ::: b{zc c ::: }c :
x y=al z u=bm v
6 l. Alegem i = 0 ^n conditia (iii) si obtinem ca w0 =
Subcazul II.1. m =
an l bn m cj 2 L, ceea ce reprezinta o contradictie deoarece n l 6= n m:
Subcazul II.2. m = l. Din (i) este clar ca m + l > 0 deci m = l > 0.
Folosind (iii) rezulta wi0 = an i l bn i l cj 2 L (^nteleg^and ca wi0
+( 1) +( 1)
^In concluzie, deoarece toate cazurile posibile conduc la o eroare, rezulta ca limbajul
L nu este independent de context.
! Rezolvati Exercitiul 3.2.2 folosind Lema lui Ogden marc^and pozitiile simbolurilor
a. Este mai simpla solutia ?
Lema de pompare pentru limbaje de tip 2 122
Solutie Consideram limbajele din Exercitiile 1.3.6 si 1.3.7. Acestea sunt L = 1
intersectie.
Exercitiul 3.2.4 Folosind Lema lui Ogden, sa se arate ca limbajul L = fai bj ck = i; j; k
0; i 6= j 6= k 6= ig nu este de tip 2.
Solutie Ca observatie, limbajul L este de tip 1 (cel putin) deoarece este generat
de gramatica din Exercitiul 1.3.27.
Presupunem, prin reducere la absurd, ca limbajul L este de tip 2. Vom considera
cuv^antul w = an bn n cn n ^n care sunt marcate pozitiile simbolurilor a: Din Lema
+ ! +2 !
Solutie Ca observatie, limbajul L este de tip 1 (cel putin) deoarece este generat
de gramatica din Exercitiul 1.3.30, aleg^and k = 10.
Presupunem ca limbajul L este de tip 2. ^In conformitate cu Lema de pompare,
consideram constanta n dependenta de limbajul L. Fie cuv^antul w = a , deci este
n
10
Lema de pompare pentru limbaje de tip 2 123
clar ca jwj > n: Din Lema de pompare, rezulta ca exista factorizarea w = x y z u v.
Deci y = ak1 ; u = ak2 : Din conditiile (i) si (ii) ale Lemei de pompare rezulta ca
1 k + k n: Conditia (iii) va deveni:
1 2
x yi z ui v = a k1 k2 k1 i k2 i = a k1 k2 i :
n n
10 + + 10 +( + )( 1)
Trebuie sa aratam ca 9 i 0 astfel ^nc^at 10n + (k + k )(i 1) nu poate scris sub
1 2
forma 10m:
Cazul I: 10 nu divide k1 + k2 : Consideram i = 0, deci 10n (k + k ) nu are
1 2
Cazul II: 10=(k1 +k2 ). Fie k1 +k2 = 10k p; k 1 maximal cu aceasta proprietate
(adica 10 nu divide p). Dar k + k n deci 10k p n de unde k < n; p 1:
1 2
^In concluzie, nu este posibila nici o factorizare ca cea din Lema de pompare, deci
limbajul L nu este de tip 2:
! Exista un rezultat [7, 8] care spune ca \Daca L 2 L ; L fag atunci 2
L 2 L ". Astfel, se putea aplica acest rezultat pentru exercitiul precedent, si ^n loc
3
limbaje de tip 3. Demonstratia ar decurs exact la fel ca mai sus. Deosebirea ar
fost ca ^n loc de k1 + k2 am avut k:
!
1.2.5.
Limbajul L din exercitiul precedent este generat de gramatica din Exercitiul
2
Exercitiul 3.2.6 Sa se arate ca limbajul L = fan = n 0g nu este de tip 2:
Solutie Presupunem ca limbajul L este de tip 2. ^In conformitate cu Lema de 2
pompare, consideram constanta n dependenta de limbajul L. Fie cuv^antul w = an ,
deci este clar ca jwj > n: Din Lema de pompare, rezulta ca exista factorizarea w =
Forma normala Chomsky 124
x y z u v. Deci y = ak1 ; u = ak2 ; si facem notatia k = k + k : Din conditiile (i) si (ii)
1 2
unde rezulta imediat ca n + k nu poate patrat perfect (ind situat ^ntre 2 patrate
2
2
! Limbajul L din exercitiul precedent este de tip 1 deoarece este generat de gra-
matica din Exercitiul 1.2.6. La fel ca si Exercitiul 3.2.5, demonstratia se putea face
aplic^and Lema Bar-Hillel pentru limbaje de tip 3:
unde B ; B ; :::; Bk
1 2 2 sunt neterminali noi (distincti).
Algoritmul (ALG8):
Forma normala Chomsky 125
sky.
Metoda:
Mai ^nt^ai, consideram o functie h : VN [ VT ! VN data prin:
h(yi ) = zyi yyi 2 VT (zi neterminal nou)
i i 2 VN
Extindem h la cuvinte din (VN [ VT ) astfel:
h() =
h(x x ::: xk ) = h(x ) h(x ) ::: h(xk )
1 2 1 2
if (yi 2 VT ) then
if not(marcat(yi )) then begin
l := l + 1;
VN0 := VN [ fzl g;
h(yi ) := zl ;
marcat(yi ) := true;
P 0 := P 0 [ fzl ! yi g
end ;
P 0 := P 0 fx ! y y ::: yk g [ fx ! h(y ) h(y ) ::: h(yk )g;
1 2 1 2
end ;
for (8 x ! y y ::: yk 2 P 0 ; k > 2) do begin
1 2
l := l + 1;
VN := VN [ fzl g;
P 0 := P 0 fx ! y y ::: yk g [ fx ! y zl g;
1 2 1
for i := 1 to k 2 do begin
l := l + 1;
VN0 := VN0 [ fzl g;
P 0 := P 0 [ fzl ! yi zl g;
1
end ;
l := l + 1;
VN0 := VN0 [ fzl g;
P 0 := P 0 [ fzl ! yk yk g;
1
end ;
end .
Forma normala Chomsky 126
Este clar ca Algoritmul (ALG8) are un numar nit de pasi. Corectitudinea algorit-
mului este asigurata de cele discutate mai sus.
Exercitiul 3.3.1 Fie gramatica G = (fS; A; B g; fa; bg; S; P ) cu regulile P :
1. S ! b A 2. S ! a B 3. A ! b A A 4. A ! a S
5. A ! a 6. B ! a B B 7. B ! b S 8. B ! b
Folosind procedeul de mai sus, sa se gaseasca o gramatica G0 de tip 2 sub forma
normala Chomsky echivalenta cu G:
Solutie Observam ca gramatica G nu contine reguli si nici redenumiri. Astfel,
consideram neterminalii C si D pentru simbolurile a si b: Astfel, din procedeul de mai
sus, regulile gramaticii devin:
1. S ! D A 2. S ! C B 3. A ! D A A 4. A ! C S
5. A ! a 6. B ! C B B 7. B ! D S 8. B ! b
9. C ! a 10. D ! b
Se observa acum ca singurele reguli care nu sunt ^n forma normala Chomsky sunt 3
si 6. ^In locul regulii 3 vom scrie:
A ! DE
E ! A A,
iar ^n locul regulii 6:
B !CF
F ! B B.
^In concluzie, gramatica ^n forma normala Chomsky, echivalenta cu G; este G0 =
(fS; A; B; C; D; E; F g; fa; bg; S; P 0) cu regulile P 0 :
1. S ! D A 2. S ! C B 3. A ! D E 4. E ! A A
5. A ! C S 6. A ! a 7. B ! C F 8. F ! B B
9. B ! D S 10. B ! b 11. C ! a 12. D ! b
Exercitiul 3.3.2 Fie gramatica G = (VN ; VT ; x0 ; P ) de tip 2 care nu are reguli
si nici redenumiri. Sa se deduca marginile superioare ale numarului de neterminali,
respectiv de reguli pentru gramatica sub forma normala Chomsky, echivalenta cu G;
folosind procedeul de mai sus.
Solutie Fie G0 = (VN0 ; VT ; x ; P 0 ) gramatica echivalenta sub forma normala Chom-
0
sky. Putem deduce care este numarul exact de neterminali, respectiv de reguli, pentru
gramatica G0 . Avem
X
jVN0 j = jVN j + jfx= x 2 VT ; 9 y ! r 2 P; jrj 2; x 2 rgj + (jrj 2);
x!r; jrj>2
Forma normala Greibach 127
Aceste estimari superioare mai simple devin egalitate daca pentru ecare terminal
exista o regula care-l contine ^n partea dreapta.
! Pentru gramatica din Exercitiul 3.3.1 are loc egalitatea. In ^ general, egalitatea
are loc daca si numai daca pentru orice regula de forma A ! a; a 2 VT , exista
cel putin o regula A ! ; 6= a: De altfel, algoritmul de transformare a regulilor
^n forma normala Chomsky, se poate ^mbunatati prin aceea ca daca exista o singura
regula cu A ^n partea dreapta, atunci nu mai este nevoie sa consideram un neterminal
nou B , si respectiv o regula noua B ! a.
I. e x ! r o regula arbitrara;
I.1. daca r = a ; a 2 VT atunci regula este ^n forma Greibach;
I.2. altfel r = y ; y 2 VN atunci putem elimina din G regula x ! r si sa
o ^nlocuim cu x ! j j ::: j n unde y ! j j::: j n sunt toate
1 2 1 2
mai sus (I.2.); astfel, vom reduce recursia st^anga cu mai multi pasi ^n recursie
st^anga cu un singur pas, adica la o regula de forma x ! x ;
eliminarea recursiei st^angi cu un singur pas; astfel, e (i) x ! x j a j ::: j x n
1 2
regulile st^ang recursive si (ii) x ! j j ::: j m celelalte reguli cu x ^n partea
1 2
st^anga. Se scot regulile (i) si se introduc regulile (i) x ! y j y j ::: j bm y si
x ! y j y j ::: j an y j j j ::: j n :
1 2
1 2 1 2
Algoritmul (ALG9):
Intrare: Gramatica G = (VN ; VT ; x ; P ) de tip 2, VN = fx ; :::; xn g, fara reguli;
Iesire: Gramatica G0 = (VN0 ; VT ; x ; P 0 ) de tip 2 echivalenta cu G ^n care regulile au
0 0
forma:
x ! a ; a 2 VT ;
xi ! xj ; 2 V ; j > i;
+
yi ! ; 2 V : +
Metoda:
begin
1: VN0 := VN ;
2: P 0 := P ;
3. for k := 0 to n do begin
4. for j := 0 to k 1 do
5. while (9 ; xk ! xj 2 P 0 ) do
6. P 0 := P 0 fxk ! xj g [ fxk ! = xj ! 2 P 0 g;
Forma normala Greibach 129
7. while (9 ; xk ! xk 2 P 0 ) do begin
8. VN0 := VN0 [ fyk g;
9. P 0 := P 0 fxk ! xk g [ fyk ! ; yk ! yk g;
10. while (9 ; xk ! 2 P 0 ; 6= xk ; xk ! nemarcata) do begin
(1)
11. P 0 := P 0 [ fxk ! yk g;
12. marcheaza xk !
end
end
end
end ;
Observatia 3.4.1 O constructie echivalenta ar , ^n locul pasilor 9-12:
9. P 0 := P 0 fxk ! xk ; xk ! g [ fxk ! yk ; yk ! ; yk ! yk g;
Avantajul acestei constructii este ca gramatica obtinuta are sanse sa e LL(1)
(vezi gramatica expresiilor aritmetice de la pagina 131).
P^ana ^n prezent, am eliminat recursia st^anga, deci algoritmul precedent are un
numar nit de pasi. Chiar si dupa eliminarea recursiei st^angi, s-ar putea ca unele
reguli sa nu e de forma x ! a ; a 2 VT : Oricum, regulile corespunzatoare lui xn
sunt de forma xn ! a ; a 2 VT : Atunci, continuam ^n felul urmator:
parcurgem ^n sens invers (de la regulile cu xn ^n partea st^anga p^ana la x ) si
1 1
aplicam procedeul I.2 de mai sus; acum putem spune ca toate regulile cu xk ^n
partea st^anga sunt de forma xk ! a ; a 2 VT :
ce facem cu regulile cu y ^n partea st^anga care ^ncep cu un neterminal; aplicam
iar procedeul I.2; acest lucru este posibil deoarece regulile de forma y ! i y j i
nu sunt st^ang recursive (primul simbol din i ind un neterminal de forma xj ).
Algoritmul (ALG10):
Intrare: G0 = (VN0 ; VT ; x ; P 0 ) gramatica obtinuta la iesirea Algoritmului (ALG9);
Iesire: G = (VN0 ; VT ; x ; P ) o gramatica echivalenta cu G0 ^n forma normala
0
1 0 1
Greibach.
Metoda:
begin
1. P := P 0 ;
1
2. i := n;
3. while i > 0 do begin
4. i := i 1;
5. while (9 j; i < j n; xi ! xj 2 P ) do
6. P := P fxi ! xj g [ fxi ! = xj ! 2 P g
1
1 1 1
end ;
7. for i := 0 to n do
8. while (9 j; 0 j n; yi ! xj 2 P ) do
1
9. P := P fyi ! xj g [ fyi ! = xj ! 2 P g
1 1 1
end .
Forma normala Greibach 130
1. x1 ! x2 x3
2. x2 ! x3 x1 j b
3. x3 ! x1 x2 j a
Folosind algoritmul de mai sus, sa se determine o gramatica echivalenta cu G care
este ^n forma normala Greibach.
Solutie Observam ca neterminalii sunt deja numerotati. Aplicam pasii 4,5,6 din
Algoritmul (ALG9) (eliminarea recursiei st^angi). Singura regula de forma xi ! xj
cu j < i este x ! x x : Eliminam aceasta regula adaug^and regula:
3 1 2
x3 !x x x 2 3 2
Aceasta este tot de forma xi ! xj cu j < i deci eliminam aceasta regula si intro-
ducem:
x ! x x x x jbx x 3 3 1 3 2 3 2
Acum aplicam pasii 7,8,9,10,11,12 din Algoritmul (ALG9) elimin^and recursia st^anga
^ntr-un pas (reguli de forma xi ! xi ). Eliminam regula x ! x x x x si adaugam 3 3 1 3 2
regulile:
x ! bx x y jay 3 3 2 3 3
y ! x x x y jx x x 3 1 3 2 3 1 3 2
2. x ! x x jb
2 3 1
3. x ! bx x y jay jbx x ja
3 3 2 3 3 3 2
4. y ! x x x y jx x x
3 1 3 2 3 1 3 2
Acum aplicam pasii 3,4,5,6 din Algoritmul (ALG10) si deci regula 2.a) se sterge
si se ^nlocuieste cu:
x 2 ! bx x y x jay x jbx x x jax jb
3 2 3 1 3 1 3 2 1 1
y 3 ! bx x y x x x x y jay x x x x y jbx x x x x x y j
3 2 3 1 3 3 2 3 3 1 3 3 2 3 3 2 1 3 3 2 3
bx x x x x x jax x x x jbx x x
3 2 1 3 3 2 1 3 3 2 3 3 2
^In concluzie, regulile gramaticii echivalente ^n forma normala Greibach sunt:
x
1 ! bx x y x x jay x x jbx x x x jax x jbx
3 2 3 1 3 3 1 3 3 2 1 3 1 3 3
x !
2 bx x y x jay x jbx x x jax jb
3 2 3 1 3 1 3 2 1 1
x !
3 bx x y jay jbx x ja
3 2 3 3 3 2
y ! 3 bx x y x x x x y jay x x x x y jbx x x x x x y j
3 2 3 1 3 3 2 3 3 1 3 3 2 3 3 2 1 3 3 2 3
{ x ! y z; x; y; z 2 VN ;
{ x ! a; x 2 VN ; a 2 VT :
regulile de tipul x ! a devin (x; a) ! ;
regulile de tipul x ! y z devin (x; a) ! (y; b) b (z; a);
adaugam un nou simbol de start x0 si regulile x0 ! (x ; a) a;
0 0 0 8 a 2 VT :
Algoritmul (ALG11):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky;
Iesire: G0 = (VN0 ; VT ; x0 ; P 0 ) o gramatica de tip 2 echivalenta cu G ^n forma normala
0
operator;
Metoda:
begin
VN0 := fx0 g [ VN VT ;
P 0 := ;;
0
for (8 a 2 VT ) do
P 0 := P 0 [ fx0 ! (x ; a) ag;
for (8 x ! a 2 P ) do
0 0
P 0 := P 0 [ f(x; a) ! g;
for (8 x ! y z 2 P ) do
for (8 a; b 2 VT ) do
P 0 := P 0 [ f(x; a) ! (y; b) b (z; a)g;
end .
Exercitiul 3.5.1 Fie gramatica (din Exercitiul 3.4.1)
G = (fx ; x ; x g; fa; bg; x ; P );
1 2 3 1
cu regulile P :
1. x1 ! x2 x3
2. x2 ! x3 x1 j b
Forma normala operator 133
3. x3 ! x1 x2 j a
Folosind algoritmul de mai sus, sa se determine o gramatica echivalenta cu G care
este ^n forma normala operator.
Solutie Spre deosebire de constructia de la forma normala Greibach, aceasta
constructie este mai usoara. ^In plus, gramatica G de la care plecam este deja ^n
forma normala Chomsky. Astfel, gramatica G0 = (fx g [ VN VT ; VT ; x ; P ) va avea
0 0
regulile P :
scriem mai ^nt^ai regulile de start: x 0 ! (x ; a) a si x ! (x ; b) b;
1 0 1
(x ; a) ! (x ; a) a (x ; a)
1 2 3
(x ; a) ! (x ; b) b (x ; a)
1 2 3
(x ; b) ! (x ; a) a (x ; b)
1 2 3
(x ; b) ! (x ; b) b (x ; b)
1 2 3
(x ; a) ! (x ; a) a (x ; a)
2 3 1
(x ; a) ! (x ; b) b (x ; a)
2 3 1
(x ; b) ! (x ; a) a (x ; b)
2 3 1
(x ; b) ! (x ; b) b (x ; b)
2 3 1
(x ; a) ! (x ; a) a (x ; a)
3 1 2
(x ; a) ! (x ; b) b (x ; a)
3 1 2
(x ; b) ! (x ; a) a (x ; b)
3 1 2
(x ; b) ! (x ; b) b (x ; b)
3 1 2
Bine^nteles, neterminalii de tip pereche (VN VT ) se pot redenumi, dar acest lucru
distruge lizibilitatea gramaticii G0 .
Exercitiul 3.5.2 Sa se estimeze numarul maxim de neterminali si reguli din algo-
ritmul precedent.
Solutie Se vede imediat ca gramatica rezultata din Algoritmul (ALG11) are jVN0 j =
jVN jjVT j +1; iar numarul de reguli jP 0 j = jVT j + jfA ! a= A ! a 2 P gj + jVT j jfA !
2
Evident G este ^n forma normala Chomsky. Se vede imediat ca L(G) = fan bn =n
1g: Constructia prezentata ^n Sectiunea 2.5 va implica o gramatica echivalenta cu 8
neterminali si 16 reguli.
Metoda:
1. := ;;
0
2. := ;
3. P 0 := ;;
1 0
end ;
7. k := 1;
repeat
8. k := k ;
+1
9. if (9 x ! yz 2 P ) then begin
10. P 0 := P 0 [ f(x; a) ! (y; b)b(z; a)=(y; b); (z; a) 2 k g
11. k := k [ f(x; a)=(y; b); (z; a) 2 k g
+1 +1
end
12. k := k + 1
Forma normala operator 135
13. until k = k ; 1
15.
16. P 0 := P 0 [ fx0 ! (x ; a) a= 8 a 2 VT astfel ^nc^at (x ; a) 2 k g
0
0 0 0
end ;
17. VN0 := k ;
Teorema 3.5.1 (corectitudinea si terminarea Algoritmului (ALG12))
Fie G = (VN ; VT ; x ; P ) o gramatica ^n forma normala Chomsky care este intrare
0
2 3
= [ f(x ; b)g;
P 0 = P 0 [ f(x ; b) ! (x ; a)a(x ; b)g;
2 1 0
= [ f(x ; b)g;
0 2 3
)
P 0 = P 0 [ f(x ; b) ! (x ; a)a(x ; b)g;
4 3 0 3 0 2
= [ fx0 g;
0 2 1
P 0 = P 0 [ fx0 ! (x ; b)g:
4 4 0
0 0
Astfel, obtinem o gramatica echivalenta ^n forma operator care are 5 neterminali
(^n loc de 8) si 6 reguli (^n loc de 16). Mentionam ca acestea din paranteze sunt
obtinute cu algoritmul uzual.
Limbaje independente de context deterministe 136
! Uneori conditia 2) se mai scrie:
2') daca 9 (s; a; z ) 2 S 6 ;, atunci Æ(s; ; z ) =
astfel ^nc^at Æ (s; a; z ) = ;
(contrara reciprocei).
Denitia 3.6.2 Un limbaj L este independent de context determinist (sau, pe
scurt, determinist), notatie L 2 L DET ; daca 9 M un automat pushdown determinist
2
mentale:
Teorema 3.6.1 Daca L 2 L DET ; R 2 L atunci L \ R 2 L DET :
2 3 2
= L 2 L DET :
Teorema 3.6.2 Daca L 2 L DET atunci C L not
2 2
L
!
2
Teorema 3.6.2 subliniaza diferenta dintre clasele de limbaje L2 si L2DET . Clasa
nu este ^nchisa la complementara, spre deosebire de L2DET .
Exercitiul 3.6.1 Sa se arate ca L DET 6= L
2 2 (adica exista un limbaj de tip 2 care
nu este determinist).
Solutie Fie L = f0i 1j 2k = i = j sau j = k sau i = k; i; j; k 0g: Evident L 2 L
deoarece este generat de gramatica G = (fS; A; B; C; D; E; F g; f0; 1; 2g; S; P ) unde P
2
este:
1. S ! A B j C D j E
2. B ! 2 B j
3. A ! 0 A 1 j
4. C ! 0 C j
5. D ! 1 D 2 j
6. E ! 0 E 2 j F
7. F ! 1F j
Limbaje independente de context deterministe 137
Vom arata ca L 2= L DET prin reducere la absurd. Asadar, presupunem ca
L 2 L DET , deci conform cu Teorema 3.6.2, rezulta ca L = L 2 L DET :
2
(consultati Exercitiile 1.3.4 sau 2.10.4, a) ). Aplic^and acum Teorema 3.6.1 pentru lim-
bajele L si R rezulta ca L = L \ R = f0i 1j 2k = i 6= j 6= k 6= i; i; j; k 0g 2 L DET :
Dar L DET L ; deci limbajul L 2 L : Dar conform Exercitiului 3.2.4 avem ca
1 2 1 2
2 2 2 2
L 2= L , contradictie.
2 2
~
2 2
Prin analogie cu clasa de limbaje L2DET denim L3DET = fL=9A automat nit
determinist astfel ^nc^at L = L(A)g: Utiliz^and Exercitiul 3.6.1, putem rana putin
Ierarhia lui Chomsky, obtin^and:
L DET = L L DET L L L
3 3 2 2 1 0
3 3 2
2. Æ(s ; 0; 0) = (s ; 0 0);
1 1
3. Æ(s ; 1; 0) = (s ; );
1 2
Probleme decidabile ^n clasa L2 138
4. Æ(s ; 1; 0) = (s ; );
2 2
5. Æ(s ; 1; z ) = (s ; z );
2 0 3 0
6. Æ(s ; 2; z ) = (s ; z );
0 0 3 0
0 0 0 1 2
1. Æ(s ; a; z ) = (s ; z );
0 0 01 01
2. Æ(s ; c; z ) = (s ; z ); 8 c 2 ;
0 0 02 02
3. Æ(s; c; z ) = ÆÆ ((s; c; z ); s 2 S
s; c; z ); s 2 S ; 8 c 2 ; 8 z 2 :
1 1
2 2
Cazul II: La fel ca ^n cazul II, cu deosebirea ca ^n loc de tranzitia 2 se considera
Æ(s ; b; z ) = (s ; z );
0 0 02 02
Ni = Ni [ fx= x 2 VN ;
+1
(iii) 6 ; () x 2 Nk :
L(G) = 0
Algoritmul (ALG13):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2;
Iesire: L(G) 6= ; ?
0
Metoda:
begin
i := 0;
N := ;;
0
repeat
i0 := i + 1;
Ni := Ni [ fx= x 2 VN ; 9 x ! 2 P; 2 (Ni [ VT ) g
1
end .
! Folosind arborii de derivare, algoritmul precedent este echivalent cu a spune ca
\L(G) 6= ; () exista cel putin un arbore de derivare etichetat ^n radacina cu x0 si
toate frunzele etichetate cu simboluri terminale (din VT )."
Denitia 3.7.1 Fie G = (VN ; VT ; x ; P ) o gramatica (nu neaparat de tip 2). Un
neterminal x se numeste productiv daca exista w 2 VT astfel ^nc^at x =) w:
0
G
Un simbol se numeste neproductiv daca nu este productiv.
Observatia 3.7.1 VN Nk reprezinta multimea simbolurilor neproductive (unde Nk
este multimea din Algoritmul (ALG13)).
Rezolvarea problemei (P1) face parte din categoria metodelor de punct x (de
exemplu, algoritmul de deducere a unei gramatici echivalente cu un automat push-
down, pagina 116). Complexitatea timp a algoritmului (ALG13) este O(jVN jjP j q),
unde q este numarul maxim de simboluri din partea dreapta a regulilor.
Exercitiul 3.7.1 Fie gramatica G = (fS; A; B; C g; fa; bg; S; P ) unde regulile P sunt:
S ! AB
A!BC
B !CC
C!a
Probleme decidabile ^n clasa L2 140
care toti neterminalii pot trece ^n cuvinte). Astfel, deoarece S 2 N , va rezulta ca
L(G) 6= ;: De altfel, se observa ca toate simbolurile gramaticii sunt utile.
4
N = fx g
Ni = Ni [ fx= y ! 2 P; x 2 \ (VN [ VT ); y 2 Ni g:
0 0
+1
bile;
Metoda:
begin
i := 0;
N := fx g;
0 0
repeat
i := i + 1;
Ni := Ni [ fx= y ! 2 P; x 2 ; y 2 Ni g
1
VN0 := VN \ Ni ;
VT0 := VT \ Ni ;
P 0 := P 0 fx ! = x 2= Ni sau 2= Ni g
end .
Denitia 3.7.3 Fie G = (VN ; VT ; x ; P ) o gramatica (nu neaparat de tip 2). Un
0
simbol se numeste util daca este productiv si accesibil. Un simbol se numeste inutil
daca nu este util.
O gramatica cu toate simbolurile utile se numeste redusa.
Exercitiul 3.7.2 Fie gramatica din Exercitiul 3.7.1. Sa se deduca simbolurile acce-
sibile.
Solutie Evident N = fS g: Calculam N = fS; A; B g, apoi N = fS; A; B; C g: ^In
0 1 2
nal N = fS; A; B; C; ag: Cu alte cuvinte, toate simbolurile gramaticii sunt accesibile.
3
Folosind si Exercitiul 3.7.1, putem spune ca gramatica G este redusa.
Trecem la rezolvarea problemei P3. Pentru aceasta, consideram (la intrare) o
gramatica G ^n forma normala Chomsky, pentru care 2= L(G) (cu toate simbolurile
accesibile). Construim urmatorul graf orientat:
Algoritmul (ALG15):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky si cu
0
sunt:
S ! AB
A ! BC ja
B ! C C jb
Probleme decidabile ^n clasa L2 142
C!a
Sa se cerceteze daca L(G1 ) este nit (sau innit). Aceeasi problema daca se adauga
regula C ! A B:
Solutie ^In primul caz, utiliz^and algoritmul de mai sus, obtinem graful:
=
~
S
(GRAF )1
A - B
~ = C
Deoarece GRAF nu are circuite, rezulta ca L(G ) este nit.
1 1
~
S
=
(GRAF )2
} >
A - B
~ =
C
Iesire: w 2 L(G) ?
Pentru rezolvarea acestei probleme vom prezenta Algoritmul (ALG16) propus de
Cocke, Younger si Kasami (uneori, se prescurteaza CYK). Astfel, e w = a a ::: an
1 2
cu ai 2 VT ; 1 i n: Denim multimile
V = fA= A =) a ::: a
ij i ; 1 j n; 1 i n j + 1g:
i+j
G 1
Algoritmul (ALG16):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky si cu
toate simbolurile accesibile, w 2 VT ;
0
Iesire: w 2 L(G);
Metoda:
begin
for i := 1 to n do
Vi := fA= A ! ai 2 P g;
1
for j := 2 to n do
for i := 1 to n j + 1 do begin
Vij := ;;
for k := 1 to j 1 do
Vij := Vij [ fA= 9 A ! B C 2 P; B 2 Vik ; C 2 Vi k;j k g +
end ;
if x 2 V n then \w 2 L(G)"
else \w 2= L(G)"
0 1
end .
Complexitatea timp a algoritmului de mai sus este O(jwj ), iar complexitatea spatiu
3
este O(jP j + jwj jVN j). Pentru reprezentarea ^n memorie a gramaticii G se pot folosi
2
P se scrie p1 ; = x si p1 ; = a;
1 4 1 4 2
matricea P se scrie p2 ; = A; p2 ; = B; p3 ; = C:
2 7 1 7 2 7 3
Pentru reprezentarea ^n memorie a multimilor Vij putem folosi un tablou tridimen-
sional, sa zicem V = (vijk ), unde 1 i; j jwj; (de fapt putem alege j = 1; jwj; iar
i = 1; jwj j + 1), iar 1 k jVN j (k 2 VN ). Semantic, vijk = true () k 2 Vij :
Probleme decidabile ^n clasa L2 144
Exercitiul 3.7.4 Fie gramatica G = (fS; A; B; C g; fa; bg; S; P ) unde regulile P sunt:
S ! ABjBC
A ! BAja
B ! C C jb
C ! ABja
si sirul de intrare w = b a a b a: Folosind Algoritmul (ALG16), sa se precizeze daca
w 2 L(G):
Solutie Calculam multimile Vij ; j = 1; n; i = 1; n j + 1 (n ind lungimea
cuv^antului w). Avem n = 5: Mai ^nt^ai, calculam Vi ; 8 i = 1; 5: Cuv^antul w se 1
11 41 21 31 51
k=1;j 1
deci vor acei neterminali care pot trece printr-o regula ^n B A sau B C . Obtinem
V = fA; S g: Asemanator deducem V = V Æ V = fB g; V = V Æ V = fS; C g;
V = V Æ V = fS; Ag:
12 22 21 31 32 31 41
42 41 51
11 22 12 31 23 21 32 22 41 33 31 42 32 51
fB g:
i=1 i=2 i=3 i=4 i=5
j = 1 fB g fA; C g fA; C g fB g fA; C g
j = 2 fS; Ag fB g fS; C g fS; Ag
j=3 ; fB g fB g
j=4
j=5
Probleme decidabile ^n clasa L2 145
w 2 L(G));
w
Iesire: Derivarea (analizarea sintactica) astfel ^nc^at x =;)
G 0
Metoda:
Vom prezenta mai ^nt^ai o procedura PARSE, si apoi programul principal ce apeleaza
aceasta procedura. Vom nota prin #(x ! r) numarul regulii x ! r 2 P: Analizarea
sintactica a lui w se va pastra ^n vectorul as.
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
h := h + 1;
Probleme decidabile ^n clasa L2 146
as[h] := m
end
else
if 9 k = minfl= 1 l j 1; 9 A ! B C; B 2 Vil ; C 2 Vi l;j l g then
+
begin
h := h + 1;
as[h] := #(A ! B C );
PARSE (i; k; B );
PARSE (i + k; j k; C )
end
end ;
si programul principal este:
begin
h := 0;
if x 2 V n then begin
0 1
PARSE (1; n; x );
0
(9)
n+1 k k
=3 =3
Apel^and la integralele Riemann, putem aproxima suma din relatia (9) si obtinem:
nZ+1
T (n) 1 n+1
(10)
n+1
2 x
dx = 2 ln
2
< 2 ln(n + 1):
2
Asadar, rezulta T (n) < 2(n + 1) ln(n + 1); adica T (n) = O(n ln n).
^In cele ce urmeaza vom discuta despre cum se poate ^mbunatati spatiul de memorie
si implicatiile acesteia.
^In legatura cu necesarul de memorie, observam ca stiva apelurilor recursive are
ad^ancimea maxima ^n situatia ^n care pentru ecare intrare (i; j ) (parametrul A nu
este important ^n calculul numarului de operatii ale Algoritmului (ALG17)) pentru
procedura PARSE se obtine k = j 1: ^In aceasta situatie, ad^ancimea maxima a stivei
este n 1:
Putem obtine un rezultat mai bun daca nu se memoreaza \orbeste" ^n stiva
perechile (i+k; j k); ci, dupa ecare apelare a procedurii PARSE, introducem^n stiva
perechea corespunzatoare subsecventei de lungime maxima (daca ea are lungimea mai
mare ca 1), urm^and sa prelucram cealalta subsecventa (cea de lungime mai mica).
Deci este vorba de apelurile recursive:
PARSE (i; k; B );
PARSE (i + k; j k; C );
Lungimea secventelor acestora este k, respectiv j k: Conform celor discutate mai
sus, trebuie sa apelam mai ^nt^ai cea pentru care lungimea secventei este mai mica.
Deci situatia de mai sus corespunde cazului c^and k j k; ^n caz contrar av^and
inversate ordinea apelurilor recursive:
PARSE (i + k; j k; C );
PARSE (i; k; B );
Acum, vom rescrie procedura PARSE din Algoritmul (ALG17).
Algoritmul (ALG18):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky,
multimile Vij din Algoritmul (ALG16) si w 2 VT ;
0
Metoda:
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
Probleme decidabile ^n clasa L2 149
h := h + 1;
as[h] := m
end
else
if 9 k = minfl= 1 l j 1; 9 A ! B C; B 2 Vil ; C 2 Vi l;j l g then +
begin
h := h + 1;
as[h] := #(A ! B C );
if 2 k j then begin
PARSE (i; k; B );
PARSE (i + k; j k; C )
end
else begin
PARSE (i + k; j k; C );
PARSE (i; k; B )
end
end
end ;
Teorema 3.7.3 Ad^ancimea maxima h(n) a stivei va majorata de blog nc (adica
S (n) = O(log n)).
2
memoreaza indicii corespunzatori secventei (cel minim si cel maxim) si se trece la
prelucrarea secventei : At^ata timp c^at se prelucreaza subsecvente ale lui ; secventa
ram^ane ^n stiva (^ntr-un nivel mai jos al apelului recursiv); ad^ancimea n maxim a
a stivei se poate produce
atunci c^
a nd
este maxim,
adic
a j j = ; ceea ce 2
1
Astfel, am demonstrat inegalitatea (11). ^In continuare, vom arata ca h(n) blog nc: 2
avem:
n 1
h(n) 1 + h 1 + m = blog nc:
2 2
Exemplul 3.7.1 Sa presupunem ca avem la intrarea Algoritmului (ALG17) cuv^antul
w cu lungimea 10 si ca alegerea regulilor de tipul A ! B C (conform multimilor Vij )
implica o partitionare din doua ^n doua simboluri. Astfel, perechile de tipul (i; j ) (nu
mai mentionam neterminalul A) din apelul procedurii PARSE vor la ^nceput (1; 10),
apoi (1; 8); respectiv (9; 10), dupa care (1; 6); respectiv (7; 8), s.a.m.d. Astfel lungimea
stivei necesare apelurilor recursive are lungimea 5: ^In cazul Algoritmului (ALG18),
avem la ^nceput (1; 10), apoi (1; 2); respectiv (3; 10). Dupa rezolvarea apelului recursiv
pentru parametrii (1; 2) (adica la \^ntoarcerea din recursie"), vom partitiona \bucata"
ramasa din cuv^antul w si anume (3; 10): Acesta se va ^mparti ^n (3; 4), respectiv (5; 10)
s.a.m.d. Astfel lungimea stivei necesare apelurilor recursive are lungimea 2:
^In ceea ce priveste corectitudinea Algoritmului (ALG18), aceasta este valabila tot
^n baza Teoremei 3.7.1. Problema este ca derivarile (^n cazul acceptarii unui cuv^ant)
nu mai sunt neaparat toate st^angi. Deci din c^and ^n c^and vor apare derivari drepte.
Cum rezolvam ^n acest caz problema \ambiguitatii" (nu este vorba de ambiguitate ^n
sensul denitiilor de la pagina 118) ? Mai exact, care neterminal se va rescrie conform
regulilor gramaticii. Pentru aceasta, vom memora si pozitia ^n forma propozitionala
a neterminalului care determina aplicarea regulii. ^In ideea modicarii procedurii
PARSE, consideram poz o variabila globala astfel ^nc^at daca = x x ::: xm este
1 2
preciza si pozitia neterminalului care se transforma (care este partea st^anga a regulii
curente).
Metoda: Ca structura de date, vom extinde vectorul as care va avea elemente de tip
record cu c^ampurile val (cu aceeasi semnicatie de p^ana acum, adica retine numarul
regulii) si pozitie care are semantica discutata mai sus. ^In ceea ce priveste variabila
globala poz aceasta este initializata ^naintea apelului procedurii PARSE cu 1:
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
h := h + 1;
Probleme decidabile ^n clasa L2 151
as[h]:val := m
as[h]:pozitie := poz
end
else
if 9 k = minfl= 1 l j 1; 9 A ! B C; B 2 Vil ; C 2 Vi l;j l g then
+
begin
h := h + 1;
as[h]:val := #(A ! B C );
as[h]:pozitie := poz
if 2 k j then begin
PARSE (i; k; B );
inc(poz );
PARSE (i + k; j k; C )
end
else begin
inc(poz );
PARSE (i + k; j k; C );
dec(poz );
PARSE (i; k; B )
end
end
end ;
Teorema 3.7.4 (de corectitudine a Algoritmului (ALG19))
Algoritmul (ALG19) furnizeaza analizarea sintactica si pozitia neterminalului care
este membrul st^ang al regulii curente.
Demonstratie Prima parte rezulta imediat din Teorema 3.7.3. Pentru partea
a doua, vom rationa prin inductie dupa lungimea derivarii, pe care o vom nota cu
h: Cu alte cuvinte, vom demonstra ca ^n cadrul derivarii cu numarul h, se aplica o
regula care are ^n partea st^anga neterminalul cu numarul poz din forma propozitionala
curenta.
Pasul initial: h = 0 Deci avem o derivare ^ntr-un pas (de tipul x =) ), iar ^n
0
Cazul II: S-a intrat pe ramura else a instructiunii if 2 k j then begin , si
deci vom alege subarborele de derivare drept. Asadar neterminalul C devine cel
curent, deci va trebui sa incrementam variabila globala poz: Evident, ^naintea
urmatorului apel recursiv, ^n care radacina subarborelui de derivare este B , va
trebui sa decrementam variabila poz:
Asadar, am retinut ^n vectorul as, (c^ampul al doilea (pozitie)), pozitia ecarui
neterminal care este membru st^ang al regulii curente.
Exercitiul 3.7.5 Fie gramatica G = (fA; B; C; Dg; fa; bg; A; P ) cu regulile P :
1) A ! B C 2) A ! C D 3) B ! C B 4) C ! D D
5) D ! B C 6) B ! a 7) C ! b 8) D ! a
Folosind Algoritmul (ALG19), sa se analizeze sintactic cuv^antul w = b a a b a:
Solutie Dupa executia Algoritmului (ALG19), obtinem analizarea sintactica
= (2; 7; 5; 6; 4; 8; 5; 6; 7) cu vectorul pozitiilor (1; 1; 2; 2; 3; 4; 3; 3; 4). Cu alte cuvinte,
obtinem derivarea (neterminalul subliniat reprezinta cel care se transforma prin apli-
carea unei reguli):
A =) C D =) b D =) b BC =) b a C =) b a D D =)
2) 7) 5) 6) 4) 8)
=) b a D a =) b a B C a =) b a aC a =) b a a b a
8) 5) 6) 7)
Se observa ca ^n forma propozitionala b a D D este esential care neterminal se trans-
forma.
L(G ) = L(G );
1 2
L(G ) L(G );
1 2
L(G ) = R;
1
R L(G ); 1
C L(G ) 2 L ;
1 2
L(G ) \ L(G ) 2 L :
1 2 2
Problema echivalentei a doua gramatici de tip 2 153
{ S ! aAb
{ A ! aAbjAAjcj
b) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
2 2 2
{ S ! aAb
{ A ! AcjASj
c) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
3 3 3
{ S ! abjaA
{ A ! SbjcbjcAjSA
^Inainte de a trece la solutia Exercitiului 3.8.1, vom aminti doua leme cunoscute si
vom enunta si demonstra alte doua leme.
Lema 3.8.1 Fie G o gramatica de tip 2 astfel ^nc^at 2= L(G): Atunci exista o
gramatica de tip 2 echivalenta fara reguli (este vorba de eliminarea -regulilor
prezentata la pagina 67).
Lema 3.8.2 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 2 si regula x ! y a ,
iar y ! j j ::: j m toate regulile cu y ^n partea st^anga. Atunci gramatica G0 =
0 1 2
0 1 2 1 2
x =) Æ =) ::: =) Æi =) Æi =) ::: =) p
0
G 1
G G G +1
G G
Distingem doua situatii:
Cazul I: Nu s-a aplicat regula A ! A A. Atunci este clar ca Æi =)
0 Æi+1 . G
Cazul II: S-a aplicat regula A ! A A: Cum ^ntr-o gramatica de tip 2 nu con-
teaza ordinea aplicarii regulilor, rezulta ca primul simbol neterminal A se va
transforma astfel:
Æi = A =) A A =) i A sau
1 2
G 1 2
G 1 2
Æi = A =) A A =) A A A s.a.m.d.
1 2
G 1 2
G 1 2
Ultima regula din derivarea de mai sus este de forma A ! i , spre deosebire
de celelalte care sunt de tipul A ! i A.
n
3 3
S ! abjaAb
A ! SjcjcAjSA
Problema echivalentei a doua gramatici de tip 2 155
Se arata ca
S =) () S =0) ; 8 2 fS; A; a; b; cg:
G3 ;dr G3 ;dr
Mai precis, se poate demonstra imediat prin inductie dupa lungimea derivarii ca
S =) u () S G=0)
n
u daca A 2=
G3 ;dr 3 ;dr b u daca A 2
Restul demonstratiei o lasam ca tema pentru cititor.
Trecem acum la solutia Exercitiului 3.8.1.
Solutie Mai int^ai aplicam Lema 3.8.1 pentru gramaticile G si G . Cum singurul
1 2
{ S ! aAbjab
{ A ! aAbjabjAAjc
G0
2
echivalenta cu G : 2
{ S ! aAbjab
{ A ! AcjcjASjS
Acum, folosind Lema 3.8.3,a), transformam gramatica G0 si obtinem ca G00 echiva-
lenta cu G0 (deci si cu G ):
1 1
1 1
S ! aAbjab
A ! aAbjabjcjAaAbjAabjAc
Acum, folosind Lema 3.8.2 pentru gramatica G0 (lu^and simbolul y pe S ) deducem
gramatica G00 :
2
S ! aAbjab
A ! aAbjabjcjAaAbjAabjAc
Se observa clar ca G00 este identica cu G00 , deci L(G00 ) = L(G00 ). Echivalent va rezulta
2 1 2 1
Ne ocupam acum de G . Am vazut ^n Lema 3.8.4 ca G0 este echivalenta cu G . Acum
folosind Lema 3.8.1 lu^and la fel y ca ind S , obtinem gramatica G00 echivalenta cu
3 3 3
G0 :
3
S ! abjaAb
A ! abjaAbjcjcAjab AjaAbA
Exercitii propuse spre rezolvare 156
Acum aplicam Lema 3.8.3, b) gramaticii G0 si obtinem gramatica G000 echivalenta cu
G0 :
1 1
S ! abjaAb
A ! abjaAbjcjcAjab AjaAbA
Se observa clar ca G00 este identica cu G000 , deci L(G00 ) = L(G000 ). Echivalent va
3 1 3 1
^In concluzie, ram^ane deci ca cele trei gramatici din Exercitiul 3.8.1 sunt echivalente.
Lema 3.8.4. 0
Not^and cu G 3 G faptul ca L(G ) = L(G0 ) ^n baza Lemei 3.8.4, putem
3 3 3
Lema 3.8.3,b)
Lema 3.8.1 0 G000 1
G G
G00
1 1
Lema 3.8.3,a)
Lema 3.8.1 0 Lema 3.8.2 00
G 2 G2
G 2
e w 2 fa; bg g, unde c 2
fw c w= = fa; bg:
Fie P = (fs0 ; s1 g; fa; b; cg; fz; a; bg; Æ; s0; z; fs1 g) si Æ denit astfel:
1) Æ (s0 ; a; z ) = (s0 ; a z ); 2) Æ (s0 ; b; z ) = (s0 ; b z );
3) Æ (s0 ; a; a) = (s0 ; a a); 4) Æ (s0 ; a; b) = (s0 ; a b);
5) Æ (s0 ; b; a) = (s0 ; b a); 6) Æ (s0 ; b; b) = (s0 ; b b);
7) Æ (s0 ; c; a) = (s1 ; a); 8) Æ (s0 ; c; b) = (s1 ; b);
9) Æ (s1 ; a; a) = (s1 ; ); 10) Æ (s1 ; b; b) = (s1 ; );
11) Æ (s; i; x) = ;, pentru 8 (s; i; x) 2 S nedenite mai sus (ramase).
! Spre deosebire de automatul din Exercitiul 3.1.2, pentru care limbajul acceptat
difera putin, automatul din acest exercitiu este determinist. Diferenta dintre cele doua
limbaje este ca ^n acesta de fata se stie care este \mijlocul" cuv^antului de analizat (de
aceea este determinist).
Exercitii propuse spre rezolvare 157
fan (b c)n = n 1g:
Fie P = (fs0 ; s1 ; s2 ; s3 ; s4 g; fa; b; cg; fz; ag; Æ; s0; z; fs4g) si Æ denit astfel:
1) Æ (s0 ; a; z ) = (s1 ; a a z );
2) Æ (s1 ; a; a) = (s1 ; a a a);
3) Æ (s1 ; b; a) = (s2 ; );
4) Æ (s2 ; c; a) = (s3 ; );
5) Æ (s3 ; b; a) = (s2 ; );
6) Æ (s3 ; ; z ) = (s4 ; );
6) Æ (s; i; x) = ;, pentru 8 (s; i; x) 2 S ( [ fg) nedenite mai sus (ramase).
Exercitiul 3.9.3 Construiti un automat pushdown (nedeterminist) echivalent cu gra-
matica G = (fS; Ag; fa; bg; S; fS ! a A A; A ! a S j b S j ag).
lenta. Generalizare.
Obtinem gramatica cu regulile:
[s; x ; s] ! [s; x ; s] [s; c; s]
0 0
! Gramatica obtinuta mai sus este foarte apropiata ca forma de gramatica din
Exercitiul 3.1.4. Mai mult gramatica de tip 2 obtinuta aici este ^n forma standard
(adica regulile sale sunt de tipul ! ; ; 2 VN+ ; respectiv x ! a; x 2 VN ; a 2 VT ).
Generalizare:
\Data o gramatica G de tip 2 (nu neaparat ^n forma standard), e P automatul
pushdown nedeterminist echivalent obtinut din Teorema 3.1.1. Fie acum gramatica
G0 echivalenta cu P obtinuta din Teorema 3.1.2. Atunci gramaticile G si G0 sunt
echivalente si G0 este ^n forma standard."
Demonstratia generalizarii este imediata. Faptul ca cele doua gramatici sunt
echivalente rezulta din cele doua teoreme. Din forma tranzitiilor automatului push-
down nedeterminist P rezulta ca G0 este ^n forma standard. Mai putem spune ca
daca G este gramatica redusa, atunci P are stari accesibile si toate tranzitiile sunt
facute (utile). Mai mult, deoarece P are o singura stare, rezulta ca G0 va avea ^n
corespondenta cel mult o regula pentru o tranzitie a automatului P . Asadar, putem
spune ca gramatica G0 are o dimensiune apropiata de a gramaticii G:
Exercitiul 3.9.5 Sa se arate ca pentru orice automat pushdown nedeterminist exista
un automat pushdown nedeterminist echivalent cu memorie vida care are o singura
stare. Aratati, de aici, ca pentru orice automat pushdown nedeterminist exista un
automat pushdown nedeterminist echivalent care are doua stari.
Exercitiul 3.9.6 Sa se arate ca limbajul L = fan bn cn = n 0g nu este de tip 2.
nu sunt independente de context.
Pentru punctul a) se aplica Lema lui Ogden pentru cuvinte de forma an bn! cn! ,
iar pentru punctul b) se considera cuvinte de forma an bn cn! (pozitiile simbolului a
sunt marcate).
Exercitiul 3.9.9 Dovediti ca limbajele
L 1 = fan bn cn = n 2 Ng;
+1 +2
L 2 = fan bn k1 cn k2 = n 2 Ng; k ; k
+ +
1 2 2 N xati;
Exercitii propuse spre rezolvare 159
L 3 = fan b n c n = n 2 Ng:
2 3
unde fi sunt functii polinomiale de gradul ^nt^ai cu coecienti din multimea nu-
merelor naturale (fi (n) = i n + i ; i 2 N ; i 2 N), k 3 si
Lk = faf1 n af2 n ::: afk n = n 1g;
2
1
( )
2
( ) k( )
unde fi sunt functii polinomiale de grad cel putin doi cu coecienti naturali,
k1
nu sunt independente de context.
astfel ^nc^at C L 2= L ).
2 2
1 2 2 2 2 1 2 2
acum o relatie a lui De Morgan rezulta ca L \ L 2 L . Dar din Exercitiul 3.2.2 (^n
care alegem j = n), rezulta L = L \ L 2= L contradictie cu presupunerea facuta.
1 2 2
1 2 2
c) un arbore de derivare.
Exercitiul 3.9.13 Fie gramatica expresiilor aritmetice G = (fE g; f+; ; (; ); ag; E;
fE ! E + E j E E j ( E ) j ag):
a) Dovediti ca gramatica este ambigua;
gramatica echivalenta ^n forma normala Chomsky.
! Se observa ca G este deja ^n formele normale Greibach si operator.
Exercitiul 3.9.16 O gramatica este liniara daca regulile sale sunt de forma:
X ! a; X 2 VN ; a 2 VT ;
X ! a Y; sau X ! Y a; unde X; Y 2 VN :
Fie G o gramatica ^n care partea dreapta a regulilor contine cel mult un neterminal.
Sa se arate ca exista G0 o gramatica liniara echivalenta cu G:
Exercitiul 3.9.17 Fie gramatica G ^n forma normala Chomsky. Sa se arate ca
folosind algoritmul de transformare a gramaticii G ^ntr-una echivalenta G0 ^n forma
normala Greibach, obtinem ^n G0 reguli de forma:
x ! a ; a 2 VT ; 2 VN ;
eventual (daca 2 L(G)) x ! (singura
0 regula), si x0 nu mai apare ^n
partea dreapta a vreunei reguli.
Exercitiul 3.9.18 Fie gramatica G de tip 2 care nu are reguli. Sa se deduca
marginile superioare ale multimilor de neterminali, respectiv de reguli pentru grama-
tica echivalenta cu G, sub forma normala Greibach, folosind Algoritmii (ALG9) si
(ALG10).
Numarul de neterminali care sunt ^n plus (acele simboluri y ) este egal cu numarul
de circuite recursive st^ang maximale. O margine superioara este evident numarul de
neterminali ai gramaticii.
Exercitii propuse spre rezolvare 161
Sa se construiasca o gramatica echivalenta ^n forma normala operator.
daca limbajul L(G) este innit.
unde:
S este multime nita si nevida numita multimea starilor;
este multime nita si nevida, numita alfabetul de lucru (putem presupune
ca S \ = ;);
B 2 este un simbol special numit blanc;
; B 2= ; multime nita si nevida numita alfabetul de intrare;
s 2 S este stare initiala;
0
163
Masini Turing 164
+
Consideram ^nchiderea re
exiva si tranzitiva a relatiei (respectiv
^nchiderea tranzitiva a relatiei .)
Denitia 4.1.4 Fie M o masina Turing. Denim
L(M ) = fw= w 2 ; 9 s w 2 g:
s ; s 2 F; ;
0 1 2 1 2
M
!
^In notatiile din Denitia 4.1.4 avem:
daca F = ; atunci L(M ) = ;;
daca F = S atunci L(M ) = :
Teorema 4.1.1 Pentru orice masina Turing M , exista o gramatica G de tip 0 astfel
^nc^at L(M ) = L(G):
Demonstratie Se gaseste ^n [9, 11].
Exercitiul 4.1.1 Fie M = (fs0 ; s1 ; s2 ; s3 ; s4 g; f0; 1g; f0; 1; x; y; B g; Æ; s0; B; fs4 g) o
masina Turing cu functia de tranzitie denita astfel:
Masini Turing 165
Æ 0 1 x y B
s (s ; x; R) ; ; (s ; y; R) ;
; ;
0 1 3
s 1 (s ; 0; R) (s ; y; L)
1 2 (s ; y; R) 1
s 2 (s ; 0; L)
2 ; (s ; x; R) (s ; y; L) ;0 2
s ; ; ; (s ; y; R) (s ; B; R)
; ; ; ; ;
3 3 4
s 4
xxxyyyBs 4
Ajung^and astfel ^n starea s , care este nala, rezulta ca 0 1 2 L(M ):
4
3 3
x s 0i y 1i
0
1 1
i 1; i ;
xj 0i j yj s 1i j xj 0i j yj s y y 1i j
1
+1 1 +1 1 1 1
1 2
i ;
xj s x 0i j yj 1i j xj s 0i j yj 1i j
1
1 +1 1 +1 1 +1 1
2 0
Astfel, armatia P (j ) este vericata pentru orice j = 1; i: Consideram acum cazul
\maximal", adica j = i: Avem
i i
s 0i 1i xs y 0 0
: Fie w 2 L(M ): Trebuie sa aratam ca exista i 2 N astfel ^nc^at w = 0i 1i : Mai ^nt^ai,
sa observam ca w = nu poate acceptat deoarece ne blocam. Apoi, sa observam ca
w nu ^ncepe cu simbolul 1, deoarece Æ(s ; 1) = ;: Deci w = 0i u; i 1; unde cuv^antul
u nu ^ncepe cu 0 (se mai noteaza u 6= 0). Distingem doua cazuri:
0
(1)
i ;
Cazul I: u = . Rezulta s 0i x s 0i
1
0x 0i s blocaj, deoarece
1
1 1
1
Æ(s ; B ) = ;;
1
deoarece Æ(s ; 1) = ;; 3
Dar (1)
v 6= 1 deci v = sau (1)
v = 0:
Masini Turing 167
1 2 3
1. A ! s A
1 0 2
2. A ! [a; a] A ; 8 a 2
2 2
3. A ! A
2 3
4. A ! [; B ] A
3 3
5. A !
3
1 2
unde w = a a ::: an 2 : Apoi, se demonstreaza armatia:
daca s a a ::: an 0 1 x x ::: xr s xr ::: xs atunci
2 1 2 1
M
s [a ; a ] [a ; a ] ::: [an ; an ] =) [a ; x ] [a ; x ] ::: [ar ; xr ] s [ar ; xr ] ::: [an m ; bn m ]
0 1 1 2 2
G 1 1 2 2 1 1 + +
VN = f[0; 0]; [0; 1]; [0; x]; [0; y]; [0; B ]; [1; 0]; [1; 1]; [1; x]; [1; y]; [1; B ]; [; 0]; [; 1];
[; x]; [; y]; [; B ]; A ; A ; A ; s ; s ; s ; s ; s g;
1 2 3 0 1 2 3 4
regulile P :
{ regulile care creaza copiile:
A !s A
1 0 2
A ! [0; 0] A
2 2
A ! [1; 1] A
2 2
A !A 2 3
A ! [; B ] A
3 3
A ! 3
s [0; 0] ! [0; x] s
0 1
s [1; 0] ! [1; x] s
0 1
s [; 0] ! [; x] s
0 1
[0; 0] s ! s 0 s
4 4 4
[0; 1] s ! s 0 s
4 4 4
[0; x] s ! s 0 s
4 4 4
[0; y] s ! s 0 s
4 4 4
[0; B ] s ! s 0 s
4 4 4
Masini Turing 169
[1; 0] s ! s 1 s
4 4 4
[1; 1] s ! s 1 s
4 4 4
[1; x] s ! s 1 s
4 4 4
[1; y] s ! s 1 s
4 4 4
[1; B ] s ! s 1 s
4 4 4
[; 0] s ! s s
4 4 4
[; 1] s ! s s
4 4 4
[; x] s ! s s
4 4 4
[; y] s ! s s
4 4 4
[; B ] s ! s s
4 4 4
Astfel, am obtinut o gramatica echivalenta cu M care are 178 de reguli si 19 netermi-
nali. De altfel, limbajul L(M ) poate generat de o gramatica cu numai doua reguli
si un neterminal (vezi Exercitiul 1.2.1).
Exercitiul 4.1.2 Sa se calculeze numarul de neterminali si de reguli din constructia
prezentata ^n Exercitiul 4.1.1, punctul b).
Solutie Fie M = (S; ; ; Æ; s ; B; F ). Din constructia prezentata ^n Exercitiul
0
s
1 (s ; 0; R) (s ; 1; R)
1 1 (s ; B; L)
3
s
2 (s ; 0; R) (s ; 1; R)
2 2 (s ; B; L)
4
s
3 (s ; B; L)
5 ; ;
s
4 ; (s ; B; L) 6 ;
s
5 (s ; 0; L) (s ; 1; L)
5 5 (s ; B; R)
0
s (s ; 0; L) (s ; 1; L) (s ; B; R)
; ; ;
6 6 6 0
s
7
e w 2 f0; 1g g;
Sa se arate ca L(M ) = fw w=
Masini Turing 170
Solutie Fiind vorba de egalitate de multimi, vom proceda prin dubla incluziune.
e w 2 f0; 1gg, vom demonstra c
: Pentru a arata ca L(M ) fw w= a pentru orice n,
n 1 are loc armatia:
n ; 4 +1
2n ; 1
n ; 2 2
i ::: in in ::: s i
2 5 s B i ::: in in ::: i
2 5 2 2
s i ::: in in ::: i
0 2 2
Cazul II: i = 1. Analog cu cazul I, numai ca vom trece prin starile s ; s ; s ;
1 2 4 6
(2) s i i ::: in in ::: i i
0 1 2 s 2 1 0
De aici ajungem^n conguratia s , si cum s este stare nala, rezulta ca toate cuvintele
de forma i i ::: in in ::: i i , unde ij 2 f0; 1g; 8 j = 1; n:
7 7
1 2 2 1
: Sa aratam ca singurele cuvinte acceptate de M sunt de forma u ue; u 2 f0; 1g:
Fie w 2 L(M ): Distingem mai multe cazuri:
Cazul I: w = este acceptat deoarece s0 s , si s este stare nala; 7 7
Aplic^and de un numar nit de pasi cazurile II, III ajungem la conguratia s care, 0
w = i w i = i i w i i = ::: = i i ::: in in i i ;
1 1 1 1 2 2 2 1 1 2 2 1
! Putem ^mbunatati masina Turing din Exercitiul 4.1.3 av^and ^n vedere liniile
corespunzatoare starilor s si s . Fie
5 6
s 1 (s ; 0; R) (s ; 1; R)
1 1 (s ; B; L)
3
s (s ; 0; R) (s ; 1; R) (s ; B; L)
; ;
2 2 2 4
s 3 (s ; B; L)
5
s 4 ; (s ; B; L) 5 ;
s (s ; 0; L) (s ; 1; L) (s ; B; R)
; ; ;
5 5 5 0
s 6
Æ 0 1 x y z B
s 0 (s ; x; R) (s ; y; R)
1 1 (s ; x; L)
4 (s ; y; L)
4 (s ; B; R)
13
s 1 (s ; 0; R) (s ; 1; R)
1 1 (s ; x; L)
2 (s ; y; L)
2 (s ; B; L)
2
s 2 (s ; x; L) (s ; y; L)
3 3
s 3 (s ; 0; L) (s ; 1; L)
3 3 (s 0 ; x; R) (s 0 ; y; R)
s 4 (s 5 ; z; R) (s 6 ; z; R) (s 4 ; z; L)
s 5 (s 7 ; x; R) (s 7 ; y; R) (s 5 ; z; R)
s 6 (s 8 ; x; R) (s 8 ; y; R) (s 6 ; z; R)
s 7 (s 7 ; x; R) (s 7 ; y; R) (s 9 ; z; L) (s ; B; L)
9
s 8 (s 8 ; x; R) (s 8 ; y; R) (s 10 ; z; L) (s ; B; L)
10
s 9 (s 11 ; z; L)
s 10 (s ; z; L) 11
s 11 (s ; x; L) (s ; y; L) (s ; z; R)
12 12 13
s 12 (s ; x; L) (s ; y; L) (s ; z; R)
12 12 4
s 13
Fie acum un cuv^ant oarecare u din L(M ), de forma u = i ::: im : Distingem doua 1
cazuri:
Cazul I: Presupunem m de forma 2 h + 1; h 2 N: Conguratia initiala este
s i ::: i h :
0 1 2 +1
obtinem:
{ x s i ::: i h
1 2 x i ::: i h s x i ::: i h s i h ; respectiv
2 +1 2 2 +1 1 2 2 2 2 +1
{ y s i ::: i h
1 2 y i ::: i h s y i ::: i h s i h :
2 +1 2 2 +1 1 2 2 2 2 +1
Pentru a usura demonstratia, vom nota x sau y cu i0k , unde i0k = x daca i0k = 0,
respectiv i0k = y daca i0k = 1. Deci putem scrie:
0
s i ::: i h
0 1 i0 s i ::: i h
2 +1 i i ::: i h s i0 i ::: i h s i h :
1 1 2 2 +1 1 2 2 +1 1 1 2 2 2 2 +1
1 2 2 1 3 2 2 +1
(s ; y; L) obtinem
2
0 0
i0 s i ::: i h i h i0 h
1 0 2 2 i i s i ::: i h i0 h i0 h
1 2 2 +1 1 2 0 3 2 1 2 2 +1
Numim un s-ciclu seria de tranzitii dintre doua conguratii succesive ^n care
starea masinii Turing este s, iar simbolurile vizate sunt de acelasi tip (adica 0; 1
sau x; y). Vom demonstra prin inductie matematica dupa numarul de s cicli 0
ca
(1) daca o conguratie contine s atunci este de forma 0
i0 ::: i0 s ik ::: i h k i0
1 k 0 ::: i0 ; +1 2 +1 2 h+2 k 2 h+1
unde 0 k h.
Notam cu n acest numar si punem conditia n h:
Baza inductiva: Am aratat anterior armatia (1) pentru n = 1.
Pasul inductiv: Presupunem armatia (1) adevarata pentru n si o demonstram
pentru n+1; n < h. Se poate usor observa ca aplic^and primii n cicli conguratiei
initiale obtinem conguratia
i0 ::: i0 s in ::: i h n i0
1 n 0 ::: i0 ; +1 2 +1 2 h+2 n 2 h+1
care trece ^n
i0 ::: i0n i0n s in ::: i h n i0 h n ::: i0 h :
1 +1 1 +2 2 +1 2 +2 2 +1
conguratia
i0 ::: i0n s i0n in ::: i h n i0 h n i0 h n ::: i0 h ;
1 3 +1 +2 2 2 +1 2 +2 2 +1
i0 ::: i0h z i0h i0h ::: i0 h x s i0 ::: i0h z i0h i0h ::: i0 h s x;
1 1 +1 +2 2 1 7 1 1 +1 +2 2 1 9
(s ; z; L) obtinem
4
i0 ::: i0h z i0h i0h ::: s i0 h i0 h z
1 1 +1 +2 12 2 2 2 1
0 0
i ::: ih s z i0h i0h ::: i0 h i0 h z
1 1 12 +1 +2 2 2 2 1
{ Subcazul 2. i0h = y se trateaza ^n acelasi mod, cu singura deosebire ca ^n
locul starilor s ; s ; s se utilizeaza starile s ; s ; s . Deci armatia (2)
5 7 9 6 8 10
0 0
1
::: z} i0h i0h ::: i0 h n z| {z
i ::: ih n s i0h n z| {z 1 4 ::: z} +1 +2 2
n n
{ Subcazul 1. i0h n = i0 h n = x: Obtinem conguratia
2
i0 ::: i0h n z s z| {z
1
::: z} i0h i0h ::: i0 h n z| {z
1
::: z}
5 +1 +2 2
n n
Repet^and rationamentul din baza inductiei si, ^n plus, folosind relatiile
Æ(s ; z ) = (s ; z; R); Æ(s ; z ) = (s ; z; L) si Æ(s ; z ) = (s ; z; L) obtinem
5 5 7 9 4 4
sirul de tranzitii:
i0 ::: i0h n z s z| {z
1
::: z} i0h i0h ::: i0 h n z| {z
1 5 ::: z} +1 +2 2
n n
0 0
i ::: ih n
1 1
::: z} s i0h i0h ::: i0 h n z| {z
z| {z 5 +1
::: z}
+2 2
n+1 n
i0 ::: i0h n
1 1
::: z} i0h s i0h ::: i0 h n z| {z
z| {z +1 7 ::: z}
+2 2
n+1 n
0 0
i ::: ih n
1 1
::: z} i0h i0h ::: i0 h n s z| {z
z| {z +1
::: z}
+2 2 7
n+1 n
Masini Turing 176
i0 ::: i0h n
1 1
::: z} i0h i0h ::: s i0 h n z| {z
z| {z +1 +2
::: z} 9 2
n+1 n
i0 ::: i0h n
1 1
::: z} i0h i0h ::: s i0 h n
z| {z +1 +2 11 2 1
z| {z
::: z}
n+1 n+1
i0 ::: i0h n
1 1
::: z} i0h i0h ::: s i0 h n i0 h n
z| {z +1 +2 12 2 2 2 1
z| {z
::: z}
n+1 n+1
0 0
i ::: ih n
1 1
::: z} s i0h i0h ::: i0 h n i0 h n
z| {z 12 +1 +2 2 2 2 1
z| {z
::: z}
n n+1
0 0
i ::: ih n
1 1
::: z} s z z i0h i0h ::: i0 h n i0 h n
z| {z 4 +1 +2 2 2 2 1
z| {z
::: z}
n 1 n+1
0 0
i ::: ih n s i0h n
1 2 4 1
::: z} i0h i0h ::: i0 h n i0 h n
z| {z +1 +2 2 2 2 1
z| {z
::: z}
n+1 n+1
Ultima conguratie reprezinta ceea ce trebuia obtinut.
{ Subcazul 2. i0h n = i0 h n = y se trateaza analog, folosind ^n loc de starile
2
s ; s ; s starile s ; s ; respectiv s :
5 7 9 6 8 10
k k
1
::: z} i0h ::: i h k z| {z
i0 ::: i0h k z s z| {z 1 5 ::: z} +1 2
k k
0 0
i ::: ih k
1 1
::: z} s i0h ::: i h k z| {z
z| {z 5 +1
::: z} 2
k+1 k
i0 ::: i0h k
1 1
::: z} i0h s i0h ::: i h k i h k z| {z
z| {z +1 7 ::: z}
+2 2 1 2
k+1 k
Masini Turing 177
0 0
i ::: ih k
1 1
::: z} i0h ::: i0 h k i0 h k s z| {z
z| {z +1
::: z}
2 1 2 7
k+1 k
i0 ::: i0h k
1 1
z ::: z i0
| {z } +1
0
h ::: i h k 2 1
s i0 h k s z| {z
9 2
::: z} 7
k+1 k
Deoarece i0 h k = y si Æ(s ; y) = ; rezulta ca avem blocaj.
2 9
6 8 10 5 7 9 10
h 1 h 1
h 1 h 1 h 1 h 1 h h 1
z| {z
::: z} y s z| {z
::: z} 7 z| {z
::: z} s y z| {z
::: z};9
h h 1 h h 1
^In concluzie, cuv^antul u trebuie sa e de forma w w; w 2 f0; 1g pentru a acceptat
de masina M . Asadar L L(M ):
: Vom demonstra incluziunea L L(M ): Fie u = i ::: i h ; ik = ik h ; k = 1; h:
Avem u 2 Lnfg: Folosind armatiile de la pasul 1, obtinem tranzitiile
1 2 +
0 0
s i ::: i h
0 1 2 i ::: ih s i0h ::: i0 h
1 0 +1 2
i0 ::: i0h s i0h ih ::: i0 h
1 1 4 +1 2
a) i0 = i0h
1 +1
= x: Obtinem
s x |z {z
4 ::: z} x z| {z
::: z} z s z| {z
::: z} x z| {z
5 ::: z} z| {z
::: z} s x z| {z
::: z}
5
h 1 h 1 h 1 h 1 h h 1
Automate liniar marginite 178
z| {z
::: z} x s z| {z
7 ::: z} z| {z
::: z} s x z| {z
9 ::: z} z| {z
::: z} s z| {z
11 ::: z}
h h 1 h h 1 h 1 h+1
Avem Æ(s ; z ) = (s ; z; R), deci obtinem conguratia
11 13
::: z} s z| {z
z| {z 13 ::: z}
h h
si cum s este stare nala, rezulta ca u este acceptat.
13
^In concluzie, 8 u 2 L fg; avem u 2 L(M ): Deoarece 2 L(M ) (am demonstrat la
pasul 1), obtinem ca L = L(M ):
! Pentru masina Turing M de mai sus se poate micsora numarul de simboluri din
alfabetul folosindu-se ^n loc de z; unul din simbolurile 0 sau 1. Noua masina Turing
se obtine din M prin ^nlocuirea doar a simbolului z , de ecare data c^and este ^nt^alnit
^n matricea de denitie a lui Æ , cu unul din simbolurile 0 sau 1.
5
Automate liniar marginite 179
Æ @ 0 1 x y $
s (s ; @; R) ; ; ; ; ;
; ; ; ;
0 1
s 1 (s ; x; R)
2 (s ; y; R) 4
s 2 ; (s ; 0; R) (s ; y; L)
2 3 (s ; y; R) ; ; 2
s ; (s ; 0; L) ; (s ; x; R) (s ; y; L) ;
; ; ; ;
3 3 1 3
s 4 (s ; y; R) (s ; $; L)
4 5
s 5 ; ;; ; ; ;
a) Sa se arate ca L(M ) = f0n 1n = n 1g;
b) Folosind constructia din Teorema 4.2.1, sa se determine gramatica monotona
echivalenta cu M:
Solutie a) Acest punct rezulta imediat. Singurele deosebiri fata de masina Turing
din Exercitiul 4.1.1 sunt:
c^and se pleaca din starea initiala s ajungem ^n starea s , nemaiput^and ajunge
0 1
c^and se ajunge ^n starea s si este vizat simbolul $, trecem ^n starea s si facem
4 5
[ [
VN = (S [ fg) f@g ( [ ) f; $g (S [ fg) (f$g [ ) [fA ; A g;
1 2
2. A ! [a; a] A ; 8 a 2
2 2
3. A ! [a; a $]; 8 a 2
2
daca s @ a a ::: an $
0 1@ x x ::: xr s xr ::: xn $ atunci
2 1 2 1
M
^In continuare, pentru automatul din exercitiul nostru se procedeaza la fel ca ^n
Exercitiul 4.1.1.
Exercitiul 4.2.2 Sa se calculeze numarul de neterminali si de reguli din constructia
prezentata ^n Exercitiul 4.2.1, punctul b).
Solutie Fie M = (S; ; ; Æ; s ; f@; $g; F ). Din constructia prezentata ^n Exercitiul
0
A ! a unde A 2 VN ; a 2 VT [ fg:
Teorema 4.3.1 Pentru orice gramatica G; exista o gramatica G0 ^n forma standard
echivalenta cu G:
Demonstratie Fie G = (VN ; VT ; x ; P ) (care nu este ^n forma standard). Vom
atasa ecarui simbol i 2 VT simbolul xi 2= VN [ VT (deci un simbol neterminal nou)
0
(i) = ix dac a i 2 VN
i daca i 2 VT
Evident se poate extinde la cuvinte astfel:
Daca u = u u ::: uk atunci (u) = (u ) (u ) ::: (uk ):
1 2 1 2
maticii G numarul
pond(G) = maxfj j= ! 2 P g:
Teorema 4.3.2 Pentru orice gramatica monotona G = (VN ; VT ; x ; P ) exista o gra-
matica monotona G0 = (VN0 ; VT ; x ; P 0 ) cu ponderea cel mult egala cu 2 astfel ^nc^at
0
L(G) = L(G0 ):
0
{ x !z
1 1
{ z x !y z
1 2 1 2
{ z x !y z
2 3 2 3
{ ....
{ zn xn ! yn zn
1 1
{ zn ! yn zn +1
{ zn ! yn zn
+1 +1 +2
{ ....
{ zm ! ym zm
1 1
{ zm ! ym
(ii) x 0 ! si x 0 nu mai apare ^n partea dreapta a vreunei reguli din P .
Consideram acum gramatica G00 care este dedusa din G prin eliminarea regulii x !
(adica numai cu regulile de tipul (i)). Deci G00 are numai reguli monotone deoarece
0
j A j j j si L(G00 ) = L(G) fg. Conform Teoremelor 4.3.1, 4.3.2 si 4.3.3
rezulta ca exista o gramatica G0 monotona echivalenta cu G00 : ^In concluzie, L(G0 ) =
L(G) fg:
! Teorema 4.3.4 demonstreaza rezultatul:
\Cu exceptia cuv^antului vid care se poate obtine din regula x0 ! (situatie ^n
care x0 nu mai apare ^n partea dreapta a vreunei reguli), clasa limbajelelor generate
de gramatici senzitive de context coincide cu clasa limbajelor generate de gramatici
monotone."
Clasa gramaticilor monotone este importante din doua puncte de vedere:
forma gramaticilor monotone este mai putin restrictiva dec^at a gramaticilor
dependente de context, atunci putem deduce un procedeu mai tare de a verica
daca un limbaj generat de o gramatica este de tip 1 sau nu;
problema apartenentei la limbaje generate de gramatici monotone este decida-
bila, deci si problema apartenentei la limbaje generate de gramatici dependente
de context este decidabila. Deci limbajele generate de gramatici monotone sunt
recursive.
Exercitiul 4.3.1 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de re-
guli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c
Sa se determine tipul limbajului generat de gramatica G:
Solutie Din Exercitiul 1.2.4, se stie ca L(G) = fan bn cn = n 1g: Apoi din
Exercitiile 3.2.2 sau 3.9.7 se stie ca L(G) 2= L . Conform constructiilor precizate ^n
2
Teoremele 4.3.1, 4.3.2 si 4.3.3 vom determina o gramatica echivalenta cu G care este
dependenta de context. Deci este clar ca L(G) este de tip 1: De altfel, vom face
o mixtura ^ntre cele trei rezultate, si anume vom transforma numai regulile 1; 3; 4.
Regula 4 nu este senzitiva la context si se mai numeste regula de comutare. Astfel,
stergem regula 4 si modicam regulile 1 si 3. Obtinem:
1. A ! a b C
3. b B ! b b C
4.1. C B ! B C
4.2. C ! c
Legatura dintre gramatici dependente de context si gramatici monotone 184
Asa cum am anticipat, vom demonstra ca problema apartenentei pentru gramatici
monotone este decidabila.
Teorema 4.3.5 Orice limbaj de tip 1 este recursiv (sau, echivalent, problema
apartenentei pentru gramatici monotone este decidabila).
Demonstratie Fie L 2 L : Pentru generarea sa, putem considera o gramatica
1
monotona ^mbogatita cu regula x ! , caz ^n care x nu mai apare ^n partea dreapta
0 0
a vreunei reguli.
Fie deci G = (VN ; VT ; x ; P ) o gramatica monotona ca mai sus, astfel ^nc^at L(G) =
0
Intrebare: w 2 L(G) ?
Metoda:
begin
if jwj = 0 then
if x ! 2 P then 'w 2 L(G)'
0
m := 1;
repeat
Tm := Tm [ f 2 (VN [ VT ) = 9 2 Tm ; =G) ; jj ng;
1 1
m := m + 1;
until (Tm = Tm ) or (w 2 Tm );
1
end
end ;
^In continuare, vom demonstra corectitudinea Algoritmului (ALG20). Mai ^nt^ai,
aratam ca acesta are un numar nit de pasi. Pentru usurinta calculelor, notam
n = jwj: ^In primul r^and avem sirul innit de incluziuni:
T T :::
T0 1 2
Dar sirul Ti este format din cuvinte peste VN [ VT de lungime cel mult n, si cum sirul
de incluziuni este innit, rezulta ca exista un loc unde avem egalitate. Mai precis, e
i numarul natural minim pentru care are loc Ti = Ti :
Apoi, prin inductie dupa j; demonstram ca Ti = Ti j ; 8 j 1:
+1
Ti j := Ti j [ f 2 (VN [ VT ) = 9 2 Ti j ; =) 2 P; jj ng:
+ +1 + +
G
Dar, din pasul inductiv avem ca Ti = Ti j ; deci +
Ti j := Ti j [ f 2 (VN [ VT ) = 9 2 Ti ; =) 2 P; jj ng = Ti :
+ +1 +
G +1
Dar Ti = Ti , deci Ti = Ti j :
+1 + +1
P^ana acum am demonstrat ca Algoritmul (ALG20) se opreste dupa un numar nit
de pasi. Bucla repeat se opreste c^and Ti = Ti sau w 2 L(G), deci dupa cel mult i
+1
pasi.
Pentru demonstrarea corectitudinii Algoritmului (ALG20), vom demonstra armatia:
(1) \x =m) ; jj n () 2 Tm ":
0
G
Aleg^and = w si m = i se obtine relatia necesara corectitudinii Algoritmului
(ALG20).
(=)) Procedam prin inductie dupa lungimea derivarii m.
Pasul initial: Fie m = 0; = x : Dar x 2 T deci se verica relatia.
0 0 0
si obtinem
x =j) =) 0
G G
Dar j j jj n; si aplic^and pentru prima parte a derivarii din pasul inductiv,
deducem ca 2 Tj : Cum =) ; rezulta ca 2 Tj : +1
Exercitii propuse spre rezolvare 186
0 0
1 2 1
Continu^and ^n felul acesta, generam toate formele propozitionale de lungime cel mult
9:
T = T [ fa a b B c; a a a b c B B; a a a A B B B g;
3 2
T = T [ fa a b b c c; a a a b B c B; a a a a b c B B B g;
4 3
T = T [ fa a a b b c c B; a a a b B B c; a a a a b B c B B g;
5 4
T = T [ fa a a b b c B c; a a a b b c B c; a a a a b B B c B g; nu generam cuv^antul
6 5
T = T [ fa a a b b b c c cg:
8 7
s
1 (s ; 0; R) (s ; y; L)
1 2 (s ; y; R) 1
s (s ; 0; L) ; (s ; x; R) (s ; y; L) ;
; ; ;
2 3 0 2
s
3 (s ; 0; L)
3 (s ; x; R) 0
s
4 ; ; ; (s ; y; R) (s ; B; R) 4 5
s
5 ; ; ; ; ;
Exercitii propuse spre rezolvare 187
echivalenta cu M:
Masina Turing din Exercitiul 4.1.1 este echivalenta cu masina Turing din
Exercitiul 4.4.1. Chiar daca are mai multe stari, aceasta din urma face mai putini
pasi pentru acceptarea unui cuv^ant. Astfel, la demonstrarea incluziunii L(M ) L,
subcazul II.2 rezulta imediat. Ideea este ca odata transformat un \1" ^n \y " trec mai
^nt^ai peste toate simbolurile \y ", si apoi trecem ^n alta stare (adica nu ram^anem
tot ^n s2 ) si parcurgem toate simbolurile \0". Astfel cazul i > j se reduce substantial.
Exercitiul 4.4.2 Fie M = (fs0 ; s1 ; :::; s10 g; f0; 1g; f0; 1; B g; Æ; s0; B; fs10 g) masina
Turing cu functia de tranzitie denita astfel:
Æ 0 1 B
s 0 (s ; B; R) (s ; B; R) (s ; B; R)
1 2 10
s 1 (s ; 0; R) (s ; 1; R) (s ; B; L)
1 1 3
s 2 (s ; 0; R) (s ; 1; R) (s ; B; L)
2 2 4
s (s ; B; L) ; ;
; ;
3 5
s 4 (s ; B; L) 5
s 5 (s ; B; L) (s ; B; L) (s ; B; R)
6 7 10
s 6 (s ; 0; L) (s ; 1; L) (s ; B; R)
6 6 8
s 7 (s ; 0; L) (s ; 1; L) (s ; B; R)
7 7 9
s 8 (s ; B; R)
0 ; ;
s ; (s ; B; R) ;
; ; ;
9 0
s 10
e w 2 f0; 1g g:
Sa se arate ca L(M ) = fw w=
! Chiar daca M are mai multe stari dec^at masina Turing din Exercitiul 4.1.3,
avantajul masinii Turing din acest exercitiu este ca pentru acceptarea (sau neac-
ceptarea) unui cuv^ant se fac doar jumatate din numarul de pasi ai masinii din
Exercitiul 4.1.3. Ideea la Exercitiul 4.1.3 este sa \taiem" primul simbol din cuv^ant
(adica ^l ^nlocuim cu Blanc), mergem la st^anga, si \taiem" ultimul simbol (daca este
egal cu primul taiat), apoi ne ^ntoarcem la dreapta p^ana ^nt^alnim Blanc si reluam
procedeul. Diferenta la masina Turing din Exercitiul 4.1.3 este ca atunci c^and ne
\^ntoarcem" la dreapta, vom efectua acelasi procedeu care l-am facut la st^anga (adica
acele \taieri", dar ^n ordine inversa, bine^nteles).
Exercitiul 4.4.3 Fie M = (fs ; s ; s ; s ; s ; s ; s g; f0; 1g; f0; 1; x; y; B g; Æ; s ; B; fs g)
0 1 2 3 4 5 6 0 6
Æ 0 1 x y B
s (s ; x; R) ; ; (s ; y; R) ;
; ;
0 1 3
s
1 (s ; 0; R) (s ; y; L)
1 2 (s
1 ; y; R)
s
2 (s ; 0; L)
2 ; (s ; x; R) 0 (s 2 ; y; L) ;
s (s ; x; R) ; ; (s ; y; R) (s ; B; R)
; ;
3 4 3 6
s
4 (s ; 0; R) (s ; y; L)
4 5 (s
4 ; y; R)
s
5 (s ; 0; L)
5 ; (s ; x; R) 3 (s 5 ; y; L) ;
s
6 ; ; ; ; ;
a) Sa se arate ca L(M ) = f0n 1n 0m 1m = n 1g;
b) Folosind constructia din Teorema 4.1.1, sa se determine gramatica de tip 0
echivalenta cu M:
Exercitiul 4.4.4 Sa se construiasca o masina Turing M care accepta limbajul L =
f0n 1n 2n= n 1g:
! Fie M = (fs0 ; s1 ; s2 ; s3 ; s4 ; s5 g; f0; 1; 2g; f0; 1; 2; x; y; z; B g; Æ; s0; B; fs5 g) o
masina Turing cu functia de tranzitie denita astfel:
Æ 0 1 2 x y z B
s (s ; x; R) ; ; ; (s ; y; R) ; ;
; ; ; ;
0 1 4
s (s ; 0; R) (s ; y; R)
1 1 2 (s ; y; R) 1
s ; (s ; 1; R) (s ; z; L) ; ; (s ; z; R) ;
; ;
2 2 3 2
s (s ; 0; L) (s ; 1; L)
3 3 3 (s ; x; R) (s ; y; L) 0 3 (s ; z; L)
3
s4 ; ; ; ; (s ; y; R) 4 (s ; z; R) (s ; B; R)
4 5
s5 ; ; ; ; ; ; ;
Exercitiul 4.4.5 Sa se construiasca o masina Turing M care accepta limbajul L =
f0n 1n ::: kn = n 1g; k 1 xat.
s 3 (s ; y; L)
5 (s 3 ; y; R)
s ; (s ; y; L) ; ;(s ; y; R) ;
;
4 5 4
s 5 (s ; a; L) (s ; b; L)
5 5 (s ; c; L) (s ; x; R) (s
5 0 5 ; y; L)
s 6 ; ; ; ; (s 6 ; y; R) (s ; B; R)
7
s 7 ; ; ; ; ; ;
Exercitii propuse spre rezolvare 189
Æ a b c x B
s (s ; x; R) (s ; x; R) (s ; c; R) ; ;
; ;
0 1 2 7
s1 (s
1 ; a; R) (s ; b; R) (s ; c; R)
1 3
s 2 (s
2 ; a; R) (s ; b; R) (s ; c; R)
2 4 ; ;
s (s ; x; L) ; ; (s ; x; R) ;
; ; ;
3 5 3
s4 (s ; x; L)5 (s
4 ; x; R)
s ; ; (s ; c; L) (s ; y; L) ;
; ;
5 6 5
s6 (s ; a; L) (s ; b; L)
6 6 (s
0 ; x; R)
s 7 ; ; ; (s
7 ; x; R) (s ; B; R)
8
s8 ; ; ; ; ;
e M = (fs0 ; s1 ; s2 ; s3 ; s4 ; s5 ; s6 ; s7 ; s8 ; s9 ; s10 g; fa; b; cg; fa; b; c; x; y; B g; Æ; s0; B;
fs10g) o masina Turing cu functia de tranzitie denita astfel:
Æ a b c x y B
s 0 (s1; x; R) (s ; y; R) (s ; c; R)
2 9 ; ; ;
s (s ; a; R) (s ; b; R) (s ; c; R) ; ; ;
; ; ;
1 1 1 3
s 2 (s2; a; R) (s ; b; R) (s ; c; R)
2 6
s 3 (s4; x; L) ; ; (s
3 ; x; R) (s ; x; R)
3 ;
s ; ; (s ; c; L) (s ; x; L) (s ; y; L) ;
; ; ;
4 5 4 4
s 5 (s ; a; L) (s ; b; L)
5 5 (s
0 ; x; R)
s ; (s ; y; L) ; (s ; x; R)
(s ; y; R) ;
; ; ;
6 7 6 6
s 7 (s ; c; L) 8 (s
7 ; x; R)
(s 7 ; y; R)
s 8 (s ; a; L) (s ; b; L)
8 ;
8 ; (s 0 ; y; R) ;
s ; ; ; (s ; x; R) (s ; y; R) (s ; B; R)
; ; ; ; ; ;
9 9 9 10
s 10
Care este diferenta dintre ele ?
Se procedeaza la fel ca ^n Exercitiul 4.1.3 si 4.1.4. ^Incercati sa construiti o
masina Turing echivalenta care la \^ntoarcerea" ^n starea s0 sa faca acelasi lucru ca
^n \drumul" de la st^anga la dreapta (adica sa mai faca o vericare a unui simbol).
Exercitiul 4.4.7 Sa se construiasca masini Turing care sa accepte limbajele generate
de gramaticile din Exercitiile 1.3.18-1.3.37.
Exercitiul 4.4.8 Sa se construiasca masini Turing care sa accepte urmatoarele lim-
baje:
L 1 = f0n 1n 0n= n 1g;
L 2 = fw= w contine numar egal de simboluri 0 si 1 g:
Exercitii propuse spre rezolvare 190
limbajul L = fw w w= w 2 f0; 1gg si demonstrati ca L = L(M ):
Fie masina Turing M = (fs0 ; :::; s25 g; f0; 1g; f0; 1; x; y; a; b; c; d; B g; Æ; s0; B; fs25 g),
cu Æ denit mai jos:
Æ 0 1 x y a
s 0 (s ; B; R)
1 (s ; B; R)
2
s 1 (s ; 0; R)
1 (s ; 0; R)
2
s 2 (s ; 1; R)
1 (s ; 1; R)
2
s 3 (s ; 0; L)
3 (s ; 1; L)
3 (s ; a; L)
3
s 4 (s ; x; R)
5 (s ; y; R)
5 (s ; x; R)
4
s 5 (s ; 0; L)
6 (s ; 1; L)
6 (s5 ; x; R) (s ; y; R)
5
s 6 (s7 ; a; L) (s ; b; L)
7 (s10 ; a; R)
s 7 (s7 ; x; L) (s ; y; L)
7 (s
8 ; a; R)
s 8 (s9 ; a; R) (s ; b; L)
9 (s 3 ; a; L)
s 9 (s9 ; x; R) (s ; y; R)
9 (s 6 ; a; L)
s10 (s14 ; x; R) (s11 ; y; R) (s11 ; c; R)
s11 (s11 ; 0; R ) (s11 ; 1; R ) (s11 ; a; R)
s12 (s 13 ; c; L) (s13 ; d; L)
s13 (s13 ; 0; L) (s13 ; 1; L) (s ; a; L)
13
s16
s17 (s ; x; L) (s ; y; L) (s
17 17 17 ; a; L)
s18 (s 19 ; 0; R)
s19 (s19 ; 0; R ) (s 19 ; a; R)
s20 (s20 ; 0; R ) (s 20 ; a; R)
s21 (s21 ; 0; R ) (s ; 0; L)
23
s22 (s22 ; 0; R ) (s ; 0; L)
23
s23 (s23 ; 0; L) (s 24 ; a; L)
s24 (s18 ; 0; R ) (s 24 ; a; L)
s25
Implementari ale algoritmilor prezentati ^n cele patru capitole 191
Æ b c d B
s 0 (s ; B; R)
25
s 1 (s ; 0; L)
3
s 2 (s ; 1; L)
3
s 3 (s ; b; L)
3 (s ; B; R)
4
s 4 (s ; y; R)
4
s 5
s 6 (s 10 ; b; R)
s 7 (s 8 ; b; R) (s ; B; R) 8
s 8 (s 3 ; b; L)
s 9 (s 6 ; b; L)
s 10 (s11 ; d; R) (s ; x; R) (s ; y; R)
16 16
s 11 (s 11 ; b; R) (s ; c; L) (s ; d; L) (s ; B; L)
12 12 12
s 12
s 13 (s ; b; L)
13 (s 10 ; c; R) (s
10 ; d; R)
s 14 (s 14 ; 0; R) (s
14 ; 1; R) (s ; B; L)
15
s 15 (s15 ; y; L) (s 15 ; x; L) (s 15 ; y; L) (s ; B; R)
5
s 16 (s 16 ; x; R) (s
16 ; y; R) (s ; B; L)
17
s 17 (s 17 ; b; L) (s ; c; L)
17 (s 17 ; d; L) (s ; B; R)
18
s 18 (s20 ; 0; R)
s 19 (s 19 ; b; R) (s 21 ; 0; R )
s 20 (s 20 ; b; R) (s ; 0; R)
22
s 21 (s 21 ; c; R) (s ; d; R)
21
s 22 (s 22 ; c; R) (s ; d; R)
22
s 23 (s 24 ; b; L) (s 23 ; c; L) (s ; d; L) (s ; B; R)
23 23
s 24 (s 24 ; b; L)
s 25
Exercitiul 4.4.10 Sa se precizeze care din gramaticile din Exercitiile 1.3.18-1.3.37
genereaza limbaje de tip 1 si de ce.
(ALG20), sa se precizeze daca a b c este generat de acestea.
3 3 3
Anexa A
Implement
ari ale algoritmilor prezentat
i ^
n
cele patru capitole
^In aceasta anexa, vom prezenta implementari ^n limbajele Pascal si Prolog cores-
punzatoare problemelor aparute ^n cadrul primelor patru capitole. Este vorba de:
P1. problema determinarii starilor accesibile (Algoritmul (ALG1)) implementata ^n
limbajul Pascal;
P2. problema determinarii automatului minimal (Algoritmul (ALG2)) implemen-
tata ^n limbajul Pascal;
P3. problema apartenentei pentru automate nit deterministe implementata ^n lim-
bajul Pascal;
P4. problema apartenentei pentru automate nit nedeterministe implementata ^n
limbajul Prolog;
P5. problema construirii unui sistem tranzitional echivalent cu un automat nit
determinist implementata ^n limbajul Pascal;
P6. problema apartenentei pentru gramatici independente de context ^n forma nor-
mala Chomsky (Algoritmii (ALG16), (ALG17), (ALG18), (ALG19)) implemen-
tata ^n limbajul Pascal;
P7. problema apartenentei pentru gramatici independente de context st^ang nere-
cursive implementata ^n limbajul Pascal;
P8. problema apartenentei pentru gramatici independente de context fara reguli
si redenumiri ciclice implementata ^n limbajul Prolog.
Problema P1:
Avem la intrare un automat nit determinist si furnizam la iesire multimea starilor
accesibile. Detalii puteti gasi ^n Algoritmul (ALG1), pagina 56.
program stari_accesibile;
const nmax=20;
mmax=20;
type stari =1..nmax;
litera =1..mmax;
automat=array [stari,litera] of stari;
Implementari ale algoritmilor prezentati ^n cele patru capitole 193
var n:stari;
{numarul de stari}
m:litera;
{cardinalul alfabetului de intrare}
q0:stari;
{starea initiala a automatului}
delta:automat;
{functia de tranzitie}
finale:array[stari] of boolean;
{finale[s]=true <=> starea s este finala}
procedure citirea_datelor;
var k,j:integer;
begin
writeln('Dati nr. starilor <=',nmax);
readln(n);
writeln('Dati cardinalul alfabetului <=',mmax);
readln(m);
writeln('Dati matricea de tranzitie ');
for j:=1 to n do
for k:=1 to m do begin
write('delta[',j,',',k,']=');
readln(delta[j,k]);
end;
writeln('Dati starea initiala');
readln(q0);
end;
procedure accesibile;
var coada:array[stari] of stari;
{structura de date pentru parcurgerea bfs a automatului}
cap,spate:integer;
{primul, respectiv ultimul element din coada}
este :array[stari] of boolean;
{este[s]=true <=> starea s este in coada}
stare_curenta:stari;
{starea curenta a automatului}
j:integer;
{variabila de lucru}
begin
for j:=1 to n do este[j]:=false;
este[q0]:=true;
cap:=1;
Implementari ale algoritmilor prezentati ^n cele patru capitole 194
coada[cap]:=q0;
spate:=1;
repeat
for j:=1 to m do
if not este[delta[coada[cap],j]] then begin
este[delta[cap,j]] :=true;
inc(spate);
coada[spate]:=delta[coada[cap],j]
end;
inc(cap)
until cap>spate;
dec(cap);
writeln('starile accesibile din ',q0,' sunt');
for j:=1 to cap do write(coada[j],' ' );
writeln;
readln
end;
Problema P2:
Avem la intrare un automat nit determinist si furnizam la iesire un automat
nit determinist minimal echivalent. Detalii au fost precizate ^n Algoritmul (ALG2),
pagina 57, sau puteti gasi ^n [1, 7].
program reducerea_unui_automat_la_un_automat_minimal;
uses crt;
const nmax=20;
mmax=20;
var n :stari;
{numarul de stari}
m :litera;
{cardinalul alfabetului de intrare}
q0 :stari;
Implementari ale algoritmilor prezentati ^n cele patru capitole 195
{starea initiala}
delta :automat;
{functia de tranzitie}
finale:array [stari] of boolean;
{finale[s]=true <=> starea s este finala}
procedure citirea_datelor;
var i,j:integer;
{variabile de lucru}
begin
writeln('dati numarul de stari ale primului automat');
readln(n);
writeln('dati cardinalul alfabetului (fara lambda)');
readln(m);
writeln('dati matricea de tranzitie');
for i:=1 to n do
for j:=1 to m do begin
write('delta[',i,',',j,']='); {delta=Alt+235}
readln(delta[i,j])
end;
writeln('dati starea initiala');
readln(q0);
writeln('dati starile finale, 0 la terminare');
for i:=1 to n do finale[i]:=false;
repeat
readln(i);
if i<>0 then finale[i]:=true
until i=0
end;
procedure reducere;
type lista_perechi=^element;
element=record
unu,doi:stari;
urm:lista_perechi
end;
perechi=record
valoare:boolean;
lista :lista_perechi
end;
a :litera;
exista :boolean;
nprim :integer;
{numarul de stari ale celui de-al doilea automat}
clasa :array [stari] of stari;
{clasa[p]=q <=> clasa lui p este q}
i :integer;
{variabila de lucru}
procedure marcheaza(p,q:stari);
type cuplu=record
unu,doi:stari
end;
var coada :array [stari] of cuplu;
cap,spate:integer;
{primul, respectiv ultimul element al cozii}
pointer :lista_perechi;
temp :cuplu;
este :boolean;
{este=true <=> variabila este in coada}
i :integer;
{variabila de lucru}
begin
{facem marcarea perechilor din lista lui (p,q)}
spate:=0;
pointer:=pereche[p,q].lista;
while pointer<>nil do begin
inc(spate);
coada[spate].unu:=pointer^.unu;
coada[spate].doi:=pointer^.doi;
pointer:=pointer^.urm
end;
cap:=1;
while cap<=spate do begin
temp.unu:=coada[spate].unu;
temp.doi:=coada[spate].doi;
pereche[temp.unu,temp.doi].valoare:=true;
{punem toti vecinii lui (temp.unu,temp.doi) in coada}
pointer:=pereche[temp.unu,temp.doi].lista;
while pointer<>nil do begin
este:=false;
i:=1;
while not este and (i<=spate) do
Implementari ale algoritmilor prezentati ^n cele patru capitole 197
procedure adauga(p,q,p1,q1:stari);
var pointer1:lista_perechi;
begin
new(pointer1);
if q<p then begin
pointer1^.unu:=p;
pointer1^.doi:=q
end
else begin
pointer1^.unu:=q;
pointer1^.doi:=p
end;
pointer1^.urm:=pereche[p1,q1].lista;
pereche[p1,q1].lista:=pointer1;
end; {de la procedure adauga}
begin
{initializarea matricii totale la false}
for p:=1 to n do
for q:=1 to n do begin
pereche[p,q].valoare:=false;
pereche[p,q].lista:=nil
end;
{listele (p,q) sunt vide}
{si marcam (p,q) cu p in F, q in Q-F}
for p:=2 to n do
for q:=1 to p-1 do begin
pereche[p,q].lista:=nil;
if (finale[p] and finale[q]) or
Implementari ale algoritmilor prezentati ^n cele patru capitole 198
else clasa[p]:=q
end; {de la for p:=2 to n ...}
writeln('automatul minimal are ',nprim,' stari');
i:=0;
for p:=1 to n do
if clasa[p]=p then begin
inc(i);
write('clasa[',i,']: ');
for q:=1 to n do
if clasa[q]=p then write(q,' ');
writeln(' (din primul automat) ');
end;
writeln('alfabetul este acelasi');
writeln('matricea de tranzitie este ');
write('Q\A|'); {A=Sigma=Alt+228}
for i:=1 to m do write(i,' ');
writeln;
write('----'); {-=Alt+196}
for i:=1 to m do write('--'); {-=Alt+196}
writeln;
i:=0;
for p:=1 to n do
if p=clasa[p] then begin
inc(i);
write(' ',i,'|');
for a:=1 to m do
write(clasa[delta[p,a]],' ');
writeln
end;
write('----'); {-=Alt+196}
for i:=1 to m do write('--'); {-=Alt+196}
writeln;
writeln('starea initiala este (aceeasi): ',q0);
write('starile finale sunt: ');
for p:=1 to n do
if (clasa[p]=p) and finale[p] then
write(p,' ');
writeln;
readln
end; {de la procedure reducere}
end.
Problema P3:
Avem la intrare un automat nit determinist A = (S; ; Æ; s ; F ) si w
0 2 . La
iesire raspundem la ^ntrebarea daca w 2 L(A): Detalii ^n [1].
program problema_apartenentei_pentru_automate_finit_deterministe;
const nmax=20;
mmax=20;
lung_max=20;
type stari =1..nmax;
litera =1..mmax;
automat=array[stari,litera] of stari;
var n:stari;
{numarul de stari}
m:litera;
{cardinalul alfabetului de intrare}
stare_initiala:stari;
{starea initiala a automatului}
delta:automat;
{functia de tranzitie}
finale:array[stari] of boolean;
{finale[s]=true <=> starea s este finala}
lung:1..lung_max;
w:array[1..lung_max] of litera;
stare_curenta:stari;
k,i:integer;
procedure citirea_datelor;
var i,k:integer;
{variabile de lucru}
begin
writeln('Dati nr. starilor <=',nmax);
readln(n);
writeln('Dati cardinalul alfabetului <=',mmax);
readln(m);
writeln('Dati matricea de tranzitie ');
for k:=1 to n do
for i:=1 to m do begin
write('delta[',k,',',i,']=');
readln(delta[k,i]);
end;
Implementari ale algoritmilor prezentati ^n cele patru capitole 201
procedure analiza_cuvant;
var lung:1..lung_max;
{numarul de simboluri ale cuvantului}
w:array[1..lung_max] of litera;
{cuvantul de analizat}
stare_curenta:stari;
{starea curenta a automatului}
k:integer;
{variabila de lucru}
begin
repeat
writeln('dati lungimea lui w');
readln(lung);
writeln('dati cuvintul w');
for k:=1 to lung do begin
write('w[',k,']=');
readln(w[k])
end;
k:=1;
stare_curenta:=stare_initiala;
while k<=lung do begin
stare_curenta:=delta[stare_curenta,w[k]];
inc(k);
end;
if finale[stare_curenta] then writeln('w apartine L(A)')
else writeln('w nu apartine L(A)');
writeln('Alt cuvint ? (da=1)');
read(k)
until k<>1
end;
analiza_cuvant
end.
Problema P4:
Avem la intrare un automat nit (ne)determinist A = (S; ; Æ; s ; F ) si w 2 .
La iesire raspundem la ^ntrebarea daca w 2 L(A): Automatul A ind nedeterminist,
0
rezulta ca pentru a decide daca w 2 L(A) este necesar sa gasim macar un "drum"
etichetat cu w p^ana ^ntr-o stare nala. Acest lucru implica implementarea strategiei
backtracking. De aceea am ales limbajul Prolog deoarece are deja implementata
aceasta strategie.
domains
stare =symbol
litera=symbol
cuvant=litera *
% cuvantul w este privit ca o lista de simboluri
predicates
delta(stare,litera,stare)
% delta(s,a,s')=true <=> delta(s,a)=s'
stare_initiala(stare)
% stare_initiala(s)=true <=> starea s este initiala
finale(stare)
% finale(s)=true <=> starea s este finala
apartine(cuvant)
% apartine(w)=true <=> cuvantul w este acceptat
accepta(stare,cuvant)
% predicat de lucru
clauses
delta(s1,a,s1).
delta(s1,a,s2).
delta(s1,b,s2).
delta(s2,a,s2).
delta(s2,a,s3).
delta(s2,b,s3).
delta(s3,a,s3).
delta(s3,b,s1).
stare_initiala(s1).
finale(s3).
finale(s2).
apartine(W):-
stare_initiala(S_0),
accepta(S_0,W).
Implementari ale algoritmilor prezentati ^n cele patru capitole 203
apartine(_) :-
write("Cuvantul nu este acceptat.\n").
accepta(S,[]) :-
finale(S),
write("Cuvantul este acceptat.\n").
accepta(S,[H|T]) :-
delta(S,H,S1),
accepta(S1,T).
goal
apartine([a,a]).
Problema P5:
Avem la intrare un automat nit determinist cu tranzitii A = (S; ; Æ; s ; F ).
0
uses crt;
const n1max=20;
n2max=50;
m1max=20;
var n1 :stari1;
{numarul de stari ale primului automat}
m1 :litera1;
{cardinalul alfabetului}
delta1 :automat1;
{functia de tranzitie a primului automat}
q01 :stari1;
{starea initiala a primului automat}
finale1:array [stari1] of boolean;
{multimea starilor finale ale primului automat}
{finale1[s]=true <=> starea s este finala}
n2 :stari2;
Implementari ale algoritmilor prezentati ^n cele patru capitole 204
procedure citirea_datelor;
var i,j:integer;
{variabile de lucru}
begin
writeln('dati numarul de stari ale primului automat');
readln(n1);
writeln('dati cardinalul alfabetului (fara lambda)');
readln(m1);
writeln('dati matricea de tranzitie');
for i:=1 to n1 do
for j:=0 to m1 do begin
write('delta1[',i,',',j,']='); {delta=Alt+235}
readln(delta1[i,j])
end;
writeln('dati starea initiala');
readln(q01);
writeln('dati starile finale, 0 la terminare');
for i:=1 to n1 do finale1[i]:=false;
repeat
readln(i);
if i<>0 then finale1[i]:=true
until i=0
end;
procedure reducere;
var i,j :integer;
{variabile de lucru}
gata :boolean;
{variabila de lucru}
exista:boolean;
{exista=true <=> exista stari nemarcate}
marcat:integer;
{marcat este indicele starii curente}
Implementari ale algoritmilor prezentati ^n cele patru capitole 205
a :litera1;
qiu :vector;
gata1 :boolean;
begin
spate:=0;
for i:=1 to n1 do
if es[i] then begin
inc(spate);
coada[spate]:=i
end;
cap:=1;
repeat
if not es[delta1[coada[cap],0]] then begin
es[delta1[coada[cap],0]]:=true;
inc(spate);
coada[spate]:=delta1[coada[cap],0]
end;
inc(cap)
until cap>spate
end; {de la procedure escaciula}
procedure scrierea_datelor;
var i,j:integer;
Implementari ale algoritmilor prezentati ^n cele patru capitole 207
{variabile de lucru}
begin
clrscr;
writeln('automatul 2 are ',n2,' stari');
for i:=1 to n2 do begin
write('starea ',i,' (din automatul 2) { ');
for j:=1 to n1 do
if stare2[i,j] then
write(j,' ');
writeln('} (din automatul 1)')
end;
writeln('si matricea de tranzitie delta');
write('Q\A|'); {A=Sigma=Alt+228}
for i:=1 to m1 do write(i,' ');
writeln;
write('----'); {-=Alt+196}
for i:=1 to m1 do write('--'); {-=Alt+196}
writeln;
for i:=1 to n2 do begin
write(' ',i,'|');
for j:=1 to m1 do
write(delta2[i,j],' ');
writeln
end;
write('----'); {-=Alt+196}
for i:=1 to m1 do write('--'); {-=Alt+196}
writeln;
writeln('starea initiala este ',q01);
write('starile finale sunt { ');
for i:=1 to n2 do
if finale2[i] then write(i,' ');
writeln('}');
readln
end;
begin
citirea_datelor;
reducere;
scrierea_datelor
end.
Problema P6:
Implementari ale algoritmilor prezentati ^n cele patru capitole 208
w 2 L(G) ?, si ^n caz armativ, furnizam analizarea sintactica (sirul de reguli
aplicate ^n derivarea x =;) w).
0
G
Pentru a ^ntelege ^n detaliu aceasta implementare, puteti consulta Algoritmii
(ALG16), (ALG17), (ALG18) si (ALG19). Reprezentarea gramaticii G este simpla
deoarece G este ^n forma normala Chomsky. Pentru reprezentarea regulilor de forma
A ! B C am considerat matricea P1, ce are trei coloane. Astfel, daca regula de mai
sus are numarul 4, neterminalii A; B; C au numerele 7; 8; 9 atunci pentru matricea
P1 avem P1[4,1]=7, P1[4,2]=8 si P1[4,3]=9. ^In ceea ce priveste regulile de forma
A ! a, lucrurile stau si mai simplu. Astfel, daca regula A ! a are numarul 6, neter-
minalul A are numarul 7, iar terminalul a numarul 10, atunci pentru matricea P2
avem P2[6,1]=7, P2[6,2]=10.
program analizor_sintactic_ascendent;
{programul utilizeaza algoritmul Cocke-Younger-Kasami.
Presupunem ca gramatica este in forma normala Chomsky,
deci ea va avea o forma de codificare foarte restransa}
uses crt;
type valori=record
valoare,pozitie:integer
end;
procedure citirea_datelor;
var i,j:integer;
begin
clrscr;
write('dati lungimea cuvantului w, n=');
readln(n);
writeln('dati cuvantul w');
for i:=1 to n do begin
write('w[',i,']=');
readln(w[i])
end;
write('dati numarul de neterminali, n1=');
readln(n1);
write('dati numarul de terminali, n2=');
readln(n2);
write('dati numarul de reguli cu neterminali, nr1=');
readln(nr1);
write('dati numarul de reguli cu terminali, nr2=');
readln(nr2);
writeln('dati regulile cu neterminali');
for i:=1 to nr1 do
for j:=1 to 3 do begin
write('P1[',i,',',j,']=');
readln(P1[i,j])
end;
writeln('dati regulile cu terminali');
for i:=1 to nr2 do
for j:=1 to 2 do begin
write('P2[',i,',',j,']=');
readln(P2[i,j])
end;
end;
procedure CYK;
var i,j,k,l:integer;
begin
for i:=1 to n do
for k:=1 to n1 do v[i,1,k]:=false;
for i:=1 to n do
for k:=1 to nr2 do
if w[i]=P2[k,2] then v[i,1,P2[k,1]]:=true;
for j:=2 to n do
for i:=1 to n-j+1 do begin
for l:=1 to n1 do v[i,j,l]:=false;
for k:=1 to j-1 do
Implementari ale algoritmilor prezentati ^n cele patru capitole 210
procedure Parse(i,j,net:integer);
var k,l1,l2:integer;
e:boolean;
begin
if j=1 then begin
inc(h);
l1:=1;
e:=true;
while (l1<=nr2) and e do
if P2[l1,1]=net then begin
if P2[l1,2]=w[i] then begin
e:=false;
as[h].valoare:=nr1+l1;
as[h].pozitie:=poz;
end
end
else inc(l1);
end
else begin
k:=1;
e:=true;
while (k<=j-1) and e do begin
l2:=0;
while (l2<=nr1) and e do begin
inc(l2);
if P1[l2,1]=net then begin
if v[i,k,P1[l2,2]] and v[i+k,j-k,P1[l2,3]] then
e:=false
end
end;
if e then inc(k)
end;
inc(h);
as[h].valoare:=l2;
as[h].pozitie:=poz;
if 2*k<=j then begin
Parse(i,k,P1[l2,2]);
inc(poz);
Parse(i+k,j-k,P1[l2,3])
Implementari ale algoritmilor prezentati ^n cele patru capitole 211
end
else begin
inc(poz);
Parse(i+k,j-k,P1[l2,3]);
dec(poz);
Parse(i,k,P1[l2,2])
end
end
end;
procedure scriere;
var i:integer;
begin
writeln('analiza sintactica este ');
for i:=1 to 2*n-1 do
writeln(as[i].valoare,' pe pozitia ',as[i].pozitie);
writeln;
readln
end;
Problema P7:
Avem la intrare o gramatica independenta de context G = (VN ; VT ; x ; P ) care
nu este st^ang recursiva si un cuv^ant w 2 VT . La iesire raspundem la ^ntrebarea
0
Este clar ca initial avem conguratia (w #; x #; ). Alegerea regulii ^n tranzitia
0
! Gramatica G nu trebuie sa aiba simboluri st^ang recursive pentru ca altfel intram
^ntr-o bucla innita (x este st^ang recursiv daca exista derivarea x =+) x ).
st
Pentru reprezentarea regulilor de forma A ! x x ::: xn ; A 2 VN ; xi 2 (VN [ VT )
1 2
program analizor_sintactic;
{Acest algoritm foloseste metoda backtrack pentru gramatici care
nu sunt stang recursive}
uses crt;
const cnrreguli=10;
cnrmax =10;
cneterm =10;
cterm =10;
type productie =array [1..cnrreguli,1..cnrmax+1] of -1..cneterm+cterm;
cuvant =array [1..50] of 0..cneterm+cterm;
var regula :productie;
{regulile gramaticii}
nrmax :integer;
{numarul maxim de simboluri din partea dreapta a unei reguli}
neterm :integer;
{numarul de neterminali}
term :integer;
{numarul de terminali}
nrreguli :integer;
{numarul de reguli}
Implementari ale algoritmilor prezentati ^n cele patru capitole 213
w :cuvant;
{cuvantul ce trebuie analizat}
lungime_w :integer;
{lungimea cuvantului w}
w1 :cuvant;
{forma propozitionala curenta}
posib :array [1..cneterm] of 1..cnrreguli;
{posib[i] este numarul de reguli in care neterminalul i apare
in partea stanga a unei reguli}
prima :array [1..cneterm] of 1..cnrreguli;
{prima[i] este prima regula ce contine i in partea stanga}
lung :array [1..cnrreguli] of 0..cnrmax+1;
{lung[i] este lungimea partii drepte a regulii i}
x :array [1..100] of 1..cnrreguli;
{x este analizarea sintactica a lui w}
ch :char;
{variabila de lucru}
procedure citirea_datelor;
var i,j:integer;
begin
clrscr;
writeln('introduceti gramatica in forma standard');
writeln('adica cu urmatoarele conventii');
writeln('1. simbolul de start se codifica cu 1;');
writeln('2. regulile se dau in ordinea aparitiei',
' neterminalului din stanga');
writeln;
write('dati nr. de neterminali=');
readln(neterm);
write('dati nr. de terminali=');
readln(term);
write('dati nr. de reguli=');
readln(nrreguli);
write('dati nr. maxim de simboluri din membrul drept=');
readln(nrmax);
writeln('dati matricea regulilor');
for i:=1 to nrreguli do begin
write('dati neterminalul[',i,']=');
readln(regula[i,1]);
for j:=2 to nrmax+1 do regula[i,j]:=-1;
j:=2;
while (j<=nrmax+1) and (regula[i,j-1]>=0) do begin
write('simbol[',i,',',j,']=');
Implementari ale algoritmilor prezentati ^n cele patru capitole 214
readln(regula[i,j]);
j:=j+1
end
end;
{sa calculam vectorii posib si prima}
for i:=1 to nrreguli do begin
posib[regula[i,1]]:=1;
prima[regula[i,1]]:=i;
while (i<=nrreguli) and (regula[i,1]=regula[i+1,1]) do begin
inc(posib[regula[i,1]]);
inc(i)
end;
end;
{cu toate ca avem doua cicluri, calculul vectorului posib se face
liniar in raport cu numarul de reguli}
{calculam acum lungimea partii drepte a tuturor regulilor}
for i:=1 to nrreguli do begin
lung[i]:=0;
j:=2;
while (j<=nrmax+1) and (regula[i,j]>0) do begin
inc(lung[i]);
inc(j)
end
end
end;
procedure citeste_cuvant;
var i:integer;
begin
writeln('dati lungimea cuvantului w');
readln(lungime_w);
for i:=1 to lungime_w do begin
write('w[',i,']=');
readln(w[i])
end;
end;
function egal(w1,w2:cuvant;lg:integer):boolean;
var i:integer;
e:boolean;
begin
i:=1;
e:=true;
if lungime_w=lg then begin
while (i<=lungime_w) and e do
Implementari ale algoritmilor prezentati ^n cele patru capitole 215
procedure scrie_solutie(k:integer);
var i:integer;
begin
write('cuvantul ');
for i:=1 to lungime_w do
write(w[i],' ');
writeln('are analizarea sintactica stanga:');
for i:=1 to k-1 do
write(x[i],' ');
writeln;
end;
function gaseste_primul_neterminal(w1:cuvant;lg:integer):integer;
{functia intoarce numarul neterminalului din w1 daca
acesta exista, si 0 in caz contrar}
var i:integer;
e:boolean;
begin
i:=1;
e:=false;
while (i<=lg) and not e do
if w1[i]<=neterm then e:=true
else inc(i);
if e then gaseste_primul_neterminal:=w1[i]
else gaseste_primul_neterminal:=0
end;
function cuv(w1,w2:cuvant;net:integer):boolean;
var i:integer;
e:boolean;
begin
i:=1;
e:=true;
while (w2[i]<>net) and e do
if w1[i]=w2[i] then inc(i)
else e:=false;
cuv:=e
end;
Implementari ale algoritmilor prezentati ^n cele patru capitole 216
procedure back_rec(k:integer;w_prim:cuvant;lungime_w_prim:integer);
{k-nivelul in arbore; w_prim este forma propozitionala curenta}
var i,j :integer;
prim_net :integer;
w_secund :cuvant;
lungime_w_secund:integer;
begin
if egal(w_prim,w,lungime_w_prim) then
scrie_solutie(k)
else begin
Implementari ale algoritmilor prezentati ^n cele patru capitole 217
prim_net:=gaseste_primul_neterminal(w_prim,lungime_w_prim);
{vectorul posib da sansele de alegere a regulii}
if prim_net<>0 then
for i:=0 to posib[prim_net]-1 do
{conditia de continuare va fi:
- w si w_prim sunt similare pana la prim_net}
if cuv(w,w_prim,prim_net) then begin
x[k]:=prima[prim_net]+i;
{prima= vector care da numarul primei reguli
a neterminalului (in cazul nostru, prim_net)}
for j:=1 to lungime_w_prim do
w_secund[j]:=w_prim[j];
lungime_w_secund:=lungime_w_prim;
transformare(w_secund,lungime_w_secund,prim_net,x[k]);
{procedura transformare modifica w_prim in care prim_net
este inlocuit cu partea dreapta a regulii x[k]}
back_rec(k+1,w_secund,lungime_w_secund)
end
end
end;
Problema P8:
Avem la intrare o gramatica independenta de context G = (VN ; VT ; x ; P ) care
nu are reguli si redenumiri ciclice si un cuv^ant w 2 VT . La iesire raspundem la
0
^ntrebarea w 2 L(G) ?, si ^n caz armativ, furnizam analizarea sintactica st^anga.
Algoritmul implementat ^n limbajul Prolog este asemanator din punct de vedere
al conguratiilor si al tranzitiilor dintre ele. Singura tranzitie care difera este:
Expandare: (u #; A
#; ) (u#;
#; r) daca r este numarul regulii A !
; si j
j juj:
Implementari ale algoritmilor prezentati ^n cele patru capitole 218
Diferenta cea mai importanta dintre cei doi algoritmi (care rezolva P7 si P8) este
forma gramaticii de intrare. Acum, punem urmatoarele doua conditii pentru grama-
tica de la intrare:
gramatica G nu are reguli, cu exceptia, eventual, a regulii x 0 ! ; caz ^n
care x nu mai apare ^n partea dreapta a vreunei reguli;
0
G G
Avantajul major al implementarii ^n limbajul Prolog este tocmai faptul ca acesta
contine deja implementata strategia backtracking. Asadar, programatorul nu trebuie
sa mai "piarda timpul" (asa cum s-a ^nt^amplat ^n precedenta implementare ^n Pascal)
sa descrie aceasta metoda.
^In continuare, vom prezenta un program ^n limbajul Prolog, ce are ca intrare grama-
tica ce genereaza limbajul lui Dyck (Exercitiul 1.3.16) si anume al expresiilor corect
parantetizate. Analitic, aceasta se poate exprima prin:
LDyck = fw= orice prex propriu w0 al lui w avem Nw0 (0 (0 ) Nw0 (0 )0 ) si Nw (0 (0 )
= Nw (0 )0 )g;
unde prin Nw0 (0 (0 ) am notat numarul de paranteze st^angi 0 (0 din cuv^antul w0 : Formal,
spunem ca w0 este prex al lui w daca 9 u 2 astfel ^nc^at w = w0 u:
+
predicates
neterminal(char)
% neterminal(X)=true <=> X este neterminal
start(char)
% start(S)=true <=> S este simbolul de start al gramaticii
regula(integer,char,lista_char)
% regula(1,'S',['S','S']) inseamna ca este vorba de regula 1:S->SS
configuratie(lista_char,lista_char,lista_int)
% configuratie(W,Fp,Pi) inseamna:
% - W = cuvantul ce a mai ramas de analizat in banda de intrare
Implementari ale algoritmilor prezentati ^n cele patru capitole 219
apartine(lista_char)
% apartine(W)=true <=> W apartine limbajului generat de gramatica
lungime(integer,lista_char)
% lungime(I,L) va intoarce in I lungimea listei L
append(lista_char,lista_char,lista_char)
append(lista_int,lista_int,lista_int)
% append(L1,L2,L3) va concatena L1 cu L2, rezultatul punandu-l in L3
% append(Pi,R,Pi1) va concatena Pi cu R, rezultatul punandu-l in
% Pi1, dar atentie ! este vorba de predicatul definit cu argumente
% din lista_int
clauses
neterminal('S').
start('S').
regula(1,'S',['S','S']).
regula(2,'S',['(','S',')']).
regula(3,'S',['(',')']).
% configuratia de acceptare
configuratie([],[],L):-
write(" este generat "),
write("si are analizarea sintactica ",L),nl.
% tranzitia de expandare
configuratie(U,[A|Gamma],Pi):-
neterminal(A),
regula(R,A,Beta),
append(Beta,Gamma,Gamma1),
lungime(L1,Gamma1),
lungime(L2,U),
L1<=L2,
append(Pi,[R],Pi1),
configuratie(U,Gamma1,Pi1).
% tranzitia de reducere
configuratie([A|U],[A|Gamma],Pi):-
configuratie(U,Gamma,Pi).
apartine(W):-
start(S),write("Cuvantul ",W),
configuratie(W,[S],[]).
Implementari ale algoritmilor prezentati ^n cele patru capitole 220
% tranzitia de eroare
apartine(_):-write(" nu este generat"),nl.
lungime(0,[]).
lungime(I,[_|T]):-
lungime(I1,T),
I=I1+1.
append([],L,L).
append([H|T1],L2,[H|T2]):-
append(T1,L2,T2).
goal
apartine(['(','(',')',')','(',')']).
Index 221
Anexa B
Aplicat
ii ale limba jelor formale ^
n descrierea
limba jului Pascal
^In aceasta anexa, vom prezenta doua gramatici (una de tip 3 si alta de tip 2) cu
care se poate exprima sintaxa limbajului Pascal. Mai precis, vom da o gramatica de
tip 3 care descrie "vocabularul" limbajului Pascal (analiza lexicala) si o gramatica de
tip 3 care descrie "sintaxa" limbajului Pascal (analiza sintactica). Pentru descrierea
unui limbaj de programare se cunosc mai multe moduri, printre care:
forme Backus-Naur (BNF);
diagrame Conway;
gramatici Chomsky.
Aceste modalitati de descriere sunt echivalente. ^In acest sens, vom preciza cum se
pot transforma formele Backus-Naur ^n gramatici Chomsky, urm^and, din motive de
claritate, sa precizam vocabularul si sintaxa limbajului Pascal folosind forme Backus-
Naur.
De exemplu, pentru descrierea unei cifre, forma Backus-Naur asociata este:
< cifra >::= 0 j 1 j 2 j 3 j 4 j 5 j 6 j 7 j 8 j 9
Daca consideram < cifra > un neterminal si simbolul ::= ca ind ! atunci este ca
si cum ar o regula dintr-o gramatica Chomsky. Astfel, ^n general, cuvintele situate
^ntre "<" si ">" vor nota neterminali, simbolul ::= ^nseamna !. Cuvintele care nu
sunt ^ntre paranteze unghiulare sunt terminali (cuvinte rezervate, simboluri speciale).
^In formele BNF mai apar doua simboluri specice. Este vorba de f, g si [, ]. Prima
se refera la repetarea de oric^ate ori a unei secvente, iar a doua la optionalitate. De
exemplu, denitia unui identicator se face astfel:
< identicator >::=< litera > f < litera > j < cifra > j g
Aceasta se poate exprima ^n gramaticile generative prin regulile:
< identicator >::=< litera > < X >
< X >::=< litera > < X > j < cifra > < X > j < X > j
Chiar daca nu toate regulile de mai sus sunt de tip 3, acestea se pot exprima imediat
prin mai multe reguli de tip 3. Un alt exemplu se refera la denitia unui numar real
fara semn:
< real fara semn >::=< ^ntreg fara semn > [ e < factor scala > ]
La fel, aceasta se poate exprima ^n gramaticile generative prin regulile:
Index 222
< real fara semn >::=< ^ntreg fara semn > < X >
< X >::= e < factor scala > j
^In cele ce urmeaza, vom prezenta vocabularul limbajului Pascal exprimat prin dia-
grame BNF.
1.1. < litera >::= A j B j C j D j E j F j G j H j I j J j K j L j M j N j O j P j Q j R j S j T j
U jV jW jX jY jZ j$
1.2. < cifra >::= 0 j 1 j 2 j 3 j 4 j 5 j 6 j 7 j 8 j 9
1.3. < cifra octala >::= 0 j 1 j 2 j 3 j 4 j 5 j 6 j 7
1.4. < simbol special >::=
+j j j=j = j < j > j[j]jfjgj:j; j : j
; j ^ j @ j ( j ) j <> j <= j >= j := j :: j < cuv^ant cheie > j <
simbol echivalent >
1.4.1. < simbol echivalent >::= ( j ) j (: j :)
1.5. < cuv^ant cheie >::=
and j array j begin j case j const j div j do j downto j else j end j file j for j
function j goto j if j in j label j mod j nil j not j of j or j origin j otherwise j
packed j procedure j program j record j repeat j set jthen j to j type j until j
var j while j with
1.6. < identicator >::=< litera > f < litera > j < cifra > jg
1.7. < directiva >::= forward j external j nonpascal
1.8. < secventa cifre >::=< cifra > f < cifra >g
1.9. < ^ntreg fara semn >::=< secventa cifre >
1.10. < real fara semn >::=
< ^ntreg fara semn > : < ^ntreg fara semn > [ e < factor scala > ] j
< ^ntreg fara semn > e < factor scala >
1.11. < numar octal >::=< cifra octala > f < cifra octala >g b
1.12. < numar fara semn >::=
< ^ntreg fara semn > j
< real fara semn > j
Index 223
Pentru neterminalii
< orice caracter ASCII imprimabil > si
< orice secventa de caractere si sf^arsit de linie necontin^and acolade drepte >
nu am descris regulile asociate deoarece sunt foarte simple (dependente chiar de codul
ASCII implicit). Secventa "(" se poate identica cu acolada st^anga f, iar ")" se
poate identica cu acolada dreapta g. ^In regula 1.4, parantezele patrate ([; ]), respectiv
(f; g), sunt simboluri de sine statatoare si nu au semnicatia celor discutate ^n forma
Backus-Naur.
^In continuare, vom prezenta o gramatica de tip 2 (scrisa ^n forma BNF) care precizeaza
sintaxa limbajului Pascal.
2.1.a. < program >::=
[ < antet program > ] f < etichete > j < constante > j < tipuri > j <
variabile j
< subprogram >g [ < instructiune compusa > : ]
2.1.b. < subprogram >::=< procedura > ; j < functie > ;
Index 224
2.2. < antet program >::= program < identicator > [ ( < identicator > f ; <
identicator > g ) ] ;
2.3. < corp >::=< declaratii > < instructiune compusa >
2.4. < declaratii >::= f [ < etichete > ] [ < constante > [ < tipuri > ] [ < variabile >
] gf < subprogram g
2.5. < etichete >::= label < eticheta > f ; < eticheta > g ;
2.6.a. < constante >::= const < denitie constanta > f ; < denitie constanta > g ;
2.6.b. < denitie constanta >::=< identicator > = < constanta >
2.7.a. < tipuri >::= type < denitie tip > f ; < denitie tip > g ;
2.7.b. < denitie tip >::=< identicator > = < tip >
2.8.a. < variabile >::= var < declaratie variabile > ; f < declaratie variabile > ; g
2.8.b. < declaratie variabile >::=< specicare variabila > f ; < specicare variabila >
g : < tip >
2.8.c. < specicare variabila >::=< identicator > [ origin < constanta > ]
2.9.a. < constanta >::=
[ < semn > ] < numar fara semn > j
[ < semn > ] < identicator > j
< sir de caractere > j
< constanta structurata >
2.9.b. < constanta structurata >::=< identicator > < lista componente constante >
2.9.c. < lista componente constante >::= ( < componenta constanta > f; <
componenta constanta > g )
2.10. < componenta constanta >::=< constanta > j < lista componente constante >
2.11. < tip >::=
< identicator > j
< tip enumerare > j
< tip subdomeniu > j
< tip set > j
< tip array > j
< tip record > j
< tip le >
Index 225
2.12.a. < tip enumerare >::= ( < identicator > f ; < identicator > g )
2.12.b. < tip subdomeniu >::=< constanta > : : < constanta >
2.12.c. < tip set >::= [ packed ] set of < tip >
2.12.d. < tip array >::= [ packed ] array ( : < tip > f < tip > g : ) of < tip >
2.12.e. < tip le >::= [ packed ] file of < tip >
2.12.f. < tip record >::= [ packed ] record < lista c^ampuri > [ ; ] end
2.13.a. < lista c^ampuri >::=
< parte xa > [ ; < parte variante > ] j
< parte variante >
2.13.b. < parte xa >::=< sectiune record > f ; < sectiune record > g
2.13.c. < sectiune record >::=< identicator > f ; < identicator > g : < tip >
2.14. < parte variante >::= case [ < identicator > : ] < tip > of < varianta >
f ; < varianta > g
2.15. < varianta >::=< constanta > f ; < constanta > : ( [ < lista c^ampuri > ] [ ; ] )
2.16. < procedura >::=
< antet procedura > ; < corp > j
< antet procedura > ; < directiva > j
procedure < identicator > ; < corp >
2.17. < functie >::=
< antet functie > ; < corp > j
< antet functie > ; < directiva > j
function < identicator > ; < corp >
2.18.a. < antet procedura >::= procedure < identicator > [ < lista parametri > ]
2.18.b. < lista parametri >::= ( < parametru formal > f ; < parametru formal > g )
2.19. < antet functie >::= function < identicator > [ < lista parametri > ] :<
identicator >
2.20. < parametru formal >::=
[ var ] < identicator > f ; < identicator > g : < identicator > j
< antet procedura > j
< antet functie >
Index 226
2.21. < instructiune >::= [ < eticheta > : ] < instructiune neetichetata >
2.22. < instructiune neetichetata >::=
[ < atribuire > j
< apel procedura > j
< instructiune compusa > j
< instructiune if > j
< instructiune case > j
< instructiune while > j
< instructiune repeat > j
< instructiune for > j
< instructiune with > j
< instructiune goto > ]
2.23.a. < atribuire >::=< variabila > := < expresie >
2.23.b. < apel procedura >::=< identicator > [ < lista argumente > j <
lista argumente write > ]
2.23.c. < lista argumente >::= ( < expresie > f < expresie > g )
2.23.d. < lista argumente write >::= ( < argument write > f ; < argument write > g )
2.23.e. < argument write >::=< expresie > [ : < expresie > [ : < expresie > ] ]
2.23.f. < instructiune compusa >::= begin < instructiune > f; < instructiune >
g end
2.23.g. < instructiune if >::= if < expresie booleana > then < instructiune > [ <
instructiune > ]
2.23.h. < instructiune case >::= case < expresie > of [ < element case >
f ; < element case > g ] [ otherwise < instructiune > ] [ ; ] end
2.23.i. < element case >::=< constanta > f ; < constanta > g : < instructiune >
2.23.j. < instructiune while >::= while < expresie booleana > do < instructiune >
2.23.k. < instructiune repeat >::= repeat < instructiune > f ; < instructiune > g
until < expresie booleana >
2.23.l. < instructiune for >::= for < variabila > := < expresie > < pas > <
expresie >
do < instructiune >
Bibliograe 227
^In regula 2.12.d, secventa "(:", respectiv ":)", semnica "[", respectiv "]".
Bibliograe
[1] Andrei, St., Grigoras, Gh., - Constructia compilatoarelor. Lucrari de laborator,
Editura Universitatii "Al.I.Cuza", Iasi, Rom^ania, 1995;
[2] Balanescu, T., Gavrila, S., Georgescu, H., Gheorghe, M., Sofonea, L., Vaduva, I.,
- Programarea ^n limbajele Pascal si Turbo Pascal, vol. 1, vol 2, Editura Tehnica,
Bucuresti, Rom^ania, 1992;
[3] Cazanescu, V. E., - Introducere ^n teoria limbajelor formale, Editura Academiei,
Bucuresti, Rom^ania, 1983;
[4] Chomsky, N., - Three models for the description of languages, IRE Transaction
on Information Theory, IT-2, pp.113-124, 1956;
[5] Chomsky, N., - On certain formal properties of grammars, Information Control,
pp.137-167, 1959;
[6] Creanga, I., Reischer, C., Simovici, D., - Introducere algebrica ^n informatica.
Teoria automatelor, Editura Junimea, Iasi, Rom^ania, 1973;
[7] Grigoras, Gh., - Limbaje formale si tehnici de compilare, Editura Universitatii
"Al.I.Cuza", Iasi, Rom^ania, 1985;
[8] Harrison, M., - Introduction to Formal Language Theory, Addison Wesley, Read-
ing Mass., U.S.A., 1978;
[9] Hopcroft, J.E., Ullman, J.D., - Introduction to Automata Theory, Languages and
Computation, Addison Wesley Publishing Company, U.S.A., 1979;
[10] Jucan, T., Simovici, D.,- Bazele informaticii, Editura "Al.I.Cuza", Iasi, Rom^ania,
1979;
[11] Jucan, T., - Limbaje formale si teoria automatelor, Editura "Al.I.Cuza", Iasi,
Rom^ania, 1997;
[12] Moldovan, G., Cioban, V., Lupea, M., - Limbaje formale si teoria automatelor.
Culegere de probleme, Universitatea "Babes-Bolyai", Cluj-Napoca, Rom^ania,
1996;
228
Bibliograe 229
[13] Paun, Gh., - C^ateva gramatici dependente de context, Stud. Cerc. Mat., 26, 8
(1974), 1105-1110;
[14] Paun, Gh., - Gramatici matriciale, Editura Stiintica si Enciclopedica, Bucuresti,
Rom^ania, 1981;
[15] Perrin, D., - Finite Automata, Handbook of Theoretical Computer Science, El-
sevier Science Publishers B.V., 1990;
[16] Orman, G., - Limbaje formale, Editura Tehnica, Bucuresti, Rom^ania, 1982;
[17] Salomaa, A., - Formal Languages, Academic Press, New York, U.S.A., 1973;
[18] Simovici, D., - Limbaje formale si tehnici de compilare, Editura didactica si
pedagogica, Bucuresti, Rom^ania, 1978.