Академический Документы
Профессиональный Документы
Культура Документы
GRIGOR MOLDOVAN
MIHAELA LUPEA
VASILE CIOBAN
2000
B I B L I O G R A F I E .......................................................................................103
Fie L, L1, L2 limbaje peste un alfabet , atunci putem defini urmtoarele limbaje:
-
L {x * | x L}
(complementara);
L* Ln unde Ln LLn -1 , L0 { };
n0
n 1
L1 / L2 = { w* yL2: wyL1}
(ctul la dreapta);
L1 \ L2 = { w* yL2: ywL1}
(ctul la stnga);
(k derivare);
(+ derivare);
*
(* derivare).
ntre dou secvene avem o "+ derivare" dac k>0 astfel nct ele s fie ntr-o
relaie de "k derivare".
1.1.3.
Se d gramatica G = (N, , P, S) unde:
N = {S,A};
= {, , , p, q, r, ', (, )};
P = {S (S)(S) | (S)(S) | (S) | A, AA' | p | q | r}.
S se verifice c urmtoarele secvene aparin limbajului generat de aceast gramatic:
a) ((p')(p))(r'');
b) ((p)(q'));
c) r''''.
1.1.4.
Se d gramatica G = (N, , P, S) unde:
N = {S,A};
= {, , , p, q, r, '};
P = {S SS | SS | S | A, AA' | p | q | r};
S se verifice c pqrpqr L(G).
1.1.5.
Fie gramatica G = ({S}, {a,b,c}, {S a2S | bc}, S). S se arate c: L(G) = {a2nbc | n0}.
1.1.6.
Se d gramatica G = ({S,H}, {b,c,d,e}, {S bbSe | H, H cHddcd}, S).
Care este limbajul generat de aceast gramatic ?
1.1.7.
Se d gramatica independent de context G = ({S,A,B}, {a,b,c}, P, S) unde:
P = {S AB, A aAb | ab, B cB | c}.
a) Care este limbajul generat de acest gramatic ?
b) S se reprezinte sub form de vectori, list ramificat i tablou gramatica dat.
1.1.8.
S se construiasc gramatici pentru generarea limbajelor:
a) L = {a2n-1 | n1};
b) L = {a2n | n1}.
1.1.9.
S se construiasc gramatici care genereaz limbajul L = {xnyn | n1}.
1.1.10.
S se construiasc o gramatic dependent de context care genereaz limbajul:
L = {anbncn | n1}.
6
1.1.11.
S se construiasc o gramatic dependent de context care genereaz limbajul:
L = {anbncndn | n1}.
1.1.12.
S se dea o gramatic care genereaz limbajul L = {anbncndnen | n1}.
1.1.13.
S se construiasc gramaticile care genereaz limbajele:
a) L1 = {ww | w{a,b}*};
b) L2 = {ambnambn | m,n1};
c) L3 = {wxw | w,x{a,b}*}.
1.1.14.
S se construiasc gramaticile care genereaz limbajele:
a) L1 a 2 | n 0 ;
b) L 2 a k | n 0, k N, fixat .
1.1.15.
S se construiasc gramaticile care genereaz:
a) expresiile algebrice ce conin operandul a i operatorii: +, *, ( ,) ;
b) expresiile algebrice ce conin operandul a i operatorii: +, -, *, :, (, ).
1.1.16.
S se construiasc o gramatic care genereaz limbajul L = {a2mbn+1c2n+1dm | m1, n0}.
1.1.17.
S se construiasc gramatici care genereaz limbajele:
a) L1 = {anbncmdm | n,m1};
b) L2 = {anbnambm | n,m1}.
1.1.18.
S se construiasc o gramatic care genereaz limbajul L = {anbncndmem | n,m1}.
1.1.19.
S se construiasc gramatici dependente de context care genereaz limbajele:
a) L1 = {anbncm | nm0};
b) L2 = {anbncm | mn0};
c) L3 = {anbmcl | nml0};
d) L4 = {anbncm | 0nm2n}.
1.1.20.
Pentru o secven w s notm numrul de simboluri s din aceast secven cu nrs(w).S
se construiasc gramatici care genereaz limbajele:
a) L1 = {w{a,b,c}* | nra(w)+nrb(w)=nrc(w)};
b) L2 = {w{a,b,c}* | nra(w)=nrb(w)=nrc(w)}.
1.1.21.
S se demonstreze c pentru ctul la dreapta dintre limbaje avem:
a) L1 / (L2 L3) = (L1 / L2 ) (L1 / L3);
b) (L1 L2) / L3 = (L1 / L3 ) (L2 / L3);
c) L1 / (L2 L3) = (L1 / L3 ) / L2;
d) (L1 L2 ) / L3 = L1 / (L2 / L3) L1 / (L3 / L2);
e) L1 / (L2 L3) = (L1 / L2 ) (L1 / L3);
f) (L1 L2) / L3 = L1 / L3 L2 / L3;
Proprieti similare exist i pentru ctul la stnga.
1.1.2.
Trebuie s artm c dup un numr finit de derivri directe, >, din simbolul iniial S
Vom scrie sub relaia de derivare direct, >, numrul regulii de producie care se
aplic n trecerea de la o secven la o secven , de exemplu, sau dac
3
scrie .
i, j, k
S aCSb ababbabb .
sau
3,1,1
S (S) (S) ((S) (S)) (S) (( A) (A)) (A) ((A' ) (A)) (A)
2
4, 4,4
6, 6, 5
((p' ) (p)) (A' ) ((p' ) (p)) (A' ' ) ((p' ) ( p)) ( r' ' ) .
5
b) i c) analog.
1.1.4.
Procedm analog cu rezolvarea problemei precedente. Numerotm produciile astfel:
1. S SS
4. S A
7. A q
2. S SS
5. A A'
8. A r
3. S S
6. A p
i atunci avem:
1, 2
4,4,4
6, 7 , 8
4,4, 4
6 , 7 ,8
1.1.5.
Egalitatea mulimilor, L(G) = {a2nbc| n0} se demonstreaz prin dubl incluziune:
a) {a2nbc| n0} L(G), pe scurt "".
Fie w=a2nbc, n fixat. Trebuie s artm c wL(G).
ntr-adevr, folosind de n ori producia 1. S>a2S i odat producia 2. S>bc, avem:
n
1.1.6.
L(G)={b2ncmd2m-1en| m1, n0}.
1.1.7.
a) L(G)={aibicj | i1, j1};
b)
1) vectorial;
vom construi vectorii:
N: S A B $
: a b c $
P: S A B # A a A b |
a b # B c B |
10
c # $
Am marcat sfritul irului de caractere ce definesc cei trei vectori cu $, iar sfritul
regulilor de producie cu acelai membru stng, cu #.
2) list ramificat nlnuit
Pentru fiecare membru drept al fiecrei producii se construiete o sublist liniar.
Considerm nodurile listei de forma:
a
b c d
unde cmpurile au urmtoarele semnificaii:
a - simbolul terminal sau neterminal al gramaticii (numai din membrul drept al
fiecrei producii);
b - pointer sau ntreg astfel:
b:= 0 dac a;
b:= pointer spre capul primei subliste ataate regulii de producie cu membrul stng a.
c - pointer sau ntreg;
Considerm urmtoarele propoziii:
p - a este primul simbol al membrului doi dintr-o producie;
u - a este ultimul simbol al membrului doi dintre toate regulile de
producie cu acelai membru stng;
x - producia curent este ultima din irul produciilor cu acelai membru
stng;
L - legtura spre capul urmtoarei subliste asociat regulii de producie cu
acelai membru stng;
c:= dac p atunci {dac x atunci 0 altfel L}
altfel {dac u atunci 0 altfel -1}
d - pointer sau ntreg
dac a este ultimul simbol al membrului drept al unei producii
atunci d:=0
altfel d este pointer spre urmtorul nod al sublistei.
Pentru gramatica dat n problem avem urmtoarea reprezentare:
11
12
-1
-1
10
-1
10
1.1.8.
a) Gramatici care genereaz limbajul {a, a3, a5, ... }:
G = ({S}, {a}, P, S) cu P ={SaSa | a} sau P = {SaaS | a} sau P = {SSaa | a} etc.
b) Pentru limbajul {a2,a4,...} avem gramaticile:
G = ({S}, {a}, P, S) cu P={SaSa | aa} sau P={SaaS | aa} sau P={SSaa | aa}.
1.1.9.
Vom da mai multe gramatici care genereaz acest limbaj:
a) G1 = ({S}, {x,y}, P, S) cu P = { S xSy | xy };
Demonstrm c L(G1)=L prin dubl incluziune:
"" este imediat:
Fie w=xnyn, n>0, deci wL;
Folosind producia S xSy de n-1 ori avem:
n -1
S x n -1Sy n -1 ;
*
13
"".
Demonstraia acestei incluziuni, revine la stabilirea faptului c gramatica G1
genereaz numai cuvinte de forma xnyn. Pentru a demonstra acest lucru s considerm
propoziia "Folosind de n ori produciile gramaticii G1, se obin numai secvene de forma
xnSyn respectiv xnyn". Aceast propoziie se demonstreaz uor prin inducie matematic.
De aici rezult c este adevrat incluziunea "".
b) G2 = ({S,A}, {x,y}, P, S) cu P = {S xAy, xA xxAy, A}.
c) G3 = ({S,B}, {x,y}, P, S) cu P = {S xBy, By Byy, B }.
d) G4 = ({S,A,B}, {x,y}, P, S)
cu P={S xA, A By, B S | } sau P = {S xA | xy, A By, B S}.
e) G5 = ({S,A,B}, {x,y}, P, S)
cu P = {S By, BxA, AS | } sau P = {S By | xy, B xA, A S}.
Se observ c gramaticile G1, G4, G5, sunt independente de context (de tipul 2 dup
Chomsky) iar G2 i G3 sunt dependente de context (tipul 1).
1.1.10.
G = (N, , P, S)
N = {S,B}, = {a,b,c}; P = {S aSBc | abc, cBBc, bBbb}
Numerotm produciile:
1. S aSBc;
2. S abc; 3. cB Bc; 4. bB bb.
Vom da cteva explicaii:
- folosind prima producie {SaSBc} de n-1 ori se obine secvena an-1S(Bc)n-1;
- folosind apoi producia a 2-a obinem dup nc o derivare secvena
anbc(Bc)n-1;
- n continuare se folosete a 3-a producie de 1+2+...+n-1 ori pentru a obine anbBn-1cn;
- se folosete n final ultima producie de n-1 ori i se obine anbncn.
Exemplu: s ncercm s obinem cuvntul a4b4c4:
S aSBc aaSBcBc a 2 aSBcBcBc a 4 bcBcBcBc a 4 bcBcBBcc
1
a b bBBc a bb bBc a b c .
4
10
11
11
17
1.1.17.
a) Ideea folosit este urmtoarea: considerm cuvintele formate din dou secvene. Prima
secven anbn iar a doua cmdm apoi vom concatena cele dou secvene. Practic avem
gramatica:
G1 = ({S,X,Y}, {a,b,c,d}, P, S) cu P = {SXY, XaXb | ab, YcYd | cd}.
Neterminalul X genereaz secvenele anbn, iar neterminalul Y genereaz secvenele cmdm.
b) Relund ideea de la punctul a) avem gramatica:
G2 = ({S,X,Y}, {a,b}, P, S) cu P = {SXY, XaSb | ab, YaYb | ab}.
1.1.18.
Folosind ideea de la problema 1.1.17. avem gramatica:
G = ({S,X,Y}, {a,b,c,d,e}, P, S) cu
P = {SXY, XaSBc | abc, cBBc, bBbb, YdYe | de}.
1.1.19.
a)G = (N, , P, S), N = {S,A,B}, = {a,b,c}
P = {SaSBc | A, cBBc, bBbb, aBab, AaAb |}.
exemplu: fie w=a3b3c
S aSBc aABc aaAbBc aaaAbbBc a 3 bbBc a 3 b 3 c 3 .
1
(Am numerotat produciile n ordinea scrierii lor n mulimea P asemntor punctului a).
d) G = (N, , P, S), N = {S,B}, = {a,b,c},
P = {SaSBc | aSBcc |, aBab, cBBc, Bcbc, bBbb}
exemplu: fie w=a2b2c3
S aSBc aaSBccBc aaBccBc aabccBc a 2 bcBcc a 2 bBccc a 2 b 2 c 3 .
1
(Am numerotat produciile n ordinea scrierii lor n mulimea P asemntor punctului a).
1.1.20.
a) G = (N, , P, S}
N = {S}, = {a,b,c}, P={SaSc | cSa | bSc | cSb | SS | };
Primele dou producii permit ca atunci cnd n forma propozitional se introduce un a
s se introduc i cte un c n orice ordine.
Produciile 3 i 4 permit ca atunci cnd n forma propozitional se introduce un b s se
introduc i cte un c n orice ordine.
Producia a 6-a permite eliminarea lui S.
Exemplu: w=acbc.
S aSc acSbc acbc.
1
9 ,10 ,11
2o. Dac M este un AFD complet definit atunci evident funcia de tranziie ' menionat
la 1o va fi i ea complet definit.
3o. ntotdeauna i invers, de la funcia ' definit la 1o se poate trece la .
1.2.2. Reprezentare
Un automat finit poate fi reprezentat sub form de tablou sau sub forma unui graf
orientat. Astfel, tabloul alturat ne furnizeaz toate elementele care definesc un automat
finit M=(Q,,,qo,F), unde Q={qo,...,qn}, ={a1,...,am} i n care se consider:
1, daca q i F
.
zi
0, altfel
20
O alt reprezentare asociat automatului M = (Q, , , qo, F), este graful orientat
cu noduri i arce etichetate astfel:
- mulimea vrfurilor se eticheteaz cu stri, elemente ale lui Q;
- starea iniial se reprezint printr-un nod de forma:
k tranziia;
+ tranziia;
*
* tranziia.
21
Apoi (p,w1) (q,w2) dac i numai dac de la prima configuraie se poate ajunge
la a doua configuraie folosind k tranziii directe; p,qQ; w1,w2*.
ntre dou configuraii avem o "+ tranziie", dac i numai dac k>0 astfel nct ntre
ele s avem o "k-tranziie", iar
*
1.2.5. Funcionare
Funcionarea unui automat finit M = (Q,,,qo,F) se petrece n timp i este
*
definit de relaia .
Funcionarea automatului finit M care la momentul de timp ti are configuraia
(q,w), w = aw', presupune trecerea la momentul de timp ti+1 sau oprirea acestuia. n acest
proces de trecere deosebim urmtoarele situaii:
1o micare, dac (q,aw') (p,w') adic (q,a) p, deci la momentul ti+1 are
configuraia (p,w');
2o blocare, dac (q,a)=;
*
(qo,w) (q,);
n caz contrar starea q este accesibil.
Automatul M poate fi transformat ntr-un AF echivalent, M',care s conin numai stri
accesibile din starea iniial qo. Pentru determinarea lui M' = (Q', , ', qo, F') se
poate folosi algoritmul:
a) So={qo}, i:=0;
b) Si+1 = Si {q | qQ, (p,a)q, pSi, a};
c) Dac Si+1 Si, atunci i := i+1, salt la b);
d) Q' Si 1 , F' F S i1 iar ' (q, a) (q, a), q Q' , a .
Fie M = (Q, , , qo, F). O stare qQ este o stare neproductiv dac i numai
dac nu exist w* astfel nct:
*
23
unde 2 : Q2xQ2.
Observaii.
1o.Funcia de tranziie 2 a AFD, M2, dat mai sus, este complet definit.
2o.Elementele Sk, k0 (n numr finit) ale mulimii Q2 i valorile funciei 2 : Q2x Q2
care definesc automatul M2 se pot obine din automatul M1 i astfel:
- S0 = {q0}, 2(S0,a) = 1(q0,a), a.
- fiecare submulime 1(q,a) a lui Q1, dac este diferit de submulimile deja
determinate se noteaz cu Si, i1.
- pentru fiecare nou stare Sk a automatului M2 se calculeaz:
2 (S k , a)
(q, a), a ;
qSk
aceast stare Sk este un candidat la mulimea strilor lui M2 n sensul precizat mai sus;
procesul se termin cnd nu mai obinem stri noi;
evident c F2 = {S | SQ2, SF1 }.
3o. Teorema de mai sus justific considerarea n continuare a automatelor finite
deterministe complet definite, fr a avea o limitare a unor rezultate teoretice.
(q 1 , x) (q 3 , ); (q 2 , x) (q 4 , ),
q3 i q4 nu aparin simultan lui F sau Q F, ori dac cel puin una din aceste relaii nu are
loc.
24
q1 q 2 .
0
n -3
ntr-un AFN cu -micri se pot pune n eviden printr-un procedeu analog cu cel
de la observaia 2o de mai sus, toate strile accesibile dintr-o stare q, folosind numai
-tranziii.
Teorem. Dac L este un limbaj acceptat de un AFN cu -micri, M1, ntotdeauna
exist un AFN fr -micri, M2, echivalent cu M1, adic:
L = T(M1) = T(M2).
26
1.2.2.
S se reprezinte sub form de graf urmtoarele AF:
a) M = ({p,q,r}, {a,b}, , p, {p})
A
p Q
q R
r P
b
p 1
p 0
r 0
B
P
T
R
p
c
r
p
p
q
0
1
1
0
1.2.3.
S se reprezinte sub form de graf automatul finit: M = (Q, , , qo, {qo})
unde Q = {qo,q1,q2,q3}, ={0,1}, iar funcia :QxQ este dat de tabloul urmtor:
qo
q1
q2
q3
0
q2
q3
q0
q1
1
q1
qo
q3
q2
1.2.5.
S se construiasc automatul finit care accept limbajul:
L={0n1 m | n0, m1} {1n0m | n0, m1}.
1.2.6.
S se construiasc automatele care accept limbajele:
a) L1={0(10)n | n0};
b) L2={1(01)n | n0};
S se precizeze apoi, automatul redus care accept limbajul L1L2.
1.2.7.
S se construiasc automatele care accept urmtoarele limbaje (peste {a,b}*) descrise
narativ:
a) L1 format din secvene care conin un numr par de a-uri i numr par de b-uri;
b) L2 format din secvene care conin un numr par de a-uri i numr impar de b-uri;
c) L3 format din secvene care conin un numr impar de a-uri i numr par de b-uri;
d) L4 format din secvene care conin un numr impar de a-uri i numr impar de b-uri;
1.2.8.
S se construiasc automatele care accept urmtoarele limbaje (peste {a,b,c}*) descrise
narativ:
a) L1 format din secvene care conin un numr par de a-uri i numr par de b-uri;
b) L2 format din secvene care conin un numr par de a-uri i numr impar de b-uri;
c) L3 format din secvene care conin un numr impar de a-uri i numr par de b-uri;
d) L4 format din secvene care conin un numr impar de a-uri i numr impar de b-uri;
1.2.9.
S se construiasc automatele care accept urmtoarele limbaje (peste {a,b,c}*) descrise
narativ:
a) L1 format din secvene care conin un numr par de a-uri, b-uri i c-uri;
b) L2 format din secvene care conin un numr par de a-uri i b-uri i un numr impar
de c-uri;
c) L3 format din secvene care conin un numr impar de a-uri i un numr par de b-uri
i c-uri ;
d) L4 format din secvene care conin un numr impar de a-uri b-uri i c-uri;
1.2.10.
S se construiasc automatele M care accept urmtoarele limbaje:
a) T(M)={w1aaw2 | w1{b,ab}*, w2{a,b}*};
b) T(M)={w1aaaw2 | w1, w2{a,b}*};
c) T(M)={1n0m1u | n0, m1, u{0,1}*};
d) T(M)={0n1 m0q | n,m,q1};
e) T(M)={0n1m0q | n,m1, q0};
28
1.2.11.
S se construiasc automatele M care accept urmtoarele limbaje:
a) T(M) = {w | w{b,ccc}*};
b) T(M) = {c3n | n1};
c) T(M) = {a,bc}*;
d) T(M) = {bc, c, d}*;
e) T(M) = {0(10)n01m | n0, m0} {(10)n01m | n1, m0} cu cel mult 4 stri;
1.2.12.
Se d automatul finit nedeterminist reprezentat mai jos:
mulimea
1.2.14.
Fie Li
mulimea
de
secvene
acceptate
de
automatul
finit
determinist
1.2.16.
S se construiasc un automat finit peste alfabetul {0,1,...,9} care s accepte numai
cuvinte cu proprietile:
-primul caracter este 0;
-al i-lea caracter este o cifr mai mare sau egal dect oricare din cele i-1cifre
anterioare.
1.2.17.
S se construiasc automate finite care accept limbajele urmtoare:
a) mulimea cuvintelor peste alfabetul {a,b} n care orice dou a-uri sunt separate
printr-o secven de lungime 4k, k > 0 de simboluri b.
b) mulimea cuvintelor peste alfabetul {0,1} cu cel mult dou zerouri
consecutive i cel mult dou 1-uri consecutive.
c) mulimea cuvintelor peste alfabetul {0,1} n care orice pereche de 0-uri alturate
apare naintea oricrei perechi de 1 alturate.
d) mulimea cuvintelor peste alfabetul {a,b} a cror lungime este divizibil cu trei.
e) mulimea cuvintelor care ncep cu 1 i reprezint scrierea n binar a tuturor
numerelor divizibile cu cinci.
f) mulimea cuvintelor peste alfabetul {a,b,c} care au aceeai valoare cnd le evalum
de la stnga la dreapta ca i de la dreapta la stnga conform urmtoarei tabele de
operaii:
a
a a
b c
c b
b
a
a
c
c
c
b
a
1.2.18.
S se construiasc automatele finite care accept numai cuvinte peste alfabetul {a,b,c}
cu proprietatea c:
a) simbolul cu care se termin cuvntul mai apare cel puin o dat n cuvnt;
b) simbolul cu care ncepe cuvntul este acelai cu cel cu care se termin cuvntul;
c) simbolul cu care ncepe cuvntul mai apare cel puin o dat n cuvnt;
d) exist un simbol n cuvnt care mai apare cel puin o dat n cuvnt.
1.2.19.
Cte limbaje diferite definite peste alfabetul {0,1} sunt acceptate de toate automatele
finite cu dou stri dac:
a) ele sunt deterministe;
b) ele sunt nedeterministe;
30
31
1.2.5.
Dm reprezentarea automatului prin graful de tranziie:
1.2.6.
1.2.7.
Vom rezolva doar acest punct deoarece pentru a obine celelalte automate se modific
doar mulimea strilor finale ale automatului urmtor:
1.2.10.
Vom rezolva doar punctul a), graful de tranziie al automatului care accept limbajul este:
1.2.11.
Vezi problemele 1.2.5. i 1.2.6.
1.2.12.
Avem M = (Q, , , qo, F) unde Q = {qo, q1, q2}, = {0,1}, F = {q2}, :QxQ
funcia de tranziie corespunztoare.Vom nota cu M = (Q, , , q0, F) AFD astfel
nct: T(M) = T(M').
Construcia lui M' se face considernd:
Q ' P(Q), q '0 {q '0 }, F ' {S | S Q, S F } , ':Q'xQ' cu
'(S,a) = {p | pQ, qS, a, (q,a)p} =
(q, a).
qS
33
1.2.15.
a) Vom da graful de tranziie al automatului ce accept numerele ntregi:
1.2.16.
M = (Q, , , qo, F) unde:
Q = {qo, q1, . . . , q10}, = {0, 1, ..., 9}, F = Q \ {qo}
Funcia de tranziie este definit astfel:
(qo, 0) = q1;
(qi, i-1) = qi, i=1, . . . , 10;
(qi, j) = qj+1, i=1, . . . , 9, j=i, . . . , 9;
nu este definit n restul cazurilor.
Dac = {0,1,2,3} atunci avem graful de tranziie:
1.2.17.
a) Vom da rezolvarea sub forma unui graf de tranziie:
34
r+s = s+r;
(r+s)+t = r+(s+t);
(rs)t = r(st);
r(s+t) = rs+rt;
(r+s)t=rt+st;
f) * = ;
g) (r*)* = r*;
h) (+r)* = r*;
i) r+ = +r = r;
j) r = r=;
k) (r*s*) = (r+s)*;
l) r*+ = +r*=r*;
m) r=r=r
Dou expresii regulare sunt egale dac limbajele reprezentate de acestea sunt
egale.
Teorem. Dac r este o expresie regular, atunci exist un AFN care accept
limbajul reprezentat de aceast expresie regular i reciproc.
35
Expresia
AFN
Observaii
regular
Expresia regulara a
reprezinta limbajul
{a} care este acceptat
a, a
de acest automat
f 1 si f 2 nu vor mai fi
stari finale; noua
p+q
pq
initiala ramane q1 ,
noua stare finala f 2
p*
36
R kij { | (q i , ) (q j , ) [, , 0 | | | |, (q i , ) (q s , ) s k]}
Fiecrei mulimi regulare R ijk i corespunde o expresie regular rijk ; aceste expresii
regulare pot fi calculate folosind definiia recursiv a mulimilor R ijk dup formulele:
rij0 a 1 . . . a s x,
, daca i j
; i, j {1, 2, . . . n};
, daca i j
n aceste relaii se observ c a1, a2, . . . ,as sunt toate simbolurile din care duc
automatul din starea qi n starea qj.
Limbajul acceptat de automatul M se poate specifica cu ajutorul expresiei regulare:
r1jn1 r1jn2 . . . r1jnp unde F {q j1 , q j 2 , . . . q jp } .
Acest sistem se poate rezolva folosind metoda eliminrii a lui Gauss i reducnd totul la
rezolvarea de ecuaii cu o singur necunoscut.
Expresia regular ataat automatului va fi: Xi + Xi + ... + X i unde F = {qi , qi ,..., qi } .
1
Exemplu: Fie automatul finit reprezentat mai jos. S observm c irurile de simboluri
ce aduc automatul n starea A sunt: , apoi + (adic reunit cu) irurile de forma XC b unde
prin XC am notat toate secvenele ce aduc automatul n starea C.
Avem:
X A = + XC b
Analog obinem:
XB = XA a
XC = X B b + X A b + XC a
De unde Xc = ( ab + b ) ( bab + bb + a )* .
n final avem o ecuaie de forma X=X+. Soluia acestei ecuaii este X=* i ea este
unic dac (verificare: *=*+ adic * = ( ) adic *=*). n cazul
considerat avem =bab+bb+a iar =ab+b.
k=3
(a + bb )*
(a + bb )*
k=0
k=1
a +
r12
a *b
(a + bb )* b
r13
a *c
(a + bb )* c
r 21
ba
b(a + bb )*
ba * b
( ba * b)
r 23
ba *c
b(a + bb )* c
r 31
a +
a +
a +
r11
r 22
r 32
k
r 33
39
(a bb) * ca
1
0
0 *
0
r11 = r11 (r11 ) + r11 = (a + )(a + ) (a + ) + (a + ) = (a )(a )
= (a + )(a + )* = (a + ) a* = a + + a* = a* ;
*
+
*
*
1
0
0 * 0
0
r12 = r11 ( r11 ) r12 + r12 = (a + )(a ) b + b = (a + ) b + b = (a ) b = (a + ) b = a b;
+
*
*
*
0
0
*
0
0
r13 = r11 ( r11) r13 + r13 = (a + )(a + ) c + c = (a + ) c + c = (a ) c = (a + ) c = a c;
+
*
*
*
1
0
0 *
0
r 21 = r 21 ( r11 ) + r 21 = b(a + ) (a + ) + b = b(a + ) + b = b(a ) = b(a + ) = ba ;
*
*
*
1
0
0 * 0
0
r 22 = r21 ( r11 ) r12 + r 22 = b(a + ) b + b(a ) ba b ;
*
*
1
0
0 * 0
0
r 23 = r 21 ( r11 ) r13 + r 23 = b(a + ) c + = ba c;
*
1
0
0 * 0
0
r 31 = r31 ( r11 ) r11 + r31 = (a + ) c + = + = ;
*
1
0
0 * 0
0
r 32 = r 31 ( r11 ) r12 + r32 = (a + ) b + = + = ;
*
1
0
0 * 0
0
r 33 = r31 ( r11 ) r13 + r 33 = (a + ) b + a + = + a + = a + ;
*
*
*
*
*
*
*
*
*
*
*
*
2
1
1 * 1
1
r11 = r12 (r 22 ) r 21 + r11 = a b(ba b ) ba a a b(ba b) ba a a (bba ) a
= a * (bba * ) * (a bb)* ;
*
*
*
*
*
*
*
*
*
*
2
1
1 * 1
1
r12 = r12 ( r22 ) r 22 + r12 = a b(ba b ) (ba b ) a b a b(ba b ) a b(ba b )
= a * b(ba * b) * (a bb) * b;
*
*
*
*
*
*
*
*
*
*
2
1
1 * 1
1
r13 = r12 ( r 22 ) r13 + r12 = a b(ba b ) ba c a c a b(ba b)ba c a c (a bb) c;
*
*
*
*
*
*
*
*
*
2
1
1 * 1
1
r 21 = r 22 ( r22 ) r 21 + r 21 = (ba b )(ba b ) ba + ba (ba b) ba b(a bb) ;
*
*
*
*
*
*
*
2
1
1 * 1
1
r 22 = r 22 ( r 22 ) r 22 + r 22 = (ba b )(ba b ) (ba b ) (ba b ) (ba b ) (ba b )
= (ba * b )(ba * b ) * (ba * b ) (ba * b) ;
*
*
*
*
*
*
*
* *
*
2
1
1 * 1
1
r 23 = r 22 (r 22 ) r 23 + r 23 = (ba b )(ba b )ba c ba c (ba b ) ba c (ba b) ba c
b(a bb) * c;
*
*
*
2
1
1 * 1
1
r 31 = r 32 ( r 22 ) r12 + r31 = (ba b ) ba + = + = ;
*
*
*
2
1
1 * 1
1
r 32 = r32 ( r 22 ) r 22 + r 32 = (ba b ) (ba b ) + = + = ;
40
*
*
*
2
1
1 * 1
1
r 33 = r32 ( r22 ) r 23 + r33 = (ba b ) ba c a = + a + = a + ;
*
*
*
*
3
2
2 * 2
2
r11 = r13 ( r33 ) r31 + r11 = (a + bb ) c(a + ) + (a + bb ) = (a + bb ) ;
*
*
*
*
*
3
2
2 * 2
2
r13 = r13 (r 33 ) r33 + r13 = (a + bb ) c(a + ) (a + ) + (a + bb ) c = (a bb) c(a )
= (a + bb )* ca* ;
Metoda 2:
Aceast metod presupune c automatul nu are stri inaccesibile. Atam automatului dat
urmtorul sistem de ecuaii liniare avnd coeficieni i necunoscute expresii regulare;
fiecare ecuaie corespunde unei stri a automatului:
X Xa Yb
Y Xb
Z Xc Za
cu urmtoarele semnificaii:
X reprezint expresia regular ataat mulimii cuvintelor care aduc automatul n starea
q1;
Y reprezint expresia regular ataat mulimii cuvintelor care aduc automatul n starea
q2;
Z reprezint expresia regular ataat mulimii cuvintelor care aduc automatul n starea
q3;
Xa reprezint X concatenat cu a;
+ reprezint reuniunea;
X=Xa+Yb+ are semnificaia urmtoare : un cuvnt care aduce automatul n starea q1 se
poate obine n unul din urmtoarele moduri:
- dintr-un cuvnt care aduce automatul n starea q1 concatenat cu simbolul "a":
Xa (bucla pe q1 etichetat cu "a");
- dintr-un cuvnt care aduce automatul n starea q2 concatenat cu simbolul "b":
Yb ( arcul de la q2 la q1 etichetat cu "b");
- secvena vid las automatul n starea q1 pentru c q1 este stare iniial.
Se va rezolva sistemul n necunoscutele X,Y,Z, iar expresia regular ataat automatului
va fi X+Z deoarece acestea corespund strilor finale q1 i q3.
Rezolvarea unui astfel de sistem ine cont de rezolvarea unei ecuaii de forma urmtoare:
X = X+, unde i sunt expresii regulare
41
Q1
q2
q2
Q2
q3
q2
Q3
q2
q3
X 2 X 1 (a b) X 2 c X 3 a
X X aX c
2
3
3
cu urmtoarele semnificaii:
X1 - reprezint expresia regular
automatul n starea q1; X1 = pentru
este stare iniial);
X2 - reprezint expresia regular
automatul n starea q2;
X3 - reprezint expresia regular
automatul n starea q3;
1.3.2.
S se scrie expresiile regulare care reprezint limbajele acceptate de automatele:
43
1.3.3.
Dai o expresie regular care s reprezinte mulimea:
a) {101, 1001, 10001, 100001, . . . };
b) tuturor secvenelor formate cu simbolurile a i b care conin cel puin un a;
c) toate secvenele cu a-uri i b-uri care au cel puin dou a-uri consecutive.
1.3.4.
Precizai dac secvenele ce urmeaz sunt elemente ale mulimilor regulare reprezentate
de expresiile regulare alturate:
a) 01110111;
(1*01)*(11+0) *;
b) 11100111;
(1*0)*+(0*11)*;
c) 011100101;
01*01*(11*0)*;
d) 1000011;
(10*+11)*(0*1)*;
1.3.5.
S se construiasc automatele finite fr -tranziii corespunztoare urmtoarelor expresii
regulare:
a) (aa+b*)c+ + ((+bc)aa)*;
b) + (a+b+c)* + ((ab+bc)(a*+c+))+;
c) 01((10)*+111)*+0)*1;
d) (11+00)*(01+10)*;
e) (aa+bb*a+abb*a)*;
f) 10+(0+11)0*1+1+(10+01).
1.3.6.
S se arate c automatul dat prin diagrama de tranziie de mai jos, accept limbajul
specificat prin expresia regular: (01+1)*00(0+1)*.
44
1.3.7.
Se d AFN, M1=({q0,q1}, {0,1}, , qo, {q0}) unde (q0,0)={q0,q1}, (q0,1)={q1},
(q1,0)={qo}, (q1,1)={q0,q1}. Gsii AFD, M astfel ca T(M)=T(M1) i scriei o expresie
regular care s reprezinte limbajul acceptat de cele dou automate.
1.3.8.
Stabilii dac sunt adevrate proprietile:
a) (rs+r)*r=r(sr+r)*;
b) s(rs+s)*r=rr*s(rr*s)*;
c) (r+s)*=r*+s*;
1.3.9.
S se arate c dac un limbaj este regular, atunci exist o infinitate de expresii regulare
care l specific.
0
{q0, q1}
{q0}
{q0, q1}
1
{q1}
{q0, q1}
{q0, q1}
1
0
1
Construcia.
Se d G = (N, , P, S). Automatul M = (Q, , , qo, F) cu proprietatea T(M) = L(G) are:
Q = N { k }, k N;
{k}, daca (S ) P
F
;
{S, k}, daca (S ) P
: Qx P(Q) cu (A, a) = { B | (A aB) P } K unde
{k}, daca (A a) P
K
; A, B N si a .
, altfel
(k,a)=, a.
Teorem.(reciproca teoremei precedente)
Oricare ar fi un automat finit M = (Q, , , qo ,F), exist o gramatic regular
regular G = (N, , P, S) astfel nct limbajul generat de G s coincid cu
limbajul acceptat de M, adic L(G) = T(M).
Construcia.
Se d M = (Q, , , qo ,F). Gramatica G = (N, , P, S) cu proprietatea L(G) = T(M) se
construiete astfel:
N=Q;
S=qo;
- acelai cu al automatului dat;
P={A>aB | (A,a)B} {A>a | (A,a)B, BF}.
46
Construcia.
Fie automatele: M1 = (Q1 , , 1 , q,o , F1); M 2 = (Q2 , , 2 , q,o, , F2) ; cu L1=T(M1), L2=T(M2).
a) Automatul care accept limbajul L1 L 2 este M = (Q, , , q, F) unde:
Q = Q1 Q2 { q o }, q o Q1 Q2 ;
F F2 , daca L1 L 2
;
F 1
F1 F2 {q}, daca L1 L 2
(q o , a) = 1 (q ,o , a) 2 (q,o, , a), a ;
q, a , daca q Q1
q, a 1
2 q, a , daca q Q 2
qo = qo ;
F , daca q "0 F2
;
F 2
"
F1 F2 , daca q 0 F2
1 (q, a), daca q Q1 - F1
46
q Q, a .
1 (q, k) {k}, a .
Deci, pentru simbolurile a pentru care nu exist arce corespunztoare dintr-o stare
q se construiesc arce spre k (o stare nou introdus); totodat avem bucl pe k, a;
starea k va fi neproductiv.
e) Pentru construirea automatului care accept limbajul L1 L 2 se ine seama de relaia
L1 L2 = L1 L2.
,,
care sunt deterministe i total definite cu I :Qix Qi; i=1,2. Atunci automatul M cu
proprietatea c T( M1) T( M 2) = T(M) este M = (Q1 xQ2 , , , (q,o , q,o, ), F1 xF2 ) unde
(( p1 , p2 ), a) = (1 ( p1 , a), 2 ( p2 , a)) a , p1 Q1 , p2 Q2 .
1.4.3.
S se arate c o gramatic care are numai producii de forma ABa i Aa este
regular.
1.4.4.
~
1.4.5.
S se arate c, dac L (definit peste alfabetul ) este un limbaj regular, atunci i
urmtoarele limbaje sunt regulare:
a) PRE(L) = {w* | x*, wxL} = mulimea prefixelor cuvintelor din L;
b) SUF(L) = {w* | x*, xwL} = mulimea sufixelor cuvintelor din L;
c) INT(L) = {w* | x,y*, xwyL} = mulimea secvenelor interioare cuvintelor
din L.
48
1.4.6.
Fie L un limbaj regular acceptat de un automat finit determinist cu n stri. Atunci au loc:
1. L, L finit <=> wL cu |w| < n;
2. L infinit <=> wL cu n | w |< 2*n.
S se construiasc un algoritm care s decid dac un limbaj regular specificat printr-un
automat finit este finit sau nu.
1.4.7.
S se construiasc automate finite care accept limbajele de mai jos, apoi s se
construiasc pentru fiecare automat gramatica regular corespondent:
a) mulimea cuvintelor peste alfabetul {a,b} n care orice dou a-uri sunt separate
printr-o secven de lungime 4k, k1 de simboluri b.
b) mulimea cuvintelor peste alfabetul {0,1} cu cel mult dou zerouri consecutive i cel
mult dou 1-uri consecutive.
c) mulimea cuvintelor peste alfabetul {0,1} n care orice pereche de 0-uri alturate
apare naintea oricrei perechi de 1 alturate.
d) mulimea cuvintelor peste alfabetul {a,b} cu lungimea divizibil cu 3.
d) mulimea cuvintelor care ncep cu 1 i reprezint scrierea n binar a tuturor
numerelor divizibile cu 5.
f) mulimea tuturor constantelor reale din limbajul "C".
g) mulimea cuvintelor peste alfabetul {a,b,c} care au aceeai valoare cnd le evalum
de la stnga la dreapta ca i de la dreapta la stnga conform urmtoarei tabele de
operaii:
a
b
c
a
a
c
b
b
a
a
c
c
c
b
a
1.4.8.
S se constriuasc automatele finite care accept limbajele de mai jos, apoi s se
construiasc gramaticile regulare corespondente:
a) L1 = { w{a}* | nra(w)=par};
b) L2 = { w{a,b}* | nra(w)=par i nrb(w)=impar};
c) L3 = { w{a,b,c}* | nra(w)=par i nrb(w)=impar i nrc(w)=par}.
1.4.9.
S se construiasc un automat finit peste alfabetul {0,1, . . . ,9} care s accepte numai
cuvinte cu proprietile:
-primul caracter este 0;
-la i-lea caracter este o cifr mai mare sau egal dect oricare din cele i-1 cifre interioare.
S se construiasc gramatica regular corespondent.
49
1.4.10.
S se construiasc automatele finite care accept numai cuvinte peste alfabetul {a,b,c}
cu proprietatea c:
a) simbolul cu care se termin cuvntul mai apare cel puin o dat n cuvnt;
b) primul simbol al cuvntului este acelai cu cel cu care se termin cuvntul;
c) simbolul cu care ncepe cuvntul mai apare cel puin o dat n cuvnt;
d) exist un simbol n cuvnt care mai apare cel puin o dat n cuvnt.
S se construiasc n fiecare caz gramatica regular corespondent.
1.4.11.
S se arate c urmtoarele limbaje sunt limbaje regulare:
a) L={an | n0};
b) L={akn | n0, k fixat};
c) L={anbm | n0,m0};
d) L={abncdm | n0,m0};
e) L={(bcd)m | m0};
f) L={(bmcdk)n | m,n,k0};
1.4.12.
S se studieze dac sunt regulare urmtoarele limbaje:
a) L={0n12n | n1};
b) L={0n10n | n1};
c) L={ww | w{0,1}*};
d) L={(ab)n(ba) m | m,n1};
e) L={(ab)nc(ba)m | m,n1};
f) L={wn | w{ab,ba}*,n1};
g) L={(uw)n | u{a,b}*,w{ab,ba}*,n1};
S se aplice, apoi, lema de pompare pentru diferite secvene din aceste limbaje.
50
Ordinea aplicrii produciilor corespunztoare din cele dou gramatici pentru generarea
aceluiai cuvnt este invers.
1.4.4.
Dac L este regular atunci exist o gramatic regular G = (N, , P, S) care l genereaz
i are numai producii de forma AaB, Aa, S .
Construim gramatica G' = (N, , P', S) cu produciile
P' = {ABa | (AaB)P} {Aa | (Aa)P} {S | (S)P}.
~
problemei
precedente aceast gramatic este regular, deci limbajul generat de ea L , este regular.
1.4.5.
Dac L este regular atunci exist un automat finit M = (Q, , , q0, F) fr stri
inaccesibile i neproductive care l accept.
a) construim un automat M' din automatul M astfel nct toate strile automatului M vor
deveni n M' stri finale
M' = (Q, , , q0, F'), F'=Q
M' va accepta limbajul format din mulimea prefixelor (nu neaprat proprii) cuvintelor
limbajului L.
b) construim un automat M" care accept reuniunea tuturor limbajelor acceptate de Mi,
i=0,1, . . . n. Mi se obin din M astfel nct fiecare stare a automatului devine pe rnd
stare iniial.
Fie Q = {q0, q1, q2, . . . qn}, construim MI = (Q, , , qi, F), I = 0, 1, . . . n.
M0=M
n
SUF(L) = T(M" ) = T(M) i M" va accepta limbajul format din mulimea sufixelor (nu
i 0
52
1.4.7.
a) Automatul construit este:
53
Lema 1. Gramatica G este echivalent cu o gramatic G' = (N', ', P', S) fr simboluri
inaccesibille.
Algoritm. Gramatica G' conine numai simboluri accesibile care se determin astfel:
1o. V0 := { S }, i := 1 ;
2o. Vi := Vi-1 {x | (A x ) P, A Vi-1 , , (N )* } ;
3o. Dac Vi Vi-1 atunci i:=i+1 salt la 2o
altfel stop.
N
:= N Vi , ' := Vi
2. Simboluri neproductive
Un simbol A, AN este neproductiv dac nu exist nici o derivare de forma
*
*
A x , x , n caz contrar A este simbol productiv.
Lema 2. Gramatica G este echivalent cu o gramatic G' = (N', , P', S) care conine
conine numai simboluri productive.
Algoritm. Simbolurile productive se determin astfel:
1o. N 0 := , i := 1;
2o. N i := N i-1 { A | (A ) P, (N i-1 )* };
3o. Dac N i N i-1 atunci i:=i+1 salt la 2o
altfel N':=Ni stop.
Mulimea produciilor P' este: {A (A)P, AN', (N')*}.
56
Observaie: trebuie ca SN', pentru c dac SN' atunci L(G) = , adic gramatica
iniial G nu genereaz nici o secven.
3. Simboluri neutilizabile
Un simbol este neutilizabil dac el este fie inaccesibil, fie neproductiv.
Lema 3. Gramatica G este echivalent cu o gramatic G' = (N', ', P', S) fr simboluri
neutilizabile.
Observaie. Pentru obinerea gramaticii G' se aplic:
a) algoritmul corespunztor lemei 1 pentru G;
b) algoritmul corespunztor lemei 2 pentru gramatica obinut la a).
4. -producii
O producie de forma A se numete -producie.
Dac L(G) atunci avem producia S i S nu apare n membrul drept al
nici unei producii. Putem elimina pe S din celelalte producii considernd un nou simbol
de start S' i produciile S | S.
Lema 4. Gramatica G este echivalent cu o gramatic G' = (N', , P', S') n care:
a) dac L(G) atunci G' nu are -producii;
b) dac L(G) atunci avem o singur producie S iar celelalte producii
nu-l conin n membrul drept pe S'.
Observaie. Gramatica G' se numete -independent.
Algoritm. Pentru obinerea gramaticii G' = (N', , P', S') fr -producii procedm
astfel:
1o. Construim mulimea N care are ca elemente acele neterminale care prin derivare
*
conduc la adic N = { A | A N, A }.
Se poate folosi pentru determinarea mulimii N un algoritm similar cu cei
utilizai pentru determinarea simbolurilor accesibile i a celor productive:
a) N 0 := { A | (A ) P }, i := 1 ;
b) N i := N i-1 { A | (A ) P, N*i-1 };
c) Dac N i N i-1 atunci i:=i+1, salt la b)
altfel N := N i , stop.
- dac S N atunci: N'=N, S'=S, i P' se construiete conform 2o.
- dac S N atunci:
N'=N {S'}, P
= { S
, S
S } mulimea construit conform 2o.
57
59
1.5.7.
S se construiasc gramaticile independente de context care genereaz limbajele:
a) L1 = {anbm | nm0}; c) L3 = {anbkcm | mn0,k0};
b) L2 = {anbm | mn0}; d) L4 = {anbkcm | nm0,k0}.
1.5.8.
S se construiasc gramaticile independente de context care genereaz limbajele:
a) L1 = {anbm | 1nm2n}; c) L3 = {anbm | 2nm3n,n0};
b) L2 = {anbm | 1nm5n}; d) L4 = {anbm | 3mn5m,m0}.
1.5.9.
S se construiasc gramaticile independente de context care genereaz limbajele:
a) L1 = {anbmcmdn | n,m0};
b) L2 = {anbkcn-k | nk0};
c) L3 = {anbkcn+k | n0,k0}.
1.5.10.
S se construiasc gramaticile independente de context care genereaz limbajele:
~
b) L2={ xw x | x,w{0,1}*};
~
c) L3={ x x w | x,w{0,1}*};
~
d) L4={ wx x | x,w{0,1}*}.
1.5.11.
S se construiasc gramaticile independente de context care genereaz limbajele:
a) L1={w{a,b}* | nra(w)=nrb(w)}; b) L2={w{a,b}* | nra(w)nrb(w)}.
1.5.12.
S se construiasc gramaticile care genereaz limbajele:
a) L1 = { w{a,b}* | nra(w)=2*nrb(w), iar simbolurile "a" apar perechi}
ex: aabbbaaaa L1;
abbaabaaa L1;
b) L2 = { w{a,b}* | nra(w)=k*nrb(w),kN, iar simbolurile "a" apar n grupuri de
multiplu de k elemente};
c) L3 = {w{a,b}* | 2*nra(w)=3*nrb(w), simbolurile "a" apar n grupuri de multiplu
de 3 elemente, iar simbolurile "b" apar n grupuri de multiplu de 2 elemente};
ex: aaabbbbaaa L3.
1.5.13.
S se construiasc gramaticile care genereaz expresii aritmetice avnd doar operanzi
notai cu "a" i operatorii binari +,-,/,*
a) n forma polonez prefixat;
b) n forma polonez postfixat;
c) n forma polonez infixat (cu paranteze).
61
1.5.14.
S se arate c gramaticile care conin produciile urmtoare sunt ambigue i s se
gseasc cte o gramatic echivalent neambigu:
a) S aS | Sb | c;
b) S if b then S else S | if b then S | a;
c) S a | aB , BaaBSB;
d) S SS)(S)1.
1.5.15.
S se arate c gramaticile care conin produciile urmtoare sunt ambigue:
a) A AA | a;
b) A A | A | a;
c) A A | A | a.
1.5.16.
S se arate c gramatica G = ({S,B,C}, {a,b,c}, P, S), cu P={SabC | aB, Bbc,
bCbc} este ambigu.
1.5.17.
Fie gramatica G=({S,A,B},{a,b},P,S) i avnd produciile urmtoare:
S aB | bA
A a | aS | bAA
B b | bS | aBB
i w=aaabbabbba
a) gsii o derivare de stnga pentru w;
b) gsii o derivare de dreapta pentru w;
c) construii arborele de derivare cu frontul w;
d) este aceast gramatic neambigu?
e) se poate descompune w conform lemei de pompare?
1.5.18.
Descriei limbajul generat de gramatica G = ({S}, {a,b}, P, S), P={SbSS | a}.
1.5.19.
S se descrie limbajul generat de gramatica G=({S,A,B}, {a,b,c,d}, P, S) cu produciile:
S Ac | Bd
A aAb | ab
B aBbb | abb
1.5.20.
Artai c L(G) este mulimea secvenelor peste alfabetul {0,1} care conin un numr
multiplu de 3 de simboluri 0, unde:
G = ({S,A,B}, {0,1}, P, S), P={S0A | 1S | , A0B | 1A, B0S | 1B}, S).
62
1.5.21.
Fie G=({S,A,B,C}, {a,b}, P, S) cu mulimea produciilor:
P={SAB | C, Aa, BCB |A, Cb}.
S se arate c L(G) = {b} {abnan0}.
1.5.22.
S se aduc la forma normal Chomsky i la forma normal Greibach gramaticile de la
problemele 1.5.16., 1.5.17., 1.5.19., 1.5.20.
63
1.5.7.
a) G = (N, , P, S) cu
N = {S,A}, = {a,b}, P = {SaSbA, AaA | }.
b) G = (N, , P, S)
N = {S,B}, = {a,b}, P = {SaSb | B, BBb | }.
c) G = (N, , P, S)
N = {S,B,C}, = {a,b,c}, P = {SaSc | B, BbB | C, C->Cc | }.
d) G = (N, , P, S)
N = {S,A,B}, = {a,b,c}, P = {SaScB, BBbA, AaA | }.
1.5.8.
a) G = (N, , P, S)
N = {S}, = {a,b}, P = {SaSb | aSbb | ab | abb}.
b) G = (N, , P, S)
N = {S}, = {a,b}, P = {SaSb | aSb2 | aSb3 | aSb4 | aSb5 | ab | ab2 | ab3 | ab4 | ab5 }.
c) G = (N, , P, S)
N = {S}, ={a,b}, P = {SaSbb | aSbbb | }.
d) G = (N, , P, S)
N = {S}, ={a,b}, P={Sa3Sb | a4Sb | a5Sb | }.
1.5.9.
a) G = (N, , P, S)
N = {S,H}, = {a,b,c,d}, P = {SaSd | H, HbHc | }.
b) se observ c anbkcn-k se poate scrie sub forma an-k(akbk)cn-k i se reduce la
problema de la a)
G = (N, , P, S)
N = {S,H}, = {a,b,c}, P = {SaSc | H, HaHb | }.
c) se observ c anbkcn+k se poate scrie sub forma an(bkck)cn i se reduce la problema de la
punctul a)
G = (N, , P, S)
N = {S,H}, = {a,b,c}, P = {SaSc | H, HbHc | }.
1.5.10.
a) G = (N, , P, S)
N = {S}, = {0,1}, P = {S0S0 | 1S1 | }.
b) G = (N, , P, S)
N = {S,X}, = {0,1}, P={S0S0 | 1S1 | X, X0X | 1X | }.
64
c) G = (N, , P, S)
N = {S,S1,S2}, = {0,1}, P = {SS1S2, S10S10 | 1S11 | , S20S2 | 1S2 | }.
d) G = (N, , P, S)
N = {S,S1,S2}, = {0,1}, P = {SS2S1, S10S10 | 1S11 | , S20S2 | 1S2 | }.
1.5.11.
a)-gramatic ambigu
G = (N, , P, S)
N = {S}, = {a,b}, P = {SaSb | bSa | SS | }.
-gramatic neambigu
G = (N, , P, S)
N = {S,A,B}, ={a,b}, P = {SaB | bA, AaS | bAA | a, BbS | aBB | b}.
b)-gramatic ambigu
G = (N, , P, S)
N = {S,A}, = {a,b}, P = {SaSb | bSa | SS | A, AaA | a}.
-gramatic neambigu
G = (N, , P, S)
N = {S,A,B,X}, = {a,b},
P = { SAB | bA | , AAS | bAA | X, BbS | ABB | b, XaX | a}.
1.5.12.
a) G = (N, , P, S)
N = {S,A,B}, = {a,b},
P = {SAB | BA | , AAS | BAA | aa, BBS | ABB | b}.
b) G = (N, , P, S)
N = {S,A,B}, = {a,b},
P = {SAB | BA | , AAS | BAA | ak, BBS | ABB | b}.
c) G = (N, , P, S)
N = {S,A,B}, = {a,b},
P = {SAB | BA | , AAS | BAA | a3, BBS | ABB | b2}.
1.5.13.
Gramaticile de la a) i b) sunt neambigue, ele rezult din definiiile recursive ale celor
dou forme poloneze prefixat i postfixat.
a) G = (N, , P, S)
N = {S}, = {a,+,-,/,*}, P = {S+SS | -SS | /SS | *SS | a}.
Exemplu:
w=+*+aaa-a/aa
S> +SS > +*SSS > +*+SSSS > +*+aSSS > +*+aaSS > +*+aaaS >
> +*+aaa-SS > +*+aaa-aS > +*+aaa-a/SS > +*+aaa-a/aS > +*+aaa-a/aa
65
Pentru forma polonez prefixat am folosit derivri de stnga pentru c ele sunt
mai sugestive, fiind dirijate de forma cuvntului pornind de la stnga spre dreapta. Exist
o singur derivare de stnga a fiecrui cuvnt din limbaj, gramatica este neambigu.
b) G = (N, , P, S)
N = {S}, = {a,+,-,/,*}, P = {SSS+ | SS- | SS/ | SS* | a}.
Exemplu:
w=aa+a*aaa/-+
S> SS+ > SSS-+ > SSSS/-+ > SSSa/-+ > SSaa/-+ > Saaa/-+ > SS*aaa/-+
> Sa*aaa/-+ > SS+a*aaa/-+> Sa+a*aaa/-+ > aa+a*aaa/-+
Pentru forma polonez postfixat am folosit derivri de dreapta pentru c ele sunt mai
sugestive, fiind dirijate de forma cuvntului pornind de la dreapta spre stnga. Exist o
singur derivare de dreapta a fiecrui cuvnt din limbaj, gramatica este neambigu.
c) G = (N, , P, S)
N = {S}, = {a,+,-,/,*,(,)}, P = {SS+S | S-S | S/S | S*S | (S) | a}.
Aceast gramatic este ambigu deoarece pentru unele cuvinte din limbaj exist dou
derivri de stnga distincte.
Exemplu: pentru cuvntul w=a+a*a avem derivrile urmtoare:
S > S+S > a+S > a+S*S > a+a*S > a+a*a
i
S > S*S > S+S*S > a+S*S > a+a*S > a+a*a.
Se poate construi i o gramatic neambigu echivalent cu cea de mai sus:
G' = (N', , P', E)
N' = {E,T,F}, = {a,+,-,/,*,(,)},
P' = {EE+T | E-T | T, TT*F | T/F | F, FE) | a}
E = are semnificaia de expresie
F = are semnificaia de factor
T = are semnificaia de termen
Exemplu: cuvntul w=a+a*a se poate obine n mod unic prin derivare de stnga:
E > E+T > T+T > F+T > a+T > a+T*F > a+F*F > a+a*F > a+a*a.
1.5.14.
a) w=aacb i cele dou derivri de stnga pentru w sunt:
S > aS > aaS > aaSb > aacb
i
S > Sb > aSb > aaSb > aacb
Produciile de mai sus se pot nlocui cu produciile urmtoare:
SaS | cB, BbB | }.
Aceast gramatic este neambigu, generarea cuvintelor limbajului se face n mod
unic de la stnga spre dreapta.
w=aacb
S > aS > aaS > aacB > aacbB > aacb
De fapt cele dou gramatici genereaz limbajul L = {amcbn | m,n0}.
66
67
1.5.15.
Gramaticile din enun sunt independente de context.
a) Pentru w=aaaL(G) cei doi arbori de derivare distinci cu frontul w sunt:
68
69
1.5.16.
Fie w=abcL(G) i avem dou derivri de stnga distincte pentru w:
a) S abC abc i
1
b) S aB abc.
2
1.5.19.
L(G)={anbnc
n1}
70
{anb2nd
n1}.
1.6.1. Reprezentare
Fie M = (Q, , , , qo, Zo, F) i Q = {qo,q1,. . . qn}, = {Zo,Z1,. . . Zk}
Pentru reprezentare automatului se poate alctui urmtorul tabel:
{}
Qx
q0
qn
Z0
(q0,a,Z0)
(q0,b,Z0)
(q0,,Z0)
Zm
(q0,a,Zm)
(q0,b,Z m)
(q0,,Zm)
Z0
(qn,a,Z0)
(qn,b,Z0)
(qn,,Z0)
Zm
(qn,a,Zm)
(qn,b,Zm)
(qn,,Zm)
Observaii.
1o. Pentru un limbaj acceptat de un APD dup criteriul stivei vide nu are nici o
importan mulimea strilor finale F, se poate considera c n acest caz F=; altfel n
tabelul anterior se adaug la nceput o coloan cu elemente zi:=dac qiF atunci 1 altfel
0, i=0,1,...,n.
2o. Se folosete pentru T2(M) uneori notaia T(M), deci T(M) = T2(M).
3o. Cele dou criterii de acceptare sunt echivalente.
1.6.6.
S se construiasc un automat push-down care accept limbajul L = {anbm | 0<n<m}.
1.6.7.
S se construiasc un automat push-down care accept limbajul L = {anbm | n>m>0}.
1.6.8.
S se construiasc un automat push-down care accept limbajul L = {anbm | 1nm2n}.
1.6.9.
S se construiasc un automat push-down care accept limbajul
L = {anbm | 1pnmqn,pq}.
1.6.10.
S se construiasc un automat push-down care accept limbajul L= {anbm | 1mn2m}.
1.6.11.
S se construiasc un automat push-down care accept limbajul
~
L = { wd w | w{a,b,c}*}}.
1.6.12.
~
73
9. (q1,a,A) =
-din aceast stare de tergere nu se poate citi un a de pe banda de intrare pentru c
forma cuvntului nu ar fi cea dorit (ar alterna a-urile i b-urile);
10. (q1,,Z0) = {(q1,)}
-n acest moment s-a terminat de citit cuvntul de pe banda de intrare, iar n stiv avem
doar Z0, deci tergem i acest simbol, stiva devine vid, deci cuvntul este acceptat;
11. (q1,a,Z0) =
-din starea q1 nu putem citi un a (forma cuvntului nu convine pentru c alterneaz aurile i b-urile");
12. (q1,b,Z0) =
-nu e o situaie valid pentru c citim un b dar n stiv nu mai exist nici un A pentru a
fi ters (cuvntul are mai multe simboluri b dect a);
Tabelar funcia se reprezint astfel:
{}
b
{(q1, }
{(q1, }
Qx
Q0
A
{(q0,AZ0}
{(q0,AA}
Z0
A
Z0
A
Q1
{(q0, }
{(q1, }
Exemple :
1) w=aabb
(q0,aabb,Z0) (q0,abb,AZ0) (q0,bb,AAZ0) (q1,b,AZ0) (q1,,Z0) (q1,,)
3
10
- s-a ajuns la o configuraie final dup criteriul stivei vide, deci cuvntul este
acceptat de automat;
2) w=
(q0,,Z0) (q0,,)
1
11
5) w=aab
(q0,aab,Z0) (q0,ab,AZ0) (q0,b,AAZ0) (q1,,AZ0) blocare
3
12
(qo,,Zo)={(qo,)};
(qo,a,Zo)={(q1,AZo)};
(q1,a,A) ={(q2,A)};
(q2,a,A) ={(qo,A)};
(qo,a,A) ={(q1,AA)};
(qo,b,A) ={(q3,)};
(q3,b,A) ={(q3,)};
(q3,,Zo)={(qo,)};
(., ., .) = n celelalte cazuri.
b) la fiecare simbol a citit se adaug n stiv un simbol A;
-la terminarea citirii simbolurilor a, n stiv vor fi de trei ori mai multe
simboluri dect cele care trebuie citite n continuare;
-la fiecare b citit se vor scoate din stiv trei simboluri A. Deoarece numai
simbolul din vrful stivei se poate terge la un moment dat, tergerea a trei
simboluri se va face folosind nc dou stri intermediare din care au loc doar
-tranziii;
-cuvintele vor fi acceptate dup criteriul stivei vide;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2,q3}, = {a,b}, = {Z0,A}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1,q2,q3}x{a,b,}x{Z0,A}P({q0,q1,q2,q3}x{Z0,A}*) i este definit astfel:
(qo,,Zo)={(qo,)} secvena vid este acceptat;
(q0,a,Z0)={(q0,AZ0)}
-s-a citit primul a din cuvnt i s-a adugat un A n stiv;
(q0,a,A) ={(q0,AA)}
-s-a citit un a i s-a adugat un A n stiv;
(q0,b,A) ={(q1,)}
-s-a ters primul A corespunztor primului b citit;
(q1,,A) ={(q2,)}
-s-a ters al doilea A corespunztor ultimului b citit fr a se nainta pe banda de
intrare (are loc o -tranziie);
(q2,,A) ={(q3,)}
-s-a ters al treilea A corespunztor ultimului b citit fr a se inainta pe banda de
intrare (are loc o -tranziie);
(q3,b,A) ={(q1,)}
-s-a ters primul A corespunztor b-ului care tocmai s-a citit;
(q3,,Z0) ={(q3,)}
-s-a golit stiva;
(., ., .) = n celelalte cazuri.
Observaii:
1o. Cnd automatul este n starea q1 s-au citit un numr multiplu de 3 plus 1 simboluri
b;
2o. Cnd automatul este n starea q2 s-au citit un numr multiplu de 3 plus 2 simboluri
b;
3o. Cnd automatul este n starea q3 s-au citit un numr multiplu de 3 simboluri b.
78
1.6.4.
Vom prezenta un automat care accept limbajul L construit folosind combinarea
automatelor de la problemele 1.6.2. i 1.6.3:
- la fiecare al doilea a citit se adaug n stiv un A;
- la fiecare al treilea b citit se terge din stiv un A;
- cuvintele limbajului sunt acceptate dup criteriul stivei vide;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2,q3,q4}, = {a,b}, = {Z0,A}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1,q2,q3,q4}x{a,b,}x{Z0,A}P({q0,q1,q2,q3,q4}x{Z0,A}*)
i este definit astfel:
(q0,,Z0)={(q0,)}
(q2,b,A) ={(q3,A)}
(q0,a,Z0)={(q1,Z0)}
(q3,b,A) ={(q4,)}
(q1,a,A) ={(q0,AA)}
(q4,b,A) ={(q2,A)}
(q0,a,A) ={(q1,A)}
(q4,,Z0) ={(q4,)}
(q0,b,A) ={(q2,A)}
(., ., .) = n celelalte cazuri.
1.6.5.
Vom prezenta un automat nedeterminist care accept limbajul L.
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2}, = {a,b}, = {Z0,A}
F= criteriul de acceptare este cel al stivei vide
:{q0,q1,q2}x{a,b,}x{Z0,A}P({q0,q1,q2}x{Z0,A}*)
i este definit astfel:
(q0,a,Z0)={(q0,AZ0),(q2,AAZ0)}
(q0,a,A) ={(q0,AA)}
(q0,b,A) ={(q1,)}
(q1,b,A) ={(q1,)}
(q2,a,A) ={(q2,AAA)}
(q2,b,A) ={(q1,)}
(q1,,Z0)={(q1,)}
(.,.,.) = n celelalte cazuri.
1.6.6.
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2} , ={a,b}, ={Z0,A}
F = {q2} criteriul de acceptare este cel al strii finale
:{q0,q1,q2}x{a,b,}x{Z0,A}P({q0,q1,q2}x{Z0,A}*)
i este definit astfel:
(q0,a,Z0)={(q0,AZ0)}
(q0,a,A) ={(q0,AA)}
(q0,b,A) ={(q1,)}
(q1,b,A) ={(q1,)}
(q1,b,Z0)={(q2,Z0)}
79
:{q0,q1,q2}x{a,b,}x{Z0,A}P({q0,q1,q2}x{Z0,A}*)
i este definit astfel:
(q0,a,Z0)={(q0,AZ0)}
(q0,a,A) ={(q0,AA))}
(q0,b,A) ={(q1,),(q2,)}
(q1,b,A) ={(q1,),(q2,)}
(q2,b,A) ={(q1,A))}
(q1,,Z0) ={(q1,)}
(., ., .) = n celelalte cazuri.
1.6.9.
-automatul este nedeterminist;
-este o generalizare a problemei precedente;
-la fiecare a citit se adaug n stiv p sau p+1 sau ... q simboluri A;
-la fiecare b citit se terge un A din stiv;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1}, = {a,b}, = {Z0,A}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1}x{a,b,}x{Z0,A}P({q0,q1}x{Z0,A}*)
i este definit astfel:
(q0,a,Z0)={(q0,ApZ0),(q0,Ap+1Z0),...,(q0,AqZ0)}
(q0,a,A) ={(q0,ApA),(q0,Ap+1A),...,(q0,AqA)}
(q0,b,A) ={(q1,)}
(q1,b,A) ={(q1,)}
(q1,,Zo)={(q1,)}
(., ., .) = n celelalte cazuri.
1.6.10.
a)
-automatul este nedeterminist;
-la fiecare a citit se adaug n stiv un A;
-la fiecare b citit se terge din stiv unul sau dou simboluri A;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2}, = {a,b}, = {Z0,A}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1,q2}x{a,b,}x{Z0,A}P({q0,q1,q2}x{Z0,A}*)
i este definit astfel:
(q0,a,Z0)={(q0,AZ0)}
(q0,a,A) ={(q0,AA)}
(q0,b,A) ={(q1,),(q2,)}
(q1,b,A) ={(q1,),(q2,)}
(q2,,A) ={(q1,)}
(q1,,Z0) ={(q1,)}
(., ., .)= n celelalte cazuri.
81
b)
-la fiecare a citit sau la un grup de dou simboluri a citite se adaug n stiv un A;
-la fiecare b citit se terge un A din stiv;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2}, = {a,b}, = {Z0,A}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1,q2}x{a,b,}x{Z0,A}P({q0,q1,q2}x{Z0,A}*)
i este definit astfel:
(q0,a,Z0)={(q0,AZ0),(q1,AZ0)}; (q0,b,A) ={(q2,)};
(q0,a,A) ={(q0,AA),(q1,AA)}; (q2,b,A) ={(q2,)};
(q1,a,A) ={(q0,A)};
(q2,,Z0)={(q2,)};
(., ., .) = n celelalte cazuri.
1.6.11.
-automatul este determinist;
-se adaug n stiv toate simbolurile care se citesc pn la mijlocul cuvntului
(marcat de simbolul "d");
-dup citirea lui "d" dac simbolul din vrful stivei coincide cu cel citit atunci se
terge un element din stiv;
-limbajul este acceptat dup criteriul stivei vide;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1}, = {a,b,c,d}, = {Z0,a,b,c}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1}x{a,b,c,d,}x{Z0,a,b,c}P({q0,q1}x{Z0,a,b,c}*)
i este definit astfel:
(q0,x,Z0)={(q0,xZ0)}
x{a,b,c}
(q0,d,Z0)={(q0,)} este acceptat cuvntul w=d
(q0,x,y) ={(q0,xy)}
x,y{a,b,c}
(q0,d,x) ={(q1,x)}
x{a,b,c}
- s-a ajuns la mijlocul cuvntului i se trece ntr-o stare de tergere; stiva rmne
nemodificat;
(q1,x,x) ={(q1,)} x{a,b,c}
- dac simbolul citit coincide cu cel din vrful stivei, acesta se terge din stiv;
(q1,,Z0)={(q1,)}
- vidarea stivei;
(., ., .) = n celelalte cazuri.
1.6.12.
-automatul este nedeterminist;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1}, = {a,b,c}, = {Z0,a,b,c}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1}x{a,b,c,}x{Z0,a,b,c}>P({q0,q1}x{Z0,a,b,c}*)
82
83
Dac M este un translator finit, atunci y este o ieire pentru intrarea x, dac avem:
*
(qo,x,) (q,,y), qF
84
(q,,*) = {q,,*)};
(., ., .) = ; n celelalte cazuri.
Exemplu:
fie w=+a*aa forma polonez prefixat a expresiei aritmetice: a+a*a.
Avem:
(q,+a*aa,E,) (q,a*aa,EE+,) (q,*aa,E+,a) (q,aa,EE*+,a)
(q,a,E*+,aa) (q,,*+,aaa) (q,,+,aaa*) (q,,,aaa*+)
Cuplul (+a*aa,aaa*+) este o translatare.
87
88
2.8.
Avnd dou automate finite M1 care accept limbajul L1 i M2 care accept limbajul L2
s se construiasc automatele finite care accept limbajele:
- L1 L2 (reuniunea) ;
- L1 L2 (intersecia);
- L1L2 (concatenarea);
- L1*, L1+ (nchiderea reflexiv i tranzitiv, respectiv nchiderea tranzitiv).
2.9.
S se scrie funcii C pentru simplificarea gramaticilor independente de context pornind
de la reprezentarea vectorial a acestora (pentru fiecare problem cte o funcie C):
- eliminarea simbolurilor inaccesibile;
- eliminarea simbolurilor neproductive;
- eliminarea -produciilor (epsilon produciilor);
- eliminarea regulilor de redenumire;
- eliminarea recursivitii de stnga.
2.10.
S se scrie funcii C pentru aducerea unei gramatici independente de context la:
- forma normal Chomsky (FNC);
- forma normal Greibach (FNG).
2.11.
S se construiasc arborele de analiz sintactic corespunztor unei secvene generate de
o gramatic independent de context (pornind de la reprezentarea tabelar n memorie a
gramaticii).
2.12.
S se construiasc arborele binar de analiz sintactic corespunztor unei secvene
generate de o gramatic independent de context aflat n form normal Chomsky.
2.13.
S se gseasc o form de reprezentare n memorie a unui automat push-down. S se
scrie o funcii C pentru reprezentarea gsit i pentru simularea funcionrii sale
(verificarea acceptrii unor secvene).
2.14.
S se scrie o funcie C pentru trecerea de la o gramatic independent de context la
automatul push-down care accept limbajul generat de gramatica dat.
2.15.
Avnd o secven generat de o gramatic regular, s se dea toate descompunerile
posibile ale ei sub forma "xyz" conform lemei de pompare.
89
2.16.
Avnd o expresie regular, s se construiasc automatul finit (cu sau fr epsilon
micri) care accept limbajul specificat de expresia dat.
2.17.
Avnd un automat finit, s se construiasc expresia regular care specific limbajul
acceptat de automatul dat.
<stdio.h>
<string.h>
<conio.h>
<ctype.h>
90
for(i=0;i<strlen(Q);i++)
{
gotoxy(11,6+i);
printf("%c %c",Q[i],179);
gotoxy(14+strlen(S)*3,6+i);
if(este(Q[i],F)!=-1) j=1;
else j=0;
printf("%c %d",179,j);
}
for(i=0;Q[i];i++)
for(j=0;S[j];j++)
{
/* nu permite decit citirea unei stari */
do
{ gotoxy(15+j*3,6+i);
printf(" ");
gotoxy(15+j*3,6+i);
delta[i][j]=getche();
} while(delta[i][j]!=' ' && este(delta[i][j],Q)==-1);
}
void main(void)
{
char Q[15],S[10],F[15],delta[15][10];
int ind,i,j,k;
char secv[50],q;
clrscr();
printf("SIMULAREA FUNCTIONARII UNUI AUTOMAT FINIT");
printf("\n
DETERMINIST");
citeste(Q,'q'); // citeste multimea starilor automatului
citeste(S,'s'); // citeste multimea simbolurilor
do{
b: citeste(F,'f');
// citeste multimea starilor finale
for(i=0;i<strlen(F);i++)
if(este(F[i],Q)==-1)
{ printf("\n!! stari eronate , reluati !!\n");
goto b;
}
break;
}
while(1);
clrscr();
printf("\nDati functia delta(spatiu daca nu e definita pt. o");
printf("\npereche stare,simbol)");
citdelta(delta,Q,S,F);
// citeste functia de tranzitie
printf("\n\n Doriti sa verificati secventa?(d/n):");
while(tolower(getche())!='n')
{
q=Q[0];ind=1;i=0;
printf("\n Dati secventa (pt secventa vida dati ENTER):\n");
gets(secv);
if(strlen(secv)==0)
{printf("(%c,eps)",q);
if(este(q,F)==-1)
printf("\n%c nu e stare finala, secventa nu e\n acceptata",q);
else
printf("\n secventa este acceptata");
goto a;
}
91
while(secv[i])
{
j=este(q,Q);
k=este(secv[i],S);
if(k==-1)
{ printf("\n caracter nepermis: %c",secv[i]);
ind=-1;
break;
}
printf("(%c,%s)|--",q,secv+i);
q=delta[j][k];
if(q==' ')
{ printf("\n tranzitie blocata");
ind=-1;
break;
}
else i++;
}
if(ind==1)
{ printf("(%c,eps)",q);
if(este(q,F)!=-1)
{ printf("\n
%c este stare finala ",q);
printf("\n
secventa este acceptata");
}
else
{ printf(" \n %c nu este stare finala ",q);
ind=-1;
}
}
if(ind==-1) printf("\n secventa nu este acceptata");
a: printf("\n\n Doriti sa verificati secventa?(d/n):");
}
}
Vom da n continuare un program care rezolv aceeai problem dar scris n C++,
implementnd clasa automat push-down.
#include <iostream.h>
#include <string.h>
#include <conio.h>
#define MAX 100
enum bool {False,True};
class automat
// M=( Q, , , q, F )
{ private:
//----- reprezentare
char Q[MAX];
// Multimea starilor
char S[MAX];
// Alfabetul
char qo;
// Starea initiala
char F[MAX];
// Multimea starilor finale
char delta[MAX][MAX];
// Functia : Q x P(Q)
//----- comportament privat
bool Este_Stare(char c);
bool Este_Finala(char);
//----- comportament public
public:
void Citeste_Stari (void);
void Citeste_Alfabet(void);
void Citeste_qo
(void);
void Citeste_Finale (void);
92
93
bool automat::Este_Stare(char c)
{ return strchr(Q,c) ? True : False; }
bool automat::Este_Finala(char c)
{ return strchr(F,c) ? True : False; }
bool automat::Include(char *sec)
{ int i;
char l=qo,rez;
for(i=0;i<strlen(sec);i++)
{ rez=delta[strchr(Q,l)-Q][strchr(S,sec[i])-S];
if(rez=='.') { cout<<"Secventa eronata...\n"; return False; }
l=rez;
}
return Este_Finala(rez) ? True : False;
}
void automat::Verifica(void)
{ char s[MAX];
cout<<"\n\nSecventa W = "; cin>>s;
if(Include(s)) cout<<"Secventa "<<s<<" apartine T(M).";
else cout<<"Secventa "<<s<<" nu apartine T(M).";
}
void automat::Tabel(void)
{ int i,j;
cout<<"\n\n";
cout<<"
";
for(i=0;i<strlen(S);i++) cout<<"";
cout<<"\n";
cout<<" ";
for(i=0;i<strlen(S);i++) cout<<" "<<S[i]<<" ";
cout<<"\n";
cout<<"";
for(i=0;i<strlen(S);i++) cout<<"";
cout<<"\n";
for(i=0;i<strlen(Q);i++)
{ cout<<" "<<Q[i]<<" ";
for(j=0;j<strlen(S);j++) cout<<" "<<delta[i][j]<<" ";
cout<<"\n";
}
cout<<"";
for(i=0;i<strlen(S);i++) cout<<"";
cout<<"\n";
}
void automat::Afis_Automat (void)
{ cout<<"\nM=( Q={"<<Q<<"}"<<",";
cout<<" ={"<<S<<"}, , "<<qo<<",";
cout<<" F={"<<F<<"} )\n";
}
void main(void)
{ char opt;
automat M;
clrscr();
M.Citeste_Stari();
M.Citeste_Alfabet();
M.Citeste_qo();
M.Citeste_Finale();
M.Citeste_Delta();
94
do
{ clrscr();
M.Afis_Automat();
cout<<"\n";
cout<<"\n V...Verificare acceptare secventa
";
cout<<"\n T...Tabel
";
cout<<"\n";
cout<<"\n E...Esire
";
cout<<"\n";
cout<<"\nAlegeti: ";
switch(opt=getche())
{ case 'V': M.Verifica(); break;
case 'T': M.Tabel();
}
getch();
}
while(opt!='E');
cout<<"\n
La Revedere...\n";
}
//
//
//
//
//
//
//
//
//
//
char *delta[10][10];
//
//
//
//
//
//
char Q[15],S[10],F[15];
//
//
//
//
//
//
} stiva[100];
95
{ int i;
for(i=0;M[i];i++) if(M[i]==x) return i;
return(-1);
}
void citeste(char M[],char x)
{ char *mesaj;
if(x=='s')
mesaj="simbolurilor";
else
if(x=='q')
mesaj="starilor \n (litere mici,prima stare este starea\n initiala)";
else mesaj="starilor finale";
printf("\nDati multimea %s: ", mesaj);
gets(M);
}
void citdelta()
{ int i,j;
char x[10];
printf("\nfunctia delta (daca nu e definita pentru o stare si");
printf("\n un simbol tastati ENTER)");
for(i=0;Q[i];i++)
for(j=0;S[j];j++)
{
printf("\n delta[%c][%c]=",Q[i],S[j]);
gets(x);
if(strlen(x)==0) delta[i][j]=NULL;
else
{delta[i][j]=(char *) malloc(1+strlen(x));
strcpy(delta[i][j],x);}
}
}
void init(char stare,char simb,int i)
//
//
//
//
initializeaza nivelul I
al stivei cu stare,
simbol si variantele
corespunzatoare
int j,k;
stiva[i].stare=stare;
stiva[i].simb=simb;
j=este(stare,Q);
if(simb==' '){ stiva[i].var=NULL;return;}
k=este(simb,S);
if(!delta[j][k])
stiva[i].var=NULL;
else
{ stiva[i].var=(char*)malloc(1+strlen(delta[j][k]));
strcpy(stiva[i].var,delta[j][k]);
}
}
96
void main(void)
{char secv[50],*p;
int n,j,i=0;
clrscr();
citeste(Q,'q');
// citire mulime stri
citeste(S,'s');
// citire multime simboluri
do{
b: citeste(F,'f');// citeste multimea starilor finale
for(i=0;i<strlen(F);i++)
if(este(F[i],Q)==-1)
{printf("\n!! stari eronate , reluati !!\n");
goto b;
}
break;
}
while(1);
citdelta();
// citire funcie de tranziie
printf("\nDoriti sa verificati secventa?(d/n):");
while(tolower(getche())!='n')
{ clrscr();
printf("\nDati secventa (pentru secventa vida tastati\nENTER):");
gets(secv);
n=strlen(secv);
if(n==0)
if( este(Q[0],F)!=-1)
{ printf("\n!!!!! secventa vida este acceptata deoarece");
printf("\nstarea initiala este si finala !!!!!\n");
printf("(%c,)",Q[0]);
}
else printf("\n!!!! secventa vida nu este acceptata");
printf("\nstarea initiala nu e si finala");
else
{init(Q[0],secv[0],0);
i=0;
while(i>=0)
{ int q=0;
if(stiva[i].simb==' ' && (q=este(stiva[i].stare,F))!=-1)
{printf("\n!!!!! secventa acceptata !!!!!!\n");
for(j=0;j<=i;j++) printf("(%c,%s)|--",stiva[j].stare,secv+j);
printf("\b\b\b
"); break;
}
else
{if(q==0) p=stiva[i].var;
else
p=stiva[--i].var;
while(p && *p && isupper(*p))p++;
if(!p || !*p) i--;
else
{ *p=toupper(*p);
i++;
if(i==n) // introducerea in stiva a simbolului ' ' are
// semnificatia de sfarsit secventa de analizat
init(tolower(*p),' ',i);
else
init(tolower(*p),secv[i],i);
}
}
}
if(i<0) printf(" \n!!! secventa neacceptata !!!!!");
}
printf("\n\n\nDoriti sa verificati secventa?(d/n):");
}
}
97
2.13.
Verificarea dac o secven este acceptat sau nu de un automat push-down
nedeterminist oricare ar fi criteriul de acceptare ales: criteriul stivei vide sau cel al strii
finale.
Rezolvarea const in implementarea metodei backtracking recursiv.
Programul este urmtorul:
#include
#include
#include
#include
#include
<stdio.h>
<string.h>
<conio.h>
<alloc.h>
<ctype.h>
typedef struct
{
char st;
char *sir;
} tip_delta;
//
//
//
//
98
citeste(S,'s');
strcat(S,"&");
citeste(Z,'p');
//
//
//
//
101
BIBLIOGRAFIE
1. AHO,A.V., ULLMAN,J.D. "The Theory of Parsing, Translation, and Compiling",
Vol.1. Englewood Cliffs, N.J.:Prentice-Hall, 1972.
2. AHO,A.V., ULLMAN,J.D. "The Theory of Parsing, Translation, and Compiling",
Vol.2. Englewood Cliffs, N.J.:Prentice-Hall, 1973.
3. AHO,A.V., ULLMAN,J.D. "Principles of Compiler Desing"
Reading, Mass.: Addison-Wesley, 1977.
4. AHO,A.V., ULLMAN,J.D. "Concepts fondamentaux de l'informatique"
DUNOD, Paris, 1993 (Traducere din englez. Carte aprut n 1992).
5. ALEKSANDER,I., HANNA F.K. "Automata Theory: An Engineering Approach",
New York : Crane Russak, 1975.
6. ATANASIU,A. "Bazele informaticii"
Universitatea din Bucureti, 1987.
7. BULAC,C. "Iniiere n Turbo C++ i Borland C"
Editura Teora, Bucureti, 1995.
8. GERSTING,J.L. "Mathematical Structures In Computer Science"
New York: W.M. Freeman and Company, 1987.
9. GINSBURG, S. "The Mathematical Theory of Context-free Languages"
New York: Mc.Graw-Hill, 1966.
10. GRIES, D. "Compiler Construction for Digital Computers"
New York: Wiley, 1971.
11. HOPCROFT,J.E., ULLMAN,J.D. "Introduction to Automata Theory, Languages,
and Computation"
Reading, Mass.: Addison-Wesley, 1979.
103
104
105