Documente Academic
Documente Profesional
Documente Cultură
38
38
41
44
54
61
65
71
74
76
80
95
2
3.8 Problema echivalentei a doua gramatici independente de context . . . 152
3.9 Exercitii propuse spre rezolvare . . . . . . . . . . . . . . . . . . . . . . 156
163
163
178
180
186
Capitolul 1
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
n
+
VN
abilelor);
VT
{ VN \ VT = ;;
{ V = VN [ VT se numeste alfabetul gramaticii G;
1 Profesor la Departamentul de lingvistica si losoe, Massachusetts Institute of Technology, Cambridge, U.S.A.
3
Introducere
(; ) 2 =) daca
G
9u!v2P
astfel ^nc^at = 1 u2 ; = 1 v2 :
= sau
9 n 1 si 9 u ; u ; :::; un astfel ^nc^at = u ; = un si ui =G) ui ; 8 i =
1
+1
1; n 1:
Denitia 1.1.5 Limbajul generat de gramatica G este L(G) = fp=p 2 VT ; 9 x =)
G
pg:
0
gramatica de tip 0: nu are nici un fel de restrictie asupra regulilor dec^at cele
din Denitia 1.1.2; se mai numesc si gramatici generale;
gramatica de tip 1: regulile sale sunt de tipul u x v ! u r v, unde u; v 2 V ; x 2
VN ; r 2 V sau de forma x ! , caz ^n care x nu mai apare ^n partea
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
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.1, 1.3.5, de exemplu, genereaza limbaje independente de context, dar care nu sunt regulate; de aici rezulta incluziunea stricta
L L ;
3
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
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 independent de context, putem deduce rezultatul: Clasa limbajelor independente de
context nu este ^nchisa la intersectie.
i
G
i;
Prin =) vom ^ntelege ca derivarea s-a facut aplic^and i pasi (reguli); daca
G
i = 1;
tica) ;
Generari de limbaje
Prin =) vom ^ntelege ca se aplica mai multe reguli, dar cel putin una;
Prin =) vom ^ntelege ca se aplica mai multe reguli, posibil niciuna;
G
G
i ;j
G
( )
! a b; x ! a x bg):
0
Solutie
a) Se deduce imediat, folosind Denitia 1.1.7, ca gramatica G este de tip 2;
b) Fiind vorba de multimi, vom proceda prin dubla incluziune.
: Sa demonstram ca
(1) L(G) fan bn =n 1g:
Cu alte cuvinte, trebuie sa aratam ca exista o derivare x =) an bn ; 8 n 1:
(2)
(2)
(2)
(1)
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
an x bn =) an bn sau x =n;)
pentru k = n + 1: Astfel, avem derivarile x =n;)
(1)
an x0 bn
=) an+1 x0 bn+1 ;
G
(2)
+1
+1
Generari de limbaje
Cu aceasta, ind vericate cele doua etape ale inductiei matematice, rezulta incluziunea (1):
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
G
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;
G
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
an bn
forme propozitionale. Este vorba de an x bn si an bn : Derivarea x =n;)
0
+1
+1
+1
+1
Generari de limbaje
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);
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:
(1)
(2)
(2)
(3)
(4)
(5)
(6)
fak x bk ck ; ak bk ck g fw= w 2 V ; 9 x
1
k2 +k 1;
=) wg
G
;n
(3)
+1
(5)
+1
+1
+1) +
+1
+1
(6)
+1
+1
+1
Generari de limbaje
n 2 n ; n
este x
=)
a x bn cn =) an bn cn adica exact armatia (2) penG
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
ak = ak + k + 1 + k + 1 (^nsemn^and k aplicari a regulii 3, apoi o aplicare a regulii
4; dupa care k aplicari a regulii 5 si ^n sf^arsit o aplicare a regulii 6 sau 7). Deci avem:
(
+1) +
+1
+1
(7)
+1
+1
+1
+1
a =1
ak = ak + 2k + 2
1
+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
+
2 n
x n =)
an x bn cn
+
an x bn cn =G) an b x bn cn
(3)
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 =
) an bn x cn
1
10
Generari de limbaje
an bn x cn =) an bn x b c c cn
(4)
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
G
+1
+1
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 :
Numarul de pasi ai derivarii pentru care putem obtine formele propozitionale
an x bn cn si an bn cn este egal cu n + n 1+ n +1+ n +1 = n +3n +1 =
(n + 1) + (n + 1) 1:
Cu aceasta, armatia (4) este demonstrata.
Astfel, L(G) = fan bn cn = n 1g:
+1
+1
+1
1
2
+1
+1
+1
+1
+1
+1
+1
+1
+1
2
2
Solutie
a) Datorita regulii 3, rezulta ca gramatica este de tip 0, ^nsa ind monotona, se
poate reduce la una de tip 1. Oricum, limbajul generat este de tip 1.
b) Vom demonstra ca
L(G) = fan bn cn =n 1g:
: Sa gasim o derivare de forma x =G) an bn cn ; 8 n 1: Mai ^nt^ai, vom demonstra
prin inductie dupa k armatia:
(2)
fak x (x x )k ; ak (x x )k g f= x =k;) ; 2 (VN [ VT ) g:
(1)
(2)
+1
+1
11
Generari de limbaje
m; m
x =
) a x (x x )m =) am (x x )m
(2)
+1
+1
fak bk ck j k 1g f= ak (x x )k =G) g;
(3)
k 1ori
ori
(4)
(5)
(6)
(7)
1)
( +3)
2
( +5)
( +3)
12
Generari de limbaje
(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
G
G
formele propozitionale 2 fa x x x ; a x x g se observa ca avem a < x ; x <
x ; a < x ; b < x ; a < b; b < x ; c < x ; b < c:
Pasul inductiv: Presupunem armatia (ii) adevarata pentru k = n > 1 si o
demonstram pentru k = n + 1: Punem ^n evidenta ultimul pas al derivarii. Deci
; si, din ipoteza inductiva, rezulta ca pentru forma propozitionala ; avem
x =n;)
G
a < x ; b < x ; a < b; b < x ; c < x ; b < c: Dar ultimul pas =) se
G
obtine aplic^and una din regulile gramaticii. Se verica imediat ca cei sase invarianti
ram^an adevarati si pentru b (trebuie luate ^n considerare sapte cazuri, deoarece avem
sapte reguli). De exemplu, presupunem ca ultima regula aplicata este 6: Invariantii
a < x ; b < x ; a < b; b < x ; c < x sunt adevarati deoarece simbolurile
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
verica imediat ca are loc N (a) = N (x ) + N (b) = N (x ) + N (c):
Pasul inductiv: Presupunem (iii) adevarata pentru 8 2 F P (G) astfel ^nc^at
si sa demonstram pentru 8 2 F P (G); x n=); : Este clar ca din
x =n;)
G
G
n ;
x =) rezulta ca exista 2 (V [ V ) astfel ^nc^at
(1)
(2)
+1
+1
=) :
x =n;)
0
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
nal, obtinem
N (a) = N (x ) + N (b) = N (x ) + N (c):
Analog se verica si pentru celelalte reguli. Asadar, am demonstrat (iii), deci incluziunea L(G) fan bn cn = n 1g este aratata.
1
Exercitiul 1.2.4 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de reguli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c
13
Generari de limbaje
Solutie
a) Se deduce imediat, folosind Denitia 1.1.7, ca gramatica G este de tip 0 (din
cauza regulii 4 care nu este de tip 1); dar, utiliz^and observatia de la Exercitiul 1.2.2
(gramatica G ind monotona), rezulta ca exista o gramatica dependenta de context
echivalenta cu ea; concluzionam ca desi gramatica G este de tip 0; limbajul L(G) este
de tip 1;
b) Pentru a intui limbajul generat de gramatica G; vom face mai ^nt^ai o cercetare
prin inductie dupa lungimea derivarii.
Astfel:
A =G) a b c
(1)
(1)
(4)
(3)
(2)
(1)
(4)
(4)
(3)
(3)
(3)
8 k 2 N :
(2)
(2)
+1
+1
=) ak bj cj B k j ;
G
8 j; 1 j k;
+1
14
Generari de limbaje
stram pentru j = m + 1: Folosind ipoteza inductiva si regulile 4 si 3 (regula 4 aplicata
de m ori), obtinem:
ak b c B k
=) ak bm cm B k m =) ak bm cm B c B k m
(4)
;m
=) ak bm B cm B k m
(4)
;m
G
=)
(4)
=) ak bm cm B k m :
(3)
+1
+1
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
: Sa demonstram ca (6) L(G) fan bn cn =n 1g: Analog cu Exercitiul 1.2.1,
ak b c B k
15
Generari de limbaje
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
3 sau 4: Obtinem formele propozitionale
2
ak b b c c B k
sau ak b B B c B k
+1
+1
unde i = k + k + ::: + ks
regula 3 sau regula 4.
1
regula 3 se poate aplica ^n mod unic si obtinem ak bi1 c B j1 ck1 B j2 ck2 :::
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 =
j ; :::; ks0 = ks ; js0 = js : Sa vericam conditiile din pasul inductiv. Avem
i0 = 1+ i = 1+ k + k + :::ks = k0 + k0 + ::: + ks0 si m = j + j + ::: + js + i =
0 + j 1 + j + ::: + js + i + 1 = j 0 + j 0 + ::: + js0 + i0 ;
+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 =)
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 :
Notam i0 = i ; j 0 = j ; k0 = k ; :::; kt0 = kt 1; jt0 = 1; kt0 = 1; jt0 =
jt
1; :::; ks0 = ks ; js0 = js : Vericam conditia din pasul inductiv, si
anume, i0 = i = k + k + ::: + kt + kt 1 + 1 + kt + ::: + ks = k0 + k0 +
:::+kt0 +kt0 +kt0 +:::+ks0 si m = j +j +:::+jt +1+jt 1+jt +:::+js +i =
j 0 + j 0 + ::: + jt0 + jt0 + jt0 + ::: + js0 + i0 :
+1
+1
+1
(4)
+1
+1
+2
+1
+1
+1
+2
+1
+1
+1
+2
Cu aceasta, demonstratia incluziunii (7) s-a ^ncheiat. Deci limbajul generat de gramatica 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.
sunt urmatoarele:
1. S ! B A B
16
Generari de limbaje
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
;
n
b) sa se demonstreze ca L(G) = fa2 = n 0g:
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"
cuvintelor (cele doua simboluri ), G0 este echivalenta cu G:
2
b) Procedam prin dubla incluziune. Mai ^nt^ai, facem o cercetare prin inductie dupa
n:
;
G
Pentru n = 1 avem S =) B A B =) B C B =) B A A B =) B a a B =)
G
G
G
G
G
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
G
G
G
B A A C B =) B A A A A B =) a a a a; unde ^n ultima derivare (=)) se
G
G
G
^ntelege ca s-au aplicat de patru ori regula 5 si de doua ori regula 6:
(1)
(5)
(1)
(6) (6)
(2)
(1)
(4)
(2)
(5) (5)
(4)
(6) (6)
(2)
(3)
(4)
+1
j
2
B A B =) B C A
j
2
(2)
j
2
Cuv^antului B C A
B ^i putem aplica regulile 5; 6 sau 3: Daca aplicam regula
l B din care nu putem
5 atunci obtinem un cuv^ant de forma B C Al a A
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
ori si obtinem A
C B , altfel daca aplicam 5 sau 6 obtinem cuvinte din care
2
17
Generari de limbaje
nu +1putem elimina C: ^In continuare, putem aplica numai 4; 5 si 6 si obtinem
a :
Daca aplicam cuv^antului B C A
B regula 3, obtinem
2
BCA
j
2
+1
;
B =) B A
j
2
(3)
C B =) B A
(4)
j
2
+1
B A B =) B Al a A
2
(5)
l B:
j
2
posibile:
j
2
j
2
Deci, ^n concluzie, am demonstrat ca singurele derivari care conduc la cuvinte din
limbaj sunt:
+1
(1)
B A B =) B A B
2
(2)
(3)
j
2
B A B =) a
j
+1
B A B =) a
j
2
Sa demonstram ca L(G) = fa = n 0g: La fel, procedam prin dubla incluziune.
: Pentru n = 0; si n = 1 am demonstrat deja. Sa demonstram ca a 2 L(G) pentru
un k arbitrar, k 2:
0
Avem derivarea S =) B A B . Dar cuv^antul B A B = B A B , deci vom aplica
G
(1) de k ori si vom obtine
n
2
;
; ;
B =) B A B =) B A B =) a :
(1)
k
2
(5) (6)
k
2
18
Generari de limbaje
: Fie p 2 L(G).
j
2
n
2
(1)
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:
(
Solutie a) Din cauza regulilor 5; 6 care nu sunt sensibile la context, rezulta ca G
nu este de tip 1; ci de tip 0: Totusi, gramatica G este monotona, si se stie ca ea se
poate \reduce" la o gramatica sensibila la context G0 , echivalenta cu G: Deci, limbajul
generat de G este totusi de tip 1 (vom vedea mai t^arziu ca nu poate de tip 2).
b) Procedam prin dubla incluziune.
: Mai ^nt^ai, facem o cercetare prin inductie dupa n.
19
Generari de limbaje
(2)
(9)
; ;
G
(3)
(8) (9) +
(3)
aaaa
(4)
(5)
(6)
(6)
; ;
G
=) A A A A B A A B X =) A A A A B A A B B =)
(6)
(7)
(8) (9) +
a
9
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:
G
(i) = Ai1 B j1 ::: Ai B j ;
(ii) i 2; i 0; :::; ik 0; j 0; j 0; :::; jk 0;
(iii) i + i + ::: + ik = n n;
(iv) j + j + ::: + jk = n:
Pentru calcularea numarului de pasi ai derivarii (1), consideram sirul recurent an ,
astfel:
a =1
an = an + (n 1) + 2:
n
1)
(2
1)
+13
24
satisface proprietatile:
(i') 0 = As1 B t1 ::: As B t ;
(ii') s 2; s 0; :::; sh 0; t 0; t 0; :::; th 0;
(iii') s + s + ::: + sh = (n + 1) (n + 1);
(iv') t + t + ::: + th = n + 1:
Din pasul inductiv, avem:
S =a) Ai1 B j1 Ai2 B j2 ::: Ai B j =) X Ai1 B j1 Ai2 B j2 ::: Ai B j
h
G
s
1
A B t1 As2 B t2 ::: Ash B th
(4)
G
(7)
1
X =) As1 B t1 As2 B t2 ::: Ash B th
G
; ;
G
=)
(5) (6) +
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
20
Generari de limbaje
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 =
(n + 1) (n + 1);
(iv') t + t + ::: + th = j + j + :::jk + 1 = n + 1:
Cu aceasta, prima incluziune este demonstrata.
1
: Vom arata ca singurele cuvinte terminale generate de G sunt de forma an2 ; n
0:
21
Generari de limbaje
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 dispare"
cu regula 7 si obtinem A2 B A B , care folosind regulile 8; 9 obtinem
2
an , adica cuv^ant de forma an ; pentru n = 3.
Deci putem spune ca ^n cazul c^and se aplica doar regulile 3; 4; 5; 6; 7 forma
propozitionala care contine cel mult un X este
X cu ; 2 fA; B g :
Pentru deducerea formei generale a cuvintelor terminale generate de G; sa observam
ca simbolul neterminal X \trece peste" simbolurile A, iar c^and ^nt^alneste un B va
introduce ^nca 2 simboluri A si va \trece peste" B: La sf^arsit, c^and X ^nt^alneste ,
se ^nlocuieste X cu B: Astfel, daca notam cu N (A); respectiv N (B ), numarul de
aparitii ale simbolurilor neterminale A; respectiv B; ^n forma propozitionala care
nu contine X . Fie forma propozitionala care s-a obtinut din prin introducerea la
^nceput a unui simbol X (cu regula 4), parcurgerea simbolurilor A si B cu regulile 5
si 6 si \disparitia" lui X cu regula 7: Atunci obtinem:
N (A) = N (A) + 2 N (B ) si N (B ) = N (B ) + 1
Cum la ^nceput (pentru forma propozitionala = A A B B ) avem N (A) = 2 si
N = 2 se demonstreaza usor prin inductie dupa n ca N (A) = n n; N (B ) = n:
Astfel, forma generala a cuvintelor care contin numai simboluri ; A; B este de
forma
; unde 2 fA; B g ; N (A) = n n; N (B ) = n:
2
De aici rezulta, utiliz^and regulile 8 si 9, cuv^antul an :
Astfel am demonstrat si cealalta incluziune.
4
f= S =) ; 2 fA; B g g f A n
2(
1)
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
2g [ f ; a g:
(
gn
2)+ (
2)
= 8 n
22
Generari de limbaje
(1)
(6)
(7)
(1)
(2)
i i C =) i i
(4)
(6)
(7)
i i A i Yi2 C =)
G
i i i i
(4)
; ;
=) i A B i C =) i i A Yi2 i C =)
G
G
G
i i A i B i C =) i i A B i i C =) i i i i C =)
(2)
(5)
(6)
(3)
(7)
23
Generari de limbaje
;n
=) i i ::: ik ik A Yi +1 i i ::: ik C =)
G
G
(2)
(3)
+1
;n
=) i i ::: ik ik A i i ::: ik Yi +1 C =)
G
G
(3)
(4)
+1
;n
G
=) i i ::: ik ik A i i ::: ik B ik C =)
(4)
(5)
;n
+1
+1
=) i i ::: ik ik A B i i ::: ik ik C:
G
Armatia (1) este acum complet demonstrata. Daca se continua derivarea cu
regulile 6 si 7 rezulta tocmai incluziunea \".
Sa determinam numarul de pasi pentru derivarea din armatia (1): Notam cu
ak ; k 1 acest numar. Este imediata recurenta:
a = 3;
ak = ak + 2k + 2:
(5)
+1
+1
+1
Aici singurele cuvinte se refera la primul cuv^ant terminal care se obtine, respectiv la prima forma propozitionala care \seamana" cu cea de la care am pornit
(forma generala).
24
Am vazut ca aplicarea regulii 7 implica aplicarea regulii 6 (daca este posibil),
conduc^and la w w, sau conduce la blocaj.
Astfel, am demonstrat si cealalta incluziune. Cu aceasta, solutia Exercitiului 1.2.7
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 neterminali 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 genera w a A B w a C; a 2 f0; 1g parcurgem urmatorii pasi:
trebuie sa parcurgem cu acest Ya subcuv^antul w; ne oprim c^and ^nt^alnim marcatorul 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 marcator 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 :
25
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.6 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bm cn = m; n 1g:
b x c j g).
! a x j b x c; x !
0
26
Exercitiul 1.3.8 Sa se gaseasca o gramatica (de preferat, de tip 2) care genereaza
limbajul L = fan bn cm = n; m 1g:
a x b j a bg).
! x c j x c; x !
0
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:
Exercitiul 1.3.11 Sa se gaseasca o gramatica (de tip c^at mai mare) care sa genereze
limbajul L = fan w=n 1; w 2 fb; cg ; jwj = 2ng:
+
b b j b c j c b j c cg).
! ax x jax ; x !
0
f+; ; (; ); ag:
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:
1: X
! X X ; 2: X ! a X b j :
1
Exercitiul 1.3.15 Sa se gaseasca o gramatica (de tip 2) care sa genereze limbajul
L = fan bn k ck = n; k 0g:
+
! X X ; 2: X ! a X b j ; 3: X ! b X c j :
Exercitiul 1.3.16 Fie gramatica G = (fS g; f(; )g; S; P ) cu regulile P :
1. S ! S S
2. S ! ( S )
3. S !
P sunt: 1: X
Sa se arate ca aceasta gramatica genereaza limbajul L al expresiilor corect parantetizate, adica L este dat de acele cuvinte w 2 f(; )g care satisfac:
pentru orice prex w0 al lui w avem ca numarul de paranteze st^angi din w0 este
mai mare sau egal dec^at numarul de paranteze drepte ale lui w0 ;
numarul de paranteze st^angi ale lui w este egal cu numarul de paranteze drepte
ale lui w:
!
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:
A ! aABc
A ! abc
cB ! Bc
bB ! bb
X ! aX X X
X ! abX
X X !X X
bX ! bb
X !c
0
A ! abc
A ! aAbc
A ! abX
cB ! Bc
X B ! bX
X c ! cc
S ! abc
A ! AaX
X a ! aX
X b ! bbY
Y b ! bY
Y c ! cc
A!a
S ! abc
S ! Ac
A ! aAB
A ! abX
X B ! bX Y
Y B !BY
Y c ! cc
Xc!c
28
29
(b)
(c)
(d)
(e)
(f)
(g)
(h)
A ! abC
CB !EB
EB !EF
EF !BF
BF !BC
C !c
bB ! bbc
~
X !X Y
X ! aX c
X c ! X cZ
aX ! abX
X c ! cX
X Z c ! X cZ
cX ! X c
bX ! bbX
X ZY !
0
2
2
regulile P :
A ! aAB
A ! aX bc
X !Xd
X!d
bB ! bbc
cB ! Bc
1g;
30
+1
+1
+ +2
+1
+1
+1
+1
retinem ca aceasta gramatica este mai redusa dec^at prima (^n plus, este si \determinista").
L = fan bm an bm = m; n 1g:
! A b; A !
31
7: X a ! a a X
8: X a ! a X
9: X b ! b b
2
L = fai bi ci k = i 1; k x; k 0g:
L = fan bn cm = m; n 1; n m 2 ng:
L = fai bj ck = i; j; k 1; i 6= j 6= k 6= ig:
L=L
unde:
L
L
L
L
L
L
1
2
[L [L [L [L [L ;
32
Demonstratia egalitatii L(G) = L este imediata daca se tine seama de ^mpartirea lui
L ^n cele sase parti si de constructia gramaticilor Gi ; astfel ^nc^at L(Gi ) = Li ; i = 1; 6;
dupa cum urmeaza (pentru simplitate, vom scrie doar numarul regulii):
G
G
G
G
G
G
Exercitiul 1.3.28 Sa se arate ca gramatica G = (fS; D; Lg; fag; S; P ); unde regulile 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
33
6. X Ak
7. Aj
{z
de Cj1 ori
{z
de Cji ori
de Ck1 ori
! a; 8 j = 0; k:
de Cki ori
! Se observa ca sunt 2k + 6 reguli si k + 3 neterminali, deci avem O(k) reguli si
O(k) neterminali.
+1
= n 0g;
34
8 i = 0; k
1;
! Se observa ca sunt 2k + 5 reguli si k + 3 neterminali, deci avem O(k) reguli si
O(k) neterminali.
)+
35
Exercitiul 1.3.37 Fie (an )n sirul lui Fibonnacci . Sa se gaseasca o gramatica
care genereaza limbajul L = f aa =n 0g:
A A ::: A X B B ::: B Y
+2
+1
de an ori
de an+1 ori
{z
de an+2 ori
de an+1 ori
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 !
=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
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
^In rezolvarea problemelor de generari de limbaje (innite) de catre gramatici
(L(G) = M ), se recomanda urmatoarea metodologie:
incluziunea este, ^n general, simpla deoarece necesita punerea ^n evidenta
a unei derivari care conduce la cuv^antul de forma generala din multimea M ;
demonstratia se face prin inductie dupa un parametru ce depinde de forma generala a cuvintelor din M; care uneori coincide cu lungimea derivarii (Exercitiul
1.2.1);
incluziunea se poate demonstra ^n doua moduri: arat^and ca singurele cuvinte
generate de G sunt cele din M sau, mai formal, folosind invarianti raportati la
formele propozitionale; demonstratia acestor invarianti se face prin inductie
dupa lungimea derivarii sau dupa un parametru ce depinde de gramatica G
(Exercitiul 1.2.3).
Capitolul 2
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
! S; numim
8 w 2 ; a 2
(Exercitiul 2.10.1);
Pentru simplitatea notatiei, b se noteaza tot cu (aceasta notatie este justicata
si de faptul ca b(s; a) = (s; a); 8 s 2 S; 8 a 2 ).
38
39
Introducere
Notatia 2.1.1 ^In reprezentarea unui automat nit cu ajutorul grafului de tranzitie,
\cercul" ce deneste starea initiala sa aiba o \sageata" care atinge cercul;
\cercurile" starilor nale sa e dublate de ^nca un cerc concentric (pentru exemplicare, consultati Exercitiul 2.1.1).
Exercitiul 2.1.1 Fie automatul dat prin graful de tranzitie (sau, echivalent, prin
tabela de tranzitie):
#
Z~#
"!
"!
SoS
7
S
SS
#
S
/
"!
b
Exercitiul 2.1.2 Sa se construiasca un automat nit determinist care sa accepte
limbajul L = fa b cn = n 1g:
2
Solutie
Introducere
40
----
? +
sR
Rs
a; b
a; c
a; c
b; c
a; b
a; b; c
{ daca first(w ) = a sau first(w ) = c atunci ajungem ^n starea s si deci
w 2= L(A); contradictie;
{ daca first(w ) = b atunci w = b w deci (s ; w ) = ((s ; b); w ) =
(s ; w ): Acum distingem situatiile:
daca first(w ) = a sau first(w ) = c atunci ajungem ^n starea s si
deci w 2= L(A); contradictie;
daca first(w ) = b atunci w = b w deci (s ; w ) = ((s ; b); w ) =
(s ; w ): Acum distingem situatiile:
daca first(w ) = a sau first(w ) = b atunci ajungem ^n starea s
si deci w 2= L(A); contradictie;
daca first(w ) = c atunci w = c w deci (s ; w ) =
((s ; c); w ) = (s ; w ): ^In aceasta stare (s ), putem citi oric^ate
simboluri c, iar daca apare a; b ajungem ^n starea s si neind nala, cuv^antul nu este acceptat. Asadar w = cm ; unde m 0
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
N ; n = m + 1 astfel ^nc^at w = a b cn :
Cu aceasta, ambele incluziuni sunt demonstrate, deci are loc relatia L(A) = L:
1
41
Sumatorul binar
Exercitiul 2.2.1 Fie doua numere arbitrare (dar cu acelasi numar de cifre) reprezen-
Solutie a) Tin^and cont de indicatiile precedente exercitiului nostru, denim automatul A = (B; B; ; (0; 0); B ); unde B = f(0; 0); (0; 1); (1; 0); (1; 1)g (sau f0; 1g
f0; 1g; sau f0; 1g ). ^Inainte de a deni functia ; sa facem c^ateva notatii:
2
sn
in
sn = (sn ; in )
Sn Rn an bn Sn
Rn
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
+1
+1
+1
42
Sumatorul binar
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):
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.
+1
+1
sn nin
(0,0)
(0,1)
(1,0)
(1,1)
(0,0)
(0,0)
(1,0)
(0,0)
(1,0)
(0,1)
(1,0)
(0,1)
(1,0)
(0,1)
(1,0)
(1,0)
(0,1)
(1,0)
(0,1)
(1,1)
(0,1)
(1,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
43
Sumatorul binar
#?
~
"!
6
(0; 0)
(0; 1);
(1; 0)
(1; 1)
(0; 0)
(0; 1)
(0; 0)
(0; 0)
#
"!
6
#
?
"!
#
?
"!
(1; 1)
(1; 0)
(1; 1)
(0; 1);
(1; 0)
(1; 1)
(0; 0)
+1
Sn
+1
+1
(2)
+1
+1
(2)
44
a+b=
+1
+1
Rn Sn Sn :::S S S
Sn Sn :::S S S
+1
+1
+1
1 (2)
1 (2)
daca Rn
daca Rn
+1
+1
6= 0
=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:
2.3 Relatiile
A;s
si L
!
L
! f0; 1g
Relatia L se mai numeste si relatia lui Nerode, dupa numele celui ce a denit-o;
Se observa imediat ca A;s0
45
{ Subcazul I.1: u =
k 0; v 2 I ; de unde p = i i ik v 2 I i i I
deci p 2 M ;
{ Subcazul I.2: u = ik il v; k 0; l 1; v 2 I ; de unde p = ik i i il v 2
I i i I ; deci, si ^n ultimul caz, avem p 2 M :
Cazul II: p 2 fi g fi g i I adica p = ik il i u; cu k; l 1: Grupam convenabil
si obtinem: p = ik il i i u 2 I i i I :
ik v;
2 2
2 1
2
1
1 2
1 2 1
sau
Cazul I: p
p2M :
2 fi g
2
adica p = ik ; k
2
1: Scriem p = i ik 2 i I M ; deci
1
2 2
1 2 1 1
1
+1
1
1 2
1 2
1 2 1
1 2 1
1 2 1
1 2 1
^In concluzie, M = M :
1
i ;i
?
s
-
46
?
Y
s
Solutie a) Pentru a determina limbajul L(A); parcurgem acest graf de tranzitie din
starea initiala s si p^ana ^n starea s ; ind singura nala, retin^and etichetele arcelor
prin care trecem.
Daca u = i v atunci (s ; i v) = s ; 8 v 2 fi ; i g : Cum s 2= F atunci cuvintele
din limbajul L(A) nu ^ncep cu i : Starea s se mai numeste stare de blocare .
Deci u = i v: Sa vedem unde \mergem" cu alte simboluri. Deocamdata suntem ^n
starea s ; deoarece (s ; i ) = s : ^In starea s putem, eventual, \sta citind" simbolul
i sau \mergem" direct ^n starea s : Deci v = ik i v ; k 0: Din aceasta stare s
putem citi i de oric^ate ori sau \mergem" cu simbolul i ^n starea s si ne-am blocat.
Deci, cum s este stare nala, cuvintele v care vor genera u 2 L(A); sunt de forma
v = il ; l 0: Astfel, am demonstrat ca singurele cuvinte acceptate de A sunt de
forma ik il ; l; k 1: Asadar, L(A) = fik il = l; k 1g:
b) Facem notatia [si ] 0 = fp=p 2 ; (s ; p) = si g; unde si 2 S (uneori, se mai
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
1 2
1 2
1 2
A;s
A;s
A;s
A;s
A;s
A;s
[s ]
[s ]
[s ]
1
47
g ;
0 = fp= (s ; p) = s g = fi g fi g ;
0 = fp= (s ; p) = s g = fi g fi g i I [ i I :
A;s
= fp=(s ; p) = s g = fi
0
A;s
A;s
E clar ca j =A;s0 j = jS j; adica cardinalul multimii c^at este egal cu numarul
starilor automatului A:
A;s
2 1
2 1
1 2
1 2
1 2
2 1
1 2
1 2
2 1
2 1
2 1
1 2
2 1
1 2
2 1
1 2
1 2
48
2 fg;
{ 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
doar ca prin alegerea lui r = i se obtine contradictie;
{ Subcazul II.2: q 2 fi g fi g adica q = il im ; l; m 1: Avem relatia
L (ik r) = L (il im r); 8 r 2 : Se alege r = si se obtine contradictia;
{ Subcazul II.3: q 2 fi g [ I i i I ; distingem situatiile:
q 2 fi g adica q = il ; l 1: Avem relatia L (ik r) = L (il r):
Contradictia se obtine pentru r = i ; (sau, mai general, r = im; m
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:
1
1 2
1 2
2 1
2 1
2 1
2 1
Deci q 2 fi
1 2
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
sa procedam prin reducere la absurd;
Cazul IV: p 2 fi g [ I i i I : Asemanator cu cazurile I, II si III (baz^andu-ne
pe simetrie), va rezulta ca q 2 fi g [ I i i I :
1
2 1
2 1
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)
?
?+
6
?
?
j
- o
-
49
0; 1
A;s
A;s
A;s
A;s
A;s
+
A;s
50
Cazul I: Fie p
3
A;s
A;s
A;s
A;s
A;s
A;s
2 [s ]
2
A;s
L (p r) = L (q r);
(1)
1:
A;s
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,
deoarece F ((s ; p)) = F (s ) = 0 si F ((s ; q)) = F (s ) = 0; deci
(p; q) 2 L: Cazul r = 0k ; k 0 se face analog cu cazul r = 0k 1 : De
aceea, pentru simplitate, vom considera doar cazul r = 0k 1 : Dupa cum
k este 0 sau strict pozitiv, distingem subcazurile:
I.1.1: k = 0: Avem (s ; p 1 ) = ((s ; p); 1 ) = (s ; 1 ) =
((s ; 1); ) = (s ; ) si (s ; q 1 ) = ((s ; q); 1 ) = (s ; 1 ) =
((s ; 1); ) = (s ; ): Cum s ; s 2 F rezulta ca pentru =
avem F ((s ; p 1)) = F ((s ; q 1)) deci p r 2 L si q r 2 L: Acum vom
demonstra urmatoarea armatie prin inductie dupa jj = m 1:
1
(s ; ) = (s ; ); 8 2 :
(2)
2 +1
2 +1
A;s
51
!
A;s
A;s
A;s
A;
8 y 2 B:
(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:
4
() 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 ]
3
A;s
A;s
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 ]:
[s ]
[s ]
3
[s ]
[s ]
1
[s ]
5
[s ]
6
C
C [ C [ C = ; L = C ;
3
L=C
[C
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
corespunzatoare claselor [s ] si [s ]; clasa C cuprinde sectoarele discului corespunzatoare claselor [s ]; [s ] si [s ]; si clasa C cuprinde sectorul corespunzator clasei
[s ]:
1
Cele trei clase de echivalenta ale relatiei L se pot acum formula astfel:
x2C
x2C
x2C
52
daca x nu contine 1;
Mai precis, cele trei clase de echivalenta relative la relatia L ; se pot exprima
astfel:
C
C
C
3
= [s ] [ [s ] = f(00) 0; (00)g = 0 ;
= [s ] [ [s ] [ [s ] = L = f010g;
1
= [ s ] =
C = f0101 g:
2
2 L ()
?
?
C
(p; q) 2 L
53
L L
[j
[j
A A;s0
^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 :
k < k + l j < (k + 1) :
2
54
Denitia 2.4.2 Automatul nit determinist A este minimal daca nu exista un alt
automat nit determinist A0 cu mai putine stari dec^at A astfel ^nc^at L(A) = L(A0 ):
Denitia 2.4.3 Fie A un automat nit determinist. Spunem ca A este redus daca
nu are stari inaccesibile.
Asadar, e urmatoarele doua probleme:
Problema (P1):
Problema (P2):
Problema determinarii starilor accesibile este echivalenta cu problema determinarii componentei conexe corespunzatoare starii initiale ^ntr-un graf orientat. De fapt, pentru rezolvarea acestei probleme, nu conteaza daca arcele sunt
etichetate sau nu;
02
2
8 s 2 S ; i 2 ;
1
01
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
+1
55
:::
j +1
::: S:
Din (i); deoarece sirul de incluziuni este innit, si S este multime nita, rezulta ca
exista un indice k pentru care
(ii)
= k :
+1
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 j;
+
8 j 1:
+1
+1
+1
(iv)
s accesibila () s 2 k :
p 2 astfel ^nc^at (s ; p) = s: Vom proceda prin
+1
(v)
s 2 i =) s este accesibila ;
8 i 0:
+1
56
Algoritmul (ALG1):
begin
i := 0;
:= fs g;
repeat
i := i + 1;
i := i [ ( i ; )
until ( i = i ) or ( i = S );
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].
0
^In continuare, vom vorbi despre solutia celei de-a doua probleme, adica despre automatul 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 polinomial pentru deducerea automatului minimal.
!
Se observa ca =
1 k
T
k=0
:
Urmatoarele doua rezultate sunt importante ^n demonstrarea corectitudinii si nititudinii algoritmului pe care^l vom prezenta (pentru demonstratia lor, puteti consulta
[7, 9, 10, 11]).
57
k s () s k s
1
1
(s ; i); 8 i 2 :
determinist A are jS j = n
si (s1 ; i)
2S
stari, atunci
Algoritmul (ALG2):
begin
= fF; S F g;
i := 0;
repeat
i := i + 1;
i
calculeaza (folosind Lema 2.4.1)
i i
until (= ) or (i = n 2);
end
Complexitatea timp (una grosiera) a algoritmului precedent este de O(n m); unde
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
A sau [1]. Varianta implementata acolo este ^mbunatatita, av^and O(n m) operatii.
0
-
q
>
6 ~
N
U
K
-
U
0
0; 1
58
fs ; s ; s g; fs ; s ; s ; s g
3
2
3
Cazul I.1: e perechea fs3 ; s4 g; avem fs3 ; s4 g 2 si (s3 ; 0) = s5 si (s4 ; 0) = s5 ;
0
2
si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s s si s s ,
deci fs ; s g 2;
5
Cazul I.3: pentru perechea fs4 ; s5 g se poate proceda la fel sau, mai elegant,
k
59
2
4
2
si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s s si s s ,
deci fs ; s g 2;
1
2 si (s ; 0)
(s ; 0) = s : Nu mai continuam deoarece s
6 s : Deci fs ; s g 62;
= s si
2
si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s s si s s ,
deci fs ; s g 2;
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 absurd, ca fs ; s g 2 : Utiliz^and cazul II.1, rezulta ca fs ; s g 2; ceea ce este
o contradictie cu cazul II.2. Asadar, fs ; s g 62;
0
Cazul II.5: pentru perechea fs1 ; s6 g: Din cazurile II.1 si II.3, rezulta fs1 ; s6 g 2;
Cazul II.6: pentru perechea fs2 ; s6 g: Din cazurile II.4 si II.5, rezulta fs2 ; s6 g 62;
fs ; s ; s g; fs g; fs ; s ; s g:
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
1)
subcazuri, ^n loc de Cn2 = 2 : Acest lucru rezulta imediat din proprietatile relatiei
60
; obtinem fs ; s ; s g 2 :
1
Cazul II: ^In ceea ce priveste clasa fs0 ; s1 ; s6 g; ^n mod asemanator cu cazul II de
fs ; s g; fs g:
0
^In mod analog, se calculeaza si se observa ca = : Conform Teoremei 2.4.1 si
Lemei 2.4.1, rezulta ca relatia are urmatoarele clase de echivalenta:
3
fs ; s g; fs g; fs g; fs ; s ; s g:
0
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
este dat prin urmatorul graf de tranzitie:
R
1
[s ]
- [s ]
0
[s ]
?
s
3
[s ]
0; 1
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
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 +
00)f1; 0g g:
! Exercitiul 2.4.1 re
ecta un exemplu de automat minimal care are doar jumatate
A ;s
61
cel putin un drum ^n A din s0 catre s). Denitia pentru inaccesibilitate este aceeasi
cu cea pentru automate nite deterministe.
62
const
{ n = 8;
{ m = 256;
type
var
63
2. (si ; b) = fsi+1 g;
8 i = 1; n
8 i = 1; n
1;
1;
Solutie
Starea s este stare initiala pentru automatul A si deci multimea
este stare initiala pentru automatul nedeterminist A0 . Deoarece Algoritmul
(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 )
f;g; fa; bg; 0; fs g; F 0), unde 0 si F 0 pot ram^ane neprecizate (0 (fsi1 ; :::; si g; a) =
fs ; si1 ; :::; si g si 0 (fsi1 ; :::; si g; b) = fsi1 ; :::; si g pentru k = 1; n 1, iar
F 0 = fS 0 = S 0 fs ; s ; :::; sn g; F \ S 0 6= ;g). ^In continuare, vom demonstra prin
inductie dupa k; k = 1; n ca:
(1) \La nivelul m se genereaza toate submultimile ce contin starea sm ."
Pasul initial: Pentru m = 1 armatia (1) este imediata.
Pasul inductiv: Presupunem armatia (1) adevarata pentru m = k , sa o demonstram
pentru m = k + 1: Conform ipotezei inductive, toate submultimile de pe nivelul k
contin starea sk : Atunci conform denirii lui din automatul A; deoarece sk 2
(sk ; a) si sk 2 (sk ; b), rezulta ca sk apartine oricarei submultimi de stari de pe
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:
s 2 S : Atunci S are forma:
1
fs g
1
+1
k +1
+1
k +1
+1
+1
+1
+1
+1
+1
g;
64
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
se a
a pe nivelul k + 1:
1
s 2= S : Deci
1
+1
g; 2 j k; si 6= s ; 8 l = 2; j:
l
Deci, pe nivelul 1 avem Cn stari, pe nivelul 2 avem Cn stari, ..., pe nivelul n avem
Cnn stari. ^In total se obtin Cn + Cn + ::: + Cnn = 2n 1 stari, deci un numar
exponential.
Cu aceasta, solutia Exercitiului 2.5.1 s-a ^ncheiat.
0
Exercitiul 2.5.2 Fie automatul nedeterminist A = (fq1 ; q2 ; q3 g; fa; bg; ; q1; fq2 ; q3 g)
cu dat prin graful de tranzitie:
#
#
6
"!
7 "!
SoS
S
SS
S#/
"!
a
Z~
a; b
a; b
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 g
1
fq g fq ; q g fq g
Avem (fq g; a) = fq ; q g si (fq g; b) = fq g. Apoi
1
65
fq g fq ; q g fq g fq ; q ; q g fq ; q g
Avem (fq ; q g; a) = fq ; q ; q g si (fq ; q g; b) = fq ; q g.
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
Avem (fq g; a) = fq ; q g si (fq g; b) = fq g.
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
Avem (fq ; q ; q g; a) = fq ; q ; q g si (fq ; q ; q g; b) = fq ; q ; q g. Reamintim ca
1
g fq ; q g fq g
Avem (fq ; q g; a) = fq ; q g si (fq ; q g; b) = fq ; q g.
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g
Avem (fq ; q g; a) = fq ; q ; q g si (fq ; q g; b) = fq ; q g.
fq g fq ; q g fq g fq ; q ; q g fq ; q g fq ; q g fq g stop
Avem (fq g; a) = fq ; q g si (fq g; b) = fq g.
Redenumind, eventual, aceste stari (de exemplu s = fq g; s = fq ; q g s.a.m.d.),
1
s
s
s
s
s
s
s
2
3
4
5
6
7
a
s
s
s
s
s
s
s
2
4
6
4
6
4
5
b
s
s
s
s
s
s
s
3
5
7
4
6
2
1
66
U
U
W
q
0; 1
~
!
67
Denitia 2.6.3 Fie G = (VN ; VT ; x ; P ) o gramatica de tip 3: Spunem ca G este ^n
forma normala standard daca regulile sale sunt de forma:
x ! a x0 ; x; x0 2 VN ; a 2 VT ;
0
x ! a; x 2 VN ; a 2 VT ;
x ! , caz ^n care x nu mai apare ^n partea dreapta a vreunei reguli.
Exercitiul 2.6.2 Fie gramatica (de tip 3) G = (fx ; x g; fa; bg; x ; P ) unde regulile
0
P sunt:
1. x
2. x
3. x
5.
!x
! abx
! ax
x ! ba
x !
1
4.
+1
+1
+1
68
Cazul I: 2
= L(G):
{ Subcazul II.1: daca x nu apare ^n partea dreapta a vreunei reguli, atunci
la regulile din cazul I se adauga regula x ! ;
{ Subcazul II.2: ^n caz contrar, se va considera un nou neterminal (care va
simbol de start) x0 si la regulile din cazul I se adauga regulile x0 !
; x0 ! x :
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. x
2. x
3. x
4. x
5. x
6. x
7. x
!x
!
! abx
! ab
! ax
!a
! ba
2
P
P
21
22
21
22
= fx ! r=x ! r 2 P ; r 2= VN g;
1
= fx ! w=x =) y; y ! w 2 P ; w 2= VN ; x; y 2 VN g.
+
G1
1. x
2. x
3. x
4. x
5. x
6. x
7. x
8. x
9. x
69
!
! abx
! ab
! ax
!a
! ba
! ax
!a
! ba
1: x ! p x
1
2: x
!p x
2
...
n: xn
! pn x0
unde x ; x ; :::; xn
1
Utiliz^and acest procedeu, obtinem gramatica G echivalenta si ^n forma normala:
3
1. x
2. x
3. x
4. x
5. x
6. x
7. x
8. x
!
! ax
! bx
! ax
!b
! ax
!a
! bx
70
9. x
10. x
11. x
12. x
13. x
!a
! ax
!a
! bx
!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 .
d) Astfel, am construit o gramatica echivalenta (G ) care este ^n forma normala.
Acum construim un automat nit (ne)determinist A astfel ^nc^at L(A) = L(G ):
6
daca x ! 2 P
altfel.
Notam cu VN = fx ; x ; :::; xn g; = VT = fi ; i ; :::; im g; Sjk = fxh =xj
ik xh 2 P g: Pentru denirea functiei de tranzitie, vom construi tabelul:
unde F =
fx; x g
fxg
0
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
x
x
x
x
x
x
y
2
3
4
5
fx ; x ; x ; xg fx g
fx ; xg
fyg
fy g
fx ; x g
fy g
fxg
fxg
fyg
fxg
fyg
fy g
fyg
fy g
fyg
2
71
8 i 0:
Exercitiul 2.7.1 Folosind Lema de pompare Bar-Hillel, sa se arate ca limbajul L =
Solutie Presupunem prin reducere la absurd ca L este regulat. Conform Lemei
lui Bar-Hillel, avem ca exista k 2 N astfel ^nc^at pentru orice w; jwj k sa avem
descompunerea (factorizarea) w = x y z care satisface:
a) 0 < jyj k;
b) x yi z 2 L;
8 i 0:
Cazul I:
y=am z=an
bn
Faptul ca m > 0 rezulta din conditia (i) a Lemei Bar-Hillel. Lu^and i = 0 ^n
conditia (ii) din Lema Bar-Hillel, obtinem an m bn 2 L, ceea ce reprezinta o
contradictie, deoarece m > 0;
Cazul II:
y=an l bm
z=bn
{ 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:
72
Cazul III:
y=bl z=bn
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.
L(G) 6= ;
Solutie
((=) Daca w 2 L(G) atunci este clar ca L(G) 6= ;:
(=)) Stim ca L(G) 6= ;, deci exista w 2 L(G).
Pasul 1. Daca jwj < k; atunci w are aceasta proprietate;
2 VT astfel
x yi z
Deoarece jyj > 0 rezulta, ca la ecare pas, lungimea lui w scade cu cel putin o
unitate. Astfel, dupa un numar nit de pasi (cel mult jwj k + 1 pasi), obtinem ca
exista w 2 L(G) astfel ^nc^at jwj < k:
Acest procedeu se poate descrie (mai clar) folosind urmatoarea procedura:
Intrare: L limbaj regulat, k 2 N, w 2 L(G);
Iesire: w0 2 L(G) astfel ^nc^at jw0 j < k;
Metoda:
begin
while jwj k do begin
e x; y; z 2 VT (Lema Bar-Hillel) astfel ^nc^at w = x y z; 0 < jyj k;
w := x z ;
endwhile;
w0 := w;
end .
73
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 + ::: +
jVT jk = jjVV jj cuvinte). Deci exista w 2 L(G); astfel ^nc^at jwj k: Procedam
acum ca ^n Exercitiul 2.7.2.
2
Pasul 2. Daca jwj 2k; aplicam Lema Bar-Hillel, deci exista x; y; z astfel ^nc^at
Cum jyj > 0, rezulta ca pasul 2 se executa de un numar nit de ori (de cel mult
jwj k + 1 ori). La fel ca la exercitiul precedent, putem da rezolvarea sub forma unei
proceduri:
Intrare: L limbaj regulat, innit, k 2 N; w 2 L(G); jwj k;
Iesire: w0 2 L(G); k jw0 j < 2k;
Metoda:
begin
while jwj 2k do begin
e x; y; z (din Lema de pompare) astfel ^nc^at w = x y z; 0 < jyj k;
w = x z;
end ;
w0 := w;
end .
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
Multimea ff (j + 1) f (j )=f (j ) < kg este nita pentru ca exista m 2 N astfel
^nc^at f (m +1) f (m ) > k: De aici deducem ca f (m +1) > k: Deci f (t) > k pentru
t m + 1 (deoarece f este crescatoare). Exista de asemenea un m 2 N astfel ^nc^at
f (m + 1) f (m) > maxf; kg.
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
astfel ^nc^at af m = x y z; 0 < jyj k si x yi z 2 L; 8 i 2 N:
( )
74
Sisteme tranzitionale
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)).
Contradictie cu relatia (1). Ram^ane deci ca limbajul L nu este regulat.
(
+1)
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
(s) = fs0=s ;
! s0 g. Extinderea lui la submultimi este imediata:
Daca S 0 S; atunci (S 0 ) = f(s)=s 2 S 0 g:
b(s; ) = (s); 8 s 2 S ;
75
Sisteme tranzitionale
Observatia 2.8.1 Este clar ca R LT (LT reprezinta multimea limbajelor acceptate
n
(s ) \ F 6= ;;
F 0 = FF [ fs g contrar.
0
s
s
s
s
s
2
3
4
fs ; s g
fs g fs ; s g
;
fs ; s g fs g
;
;
;
fs g
;
;
fs g
4
5
4
Folosind constructia din teorema precedenta si Denitia 2.8.3, sa se determine
automatul nit nedeterminist echivalent cu T:
Solutie
8 s 2 S: Astfel:
76
Sisteme tranzitionale
(s
(s
(s
(s
(s
) = fs ; s ; s g ;
1
) = fs g;
2
) = fs g;
3
) = fs ; s g;
4
) = fs ; s g;
4
8 Sa 2 :
s2 s1
(s ) [ (s ) = fs ; s ; s g: ^In concluzie, avem b(s ; a) = fs ; s ; s g: Analog, se deduc
si celelalte tranzitii:
2
b(s ; a) = (s ) = fs ; s g;
2
b(s ; b) = (fs ; s g) = fs ; s ; s g;
2
b(s ; a) = (fs ; s g) = fs ; s ; s g;
3
b(s ; b) = (s ) = fs ; s g;
3
3
4
fs ; s ; s g
fs ; s ; s g
fs ; s g
;
;
3
5
5
^In aceasta sectiune, ne propunem sa descriem un algoritm ecient care determina
automatul nit nedeterminist echivalent cu un sistem tranzitional.
^In acest sens, consideram, ca structura de date, pentru reprezentarea sistemului
tranzitional, o matrice = (ij ) i;jjSj ; ij [ fg cu semantica
a 2 ij () sj 2 (si ; a); 8 a 2 [ fg:
1
77
Sisteme tranzitionale
Exemplul 2.8.1 Pentru sistemul tranzitional din Exercitiul 2.8.1, matricea este:
0
=
B
B
B
B
@
;
;
;
;
;
fg
;
fag
;
;
fg
fbg
;
;
;
;
fbg
fbg
fg
;
fag
fag
;
fg
1
C
C
C
C
A
ij0 = ij [ ij ;
1
compunerea: e
1
= (ij0 ); i; j = 1; jS j astfel:
ij0 =
iar legea \" se deneste astfel:
jSj
[
ik kj ;
1
k=1
8
>
<
1
2
1
[A
daca
daca
daca
daca
2= A
2A
2A
2A
1
2
1
1
= ;
a = a = a;
a b = ;;
8 a 2 ;
8 a; b 2 ;
; a = a ; = ;; 8 a 2 ;
; = ; = ;:
e
n=1
n > 1.
0
B
e 2+
e ::: si = In +
e + , unde In = B
Notam + = +
@
; : : ;
; : : ;
:
: : : :
; ; : :
1
C
C:
A
[A
A
A
\A
1
2
78
Sisteme tranzitionale
Exemplul 2.8.2 Fie din Exemplul 2.8.1. Vom calcula, pe r^and, puterile acestei
matrice.
=
2
B
B
B
B
@
;
;
;
;
;
Apoi, avem
= e =
3
fag
;
;
;
;
fbg
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
B
B
B
B
@
0
B
B
= e = B
B
4
@
0
= e =
5
e 2 +
e 3 +
e 4 +
e 5
+
B
B
B
B
@
B
B
B
B
@
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
fag
fbg
fbg
fg
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
fb g
fag
fag
;
fg
fag
fbg
fbg
fg
;
fbg
fag
fag
;
fg
fbg
fag
fag
;
fg
1
C
C
C
C
A
fag
fbg
fbg
fg
;
fbg
fag
fag
;
fg
fag
fbg
fbg
fg
;
1
C
C
C
C
A
1
C
C
C
C
A
1
C
C
C
C
A
1
C
C
C
C
A
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).
e
e
e
e
Exemplul 2.8.3 Pentru din Exemplul 2.8.1, not^and B = +
+
+
+
,
2
obtinem:
B =
B
B
B
B
@
;
;
;
;
;
fag
;
fag
;
;
1
C
C
C
C
A
79
Sisteme tranzitionale
^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;
Iesire: A automat nit nedeterminist echivalent cu T ;
Metoda:
1) e matricea ce reprezinta T ;
2) calculam i ; 8 i = 1; n;
e
e :::+
e n;
3) calculam B = +
+
4) calculam B .
0
(ii) Fie k arbitrar, k = 1; n: Daca notam k = (ijk )1i;j jS j , atunci, ^n automatul
A (reprezentat cu k ), din starea si p^ana la sj , exista un drum de lungime k
etichetat cu ijk [ fg;
(iii) + = B este reprezentarea automatului nit nedeterminist echivalent cu T:
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
e
e :::+
e n = B;
jS j = n: Asadar = +
+
(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
ijm
+1
jSj
[
k=1
m
ik
kj
| {z }
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:
+1
este ;;
80
Expresii regulate
+1
m;
= ik
+1
= kj ;
+1
m [ kj :
= kj
e
1 : M = In +;
e e
e
e +
e
e = ;
2 : M = M eM = (In +)
(In +)
= In +
; deoarece +
2
...
k: M =M
k
2
eM 2
8 a 2 ;
2. daca E1 ; E2 sunt expresii regulate, atunci (E1 + E2 ); si (E1 E2 ) sunt expresii
regulate;
3. daca E este expresie regulata, atunci E este expresie regulata;
4. singurele expresii regulate se obtin prin aplicarea regulilor 1, 2 si 3.
8 a 2 ;
81
Expresii regulate
Exercitiul 2.9.1 Pentru expresiile regulate de mai jos, sa se precizeze limbajele asociate:
E = (0 + 1) 0 0 (0 + 1) ;
E = (1 + 10) ;
1
E = (0 + 1) 0 1 1;
E = 0 1 2;
3
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
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
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
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
de 0, urmat de un numar arbitrar de 1, apoi de un numar arbitrar de 2;
pentru expresia E avem L(E ) = 0 f0g 0 f1g 2 f2g, adica L(E ) reprezinta
multimea tuturor cuvintelor peste alfabetul f0; 1g care au un numar arbitrar de
cel putin un 0, urmat de un numar arbitrar de cel putin un 1, apoi de un numar
arbitrar de cel putin un 2.
1
^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 ^ntro gramatica de tip 3 echivalenta, avem nevoie de ^nchiderile la reuniune, produs si
iteratie a gramaticilor de tip 3.
82
Expresii regulate
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
^nc^at VN \ VN = ;).
1
01
02
01
02
01
02
^In continuare, vom prezenta un algoritm ecient (liniar fata de dimensiunea expresiei 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
lista : VN [ VT
denita astfel:
(1)
! P (VN )
y 2 lista(x); x 2 VN
(2)
Altfel spus, lista(x) reprezinta multimea neterminalilor accesibili din x.
Algoritmul (ALG5):
83
Expresii regulate
8 a 2 ;
84
Expresii regulate
else
24. if (^n v^arful stivei este '') then begin
25. consideram expresia E 0 = E ; E 2 VN [ VT ;
26. i := i + 1;
27. VN := VN [ fxi g;
28. lista(xi ) = fxi g [ lista(E );
29. ^nlocuieste E 0 din stiva cu xi
30. if E 2 VT then
31. P := P [ fxi ! E xi ; xi ! g
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
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);
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
1
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;
85
Expresii regulate
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
Exercitiul 2.9.2 Fie expresia regulata E = ((ab) + ((a + (bb))(a b)) ): Folosind Algoritmul (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
86
Expresii regulate
)
b
a
(
(
Dupa executia pasilor 14-19, obtinem
i=1
VN = fx
g
P = fx ! a bg
lista(x ) = fx g
1
87
Expresii regulate
)
b
b
(
+
a
(
(
+
x
(
i=2
VN = fx ; x
1
P = fx
! a b; x ! b bg
lista(x ) = fx g
lista(x ) = fx g
1
)
x
+
a
(
(
+
x
(
i=3
VN = fx ; x ; x g
P = fx ! a b; x ! b b; x ! a; x ! x g
1
88
Expresii regulate
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x g
1
a
(
x
(
+
x
(
i=4
VN = fx ; x ; x ; x
g
P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! g
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x g
lista(x ) = fx g
1
)
b
x
(
x
(
+
x
(
89
Expresii regulate
i=4
VN = fx ; x ; x ; x
g
P = fx ! a b; x ! b b; x ! a; x ! x ; x ! a x ; x ! bg
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x g
lista(x ) = fx g
1
)
x
x
(
+
x
(
4
3
i=4
VN = fx ; x ; x ; x
g
P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! bg
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x ; x ; x g
lista(x ) = fx ; x g
1
x
+
x
(
90
Expresii regulate
i=5
VN = fx ; x ; x ; x ; x g
P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
; x ! x g
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x ; x ; x g
lista(x ) = fx ; x g
lista(x ) = fx ; x ; x ; x g
1
)
x
+
x
(
i=6
VN = fx ; x ; x ; x ; x ; x g
P = fx ! a b; x ! b b x ; x ! a x ; x ! x ; x ! a x ; x ! b x ; x !
; x ! x ; x ! x ; x ! x g
lista(x ) = fx g
lista(x ) = fx g
lista(x ) = fx ; x ; x ; x g
lista(x ) = fx ; x g
lista(x ) = fx ; x ; x ; x g
lista(x ) = fx ; x ; x ; x ; x ; x g
1
Ultima situatie este re
ectata de pasii 34-39, c^and se precizeaza ca simbolul de start
al gramaticii G este x .
6
91
Expresii regulate
! x ; x ! ax ; x ! ax ; x !
2
^In cea de-a doua parte a sectiunii consacrate expresiilor regulate, vom da un procedeu (cu un numar polinomial de operatii) de determinare a expresiei regulate echivalente (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
(1)
unde Xi 6= Yj :
Fie si ; sj starile corespunzatoare expresiilor Xi ; Xj din ecuatiile (3); (4): Rezulta
92
Expresii regulate
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.
Fara a restr^ange generalitatea, putem presupune acum ca exista t 2 f1; 2; :::; kg
astfel ^nc^at Yj = Xi : Facem substitutia respectiva si obtinem ecuatia:
h
X =+X
Lema 2.9.2 Solutia ecuatiei (5) este X = :
Demonstratie ^Inlocuind solutia de mai sus ^n relatia (5), avem: = + :
^Insa + = + = ( + ) = deoarece + = pentru orice
expresie regulata. Deci X = este solutie a ecuatiei (5).
Unicitatea solutiei este asigurata de faptul ca este ecuatie \liniara".
Teorema 2.9.3 Fie A un automat nit si ecuatia Xi = + Xi ; si 0 = L( ); 0 =
L(): Atunci, avem:
a) (s ; 0 ) = si ; (si ; 0 ) = si ;
(5)
h 1 (xi )2F
h 1 (xi )2F
L(Xi ):
Demonstratie
a) Rezulta din interpretarea expresiilor regulate Xi si din Lema 2.9.1;
b) Rezulta din punctul a) si din denitia relatiei de echivalenta A;s0 ;
c) Din punctul b) si din denitia limbajului acceptat de un automat.
Rezum^and, dam un algoritm polinomial de deducere a limbajului acceptat de
un automat (determinist, nedeterminist, sisteme tranzitionale) si de determinare a
expresiei regulate echivalente.
Algoritmul (ALG6):
93
Expresii regulate
Exercitiul 2.9.3 Fie automatul determinist A = (fs1 ; s2 ; s3 g; fa; bg; ; s1; fs2 ; s3 g)
cu dat prin graful de tranzitie:
#
#
"!
"!
SoS
7
S
SS
#
S
/
"!
a
Z~
94
Expresii regulate
A;s
A;s
A;s
! 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.
95
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;
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
s
s
s
s
1
2
3
4
0
s
s
s
s
3
4
1
2
1
s
s
s
s
2
1
4
3
96
s
s
s
s
2
3
4
a
s
s
s
s
b
s
s
s
s
s
s
s
s
s
s
2
3
4
5
6
a
s
s
s
s
s
s
2
4
5
5
4
4
b
s
s
s
s
s
s
3
3
2
6
6
5
Exercitiul 2.10.7 Folosind relatia A;s0 sa se arate ca urmatoarele limbaje nu sunt
regulate:
3
a) L = fan =n 0g;
k
b) L = fann =n 0g; k 2 natural xat;
2
c) L = fa n=n 0g;
d) L = fak =n 0g; k 2 natural xat;
e) L = fan! =n 1g;
f) L = faP (n) =n 0g; unde P este un polinom cu coecienti naturali de grad cel
putin 2:
k
Exercitiul 2.10.8 Fie A = (S; ; ; s ; F ) un automat nit si S 0 = fs ; s ; :::; sn g 2
; k xat arbitrar. Presupunem ca s-a stabilit pentru perechile (si ; si ); 8 i = 1; n 1
k
apartenenta la :
0
+1
+1
k+1
97
s
s
s
s
s
s
a
s
s
s
s
s
s
b
s
s
s
s
s
s
s
s
s
s
s
s
s
s
0
s
s
s
s
s
s
s
s
4
4
4
5
1
s
s
s
s
s
s
s
s
1
3
2
1
6
5
7
4
Exercitiul 2.10.11 Fie A = (fs ; s ; s g; fa; bg; ; s ; fs g) un automat nit nedeterminist, cu functia de tranzitie data prin matricea:
a
b
s fs ; s g fs g
s fs ; s g fs g
s fs ; s g fs g
1
98
Exercitiul 2.10.12 Fie A = (fs ; s ; s g; fa; bg; ; s ; fs g) un automat nit nedeterminist, cu functia de tranzitie data prin matricea:
a
b
s fs ; s g fs g
s fs ; s g fs g
s
fs g fs g
1
s fs ; s g fs g
s fs ; s g fs g
s
fs g fs ; s g
s
fs g
fs g
0
2
1
Exercitiul 2.10.14 Fie L un limbaj regulat pentru care 2= L. Sa se arate ca exista
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
s
s
s
s
2
3
4
a
s
s
s
s
2
2
4
4
b
s
s
s
s
4
3
3
4
99
Exercitiul 2.10.16 Pentru automatul din Exercitiul 2.10.12, sa se determine gramatica 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.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
L
L
s
s
s
s
1
2
3
a
s
s
fs ; s
s
2
b
s
s
s
s
2
3
Folosind Algoritmul (ALG4) sau procedeul din constructia teoretica din Teorema
2.8.1, sa se determine un automat nit nedeterminist echivalent cu A.
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).
100
2.9.1:
Exercitiul 2.10.28 Sa se demonstreze ca L(E ) = L(E ) (sunt echivalente), unde:
E = 1 + 0(10)(11 + 0)
1
E = (01) (1 + 00):
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.
a)
si
101
b)
si
c)
si
primul mod (cel mai nesigur) ar sa facem diferite transformari (de exemplu,
folosind identitatile din Exercitiul 2.10.30) si sa le aducem la o forma comuna;
al treilea mod (sigur, de complexitate polinomiala, dar care merge numai pentru
acest exercitiu), este sa plecam de la Exercitiul 2.9.3. Vom rezolva ^n alt mod
sistemul de ecuatii:
(1)
(2)
(3)
X = X b+X ba
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)
(6)
(7)
(8)
102
g) =
h) r = r = r
i) (r ) = r
j) ( + r) = r
k) (r s ) = (r + s)
l) r(s r) = (r s) r
Exercitiul 2.10.31 Fie r; s si t expresii regulate. Care din urmatoarele relatii sunt
adevarate si care nu ?
(i) (r s + r) r = r(s r + r)
(ii) s(r s + s) r = r r s(r r s)
(iii) (r + s) = r + s
d)
l)
e)
Exercitiul 2.10.32 Pentru expresiile regulate din Exercitiul 2.10.27, sa se determine
sistemele tranzitionale (automatele nedeterministe, deterministe, minimale) echivalente.
103
echivalente (si limbajele acceptate) pentru automatele din Exercitiile 2.10.5, 2.10.6,
2.10.9, 2.10.11, 2.10.12, 2.10.15 si 2.10.22. Aceeasi ^ntrebare pentru vericarea limbajelor prezentate ^n Exercitiile 2.3.2, 2.3.3, 2.4.1, 2.5.1, 2.6.1 si 2.8.1.
Exercitiul 2.10.34 Spunem ca doua expresii regulate peste sunt egale (notatie
E = E ) daca si numai daca L(E ) = L(E ). Aratati ca:
1
unde prin ER() s-a notat multimea tuturor expresiilor regulate cu variabile din .
Capitolul 3
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
unde
: S ( [ fg)
! P (S
104
105
Notam
: C^and scriem
2 (1)
L (P ) = fw= w 2 ; (s ; w; z )
0
(s; ; ); s 2 S g:
Exercitiul 3.1.1 Fie automatul pushdown P = (fs0 ; s1 ; s2 g; f0; 1g; fz; 0g; ; s0; z; fs0g),
unde functia de tranzitie este:
1) (s0 ; 0; z ) = f(s1 ; 0 z )g;
2) (s1 ; 0; 0) = f(s1 ; 0 0)g;
3) (s1 ; 1; 0) = f(s2 ; )g;
Solutie
a) : Trebuie sa aratam ca 0n 1n 2 L(P ): ^Inainte de a face cazul general, sa vedem,
de exemplu, daca 0 0 1 1 2 L(P ).
(1)
Astfel, avem (s ; 0 0 1 1; z )
0
(s ; 1; 0 z )
2
(4)
(s ; ; z )
(5)
(2)
(s ; 0 1 1; 0 z )
(1)
(s ; 0n 1n ; 0 z )
(3)
n 1;(4)
(3)
(s ; 1 1; 0 0 z )
n 1;(2)
(5)
(s ; 1n ; 0n z )
(s ; 1n ; 0n z )
(s ; ; z )
(s ; ; ); si la fel cum
s 2 F , rezulta ca 0n 1n 2 L(P ): Cu aceasta, prima incluziune este terminata.
: Fie w 2 L(P ); adica exista tranzitia (s ; w; z )
(s ; ; ); 2 (s ind
singura stare nala). Sa aratam ca 9 n 2 N astfel ^nc^at w = 0n 1n: Distingem mai
multe situatii:
1
106
w = 0n 1n :
k;+
(3)
(4)
(5)
(4)
(4)
(5)
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.
107
10) (s; i; x) = ;, pentru 8 (s; i; x) 2 S ( [ fg) nedenite mai sus (ramase).
a) Sa se arate ca L(P ) = fw w=w
e
2 fa; bg+g; unde we reprezinta oglinditul lui w;
b) Ce fel de automat pushdown este P ?
Solutie
a) : Facem conventiile ca
daca scriem
(1)
(2)
(3 )
(3 )
(5)
(6 )
(8)
(2)
(3 )
(7)
(4)
(6 )
(9)
(1)
(2)
(3 )
(4)
(5)
(6 )
+1
_ b
(3 )
(6 )
(s ; il ::: ik ; il ::: i
z ) si il = il (altfel ne blocam). De aici se pot aplica doar regulile (7) sau (8)
trebuind sa ajungem ^n conguratia (s ; ; z ). Distingem subcazurile:
1
+2
+1
+2
(8)
108
+2
(8)
(7)
+2
(9)
(8)
(9)
care este o conguratie de acceptare deoarece s este stare nala. ^In
timpul aplicarii tranzitiilor (7) sau (8), avem satisfacute relatiile il =
il ; il = il ; :::; ik = i : De mai sus avem si il = il deci not^and
cu w = i i ::: il rezulta ca w = w wf ; w 2 fa; bg , adica exact ceea ce
trebuia demonstrat.
2
+2
+3
+1
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 ;
z; fq g) cu dat prin:
0
a) Sa se arate ca L(P ) = fan w=w 2 fb; cg+; jwj = 2n; n 1g;
b) Ce fel de automat pushdown este P ?
c) Sa se gaseasca o gramatica de tip 2 echivalenta cu P:
Solutie
: Asemanatoare demonstratiilor din Exercitiile 3.1.1
si 3.1.2.
: Fie w 2 L(P ), adica exista tranzitia (q ; w; z ) (q ; ; ). La fel ca ^n Exercitiul
3.1.2, daca w ^ncepe cu b sau c atunci ne blocam.
0
109
1 astfel ^nc^at w = ak w ; cu
k;
(q ; ak w ; z )
0
(1)
2 fb; cg:
(q ; w ; a k z )
1
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,
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
tranzitia 7, deci trebuie vizat ^n memoria pushdown simbolul z . Asadar trebuie eliminate toate simbolurile a k prezente ^n stiva pushdown. Deci, daca t < 2k atunci ne
blocam deoarece nu avem tranzitie (q ; ; a), iar daca t > 2k ajungem la conguratia
(q ; i k i k ::: it ; z ) si ne blocam deoarece nu avem ce aplica. Astfel, ram^ane ca
t = 2k, deci w = ak w ; w 2 fb; cg; jw j = 2k: Cu aceasta, am demonstrat si cealalta
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:
1
2 +1
2 +2
G
G
Demonstratie
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
P = (fsg; VT ; VN [ VT ; ; s; x ; ;); unde este denit dupa cum urmeaza:
0
110
Demonstratie
^In constructia din Teorema 3.1.1, se determina un automat pushdown nedeterminist 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 deterministe (care formeaza clasa L2DET ).
111
Solutie La fel ca ^n exercitiile precedente, vom prezenta doua metode. Prima
se va referi la constructia teoretica din demonstratia Teoremei 3.1.2 (amanunte ^n
[7, 9, 10]).
Metoda I: Fie P = (S; ; ; ; s ; z ; ;) un automat pushdown nedeterminist cu
memorie vida. Construim gramatica G = (S S [ fx g; ; x ; P ) unde regulile
P se formeaza dupa cum urmeaza:
0
(i) Pentru tranzitii de tipul (r; ::: n ) 2 (s; a; z ); unde a 2 [fg; ; ; :::;
n 2 ; ar trebui ca ^n gramatica G sa avem o regula de genul [s; z ] !
a[r; ::: n ]. Dar c^ampul al doilea al acestor perechi nu contine tot timpul un singur simbol, de aceea trebuie introdus un al treilea c^amp. Asadar,
pentru tranzitia de mai sus, consideram regulile:
[s; z; s0] ! a [r; ; s ] [s ; ; s ] :::[sn ; n ; s0 ]; 8 s ; s ; :::; sn ; s0 2 S:
1
(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
Cu aceasta constructie, sa vedem ce reguli trebuie sa contina gramatica G echivalenta
cu P .
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
{ [s ; z; s ] ! 0 [s ; 0; s ] [s ; z; s ]
0
112
{
{
{
{
{
{
[s
[s
[s
[s
[s
[s
0
0
0
0
0
0
; z; s
; z; s
; z; s
; z; s
; z; s
; z; s
1
1
1
2
2
2
] ! 0 [s
] ! 0 [s
] ! 0 [s
] ! 0 [s
] ! 0 [s
] ! 0 [s
1
1
1
1
1
1
; 0; s
; 0; s
; 0; s
; 0; s
; 0; s
; 0; s
0
1
2
0
1
2
] [s
] [s
] [s
] [s
] [s
] [s
0
1
2
0
1
2
; z; s
; z; s
; z; s
; z; s
; z; s
; z; s
1
1
1
2
2
2
]
]
]
]
]
]
Reguli de start: x
! [s ; z ; s ] j [s ; z ; s ] j [s ; z ; s ]:
0
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
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, consideram automatul pushdown A = (fq ; q ; q g; f0; 1g; fx; z g; ; q ; z; ;); unde este
3
dat prin:
113
\"):
daca q = q
[q ; u; q ] [q ; v; q ] = ;[q ; uv; q ] altfel.
Folosind asociativitatea st^anga, putem extinde la (Q Q)m ; m 2; astfel:
1
0 ; um; qm ] =
[q ; u ; q ] [q0 ; u ; q ] ::: [qm
0 ; um ; qm ]) [q0 ; um ; qm ]
= ([q ; u ; q ] [q0 ; u ; q ] ::: [qm
m
1
+1
+1
Algoritmul (ALG7):
Intrare: A = (Q; ; ; ; q ; z ; ;) un automat pushdown;
Iesire: G = (V; ; S; P ) o gramatica independenta la context echivalenta;
Metoda:
1. := ;;
2. := ;
3. P := ;;
4. for (orice (q ; ) 2 (q; a; X )) do begin
5.
:= [ f[q; X; q ]g;
6. P := P [ f[q; X; q ] ! ag
end
7. k := 1;
repeat
8.
k := k ;
9. for (orice (q ; z z :::zm ) 2 (q; a; X )) do begin
10.
ok := true; tempq := q ;
11.
for (i := 1; m) and ok do
12.
if (e 9 [tempq; zi ; q0 ] 2 k ) then ok := false
else begin
13.
temp[i] := q0 ; tempq := q0
end
14.
if ok then begin
15.
k := k [ f[q; X; temp[m]]g;
16.
P := P [ f[q; X; temp[m]] ! [q ; z ; temp[1]][temp[1]; z ; temp[2]]:::
[temp[m 1]; zm ; temp[m]]g
end
0
0
1
+1
+1
+1
114
end ;
17. k := k + 1
18. until k = k ;
19. if (9 [q ; z ; q] 2 k ) then begin
20.
k := k [ fS g;
21. for (orice [q ; z ; q] 2 k ) do
22.
P := fS ! [q ; z ; q]g
end ;
23. V := k ;
1
Demonstratie
:::
j +1
::: Q Q:
Dar Q Q este o multime nita, pe c^and sirul de incluziuni este innit. Deci,
9 k 1 astfel ^nc^at k = k (presupunem k 1 minimal care satisface aceasta
+1
proprietate).
Prin inductie dupa j; aratam ca k = k j ; 8 j 1: Asta ^nseamna ca k este
multimea maximala care contine neterminali accesibili.
Pasul initial: Cazul j = 1 este imediat.
Pasul inductiv: Presupunem ca k = k l ; 8 l j: Trebuie sa demonstram ca
=
k
k l : Dar k l = k l [ Y; unde Y este multimea neterminalilor de forma
[q; X; temp[m]] care se adauga la pasul 15 din Algoritmul (ALG7). Asadar, la pasul
16 al Algoritmului (ALG7), exista o regula
+
+ +1
+ +1
k+l :
+1
+1
+ +1
115
Ram^ane sa aratam ca Algoritmul (ALG7) construieste corect gramatica corespunzatoare G: Pasul 3 este natural (el corespunde pentru
= ;). La pasii 4,5,6
construim neterminalii accesibili folosind derivari directe:
0
[q; X; q ] ! a
() [q; X; q ] =G) a:
+
+1
+1
+1
Exercitiul 3.1.6 Fie automatul pushdown din Exemplul 3.1.1. Sa se gaseasca gramatica echivalenta folosind Algoritmul (ALG7).
Solutie Obtinem = ;;
= 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;
= [ f[q ; z; q ]; [q ; x; q ]g;
P = P [ f[q ; z; q ] ! 0[q ; x; q ][q ; x; q ][q ; x; q ][q ; z; q ];
[q ; z; q ] ! 0[q ; x; q ][q ; x; q ][q ; x; q ][q ; z; q ]g;
= ; (acum, trecem la pasul 19)
= [ fS g;
P = P [ fS ! [q ; z; q ]g:
Astfel, folosind Algoritmul (ALG7), obtinem o gramatica echivalenta cu 6 reguli si 5
neterminali (^n loc de 168 reguli si 20 neterminali obtinuti prin metoda constructiva).
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
116
Obtinem:
fq g ! T ( ) ! T (
jj
jj
jj
0
) ! :::
V: Daca V V atunci T (V ) T (V ):
Ca un corolar, rezulta ; =
::: Astfel, operatorul T este monoton.
Aplic^and Teorema de punct x a lui Tarski , rezulta ca exista k 2 N astfel ^nc^at
k = k (sau o forma echivalenta: \9 k 2 N; k = astfel ^nc^at T ( ) = ").
Acest
+1
(iii) x y i z ui v 2 L;
8 i 0:
(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.
cu proprietatile:
117
Astfel, arborii de derivare se asociaza unei derivari. Denitia 3.2.1 privind arborii
de derivare se poate face si algoritmic.
Intrare: x =) w o derivare, w 2 (VN [ VT ) ;
G
Iesire: Arborele de derivare asociat.
Metoda: Vom descrie inductiv constructia arborelui de derivare.
Pasul I: Pentru derivarea ^ntr-un pas x ! x x ::: xn avem arborele
x
0
. #
&
x
x . . . xn
Mentionam ca etichetele x ; x ; :::; xn apar ^n aceasta ordine.
1
j;
+1
+1
&
y . . yk . . ym
^i va corespunde arborele de derivare:
atunci derivarii x =j;)
j
x
1
+1
. # &
y . . yk . . ym
1
. # &
r r . . rt
Se observa ca pentru o derivare exista un unic arbore de derivare, pe c^and reciproc
nu. De exemplu, e gramatica expresiilor aritmetice
1
! P j T P; P ! ( E ) j ag):
E =) E + T =) T + T =) T + P =) T
P +P
E =) E + T =) E + P =) T + P =) T P + P
118
. # &
+
. # &
T
P
ambiguitate.
Denitia 3.2.4 O gramatica este neambigua daca ecare cuv^ant (din (VN [ VT ) )
este neambiguu.
Deoarece unui arbore de derivare ^i corespunde o unica derivare st^anga, atunci
putem spune, echivalent, ca o gramatica este neambigua daca pentru orice cuv^ant
w (w 2 (VN [ VT ) ) exista cel mult o derivare st^anga. Evident, o gramatica este
ambigua daca nu este neambigua.
Consideram o gramatica echivalenta cu gramatica expresiilor aritmetice din
Exercitiul 3.9.13 ce are regulile:
E !E+E
E !EE
E ! (E )
E!a
. # &
. # &
E
. # &
E
. # &
E
119
Ogden, se cere:
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
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 considera derivarea (st^anga)
3
x =) x x =) x x x =) x x x x =) x x x x x =) b x x x x =)
1
=) 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 =)
=) 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 =)
=) 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 =)
=) 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 =)
=) 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
^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.
2
120
W
? ?
N ?
? U
?
?
?
?
? W
?
?
?
x
U
x
a x
ax
a |{z}
b |{z}
a a| a{zb a};
w = b| a{z
b b a} |{z}
deci cuvintele
x
y
i
i
b a b b a a b a a a b a 2 L(G);
8 i 0:
Exercitiul 3.2.2 Folosind Lema de pompare (pentru limbaje independente de context), 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 conformitate cu Lema de pompare, consideram constanta n dependenta de limbajul L:
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.
y=al
u=am
y=al
u=bm
Subcazul II.1. m =
6 l. Alegem i = 0 ^n conditia (iii) si obtinem ca w0 =
1)
y=al
+(
1)
u=bm
1)
+2
! Rezolvati Exercitiul 3.2.2 folosind Lema lui Ogden marc^and pozitiile simbolurilor
a. Este mai simpla solutia ?
122
Solutie
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
lui Ogden, rezulta factorizarea w = x y z u v. Analog cu cele discutate ^n solutia
Exercitiului 3.2.2, deducem ca y si u nu pot avea mai mult de un simbol, ^n caz
contrar, pentru i = 2, s-ar \amesteca" simbolurile.
Deoarece am marcat doar simbolurile a, rezulta, din conditia (i) ca cel putin unul
dintre cuvintele y si u contine simbolul a. Cum y apare ^naintea lui u; rezulta ca vom
distinge cazurile:
+
+2
+2
+2
( +1)
+2
(2 +1)
!+2
+2
(2 +1)
+2
+2
!+2
+2
+2
n
10
= 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.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
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:
k1 k2 i :
x yi z ui v = a k1 k2 k1 i k2 i = a
1
10
10
+(
)(
1)
Trebuie sa aratam ca 9 i 0 astfel ^nc^at 10n + (k + k )(i 1) nu poate scris sub
forma 10m:
1
(k + k ):
1
(k + k ) nu are
1
Cazul II: 10=(k1 +k2 ). Fie k1 +k2 = 10k p; k 1 maximal cu aceasta proprietate
10n k + p (i 1) = 10m k
de unde
p (i 1) = 10m k 10n k
^Insa k < n si m > n deci 10=(10m k 10n k ); de unde rezulta ca 10=p(i 1):
^Insa, daca alegem i 6= 10t + 1; cum 10 nu divide p, rezulta ca 10 nu divide
p(i 1); deci am obtinut o contradictie.
^In concluzie, nu este posibila nici o factorizare ca cea din Lema de pompare, deci
limbajul L nu este de tip 2:
1.2.5.
124
x y z u v. Deci y = ak1 ; u = ak2 ; si facem notatia k = k + k : Din conditiile (i) si (ii)
ale Lemei de pompare 1 k n: Conditia (iii) va deveni:
1
2 +(i
x yi z ui v = an
k ;
1)
8 i 1:
! Limbajul L din exercitiul precedent este de tip 1 deoarece este generat de gramatica 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:
asociat (unul nou, daca acesta nu exista deja), sa zicem zi si adaugam (daca
nu exista) regula zi ! yi , iar ^n regula (1), ^nlocuim pe yi cu zi . Astfel, regula
generala (1) devine acum:
x ! A A ::: Ak ; k 2; x 2 VN ; Ai 2 VN ;
1
8 i = 1; k:
x!A B ; B
1
unde B ; B ; :::; Bk
1
! A B ; :::; Bk ! Ak Ak ;
2
Algoritmul (ALG8):
125
h() =
h(x x ::: xk ) = h(x ) h(x ) ::: h(xk )
1
126
Este clar ca Algoritmul (ALG8) are un numar nit de pasi. Corectitudinea algoritmului este asigurata de cele discutate mai sus.
A ! DE
E ! A A,
iar ^n locul regulii 6:
B !CF
F ! B B.
(jrj 2);
x!r; jrj>2
127
jP 0 j jP j + jVT j +
x!r; jrj>2
(jrj 1):
Aceste estimari superioare mai simple devin egalitate daca pentru ecare terminal
exista o regula care-l contine ^n partea dreapta.
^ general, egalitatea
! Pentru gramatica din Exercitiul 3.3.1 are loc egalitatea. In
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.
Unde se foloseste forma normala Chomsky ?
128
I. e x ! r o regula arbitrara;
Denitia 3.4.2 Neterminalul x se numeste st^ang recursiv daca si numai daca
x =) x a:
+
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
forma:
0
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;
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
11. P 0 := P 0 [ fxk ! yk g;
12. marcheaza xk !
end
end
end
end ;
(1)
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
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
Greibach.
Metoda:
begin
1. P := P 0 ;
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
end ;
7. for i := 0 to n do
8. while (9 j; 0 j n; yi ! xj 2 P ) do
9. P := P fyi ! xj g [ fyi ! = xj ! 2 P g
end .
1
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
!x x x
x ! x x x x jbx x
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
regulile:
x ! bx x y jay
y ! x x x y jx x x
Deci, p^ana ^n prezent, regulile gramaticii sunt:
3
2.
4.
!x x
x ! x x jb
x ! bx x y jay jbx x ja
y ! x x x y jx x x
1. x
3.
Acum aplicam pasii 3,4,5,6 din Algoritmul (ALG10) si deci regula 2.a) se sterge
si se ^nlocuieste cu:
! :
131
! bx x y x x x x y jay x x x x y jbx x x x x x y j
ax x x x y jbx x x y jbx x y x x x x jay x x x x j
bx x x x x x jax x x x jbx x x
3
^In concluzie, regulile gramaticii echivalente ^n forma normala Greibach sunt:
!
x !
x !
y !
x
bx x y jay jbx x ja
3
bx x y x x x x y jay x x x x y jbx x x x x x y j
ax x x x y jbx x x y jbx x y x x x x jay x x x x
bx x x x x x jax x x x jbx x x
3
{
{
{
{
{
{
{
{
E ! T E0/
E0 ! + T E0
E0 !
T ! F T0
T0 ! F T0
T0 !
F
F
! (E )
!a
Forma simpla a gramaticilor ^n forma normala Greibach, aceea ca regulile ^ncep
cu terminal, permite un calcul rapid al \lookahead"-urilor ce se folosesc ^n teoria
si constructia compilatoarelor [1, 7].
132
{ x ! y z; x; y; z 2 VN ;
{ x ! a; x 2 VN ; a 2 VT :
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
operator;
Metoda:
begin
VN0 := fx0 g [ VN VT ;
P 0 := ;;
for (8 a 2 VT ) do
P 0 := P 0 [ fx0 ! (x ; a) ag;
for (8 x ! a 2 P ) do
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 .
0
cu regulile P :
1. x1 ! x2 x3
2. x2 ! x3 x1 j b
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
regulile P :
0
! a
! (x ; a) a si x ! (x ; b) b;
1
(x ; a) ! (x ; a) a (x ; a)
(x ; a) ! (x ; b) b (x ; a)
(x ; b) ! (x ; a) a (x ; b)
(x ; b) ! (x ; b) b (x ; b)
{ pentru regula x ! x x adaugam ^n G0 regulile:
(x ; a) ! (x ; a) a (x ; a)
(x ; a) ! (x ; b) b (x ; a)
(x ; b) ! (x ; a) a (x ; b)
(x ; b) ! (x ; b) b (x ; b)
{ pentru regula x ! x x adaugam ^n G0 regulile:
(x ; a) ! (x ; a) a (x ; a)
(x ; a) ! (x ; b) b (x ; a)
(x ; b) ! (x ; a) a (x ; b)
(x ; b) ! (x ; b) b (x ; b)
1
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 algoritmul 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 !
B C= A ! B C 2 P gj. Aceste margini superioare se ating numai daca gramatica G0
este redusa.
2
134
^In aceasta subsectiune, vom prezenta un algoritm ecient pentru conversia dintre o
gramatica ^n forma normala Chomsky ^n forma normala operator. Acest algoritm
este asemanator cu cel din subsectiunea 3.1.1 ^n sensul ca gramatica echivalenta de la
iesire are numai neterminali accesibili.
! x x jx x ; x ! x x ; x ! a; x ! bg)
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
0
Algoritmul (ALG12):
Intrare: G = (VN ; VT ; x ; P ) o gramatica ^n forma normala Chomsky;
Iesire: G0 = (VN0 ; VT ; x0 ; P 0 ) o gramatica echivalenta ^n forma normala operator;
Metoda:
1. := ;;
2. := ;
3. P 0 := ;;
4. for (orice x ! a 2 P ) do begin
5. := [ f(x; a)g;
6. P 0 := P 0 [ f(x; a) ! g
end ;
7. k := 1;
repeat
8.
k := k ;
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
end
12. k := k + 1
0
0
1
+1
+1
+1
135
13. until k = k ;
14. if (9 (x ; a) 2 k ) then begin
15.
k := k [ fx g;
16. P 0 := P 0 [ fx0 ! (x ; a) a= 8 a 2 VT astfel ^nc^at (x ; a) 2 k g
end ;
17. VN0 := k ;
1
:::
j +1
::: VN VT :
Dar VN VT este o multime nita, si sirul de incluziuni este innit. Deci, 9 k 1
astfel ^nc^at k = k (presupunem k 1 minimal care satisface aceasta proprietate).
Prin inductie dupa j; se demonstreaza ca k = k j ; 8 j 1: Aceasta ^nseamna
ca k este o multime minimala care contine neterminali accesibili.
Pasul initial: Pentru j = 1 imediat.
Pasul inductiv: Analog cu demonstratia Teoremei 3.1.3.
Asadar, numarul de iteratii ale Algoritmului (ALG12) este mai mic sau egal dec^at
j k j: Dar k VN VT : Aceasta implica j k j jVN j jVT j:
Pentru demonstrarea partii (i) a Teoremei 3.5.1, se poate proceda la fel ca ^n
demonstratia Teoremei 3.1.3.
+1
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.
136
1) j (s; a; z )j 1;
8 (s; a; z ) 2 S ( [ fg) [ ;
daca (s; ; z ) 6= ; atunci (s; a; z ) = ;; 8 (s; a; z ) 2 S :
2)
^In legatura cu aceasta clasa de limbaje (L DET ) se cunosc doua rezultate fundamentale:
2
!
Teorema 3.6.2 subliniaza diferenta dintre clasele de limbaje L2 si L2DET . Clasa
nu este ^nchisa la complementara, spre deosebire de L2DET .
L DET 6= L
2
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
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 :
Acum, consideram limbajul R = f0i 1j 2k = i; j; k 0g: Se observa imediat ca R 2 L
(consultati Exercitiile 1.3.4 sau 2.10.4, a) ). Aplic^and acum Teorema 3.6.1 pentru limbajele 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
L 2= L , contradictie.
Ram^ane deci ca L 2 L L DET :
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
si R
Exercitiul 3.6.3 Sa se arate ca urmatoarele limbaje de tip 2 sunt limbaje deterministe:
a) L1 = f0i 1i 2j = i; j 0g;
b) L2 = f0i 1j 2j = i; j 0g;
c) L3 = a L1 [ L2 ; a 2= f0; 1; 2g;
d) L4 = a L1 [ b L2 ; a; b 2= f0; 1; 2g; a 6= b:
Solutie
a) Construim un automat pushdown determinist care accepta L . Fie
1
2. (s ; 0; 0) = (s ; 0 0);
1
3. (s ; 1; 0) = (s ; );
1
138
4. (s ; 1; 0) = (s ; );
5. (s ; 1; z ) = (s ; z );
6. (s ; 2; z ) = (s ; z );
7. (s; a; z ) = ; ^n rest.
Se observa destul de usor ca L = L(M ) si ca M este determinist.
b) Analog cu automatul de la punctul a).
c) Pentru punctele c) si d) vom demonstra ceva mai general:
Daca L ; L 2 L DET atunci a L [ b L 2 L DET ; a; b 2
= ; a 6= b; b poate si :
2
01
01
01
02
02
02
02
N =;
Ni = Ni [ fx= x 2 VN ;
Se observa imediat ca
0
+1
9 x ! 2 P si 2 (Ni [ VT ) g; 8 i 0:
N N ::: Ni Ni ::: VN ;
k = minfk 2 N= Nk = Nk g atunci Nk = Nk j ; j 1;
L(G) =
6 ; () x 2 Nk :
(i) N
(ii)
(iii)
139
+1
+1
Algoritmul (ALG13):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2;
Iesire: L(G) 6= ; ?
Metoda:
begin
i := 0;
N := ;;
repeat
i0 := i + 1;
Ni := Ni [ fx= x 2 VN ; 9 x ! 2 P; 2 (Ni [ VT ) g
until (Ni = Ni ) or (Ni = VN );
if x 2 Ni then \L(G) 6= ;"
else \L(G) = ;"
end .
0
Rezolvarea problemei (P1) face parte din categoria metodelor de punct x (de
exemplu, algoritmul de deducere a unei gramatici echivalente cu un automat pushdown, 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
140
Solutie
fC; B; Ag.
+1
Denitia 3.7.2 Fie G = (VN ; VT ; x ; P ) o gramatica (nu neaparat de tip 2). Sim[ VT se numeste accesibil daca exista o derivare
x =) x ; ; 2 (VN [ VT ) :
0
bolul x 2 VN
N = fx g
Ni = Ni [ fx= y ! 2 P; x 2 \ (VN [ VT ); y 2 Ni g:
0
+1
N N ::: Ni Ni ::: VN [ VT ;
k = minfk 2 N= Nk = Nk g atunci Nk = Nk j ; j 1;
x este accesibil () x 2 Nk :
(i) N
(ii)
(iii)
+1
+1
Algoritmul (ALG14):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2;
Iesire: G0 = (VN0 ; VT0 ; x ; P 0 ) gramatica de tip 2 echivalenta fara simboluri inaccesibile;
Metoda:
begin
i := 0;
N := fx g;
repeat
i := i + 1;
Ni := Ni [ fx= y ! 2 P; x 2 ; y 2 Ni g
until (Ni = Ni ) or (Ni = VN [ VT );
0
141
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
simbol se numeste util daca este productiv si accesibil. Un simbol se numeste inutil
0
Exercitiul 3.7.2 Fie gramatica din Exercitiul 3.7.1. Sa se deduca simbolurile accesibile.
Algoritmul (ALG15):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky si cu
toate simbolurile accesibile;
Iesire: L(G) nit ? (sau innit);
Metoda:
begin
V (GRAF ) := VN ;
E (GRAF ) := ;;
for (8 A ! B C 2 P ) do
E (GRAF ) := E (GRAF ) [ f(A; B ); (A; C )g;
if (GRAF are circuite) then \L(G) este innit"
else \L(G) este nit"
end .
Demonstratia corectitudinii acestui algoritm este asemanatoare Lemei de pompare
pentru gramatici de tip 2. Problema determinarii daca un graf este ciclic (are circuite)
este polinomiala.
0
sunt:
S ! AB
A ! BC ja
B ! C C jb
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 )
(GRAF )
ij
i+j
8 i = 1; n:
143
. &
. &
.&
ai . . ai k ai k . . ai j
Deci, rezulta caracterizarea: A 2 Vij () 9 1 k j 1 astfel ^nc^at
A ! B C 2 P; B 2 Vik ; C 2 Vi k;j k :
Algoritmul (ALG16):
Intrare: G = (VN ; VT ; x ; P ) gramatica de tip 2 ^n forma normala Chomsky si cu
toate simbolurile accesibile, w 2 VT ;
Iesire: w 2 L(G);
Metoda:
begin
for i := 1 to n do
Vi := fA= A ! ai 2 P g;
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)"
end .
Complexitatea timp a algoritmului de mai sus este O(jwj ), iar complexitatea spatiu
este O(jP j + jwj jVN j). Pentru reprezentarea ^n memorie a gramaticii G se pot folosi
urmatoarele doua matrice:
pentru reguli de tipul x ! a alegem matricea P = (p1ij ), unde 1 i jP j si
1 j 2: De exemplu, daca regula x ! a are numarul 4, atunci ^n matricea
P se scrie p1 ; = x si p1 ; = a;
pentru reguli de tipul A ! B C alegem matricea P = (p2ij ), unde 1 i jP j
si 1 j 3: De exemplu, daca regula A ! B C are numarul 7, atunci ^n
matricea P se scrie p2 ; = A; p2 ; = B; p3 ; = C:
Pentru reprezentarea ^n memorie a multimilor Vij putem folosi un tablou tridimensional, 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 :
+
4 1
4 2
7 1
7 2
7 3
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
mai scrie a a a a a , deci a = b; a = a; a = a; a = b si a = a: Obtinem
V = V = fB g si V = V = V = fA; C g:
Simplicam caracterizarea A 2 Vij () 9 1 S
k j 1 astfel ^nc^at A ! B C 2
P; B 2 Vik ; C 2 Vi k;j k ; fac^and notatia Vij =
Vik Vi k;j k :
1
11
41
21
31
51
k=1;j
i=5
fA; C g
12
42
22
41
12
21
31
32
31
11
21
41
51
11
22
12
31
23
21
13
32
22
41
33
31
42
32
51
145
22
42
23
11
23
12
32
13
41
24
21
V [
33
51
i=1
fB g
fS; Ag
j=1
j=2
j=3
j=4
j=5
i=2
;
;
15
i=1
fB g
fS; Ag
j=1
j=2
j=3
j=4
j=5
;
;
i=3
i=4
i=5
11
i=2
V [V V [V V [V V
24
12
i=3
33
i=4
13
42
14
51
i=5
fS; A; C g
^In concluzie, deoarece S 2 V , rezulta ca w 2 L(G):
15
3.7.1 Un algoritm ecient de analiza sintactica pentru gramatici ^n forma normala Chomsky
Algoritmul pe care-l prezentam ^n aceasta subsectiune este ^n str^ansa legatura cu
Algoritmul CYK din Sectiunea 3.7. Acesta va avea la intrare o gramatica ^n forma
normala Chomsky, multimile Vij ; si w 2 L(G): La iesire va preciza sirul de reguli
w (care se mai numeste analizare sintactica).
aplicate ^n derivarea x =;)
0
Algoritmul (ALG17):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky,
multimile Vij din Algoritmul (ALG16) si w 2 VT (evident, are sens numai daca
w 2 L(G));
w
Iesire: Derivarea (analizarea sintactica) astfel ^nc^at x =;)
G
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;
0
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
PARSE (1; n; x );
write(\analizarea sintactica este ", as);
end
else
write(\w 2= L(G)")
end .
+
Vom demonstra ca timpul mediu al algoritmului precedent este de O(n log n)
(deci mai bun dec^at cazul cel mai defavorabil care are O(n )).
2
Teorema 3.7.2 Timpul mediu de lucru al Algoritmului (ALG17) este O(n log n):
147
(1)
n
1 X
(T (k 1) + T (n k));
n k
=1
n T (n) (n 1) T (n 1) = 2 (n 1) + 2 T (n 1)
n T (n) = (n + 1) T (n 1) + 2 (n 1)
T (n) T (n 1) 2(n 1)
=
+
n+1
n
n(n + 1)
2
T (n) T (n 1)
=
+2
n+1
n
n+1
1
n
T (n) T (n 1)
2
=
+2
n+1
n
n+1
"
1
T (n 2)
=
+2
n
n 1
nX
T (1)
1
= ::: =
+2 2
+
n 1
2
k
k
Acum, folosim inegalitatea imediata
2
n+1
1
2
+1
n
X
=3
k=2
2
2
+
n+1 n
"
n
X
1
2
1
=2
+
k
n+1 k k
n +1 1 ; 8 n 1:
=3
1
2
1
+
n
148
T (n)
n+1
"
n
nX
X
1
1
2 n + 1 + k = 2 k1 :
k
k
+1
=3
=3
Apel^and la integralele Riemann, putem aproxima suma din relatia (9) si obtinem:
(10)
T (n)
n+1
2
nZ+1
2
1
n+1
dx = 2 ln
< 2 ln(n + 1):
x
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 ;
Iesire: Derivarea (analizarea sintactica) astfel ^nc^at x =;) w.
G
Metoda:
procedure PARSE (i; j; A);
begin
if (j = 1) and (m = #(A ! ai )) then begin
0
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 ;
+
Demonstratie
n
h(n) 1 + h
0
n1
n=0
n 1
2
h
n 1
+1
2
h
n 1
2
+ 1:
Astfel, am demonstrat inegalitatea (11). ^In continuare, vom arata ca h(n) blog nc:
Mai precis, aratam prin inductie dupa m ca pentru
2
(12)
8 n 2 N;
150
f2m ; 2m
+1
avem:
+1
1g: Atunci b n
+ 1; :::; 2m
+2
h(n) 1 + h
n 1
2
c<
1 + m = blog nc:
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
forma propozitionala curenta, atunci se aplica o regula de tipul xpoz ! r; r 2 (VN [
VT ) ; poz 2 f1; 2; :::; mg: Astfel, prezentam Algoritmul (ALG19).
1
Algoritmul (ALG19):
Intrare: G = (VN ; VT ; x ; P ) o gramatica de tip 2 ^n forma normala Chomsky,
multimile Vij din Algoritmul (ALG16) si w 2 VT ;
Iesire: Derivarea (analizarea sintactica) astfel ^nc^at x =;G) w. Totodata se va
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;
0
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))
+
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
procedura PARSE se intra pe ramura principala a instructiunii if (j = 1) and (m =
#(A ! ai )) then begin , deci poz = 1, adica neterminalul de pe pozitia 1 se modica;
Pasul inductiv: Presupunem adevarata armatia pentru 0; 1; :::; h 1 si o demonstram pentru h: Consideram deci o derivare generala:
;h
x =
) x ::: A ::: x =) x ::: B C ::: x =) a a ::: a :
0
Cazul I: S-a intrat pe ramura principala a instructiunii if 2 k j then begin, adica k j k si deci vom alege subarborele de derivare st^ang. Asadar
neterminalul B devine cel curent (deci nu trebuie sa afectam variabila poz ,
av^and poz (B ) = poz (A)). Neterminalul C va deveni curent la urmatorul
apel recursiv, deci ^naintea lui trebuie sa incrementam variabila poz (av^and
poz (C ) = poz (A) + 1).
152
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.
7)
5)
6)
4)
8)
=) b a D a =) b a B C a =) b a aC a =) b a a b a
Se observa ca ^n forma propozitionala b a D D este esential care neterminal se transforma.
8)
5)
6)
7)
L(G ) \ L(G ) = ;;
1
L(G ) = L(G );
1
L(G ) L(G );
1
L(G ) = R;
1
R L(G );
1
C L(G ) 2 L ;
L(G ) \ L(G ) 2 L :
1
153
Exercitiul 3.8.1 Sa se arate ca urmatoarele gramatici de tip 2 sunt echivalente:
a) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
{ S ! aAb
{ A ! aAbjAAjcj
b) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
{ S ! aAb
{ A ! AcjASj
c) G = (fS; Ag; fa; b; cg; S; P ) unde regulile P sunt:
{ 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.
1
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 =
(VN ; VT ; x ; P 0 ), unde P 0 = P fx ! y g [ fx ! i = i = 1; mg, este
echivalenta cu G (aceasta lema am mai folosit-o la forma normala Greibach, pagina
0
127).
fA ! A Ag [ fA ! i A= i = 1; kg sau
P 0 = P fA ! A Ag [ fA ! A i = i = 1; kg.
+1
x =)0 =)
::: =)0 i =)0 i
G
G0
G
G
Distingem doua situatii:
0
+1
=)0 ::: =)
0 p
G
154
i = A =) A A =) i A = i
1
x =) =) ::: =) i =) i
G
+1
+1
=) ::: =) p
G
+1
! A A: Cum ^ntr-o gramatica de tip 2 nu conteaza ordinea aplicarii regulilor, rezulta ca primul simbol neterminal A se va
transforma astfel:
i = A =) A A =) i A sau
1
i = A =) A A =) A A A s.a.m.d.
1
i1 i2
in
Ultima regula din derivarea de mai sus este de forma A ! i , spre deosebire
de celelalte care sunt de tipul A ! i A.
n
S ! abjaAb
A ! SjcjcAjSA
155
G3 ;dr
G3 ;dr
Mai precis, se poate demonstra imediat prin inductie dupa lungimea derivarii ca
S =) u
G3 ;dr
n
u
() S G=0)
3 ;dr b u
daca A 2=
daca A 2
G0
{ S ! aAbjab
{ A ! aAbjabjAAjc
echivalenta cu G :
2
{ S ! aAbjab
{ A ! AcjcjASjS
Acum, folosind Lema 3.8.3,a), transformam gramatica G0 si obtinem ca G00 echivalenta cu G0 (deci si cu G ):
1
S ! aAbjab
A ! aAbjabjcjAaAbjAabjAc
S ! aAbjab
A ! aAbjabjcjAaAbjAabjAc
Se observa clar ca G00 este identica cu G00 , deci L(G00 ) = L(G00 ). Echivalent va rezulta
ca L(G ) = L(G ).
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
G0 :
2
S ! abjaAb
A ! abjaAbjcjcAjab AjaAbA
156
Acum aplicam Lema 3.8.3, b) gramaticii G0 si obtinem gramatica G000 echivalenta cu
G0 :
1
S ! abjaAb
A ! abjaAbjcjcAjab AjaAbA
Se observa clar ca G00 este identica cu G000 , deci L(G00 ) = L(G000 ). Echivalent va
rezulta ca L(G ) = L(G ).
^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
G faptul ca L(G ) = L(G0 ) ^n baza Lemei 3.8.4, putem
sumariza aceasta solutie ^n desenul:
Lema 3.8.4 0 Lema 3.8.2 00
G
G
G
3
Lema 3.8.3,b)
G000
Lema 3.8.1 0
G
G
G00
Lema 3.8.3,a)
1
fw c w=
e w 2 fa; bg g, unde c 2
= 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).
157
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 gramatica G = (fS; Ag; fa; bg; S; fS ! a A A; A ! a S j b S j ag).
Exercitiul 3.9.4 Folosind constructia prezentata ^n Exercitiul 3.1.5, pentru automatul pushdown nedeterminist din Exercitiul 3.1.4, sa se deduca gramatica echivalenta. Generalizare.
! [s; x ; s]
0
158
! 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:
Exercitiul 3.9.5 Sa se arate ca pentru orice automat pushdown nedeterminist exista
Exercitiul 3.9.7 Pentru gramaticile din Exercitiile 1.3.18-1.3.37, sa se arate ca limbajele generate nu sunt de tip 2.
L
L
= fan bn cn = n 2 Ng;
+1
+2
= fan bn k1 cn k2 = n 2 Ng; k ; k
+
2 N xati;
159
L
= fan b n c n = n 2 Ng:
2
k(
unde fi sunt functii polinomiale de gradul ^nt^ai cu coecienti din multimea numerelor naturale (fi (n) = i n + i ; i 2 N ; i 2 N), k 3 si
k(
unde fi sunt functii polinomiale de grad cel putin doi cu coecienti naturali,
k1
9L2L
Astfel clasa
S ! aBjbA
A ! ajaSjbAA
B ! bjbSjaBB
160
c) un arbore de derivare.
fE ! E + E j E E j ( E ) j ag):
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
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 gramatica 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.
161
! x x j x x ; x ! x x ; x ! a; x ! bg):
2
Exercitiul 3.9.22 Fie gramatica din Exercitiul 3.4.1. Folosind constructia din
Observatia 3.4.1, sa se construiasca o gramatica echivalenta ^n forma normala
Greibach. Este mai simpla gramatica echivalenta (numar de neterminali, reguli) ?
Exercitiul 3.9.23 Fie gramatica ^n forma normala Chomsky
G = (fS; Ag; f0; 1g; S; fS ! A A j 0; A ! S S j 1g):
Determinati:
a) o gramatica echivalenta ^n forma normala Greibach;
b) o gramatica echivalenta ^n forma normala operator.
162
Exercitiul 3.9.26
P:
1. S 0 ! S E
5. S ! C D
9. C ! a
3. S ! C B
7. B ! A D
11. E ! c
4. B ! S D
8. A ! C D
Capitolul 4
unde:
163
164
Masini Turing
astfel:
daca x1 ::: xi
+1
x ::: xi s xi ::: xn
1
x ::: xi y s0 xi ::: xn
1
+1
Consideram
^nchiderea re
exiva si tranzitiva a relatiei
^nchiderea tranzitiva a relatiei .)
(respectiv
2 g:
Teorema 4.1.1 Pentru orice masina Turing M , exista o gramatica G de tip 0 astfel
^nc^at L(M ) = L(G):
Demonstratie
165
Masini Turing
0
1
x
y
B
(s ; x; R)
;
;
(s ; y; R)
;
(s ; 0; R) (s ; y; L)
;
(s ; y; R)
;
(s ; 0; L)
;
(s ; x; R) (s ; y; L)
;
;
;
;
(s ; y; R) (s ; B; R)
s
s
s
s
s
;
Sa se arate ca L(M ) = f0n 1n = n 1g;
3
a)
Solutie a) Fiind vorba de o egalitate de multimi, vom proceda prin dubla incluziune. Procedeul este asemanator cu cel de la generari (acceptari) de limbaje de catre
gramatici, automate nite sau automate pushdown.
: Sa aratam ca 0n 1n 2 L(M ); 8 n 1: Consideram, mai ^nt^ai, cazul n = 3: Astfel,
avem
s 000111
xs 00111
x0s 0111
x00s 111
x0s 0y11
x s 0i y 1i
Astfel, vom demonstra prin inductie dupa j armatia:
j i j j i j
P (j ) :
\s 0i 1i
x s 0 y 1 ;
0
8 j = 1; i:"
j
xj s 0i j yj 1i j
x
0
+1
s 0i j
yj
+1
1i j
xj s 0i j yj 1i j
0
xj s 0i j
+1
i ;
yj 1i j
1
166
Masini Turing
i ;
xj 0i j yj s 1i j xj 0i j yj s y y 1i j
i ;
xj s x 0i j yj 1i j
xj s 0i j yj 1i j
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
i 1;
+1
+1
+1
+1
+1
xi yi B s :
(1)
deoarece (s ; 1) = ;;
{ Subcazul II.2: i > j: Prin inductie dupa l se arata ca
l i l l j l
s w
x s 0 y 1 v; 1 l j; v 6= 1:
3
(1)
s w
xj s 0i j yj v;
0
xj s 0 i j y j v
0
Dar
(1)
xj s 0i j
+1
v 6= 1 deci v = sau
(1)
yj v
v = 0:
(1)
v 6= 1:
i 1;
xj 0i j
+1
yj s v
1
167
Masini Turing
1)
168
Masini Turing
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;
regulile P :
1
169
Masini Turing
[1; 0] s ! s 1 s
[1; 1] s ! s 1 s
[1; x] s ! s 1 s
[1; y] s ! s 1 s
[1; B ] s ! s 1 s
[; 0] s ! s s
[; 1] s ! s s
[; x] s ! s s
[; y] s ! s s
[; B ] s ! s s
4
Astfel, am obtinut o gramatica echivalenta cu M care are 178 de reguli si 19 neterminali. 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).
(jj + 1) j j + jS j + 3;
iar numarul de reguli este egal cu
4 + jj + jf(s; x) = (s0 ; y; R)gj (jj + 1) + jf(s; x) = (s0 ; y; L)gj (jj + 1)
j j+
s
s
s
s
s
s
s
s
1
2
3
4
5
0
1
(s ; B; R) (s ; B; R)
(s ; 0; R) (s ; 1; R)
(s ; 0; R) (s ; 1; R)
(s ; B; L)
;
;
(s ; B; L)
(s ; 0; L) (s ; 1; L)
(s ; 0; L) (s ; 1; L)
1
3
4
;
;
Sa se arate ca L(M ) = fw w=
e w 2 f0; 1g g;
6
B
(s ; B; R)
(s ; B; L)
(s ; B; L)
;
;
(s ; B; R)
(s ; B; R)
0
0
170
Masini Turing
Solutie Fiind vorba de egalitate de multimi, vom proceda prin dubla incluziune.
: Pentru a arata ca L(M ) fw w=
e w 2 f0; 1gg, vom demonstra c
a pentru orice n,
n 1 are loc armatia:
n ;
s i ::: in in ::: i
(1)
s i i ::: in in ::: i i
4
+1
n 1 ;
Cazul II: i = 1. Analog cu cazul I, numai ca vom trece prin starile s ; s ; s ;
si ^n nal s :
1
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:
: 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:
7
171
Masini Turing
Aplic^and de un numar nit de pasi cazurile II, III ajungem la conguratia s care,
conform cazului I, trece ^n s . Cuv^antul w are deci forma
0
w = i w i = i i w i i = ::: = i i ::: in in i i ;
1
s
s
s
s
s
s
s
1
2
3
4
5
0
1
(s ; B; R) (s ; B; R)
(s ; 0; R) (s ; 1; R)
(s ; 0; R) (s ; 1; R)
(s ; B; L)
;
;
(s ; B; L)
(s ; 0; L) (s ; 1; L)
B
(s ; B; R)
(s ; B; L)
(s ; B; L)
6
3
4
;
;
(s ; B; R)
0
f0; 1gg:
fw w=
e w 2
13
13
172
Masini Turing
s
s
s
s
s
s
s
s
s
s
s
s
s
s
0
1
(s ; x; R) (s ; y; R)
(s ; 0; R) (s ; 1; R)
(s ; x; L) (s ; y; L)
(s ; 0; L) (s ; 1; L)
2
3
x
(s ; x; L)
(s ; x; L)
y
(s ; y; L)
(s ; y; L)
(s
(s
(s
(s
(s
(s
(s
(s
(s
(s
(s
(s
(s
8
7
7
8
B
(s ; B; R)
(s ; B; L)
13
; x; R)
; z; R)
; x; R)
; x; R)
; x; R)
; x; R)
; z; L)
0
6
7
8
7
8
; y; R)
; z; R)
; y; R)
; y; R)
; y; R)
; y; R)
(s
(s
(s
(s
(s
5
6
9
; z; L)
; z; R)
; z; R)
; z; L)
; z; L)
10
(s ; B; L)
(s ; B; L)
9
10
11
(s ; z; L)
(s ; x; L) (s ; y; L) (s ; z; R)
(s ; x; L) (s ; y; L) (s ; z; R)
11
10
11
12
12
12
13
12
12
13
13
Fie acum un cuv^ant oarecare u din L(M ), de forma u = i ::: im : Distingem doua
cazuri:
1
s i ::: i h :
{ Daca i = 0 obtinem s 0 i ::: i h
{ Daca i = 1 obtinem s 1 i ::: i h
0
+1
+1
+1
x s i ::: i h :
y s i ::: i h :
1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
173
Masini Turing
+1
+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
ca
(1)
daca o conguratie contine s atunci este de forma
i0 ::: i0 s ik ::: i h k i0
::: i0 ;
0
+1
+1
h+2 k
h+1
h+2 n
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
::: i0 ;
1
+1
+1
h+1
+1
+2
+1
+2
+1
+2
+1
+1
+2
+1
+1
+2
+1
+2
+1
+1
Din faptul ca s realizeaza aceeasi operatie ca si s , dar spre st^anga, obtinem
conguratia
i0 ::: i0n s i0n in ::: i h n i0 h n i0 h n ::: i0 h ;
3
+1
+2
+1
+2
+1
+1
+2
+1
174
Masini Turing
+1
+1
+2
+1
+1
+2
+1
+1
+2
+1
+1
+1
+1
k | {z } h+1
h k
h+k | {z }
h k
+ +
+1
h+1
+1
h+2
+1
+2
+1
+2
11
h+1 h+2
11
12
11
h+1 h+2
12
11
175
Masini Turing
12
+1
12
+2
12
12
12
12
+1
12
+1
12
+2
+2
+1
+2
10
n
i0 ::: i0h s i0h i0h i0h ::: i0 h i0 h
1
+1
+2
0 0
::: z}
i ::: ih n s i0h n z| {z
::: z} i0h i0h ::: i0 h n z| {z
1
+1
+2
+1
+2
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
sirul de tranzitii:
i0 ::: i0h n z s z| {z
::: z} i0h i0h ::: i0 h n z| {z
::: z}
5
0 0
i ::: ih n
1
i0 ::: i0h n
1
0 0
i ::: ih n
1
+1
+2
z| {z
::: z} s i0h i0h ::: i0 h n z| {z
::: z}
5
n+1
+1
+2
z| {z
::: z} i0h s i0h ::: i0 h n z| {z
::: z}
n+1
+1
+2
::: z}
z| {z
::: z} i0h i0h ::: i0 h n s z| {z
n+1
+1
+2
176
Masini Turing
i0 ::: i0h n
1
i0 ::: i0h n
1
0 0
i ::: ih n
0 0
i ::: ih n
1
+2
z| {z
::: z} i0h i0h ::: s i0 h n
+1
n+1
+1
n+1
11
+2
z| {z
::: z}
n+1
12
+2
z| {z
::: z} s i0h i0h ::: i0 h n i0 h n
12
+1
+2
z| {z
::: z} s z z i0h i0h ::: i0 h n i0 h n
4
+1
+2
0 0
i ::: ih n s i0h n
1
+1
n+1
z| {z
::: z} i0h i0h ::: s i0 h n i0 h n
i0 ::: i0h n
1
z| {z
::: z} i0h i0h ::: s i0 h n z| {z
::: z}
n+1
+1
+2
z| {z
::: z}
n+1
z| {z
::: z}
n+1
z| {z
::: z} i0h i0h ::: i0 h n i0 h n
n+1
z| {z
::: z}
z| {z
::: z}
n+1
10
1; i0h k =
6 i0 h k :
+1
+1
+1
h k | {z } h+1
k
| {z }
+1
::: z}
i0 ::: i0h k z s z| {z
::: z} i0h ::: i h k z| {z
1
0 0
i ::: ih k
1
i0 ::: i0h k
1
+1
z| {z
::: z} s i0h ::: i h k z| {z
::: z}
5
k+1
+1
::: z}
z| {z
::: z} i0h s i0h ::: i h k i h k z| {z
k+1
+1
+2
177
Masini Turing
0 0
i ::: ih k
1
::: z}
z| {z
::: z} i0h ::: i0 h k i0 h k s z| {z
i0 ::: i0h k
1
+1
k+1
z ::: z i0
0
h ::: i h k
| {z }
k+1
+1
s i0 h k s z| {z
::: z}
9
10
10
+1
+1
s x z| {z
::: z} y z| {z
::: z}
h
+1
= y: Obtinem
z s z| {z
::: z} y z| {z
::: z}
+1
z| {z
::: z} s y z| {z
::: z}
z| {z
::: z} y s z| {z
::: z}
h
z| {z
::: z} s y z| {z
::: z};
+1
10
^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 ):
0 0
i ::: ih s i0h ::: i0 h
s i ::: i h
0
+1
a) i0 = i0h
1
+1
+1
+1
+1
z| {z
::: z}
h
= x: Obtinem
s x |z {z
::: z} x z| {z
::: z}
4
z s z| {z
::: z} x z| {z
::: z}
5
z| {z
::: z} s x z| {z
::: z}
5
178
z| {z
::: z} s x z| {z
::: z}
z| {z
::: z} x s z| {z
::: z}
7
z| {z
::: z} s z| {z
::: z}
11
h+1
13
::: z}
z| {z
::: z} s z| {z
13
+1
Denitia 4.2.3 O gramatica se numeste monotona daca regulile sale sunt de forma
! , unde jj j j:
Teorema 4.2.1 Pentru orice automat liniar marginit M exista o gramatica monotona G astfel ^nc^at L(G) = L(M ):
O importanta deosebita ^n automate liniar marginite o are Teorema 4.2.1 a carei
demonstratie se gaseste ^n [8, 9, 11]. ^In sectiunea 4.3, vom vedea un procedeu de
determinare a unei gramatici dependente de context echivalente cu una monotona.
Exercitiul 4.2.1 Fie M = (fs ; s ; s ; s ; s ; s g; f0; 1g; f0; 1; x; y; @; $g; ; s ; f@; $g;
fs g) un automat liniar marginit cu functia de tranzitie denita astfel:
0
179
s
s
s
s
s
s
@
(s ; @; R)
1
2
3
4
;
;
;
;
;
(s ; x; R)
(s ; y; R)
;
(s ; 0; R) (s ; y; L)
(s ; y; R)
;
(s ; 0; L)
;
(s ; x; R) (s ; y; L)
;
;
;
;
(s ; y; R) (s ; $; L)
2
4
2
;
Sa se arate ca L(M ) = f0n 1n = n 1g;
5
a)
;
;
;
;
;
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
vreodata ^n s ; ^n continuare, activitatea automatului liniar marginit se va
desfasura numai ^n starile s ; s ; s ; s ; s ;
0
c^and se ajunge ^n starea s si este vizat simbolul $, trecem ^n starea s si facem
un pas ^napoi pentru ca nu putem depasi simbolul $.
4
VN = (S [ fg) f@g ( [ )
f; $g
(S [ fg) (f$g [ )
[fA ; A g;
1
! [a; s @ a] A ; 8 a 2
A ! [a; a] A ; 8 a 2
A ! [a; a $]; 8 a 2
1. A
2.
3.
8x2
180
{ [a; s ] ! a; 8 ; 2 ;
{ [a; ] b ! a b; 8 a; b 2 ; 8 2
{ b [a; ] ! b a; 8 a; b 2 ; 8 2
$[@
$[@
;
;
Regulile 1-3 genereaza doua copii ale lui w, care folosesc la obtinerea derivarii:
A =) [a ; s @ a ] [a ; a ] ::: [a ; a $];
1
n n
^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
4.2.1 rezulta ca numarul de neterminali este egal cu
0
3 jj + jj j
181
! ; unde ; 2 VN ;
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)
si consideram gramatica G0 = (VN0 ; VT ; x ; P 0 ) cu VN0 = VN [ fxi = i 2 VT g: Pentru
denirea regulilor P 0 , consideram aplicatia : VT [ VN ! VN0 denita astfel:
0
a i 2 VN
(i) = ix dac
i daca i 2 VT
Evident se poate extinde la cuvinte astfel:
Daca u = u u ::: uk atunci (u) = (u ) (u ) ::: (uk ):
Consider^and regulile P 0 = f (u) ! (v)= u ! v 2 P g[fxi ! i= i 2 VT g; se obtine ca
L(G) = L(G0 ): Ideea de demonstratie este preluata din [9], iar demonstratia completa
se gaseste ^n [11].
1
Teorema 4.3.2 Pentru orice gramatica monotona G = (VN ; VT ; x ; P ) exista o gramatica monotona G0 = (VN0 ; VT ; x ; P 0 ) cu ponderea cel mult egala cu 2 astfel ^nc^at
L(G) = L(G0 ):
0
unde xi ; yj 2 VN ; i = 1; n; j = 1; m conform Teoremei 4.3.1. Atunci consideram niste variabile noi (zi ; i = 1; m) si ^nlocuim regula de mai sus cu
multimea de reguli:
182
{
{
{
{
{
{
{
{
{
{
x !z
z x !y z
z x !y z
....
zn xn ! yn zn
zn ! yn zn
zn ! yn zn
....
zm ! ym zm
zm ! ym
1
+1
+1
+1
+2
Teorema 4.3.3 Pentru orice gramatica monotona G = (VN ; VT ; x ; P ); exista o gramatica senzitiva de context G0 = (VN0 ; VT ; x ; P 0 ) echivalenta cu G:
0
Ideea este preluata din [8], iar demonstratia completa se gaseste ^n [11].
Demonstratie
183
(ii) x
! si x
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
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:
0
!
problema apartenentei la limbaje generate de gramatici monotone este decidabila, 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 reguli 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
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:
2
1. A ! a b C
3. b B ! b b C
4.1. C B ! B C
4.2. C ! c
184
4.1.4. B E ! B C
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
monotona ^mbogatita cu regula x ! , caz ^n care x nu mai apare ^n partea dreapta
a vreunei reguli.
Fie deci G = (VN ; VT ; x ; P ) o gramatica monotona ca mai sus, astfel ^nc^at L(G) =
L: Vom prezenta urmatorul algoritm:
1
Algoritmul (ALG20):
Intrare: G = (VN ; VT ; x ; P ) o gramatica monotona ca mai sus, w 2 VT ;
Intrebare: w 2 L(G) ?
Metoda:
begin
if jwj = 0 then
if x ! 2 P then 'w 2 L(G)'
else 'w 2= L(G)'
else begin
T := fx g;
m := 1;
repeat
Tm := Tm [ f 2 (VN [ VT ) = 9 2 Tm ; =G) ; jj ng;
m := m + 1;
until (Tm = Tm ) or (w 2 Tm );
if w 2 Tm then 'w 2 L(G)'
else 'w 2= L(G)'
0
185
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 :::
Dar numarul tuturor sirurilor astfel ^nc^at jj n este 1 + k + k + ::: + kn ; unde
k = jVN [ VT j: Acest numar este nit, de exemplu, avem inegalitatea
1 + k + k + ::: + kn (k + 1)n :
Dar sirul Ti este format din cuvinte peste VN [ VT de lungime cel mult n, si cum sirul
T
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:
Pasul initial: j = 1 clar.
Pasul inductiv: Presupunem ca Ti = Ti j : Sa demonstram ca Ti = Ti j : Avem
Ti j := Ti j [ f 2 (VN [ VT ) = 9 2 Ti j ; =) 2 P; jj ng:
+1
+ +1
+ +1
+ +1
+1
Dar Ti = Ti , deci Ti = Ti j :
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
pasi.
Pentru demonstrarea corectitudinii Algoritmului (ALG20), vom demonstra armatia:
+1
+ +1
+1
\x =m) ; jj n
(1)
() 2 Tm ":
+1
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
186
+1
j
j
Deci avem x =)
=) ; deci avem derivarea x =
) :
+1
Exercitiul 4.3.2 Fie gramatica G = (fA; B g; fa; b; cg; A; P ); unde multimea de reguli P este:
1. A ! a b c
2. A ! a A B
3. b B ! b b c
4. c B ! B c
Folosind Algoritmul (ALG20), sa se verice daca a b c 2 L(G):
Solutie La ^nceput avem T = fAg: Apoi deducem T = fA; a b c; a A B g: Deriv^and
^ntr-un pas formele propozitionale din T obtinem T = T [ fa a b c B; a a A B B g:
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;
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;
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;
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
a a a a b b c c B B indca are 10 simboluri, deci mai mult dec^at w;
T = T [ fa a a b b B c c; a a a a b B B B cg;
T = T [ fa a a b b b c c cg:
^In concluzie, deoarece a b c 2 T ; rezulta din Teorema 4.3.5 ca a b c 2 L(G):
3
s
s
s
s
s
s
0
1
2
3
4
0
1
x
y
B
(s ; x; R)
;
;
(s ; y; R)
;
(s ; 0; R) (s ; y; L)
;
(s ; y; R)
;
(s ; 0; L)
;
(s ; x; R) (s ; y; L)
;
(s ; 0; L)
;
(s ; x; R)
;
;
;
;
;
(s ; y; R) (s ; B; R)
1
187
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:
s
s
s
s
s
s
s
s
s
s
s
2
3
4
5
6
7
8
0
1
B
(s ; B; R) (s ; B; R) (s ; B; R)
(s ; 0; R) (s ; 1; R) (s ; B; L)
(s ; 0; R) (s ; 1; R) (s ; B; L)
(s ; B; L)
;
;
;
(s ; B; L)
;
(s ; B; L) (s ; B; L) (s ; B; R)
(s ; 0; L) (s ; 1; L) (s ; B; R)
(s ; 0; L) (s ; 1; L) (s ; B; R)
(s ; B; R)
;
;
;
(s ; B; R)
;
1
10
10
;
;
Sa se arate ca L(M ) = fw w=
e w 2 f0; 1g g:
9
10
! 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 neacceptarea) 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).
188
0
1
x
(s ; x; R)
;
;
(s ; 0; R) (s ; y; L)
;
(s ; 0; L)
;
(s ; x; R)
(s ; x; R)
;
;
(s ; 0; R) (s ; y; L)
;
(s ; 0; L)
;
(s ; x; R)
s
s
s
s
s
s
s
(s
(s
(s
(s
(s
(s
y
B
; y; R)
;
; y; R)
;
; y; L)
;
; y; R) (s ; B; R)
; y; R)
;
; y; L)
;
6
!
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
s (s ; x; R)
;
;
;
(s ; y; R)
;
;
(s ; y; R)
s (s ; 0; R) (s ; y; R)
s
;
(s ; 1; R) (s ; z; L)
;
;
s (s ; 0; L) (s ; 1; L)
;
(s ; x; R) (s ; y; L)
s
;
;
;
;
(s ; y; R)
s
;
;
;
;
;
Exercitiul 4.4.5 Sa se construiasca o masina Turing M care
f0n 1n ::: kn = n 1g; k 1 xat.
0
;
;
;
;
(s ; z; R)
(s ; z; L)
(s ; z; R) (s ; B; R)
2
;
;
accepta limbajul L =
Exercitiul 4.4.6 Sa se arate ca masinile Turing de mai jos accepta limbajul L =
s
s
s
s
s
s
s
s
0
1
2
3
4
5
6
7
a
b
; x; R) (s ; x; R)
; a; R) (s ; b; R)
; a; R) (s ; b; R)
; y; L)
;
;
(s ; y; L)
(s ; a; L) (s ; b; L)
(s
(s
(s
(s
;
;
;
;
c
(s ; c; R)
(s ; c; R)
(s ; c; R)
;
;
;
;
;
0
3
4
;
;
(s
(s
(s ; c; L) (s ; x; R) (s
;
;
(s
5
3
4
5
;
;
;
;
;
;
;
;
;
; y; R)
; y; R)
; y; L)
; y; R) (s ; B; R)
189
a
b
c
; x; R) (s ; x; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; x; L)
;
;
;
(s ; x; L)
;
;
;
(s ; c; L)
(s ; a; L) (s ; b; L)
;
s
s
s
s
s
s
s
s
s
(s
(s
(s
(s
1
2
3
x
(s
(s
(s
(s
(s
4
5
6
7
;
;
;
;
;
;
;
;
;
;
;
;
;
;
; x; R)
; x; R)
; y; L)
; x; R)
; x; R) (s ; B; R)
;
;
s
s
s
s
s
s
s
s
s
s
s
0
1
2
3
4
5
6
7
8
9
10
a
b
c
; x; R) (s ; y; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; a; R) (s ; b; R) (s ; c; R)
; x; L)
;
;
;
;
(s ; c; L)
(s ; a; L) (s ; b; L)
;
;
(s ; y; L)
;
;
;
(s ; c; L)
(s ; a; L) (s ; b; L)
;
(s
(s
(s
(s
;
;
;
;
;
;
x
(s
(s
(s
(s
(s
;
;
;
3
4
; x; R)
; x; L)
; x; R)
; x; R)
; x; R)
6
7
0
;
;
;
;
;
;
;
;
;
(s ; x; R)
(s ; y; L)
(s
(s
;
(s
(s ; x; R) (s
6
;
;
;
; y; R)
; y; R)
; y; R)
; y; R) (s ; B; R)
10
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
L
190
Exercitiul 4.4.9 (propus de studentul Butuc Adrian Nicolae, Facultatea de Informatica, Iasi)
Sa se construiasca o masina Turing M = (S; ; ; ; s0 ; B; F ) care sa accepte
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:
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
1
2
3
4
0
(s ; B; R)
(s ; 0; R)
(s ; 1; R)
(s ; 0; L)
(s ; x; R)
(s ; 0; L)
1
1
1
1
(s ; B; R)
(s ; 0; R)
(s ; 1; R)
(s ; 1; L)
(s ; y; R)
(s ; 1; L)
2
11
12
13
14
15
14
11
; x; R)
; 0; R )
; c; L)
; 0; L)
; 0; R )
; 0; L)
13
13
14
15
17
19
20
21
22
23
24
25
16
18
(s
(s
(s
(s
(s
(s
(s
(s
(s
(s
(s
; x; R)
; a; L)
; x; L)
; a; R)
; x; R)
(s
(s
(s
(s
(s
(s
11
11
13
19
20
21
22
23
18
; 0; R )
; 0; R )
; 0; R )
; 0; R )
; 0; L)
; 0; R )
(s ; a; L)
(s ; x; R)
(s ; y; R)
(s ; b; L)
(s ; y; L)
(s ; b; L)
(s ; y; R)
5
(s
(s
(s
(s
(s
(s
8
3
6
11
11
13
14
; a; R)
; a; R)
; a; L)
; a; L)
; c; R)
; a; R)
10
; y; R)
; 1; R )
; d; L)
; 1; L)
(s ; a; L)
; 1; R )
; 1; L) (s ; x; L) (s ; y; L) (s ; x; L)
15
13
15
15
15
(s ; x; L) (s ; y; L) (s
(s
(s
(s
(s ; 0; L)
(s ; 0; L)
(s
(s
17
(s
(s
(s
(s
(s
(s
10
17
17
19
19
20
; a; L)
; 0; R)
; a; R)
; a; R)
23
23
24
24
; a; L)
; a; L)
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
s
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
23
24
(s ; b; L)
(s ; y; R)
3
(s
(s
(s
(s
(s
(s
; b; R)
; b; R)
(s ; B; R)
; b; L)
; b; L)
; d; R) (s ; x; R) (s ; y; R)
; b; R) (s ; c; L) (s ; d; L) (s ; B; L)
10
8
3
6
11
16
16
11
12
12
(s ; b; L)
(s
(s
; y; L) (s
(s
; b; L) (s
; 0; R)
; b; R) (s
; b; R)
(s
(s
; b; L) (s
; b; L)
13
15
(s
(s
(s
(s
15
16
17
20
19
20
; c; R)
; 0; R)
; x; L)
; x; R)
; c; L)
10
14
(s
21
22
B
(s ; B; R)
(s ; 0; L)
(s ; 1; L)
(s ; B; R)
25
1
2
191
17
21
14
15
16
17
; d; R)
; 1; R) (s ; B; L)
; y; L) (s ; B; R)
; y; R) (s ; B; L)
; d; L) (s ; B; R)
15
5
17
18
(s ; 0; R)
; c; R) (s ; d; R)
; c; R) (s ; d; R)
; c; L) (s ; d; L) (s ; B; R)
22
22
24
10
; 0; R )
21
(s
(s
(s
(s
(s
(s
(s
12
23
21
22
23
23
24
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.
Exercitiul 4.4.11 Fie gramaticile din Exercitiile 1.2.2 si 1.2.3. Folosind Algoritmul
(ALG20), sa se precizeze daca a b c este generat de acestea.
3
192
Anexa A
Implement
ari
ale
algoritmilor
prezentat
i ^
n
^In aceasta anexa, vom prezenta implementari ^n limbajele Pascal si Prolog corespunzatoare 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)) implementata ^n limbajul Pascal;
P3. problema apartenentei pentru automate nit deterministe implementata ^n limbajul 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 normala Chomsky (Algoritmii (ALG16), (ALG17), (ALG18), (ALG19)) implementata ^n limbajul Pascal;
P7. problema apartenentei pentru gramatici independente de context st^ang nerecursive 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;
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;
193
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;
begin {programul principal}
citirea_datelor;
accesibile
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;
type stari
litera
automat
=1..nmax;
=1..mmax;
=array [stari,litera] of stari;
var n
:stari;
{numarul de stari}
m
:litera;
{cardinalul alfabetului de intrare}
q0
:stari;
195
196
197
198
199
200
Problema P3:
Avem la intrare un automat nit determinist A = (S; ; ; s ; F ) si w
iesire raspundem la ^ntrebarea daca w 2 L(A): Detalii ^n [1].
0
2 .
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;
La
201
202
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,
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.
0
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).
203
Problema P5:
Avem la intrare un automat nit determinist cu tranzitii A = (S; ; ; s ; F ).
La iesire construim un automat nit determinist echivalent cu A. Detalii ^n [1].
0
program reducerea_unui_afd_cu_lambda_tranzitii_la_un_afd;
uses crt;
const n1max=20;
n2max=50;
m1max=20;
type stari1 =1..n1max;
stari2 =1..n2max;
litera1 =0..m1max;
litera2 =1..m1max;
automat1=array [stari1,litera1] of stari1;
automat2=array [stari2,litera2] of stari2;
vector =array [stari1] of boolean;
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;
204
205
206
Problema P6:
207
208
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;
var v :array [1..10,1..10,1..10] of boolean;
{multimile V_(ij)}
w :array [1..10] of integer;
{cuvantul de analizat}
as:array [1..30] of valori;
{analizarea sintactica a lui w}
P1:array [1..10,1..3] of integer;
{matricea regulilor cu doi neterminali in partea dreapta}
P2:array [1..10,1..2] of integer;
{matricea regulilor cu terminal in partea dreapta}
n,
{lungimea cuvantului w}
n1,
{numarul de neterminali}
n2,
{numarul de terminali}
nr1,
{numarul de reguli de primul tip}
nr2,
{numarul de reguli de al doilea tip}
h,
{lungimea analizei sintactice}
poz:integer; {pozitia neterminalului curent in forma propozitionala}
209
end
end;
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])
210
211
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
w 2 L(G) ?, si ^n caz armativ, furnizam analizarea sintactica st^anga.
Se numeste conguratie tripletul (u #;
#; ), unde:
0
212
Expandare: (u #; A #; )
Reducere: (a u#; a #; )
Acceptare: (#; #; )
Eroare: ^n rest.
Este clar ca initial avem conguratia (w #; x #; ). Alegerea regulii ^n tranzitia
de expandare se face ^n mod nedeterminist. Astfel pentru implementarea acestui
algoritm, avem nevoie de strategia backtracking.
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
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}
213
214
215
procedure transformare(var w1
:cuvant;
var lg
:integer;
net
:integer;
expandare:integer);
var i:integer;
j:integer;
begin
i:=1;
while w1[i]<>net do inc(i);
if lung[expandare]=0 then begin
{avem regula de tip A->\lambda}
for j:=lg downto i+1 do
w1[j-1]:=w1[j];
w1[lg]:=0;
dec(lg)
end
else
if lung[expandare]=1 then begin
{avem regula de inlocuire, deci nu modifica lungimea formei
propozitionale}
w1[i]:=regula[expandare,2]
end
else
begin
{avem lung[expandare]>1, deci se modifica atat
forma propozitionala, cat si lungimea ei}
for j:=lg+lung[expandare]-1 downto i+lung[expandare] do
w1[j]:=w1[j-lung[expandare]+1];
for j:=i to i+lung[expandare]-1 do
w1[j]:=regula[expandare,j-i+2];
lg:=lg+lung[expandare]-1;
end
end;
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
216
217
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
^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:
0
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 gramatica de la intrare:
! ; caz ^n
2 VN
astfel ^nc^at
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 gramatica 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:
Reprezentarea gramaticii G ^n limbajul Prolog "vorbeste de la sine".
+
domains
lista_int =integer *
lista_char=char *
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
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],[]).
% 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(['(','(',')',')','(',')']).
220
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 BackusNaur.
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:
222
Index
< real fara semn >::=< ^ntreg fara semn > < X >
< X >::= e < factor scala > j
^In cele ce urmeaza, vom prezenta vocabularul limbajului Pascal exprimat prin diagrame 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
j <
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.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 >::=
223
Index
1.21. < comentariu >::= ( < orice secventa de caractere si sf^arsit de linie
necontin^and acolade drepte > )
1.22. < directiva lexicala >::= % include < nume sier >
Pentru neterminalii
224
Index
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 >
[ < 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 >
componenta constanta > g )
f; <
2.10. < componenta constanta >::=< constanta > j < lista componente constante >
2.11. < tip >::=
225
Index
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 >::=
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 >::=
226
Index
2.21. < instructiune >::= [ < eticheta > : ] < instructiune neetichetata >
2.22. < instructiune neetichetata >::=
[ < atribuire > j
< apel procedura > j
< instructiune compusa >
< instructiune if > j
< instructiune case > j
< instructiune while > j
< instructiune repeat > j
< instructiune for > j
< instructiune with > j
< instructiune goto > ]
j <
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 >
g end
f; <
instructiune >
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
expresie >
do < instructiune >
< variabila > := < expresie > < pas > <
Bibliograe
227
2.23.n. < instructiune with >::= with < expresie > f ; < expresie > g do <
instructiune >
2.23.o. < instructiune goto >::= goto < eticheta >
2.24. < variabila >::=
< identicator variabila > j
< variabila > ( : < expresie > f ; < expresie > g : ) j
< variabila > ^ j
< variabila > : < identicator c^amp >
2.25.a. < expresie >::=< expresie simpla > f < operator relational > < expresie simpla >
2.25.b.
2.26.a.
2.26.b.
2.27.a.
2.27.b.
2.28.a.
2.28.b.
2.28.c.
2.29.
^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, Reading 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, Elsevier 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.