Вы находитесь на странице: 1из 107

UNIVERSITATEA BABE-BOLYAI CLUJ-NAPOCA

FACULTATEA DE MATEMATIC I INFORMATIC


CENTRUL DE FORMARE CONTINU I NVMNT LA DISTAN

GRIGOR MOLDOVAN
MIHAELA LUPEA

VASILE CIOBAN

LIMBAJE FORMALE I AUTOMATE


Culegere de probleme

2000

1. NOIUNI FUNDAMENTALE I PROBLEME PROPUSE...................... 3


1.1. GRAMATICI I LIMBAJE .............................................................................................................. 3
1.1.1. Probleme propuse ........................................................................................................................... 5
1.1.2. Indicaii i soluii ........................................................................................................................... 8
1.2. AUTOMATE FINITE ....................................................................................................................... 20
1.2.1. Automate finite deterministe (AFD), automate finite nedeterministe (AFN) ................................... 20
1.2.2. Reprezentare .................................................................................................................................. 20
1.2.3. Configuraii i relaii de tranziie ................................................................................................ 21
1.2.4. Limbaj acceptat de un AF........................................................................................................... 22
1.2.5. Funcionare.................................................................................................................................... 22
1.2.6. Echivalena dintre AFD i AFN .................................................................................................. 24
1.2.7. Minimizarea automatelor finite .................................................................................................... 24
1.2.8. Construcia AFD redus ................................................................................................................. 25
1.2.9. Automate finite cu -micri........................................................................................................ 26
1.2.10. Probleme propuse ....................................................................................................................... 26
1.2.11. Indicaii i soluii ......................................................................................................................... 31
1.3. EXPRESII REGULARE ................................................................................................................... 35
1.3.1. Probleme rezolvate ....................................................................................................................... 39
1.3.2. Probleme propuse ......................................................................................................................... 43
1.3.3. Indicaii i soluii ......................................................................................................................... 45
1.4. GRAMATICI I LIMBAJE REGULARE ..................................................................................... 46
1.4.1. Legtura dintre gramaticile regulare i automatele finite ........................................................... 46
1.4.2. Proprieti de nchidere ale limbajelor regulare .......................................................................... 46
1.4.3. Lema de pompare pentru limbaje regulare ................................................................................. 47
1.4.4. Probleme propuse ......................................................................................................................... 48
1.4.5. Indicaii i soluii ......................................................................................................................... 50
1.5. GRAMATICI I LIMBAJE INDEPENDENTE DE CONTEXT ................................................. 54
1.5.1. Proprieti de nchidere ale limbajelor independente de context ................................................ 54
1.5.2. Arbori de derivare ........................................................................................................................ 54
1.5.3. Simplificarea gramaticilor independente de context .................................................................... 56
1.5.4. Forma normal Chomsky ............................................................................................................. 59
1.5.5. Forma normal Greibach .............................................................................................................. 59
1.5.6. Leme de pompare pentru limbaje independente de context ....................................................... 60
1.5.7. Probleme propuse ......................................................................................................................... 60
1.5.8. Indicaii i soluii ......................................................................................................................... 63
1.6. AUTOMATE PUSH-DOWN............................................................................................................. 70
1.6.1. Reprezentare .................................................................................................................................. 71
1.6.2. Limbaj acceptat de un APD ........................................................................................................ 71
1.6.3. Probleme propuse ......................................................................................................................... 72
1.6.4. Indicaii i soluii ......................................................................................................................... 73
1.7. TRANSLATARE I TRANSLATOARE......................................................................................... 84
1.7.1. Translator finit .............................................................................................................................. 84
1.7.2. Translator push-down ................................................................................................................... 85
1.7.3. Probleme propuse. ........................................................................................................................ 86
1.7.4. Indicaii i soluii ......................................................................................................................... 86

2. PROBLEME I PROGRAME COMPLEXE..............................................88


2.1. PROBLEME PROPUSE .................................................................................................................... 88
2.1. INDICAII I SOLUII .................................................................................................................. 90

B I B L I O G R A F I E .......................................................................................103

1. NOIUNI FUNDAMENTALE I PROBLEME PROPUSE


1.1. GRAMATICI I LIMBAJE
Fie o mulime de elemente, finit i nevid. O astfel de mulime o numim
alfabet, iar elementele ei le numim simboluri.
O succesiune de simboluri ale alfabetului o numim secven peste alfabetul ,
iar o mulime de simboluri consecutive dintr-o secven se numete subsecven.
Exemplu: Dac w = a1a2an; atunci w este o secven peste alfabetul , iar dac
w=a1a2a3a4a5 atunci w = a3a4 este o subsecven a secvenei w.
Dac x = a1a2an iar y = b1b2bm atunci z = xy, adic z = a1anb1bm
reprezint concatenarea secvenelor x i y.
Dac x, y, z sunt secvene peste alfabetul , atunci x este un prefix al secvenei
xy, y un sufix al secvenei xy, iar y n secvena xyz este o subsecven.
De asemenea, adesea vom folosi notaia an = aa (de n ori).
Lungimea unei secvene w, peste un alfabet , notat |w|, este numrul
simbolurilor din care este alctuit. Secvena de lungime 0, o notm cu , deci || =0, i
se numete secvena vid.
Exemplu: Dac w = a1a2an atunci |w| = n.
Notm cu * mulimea tuturor secvenelor peste alfabetul .
Exemplu: Dac = {a}, atunci * = {, a, a2, , an ,}
Observaie: O secven peste alfabetul , poate fi considerat i ca un element al
monoidului liber (*, ) generat de , iar operaia " " este operaia de concatenare
: * x * > * definit mai sus. Operaia de concatenare este asociativ i * este
elementul neutru. Cele dou proprieti ale concatenrii definesc structura de monoid.
Pentru operaia de concatenare nu folosim simboluri speciale.
Numim limbaj peste alfabetul , o submulime L a mulimii *, deci L *. Elementele
unui limbaj le numim cuvinte. Un limbaj poate s fie finit, adic s conin un numr
finit de cuvinte, sau s fie infinit.
Dac L1 este un limbaj peste alfabetul 1, iar L2 este un limbaj peste alfabetul 2 atunci
prin operaiile:
- L1 L 2 (reuniune);
- L1 L 2 (intersecie);
- L1 L 2 (diferena);
- L1 L 2 = {uv | uL1, vL2} (concatenarea);
obinem, de asemenea, nite limbaje peste alfabete alese corespunztor.
3

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 { };

(nchiderea reflexiv i tranzitiv);

n0

L Ln sau L LL* L L, L* L {} ; (nchiderea tranzitiv);

n 1

L1 / L2 = { w* yL2: wyL1}

(ctul la dreapta);

L1 \ L2 = { w* yL2: ywL1}

(ctul la stnga);

Un ansamblu G = (N, , P, S) unde:


- N este un alfabet de simboluri neterminale;
- este un alfabet de simboluri terminale;
- P (N )* N (N )* x (N )*, P este o mulime finit de producii;
- SN, S este simbolul iniial ;
se numete gramatic.
Dac (, )P, atunci convenim s notm aceast producie astfel: i
nseamn c se nlocuiete cu .
Observaie: Din definiia unei gramatici rezult evident c N = .
O gramatic reprezint o modalitate de specificare a unui limbaj. Fie gramatica
G = (N, , P, S). Pe mulimea (N )* se definesc relaiile binare:
=> (derivare direct);
k

(k derivare);

(+ derivare);
*

(* derivare).

Avem => <=> 1, 2, , (N )* astfel nct = 12, = 12, iar


( ) P.
O k derivare" este o succesiune de k derivri directe, adic
1 ,..., k 1 N astfel nct 1 ... k-1 .
*

ntre dou secvene avem o "+ derivare" dac k>0 astfel nct ele s fie ntr-o
relaie de "k derivare".

ntre dou secvene avem o "* derivare" dac sau .


Limbajul generat de o gramatic G = (N, , P, S) este:
LG {w | w * , S w}
*

Fie gramatica G = (N, , P, S). O secven x(N )* astfel nct S x, se


numete form propoziional. O form propoziional care nu conine neterminale se
numete propoziie. O propoziie este un cuvnt al limbajului generat de gramatica G.
Dou gramatici G1 i G2 sunt echivalente dac ele genereaz acelai limbaj, deci
L(G1) = L(G2).
Dup forma produciilor gramaticilor, acestea se clasific (dup Chomsky) n
gramatici de tip 0,1,2,3.
Gramaticile de tip 0 sunt gramaticile care nu au nici o restricie referitoare la
forma produciilor.
Gramaticile de tip 1 sunt gramaticile n care pentru orice producie din P
avem || ||. Dac producia S aparine gramaticii, atunci S nu apare n membrul
drept al nici unei producii.
Gramaticile de tip 2 sunt gramaticile n care produciile sunt de forma A,
AN, (N )*.
Gramaticile de tip 3 sunt gramaticile n care orice producie are numai una din
formele urmtoare: AaB sau Ab, unde A,BN i a,b, iar dac producia S
aparine gramaticii, atunci S nu apare n membrul drept al nici unei producii.
Gramaticile de tip 1 se mai numesc gramatici dependente de context, cele de tip 2
sunt gramatici independente de context, iar cele de tip 3 gramatici regulare.

1.1.1. Probleme propuse


1.1.1.
S se defineasc mulimea numerelor naturale N ca limbaj.
1.1.2.
Fie gramatica G = (N, , P, S) unde N = {S,C}, = {a,b}, P = {S ab | aCSb, CS |
bSb, CS b}. S se arate c ab(ab2)2L(G).
5

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. Indicaii i soluii


n rezolvarea problemelor de determinare a unei gramatici care genereaz un limbaj,
esenial este stabilirea mulimii P a produciilor. De aceea de multe ori mulimea P o
vom da n mai multe variante; totodat de multe ori schimbnd produciile se pot
introduce noi neterminale, deci gramaticile care genereaz limbajul s fie complet
diferite.
S reinem i alte amnunte legate de recursivitatea produciilor:
- pentru familiarizarea cu definiiile recursive trebuie ncercat s se definesc foarte
multe noiuni matematice i informatice n acest mod pornind de la noiuni simple cum ar
fi cea de identificator i anume:
<identificator>:=<liter><identificator><liter><identificator><cifr>;
<liter>:=mulimea literelor alfabetului latin;
<cifr>:=mulimea cifrelor zecimale, .a.m.d.
- s reinem apoi c pentru gramaticile de tipul 1, 2 i 3 dup fiecare derivare,
lungimea secvenei din (N )* se mrete;
- definiiile recursive nu sunt unice ntotdeauna, fapt ce se va vedea i n continuare
(pentru aceeai problem n multe cazuri se vor da gramatici diferite).
1.1.1.
Avem = {0,1,2,3,4,5,6,7,8,9} iar
* {ww=aw1, a{1,2,3,4,5,6,7,8,9}, w1*} {0} = N
8

1.1.2.
Trebuie s artm c dup un numr finit de derivri directe, >, din simbolul iniial S

se obine cuvntul ab(ab2)2=ababbabb, adic S ab ab 2 . Numerotm produciile


gramaticii date, astfel:
1. S ab
2. S aCSb 3. C bSb
4. C S
5. CS b
*

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

folosim succesiv, de la stnga la dreapta, de exemplu produciile i, j, k mai scurt vom

scrie .
i, j, k

Avem astfel: S aCSb abSbSb ababbSb ababbabb


2

S aCSb ababbabb .

sau

3,1,1

Observm c produciile 4 i 5 nu au fost folosite.


1.1.3.
Procednd analog cu rezolvarea problemei precedente numerotm produciile astfel:
1. S (S)(S)
5. A A'
2. S (S)(S)
6. A p
3. S (S)
7. A q
4. S A
8. A r
i atunci avem:

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

S SS SSS SSSSS AAASS pqrSS


1

6, 7 , 8

4,4, 4

6 , 7 ,8

pqr SSS pqr AAA pqr pqr .


9

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

S (a 2 ) n S a 2n bc, adica a 2n bc L(G) .


1

b) A demonstra incluziunea invers (""), adic L(G) {a2nbcn0}, revine la a arta


c gramatica G genereaz numai cuvinte de forma a2nbc. Pentru a demonstra acest lucru
s considerm propoziia care depinde de numrul natural n, P(n):
"Folosind de n ori produciile S a2S, Sbc se obin numai secvene de forma a2nS sau
2(n-1)
a
bc".
Demonstrm proprietatea P(n) prin inducie matematic.
1) Verificare.
Dac n=1, deci folosind o singur producie, obinem secvena a2S sau bc.
2) Demonstraia.
Presupunem c P(k) este adevrat i trebuie s demonstrm c i P(k+1) este
adevrat. Secvenele a2(k+1)S, a2kbc se obin folosind cte una din cele dou producii,
pornind de la secvena a2kS.
Din proprietatea P(n) rezult c singurele cuvinte generate de gramatic sunt de forma
a b, n0 i este adevrat incluziunea "".
2n

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

3) tabelar cu notaiile de la reprezentarea prin list ramificat obinem:


a

-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 ;
*

Folosind a doua producie (S xy) obinem: xn-1Syn-1 => xnyn, deci S x n y n


i cu alte cuvinte wL(G);

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 bcBBcBcc a bcBBBccc a bBcBBc a bBBcBc a bBBBc


4

a b bBBc a bb bBc a b c .
4

Am scris sub notaia de derivare numrul produciei folosite i am subliniat membrul


stng al fiecrei producii folosite.
S remarcm, n finalul rezolvrii, c se pot da i alte gramatici care genereaz limbajul
cerut:
14

1) o gramatic cu produciile oarecum simetrice fa de gramatica anterioar:


G = (N, , P, S)
N = {S,B}, = {a,b,c},
P = {SaBSc | abc, Ba aB, Bb bb}.
2) o gramatic cu mai multe neterminale i producii:
G = (N, , P, S)
N = {S,B,C}, = {a,b,c},
P = {SaBSC | aBC, CB BC, bC bc, cC cc, aB ab, bB bb}.
1.1.11.
Vom da dou gramatici echivalente bazate pe ideea de la problema precedent:
a) G = (N, , P, S)
N = {S,B,C}, = {a,b,c,d},
P = {SaSBCd |aBCd, dBBd, dCCd, CBBC, bBbb, cCcc, aBab}.
b) G = (N, , P, S)
N = {S,B,C,D}, = {a,b,c,d}
P = {SaSBCD | aBCD, DBBD, CBBC, aBab, bCbc, cDcd,
bBbb, cCcc, dDdd}.
1.1.12.
G = (N, , P, S) cu N = {S,B,C,D,E}, ={a,b,c,d,e},
Produciile sunt:
SaSBCDE | aBCDE
EBBE, ECCE, aBab, cCcc, cDcc, dEde, DBBD, DCCD,
bBbb, bCbc, dDdd, eEee, CBBC, EDDE.
1.1.13.
Gramaticile construite sunt dependente de context.
a)G = (N, , P, S}
N = {S,A,B,C,D}, = {a,b},
P = {SCD, CaCA | bCB, ADaD, BDbD, AaaA, AbbA, BaaB,
BbbB, C, D}.
C=marcator central al cuvntului; D=marcator drept al cuvntului;
-produciile cu membrul stng C genereaz de fapt secvene de forma wCWD (unde
W este oglinditul lui w dar cu litere mari, adic dac w=abb atunci W BBA ) dup
care C se nlocuiete cu .
-secvena W trebuie inversat, neterminalul de la sfritul su se nlocuiete cu
terminalul corespunztor (folosind produciile ADaD sau BDbD) i acesta se
15

deplaseaz spre stnga la locul su (folosind produciile AaaA, AbbA, BaaB,


BbbB);
-cnd toate neterminalele au ajuns pe rnd lng D cuvntul dorit a fost generat n stnga
lui D, iar acesta se nlocuiete cu .
Exemplu:
x=ww, unde w=abb, deci x=abbabb. Avem:
S CD aCAD abCBAD abbCBBAD abbBBAD abbBBaD abbBaBD
1

10

abbaBBD abbaBbD abbabBD abbabbD abbabb .


8

11

(Am numerotat produciile n ordinea scrierii lor n mulimea P).


b) G = (N, , P, S}
N = {S,A,B,C,D,E}, = {a,b},
P = {SCD, CaCA | E, EbEB | bB, ADaD, BDbD, AaaA, AbbA,
BaaB, BbbB, D};
-vezi a) n care w=ambn.
Exemplu:
x=aabaab. Avem:
S CD aCAD aaCAAD aaEAAD aabBAAD aabBAaD aabBaAD
1

abbaBBD abbaBbD abbabBD abbabbD abbabb .


8

11

(Am numerotat produciile n ordinea scrierii lor n mulimea P).


c) G = (N, , P, S}
N = {S,A,B,C,D,X}, = {a,b},
P = {SCD, CaCA | bCB | X, XaX | bX | , ADaD, BDbD, AaaA,
AbbA, BaaB, BbbB, D};
-vezi a) cu modificarea c C-ul dup ce i-a ndeplinit rolul de mijloc al cuvntului va
genera prin trecerea n X o secven oarecare de simboluri a,b.
1.1.14.
a) G = (N, , P, S}, N = {S,A,B,C}, = {a},
P = { SBAB, BABC, CAAAC, CBAAB, Aa, B}.
16

Practic de la forma propoziional BAB se nlocuiete A cu doi de A cu ajutorul lui C


trecndu-l pe acesta de la stnga la dreapta. Se ajunge la forma propoziional BAAB de
unde se poate ajunge la:
1o) cuvntul aa folosind ultimele dou producii;
2o) sau la forma propoziional BAAAAB folosind produciile:
BABC, CA>AAC, CB>AAB.
Procesul se poate continua pentru a obine orice cuvnt din limbajul cerut.
Evident c exist i o alt gramatic cu produciile simetrice care genereaz acelai
limbaj:
P = { SBAB, ABCB, ACCAA, BCBAA, Aa, B}.
sau
a) G = (N, , P, S}
N = {S,A,B,C}, = {a};
P = {SBAB, BABC, CAAAC, CBAAB, Aa, B}.
-B=marcatori de stnga i dreapta ai cuvntului;
-A-ul cel mai din stnga e nlocuit cu C (s-a pierdut temporar un A);
-C parcurge de la stnga la dreapta irul de A-uri i transform fiecare A n AA;
-cnd C-ul ajunge la marginea dreapt se reface A-ul pierdut prin AA.
exemplu: w=a4
S BAB BCB BAAB BCAB BAACB BAAAAB AAAAB
1

aAAAB aaAAB aaaAB aaaaB aaaa.


5

(Am numerotat produciile n ordinea scrierii lor n mulimea P).


b) Folosind aceeai idee de la punctul a) obinem:
G = (N, , P, S}
N = {S,A,B,C}, = {a},
P = {SBAB, BABC, CAAkC, CBAkB, Aa, B}.
1.1.15.
a)Dm dou gramatici echivalente:
G1 = ({E}, {a}, P, E) cu P = {EE+E | E*E | (E) | a} i
G2 = ({E,T,F}, {a}, P, E) cu P = {EE+T | T, F (E) | a, TT*F | F}.
b)Analog dou gramatici echivalente:
G3 = ({E}, {a}, P, E) cu P = {EE+E | E-E | E*E | E:E | (E) |a} i
G4 = ({E,T,F}, {a}, P, E) cu P={EE+T | ET | T, TT*F | T:F | F, F (E) | a}.
1.1.16.
G = ({S,H}, {a,b,c,d}, P, S) cu P = {SaaSd | X, XbXcc | bc}.

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).


Prima producie genereaz formele propoziionale de forma akS(Bc)k.
Produciile numerotate cu 2 i 6 asigur multiplicarea akbk i astfel ne asigurm c nm.
Producia a 3-a interschimb c cu B.
Produciile 4 i 5 transform neterminalele B n b.
Producia a 7-a ajut la tergerea lui A.
Se poate demonstra uor c nu se genereaz i alte cuvinte dect cele cerute n enun.
b) G = (N, , P, S), N = {S,B,C}, = {a,b,c},
P = {SaSBc | C, aBab, cBBc, bBbb, CCc | }.
exemplu: fie w=a2b2c4

S aSBc a 2SBcBc a 2 CBcBc a 2 CcBcBc a 2 CccBcBc a 2 b 2 c 4


1

(Am numerotat produciile n ordinea scrierii lor n mulimea P).


Idea folosit este asemntoare cu cea folosit la punctul a).
Produciile 2 i 6 permit s obinem relaia mn.
c) G = (N, , P, S), N = {S,A,B,X}, = {a,b,c},
P = {SaSBc | X, cBBc, bBbb, aBab, XaXb | A, AaA |}.
18

exemplu: fie w=a3b2c


S aSBc aXBc aaXbBc aaAbBc a 3 AbBc a 3 bBc a 3 b 2 c.
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

(Am numerotat produciile n ordinea scrierii lor n mulimea P).


b) G = (N, , P, S}
N = {S,A,B,C}, = {a,b,c},
P = {SASBC | , ABBA, BAAB, ACCA, CAAC, CBBC,BCCB,
Aa, Bb, Cc}.
exemplu: w=cba.

S ASBC ABC BAC BCA CBA cba .


1

9 ,10 ,11

(Am numerotat produciile n ordinea scrierii lor n mulimea P).


1.1.21.
c) Demonstrm prin dubl incluziune egalitatea celor dou mulimi mergnd pe
echivalene:
xL1/(L2L3) <=> yL2L3 a.. xyL1 <=> y2L2 i y3L3 a.. xy2y3L1 <=>
y2L2 i xy2L1/L3 <=> x(L1/L3)/L2.
19

1.2. AUTOMATE FINITE


1.2.1. Automate finite deterministe (AFD), automate finite nedeterministe (AFN)
Un automat finit (acceptor) este un ansamblu M = (Q, , , qo, F) n care:
- Q este o mulime finit i nevid de elemente numite stri;
- este o mulime finit i nevid numit alfabet de intrare;
- : QxP(Q) este o aplicaie numit funcie de tranziie;
- qoQ, qo este stare iniial;
- F Q, F este o mulime nevid numit mulimea strilor finale.
Observaie. n definiia de mai sus P(Q) este mulimea tuturor prilor (submulimilor) lui
Q. Deci, n particular, P(Q) i QP(Q). Apoi, qQ, a avem (q,a)=Q1Q.
Fie M un automat finit (AF). Dac qQ, a avem |(q,a)| 1 atunci
automatul M se numete automat finit determinist (AFD), iar n caz contrar automatul se
numete automat finit nedeterminist (AFN). Dac qQ, a avem |(q,a)| =1, atunci
automatul finit M se numete automat finit determinist complet (total) definit. n acest
caz avem ntotdeauna qQ, a (q,a) = {p}, pQ.
Observaii:1o. Fie M=(Q, , , qo, F) un AFD. Avem acelai automat i dac funcia de
tranziie :QxP(Q) se nlocuiete printr-o funcie parial definit pe Qx de forma:
p, daca (q, a) {p}
.
, daca (q, a)

':QxQ unde qQ, a avem ' (q, a)

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:

- starile finale (deci qF) se reprezint prin noduri de forma:


-

dac (p,a)q atunci avem arcul, (p,q) care se eticheteaz cu a, adic:

1.2.3. Configuraii i relaii de tranziie


Fie M = (Q, , , qo, F). Mulimea configuraiilor acestui automat este format
din Qx*. Pe mulimea configuraiilor automatului finit M se definesc relaiile binare:
tranziia direct;
k

k tranziia;

+ tranziia;
*

* tranziia.

21

Avem (p,aw) (q,w) <=> (p,a)q; p,qQ, a, w*.


k

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
*

(p,w1) (q,w2) <=> p=q, w1=w2 adic (p,w1)=(p,w2) sau

(p,w1) (q,w2); p,qQ, w1,w2*.


Configuraia (qo,w) se numete configuraie iniial iar (q,), qF se numete
configuraie final.

1.2.4. Limbaj acceptat de un AF


Limbajul acceptat de automatul M = (Q, , , qo, F) este:
*

T(M) = {w | w*, (qo,w) (q,),qF}.


Dou automate M1 i M2 sunt echivalente dac ele accept acelai limbaj, adic
T(M1) = T(M2).
Automatele finite sunt o alt form de specificare a unor limbaje. Relaia de
tranziie direct definete o micare a AF. Apoi, wT(M), dac i numai dac n graful
care definete automatul M, exist un drum de la starea iniial la o stare final i arcele
sunt etichetate succesiv cu simbolurile cuvntului w.

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)=;
*

3o staionare, dac (q,w) (q,w).


22

La momentul iniial to configuraia automatului este (qo,w). Apoi, la funcionarea


AF trebuie s avem n vedere c:
- momentele de timp luate n considerare sunt discrete, adic operaiile acestor maini
sunt sincronizate;
- trecerea de la o stare la alta a AF nu se face ntmpltor;
- automatul rspunde (trece eventual ntr-o nou stare) ntotdeauna unui simbol de
intrare;
- exist un numr finit de stri, iar la un moment de timp dat, AF se poate gsi ntr-o
singur stare.
O stare q a unui automat M = (Q, , , qo, F) este o stare inaccesibil dac i
numai dac nu exist nici o secven w* astfel nct:
*

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

(q,w) (p,), pF;


n caz contrar starea q este o stare stare productiv.
Automatul M poate fi transformat ntr-un AF echivalent, M', care s conin numai stri
productive. Pentru determinarea lui M' = (Q', , ', qo, F') se poate folosi algoritmul:
a) Ao=F, i:=0;
b) Ai+1= Ai {ppQ, q(p,a), a, qAi};
c) dac Ai+1 Ai, atunci i := i+1, salt la b);
d) Q' A i1 , F' F, ' (q, a) p Q' | p (q, a), q Q' , a .
Observaie: Dac qoQ' atunci T(M)=, adic automatul M nu accept nici o secven.

23

1.2.6. Echivalena dintre AFD i AFN


Teorem. Fie M1 un automat finit (nedeterminist). ntotdeauna exist un
automat finit determinist M2, astfel nct cele dou automate s fie echivalente, adic:
T(M1) = T(M2).
Construcia AFD.
Se d M1 = (Q1, , 1, q0, F1). Atunci AFD echivalent cu M1 este M2 = (Q2, , 2, q 'o , F2)
unde:
Q2 = P(Q1), q 'o = {q0},
F2 = {S | SQ1, SF1},
iar a i S Q1, S , avem 2 (S, a) 1 (q, a), si 2 (, a)
qS

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.

1.2.7. Minimizarea automatelor finite


Fie automatul finit determinist (AFD) complet definit: M = (Q, , , qo, F).
Dou stri distincte q1 i q2 din Q sunt difereniate de x, x*, dac n relaiile:
*

(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

Dou stri distincte q1, q2 Q sunt k-difereniate de x, x* dac i numai dac au


loc condiiile de mai sus i |x| k.
Dou stri distincte q1, q2Q sunt echivalente dac i numai dac nu exist nici o
secven care s le diferenieze; notm acest fapt prin q1 q2.
Dou stri distincte q1, q2Q sunt k-echivalente dac i numai dac nu exist nici o
secven x, |x| k care s le diferenieze; notm acest fapt prin:
k

q1 q 2 .
0

Observaie. Dac q1 q 2 atunci q1 i q2 aparin simultan lui F sau lui Q - F.


Lem. Fie M un AFD cu n stri. Strile q1 i q2 sunt echivalente dac i numai dac ele
sunt (n-2)-echivalente.
n 2

n -3

Observaie. Avem ... .


Un AFD este un automat redus dac nu conine stri inaccesibile, stri
neproductive i nu conine perechi de stri distincte echivalente.
Teorem. Oricare ar fi un automat finit M1, ntotdeauna exist un automat finit
redus M' astfel nct: T(M1) = T(M').

1.2.8. Construcia AFD redus


Se d M1 = (Q1, , 1, q 'o , F1).
- Transformm acest automat, ntr-un AFD fr stri inaccesibile i neproductive (vezi
algoritmii anteriori); notm automatul astfel obinut M=(Q, , , qo, F);
0

- Construim relaiile de echivalen , , . . . i folosim lema enunat mai sus;


- Automatul redus M = (Q, , , q 'o , F ) are:
- Q' = Q/ mulimea claselor de echivalen;
notm clasa care conine starea p astfel: [p].
- ' ([p],a) = [q] dac (p,a) = q;
- q 'o = [q0] ;
- F = {[q] | qF}.
Teorem. Automatul redus are numrul minim de stri, dintre toate automatele
deterministe echivalente.
25

1.2.9. Automate finite cu -micri


Un AFN cu -micri este un ansamblu M = (Q, , , qo, F) ale crui componente au
aceleai semnificaii ca la un AF oarecare, doar c funcia de tranziie este definit astfel:
: Qx ( {}) P(Q).
Avem o -tranziie ntre dou configuraii (p,w) (q,w) dac i numai dac
(p,)q; pQ, qQ, w*; adic n reprezentarea grafic avem o legtur de
urmtoarea form:

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).

1.2.10. Probleme propuse


1.2.1.
S se reprezinte tabelar urmtoarele AF:

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) M = ({p,q,r,t}, {a,b,c}, , p, {q,r})


a
p q
q p
r t
t q

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

Verificai apoi pe graful obinut c:


a) secvenele 1010, 1100 sunt acceptate de automat;
b) secvena 1011 nu este acceptat de automat.
1.2.4.
S se construiasc AF care accept limbajul L definit peste alfabetul {0,1} i care are
proprietatea c orice cuvnt al limbajului conine cel puin dou zerouri consecutive.
27

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:

S se construiasc AFD echivalent.


1.2.13.
Fie Li

mulimea

de secvene acceptate de automatele finite deterministe


M i (Q i , , i , q , Fi ) unde i: QixQi; i=1,2.
Fie M = (Q1xQ2, , , qo, F) unde ((p,q),a) = (1(p,a),2(q,a)) iar q 0 (q 10 , q 02 ),
F = {(p,q) | pF1 i qF2}.
Artai c T(M)=L1L2.
0
i

1.2.14.
Fie Li

mulimea

de

secvene

acceptate

de

automatul

finit

determinist

M i (Q i , , i , q 0i , Fi ) unde i: QixQi, i=1,2 .

Fie M = (Q1xQ2, , , qo, F) unde ((p,q),a) = (1(p,a),2(q,a)) iar q 0 (q 10 , q 02 ),


F = {(p,q) | pF1 sau qF2}.
Artai c T(M)=L1L2.
1.2.15.
S se construiasc automate care accept urmtoarele limbaje:
a) numerele ntregi definite n limbajele C i PASCAL;
b) numerele reale definite n limbajele C i PASCAL;
c) declaraiile tablourilor n C;
d) declaraiile tablourilor n PASCAL;
29

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

1.2.11. Indicaii i soluii


1.2.1.
a) Automatul este complet definit iar reprezentarea tabelar este urmtoarea:
Q
a
b
P
q
p 0
Q
p
p 1
b) c) i d) se reprezint analog.
1.2.2.
a) graful de tranziie este urmtorul:

Limbajul acceptat de automat este T(M)= {{b,ab,a2bna}*, n0}.


1.2.3.
Avem urmtorul graf de tranziie:

a) De la qo la qo exist drumuri cu arcele etichetate 1010 respectiv 1100;


b) Nu exist drum de la qo la qo cu arce etichetate n ordinea 1011.
1.2.4.
Dm reprezentarea automatului prin graful de tranziie:

31

1.2.5.
Dm reprezentarea automatului prin graful de tranziie:

1.2.6.

Limbajul L1L2 este acceptat de automatul de mai jos:

1.2.7.
Vom rezolva doar acest punct deoarece pentru a obine celelalte automate se modific
doar mulimea strilor finale ale automatului urmtor:

a) F = {p}; b) F = {t}; c) F = {q}; d) F = {r}.


1.2.8. i 1.2.9. Vezi problema 1.2.7., grafurile vor fi spaiale de forma unui cub. muchiile
sale fiind etichetate cu simbolurile a, b, c.
32

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

Se poate ns considera ca mulime a strilor automatului M', mulimea Q P(Q)


construit pornind de la submulimea {q0}, cci altfel ar trebui s considerm |P(Q)|= 2|Q|
elemente.
Avem deci So = {qo};
'(So,0) = {q1} = S1;
'(So,1) = {q2} = S2;
'(S1,0) = {q1,q2} = S3; '(S1,1) = {q1} = S1;
'(S2,0) = {q2} = S2;
'(S2,1) = {q1,q2} = S3;
'(S3,0) = {q1,q2} = S3; '(S3,1) = {q1,q2} = S3;
Astfel, Q/ = {So,S1,S2,S3}, F/ = {S2,S3}
Reprezentarea grafului de tranziie este urmtoare:

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

1.3. EXPRESII REGULARE


Fie un alfabet. Mulimile regulare peste se definesc recursiv astfel:
1) este o mulime regular peste ;
2) {} este o mulime regular peste ;
3) Oricare ar fi a, {a} este mulime regular peste ;
4) Dac P i Q sunt mulimi regulare peste , atunci mulimile:
P Q, PQ, i P* sunt, de asemenea mulimi regulare;
5) Orice alt mulime regular se obine aplicnd de un numr finit de ori regulile 1)- 4).
Fie un alfabet. Definim recursiv expresiile regulare i mulimile regulare
reprezentate de acestea, astfel:
1) este o expresie regular reprezentnd limbajul ;
2) este o expresie regular reprezentnd limbajul {};
3) Dac a, atunci a este expresie regular reprezentnd limbajul a;
4) Dac p i q sunt expresii regulare reprezentnd limbajele P i Q atunci:
(p+q) este expresie regular reprezentnd limbajul P Q;
(pq) este expresie regular reprezentnd limbajul PQ;
p* este expresie regular reprezentnd limbajul P*;
5) Orice alt expresie regular se obine aplicnd de un numr finit de ori regulile 1) -4).
Observaii. 1o. Se constat imediat c expresiile regulare peste alfabetul sunt secvene
obinute prin concatenare de simboluri din alfabetul {, , +, *, (, )};
2o. Limbajele asociate expresiilor regulare sunt mulimi regulare;
3o. De multe ori simbolul "+" n scrierea expresiilor regulare se nlocuiete cu "|";
4o. Orice expresie regular peste alfabetul reprezint un limbaj regular peste
alfabetul .
o
5 . Au loc urmtoarele identiti (se pot demonstra):
a)
b)
c)
d)
e)

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

Construcia. Se construiete AFN cu -micri din aproape n aproape dup urmtorul


procedeu:

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

stare finala q f , iar


noua stare
initiala este qo

f 1 nu mai este stare


finala noua stare

pq

initiala ramane q1 ,
noua stare finala f 2

f 1 nu mai este stare


finala; noua stare
initiala este qo ,

p*

noua stare finala q f

36

AFN cu -micri astfel obinut se poate transforma ntr-un AFN fr -micri.


Invers, dac se d un AFD, M, determinarea expresiei regulare ce reprezint limbajul
acceptat de acest automat se poate face prin dou metode:
1) Fie M = ({q1,q2,...,qn}, , , q1, F)
Se noteaz cu
*

R kij { | (q i , ) (q j , ) [, , 0 | | | |, (q i , ) (q s , ) s k]}

pentru care avem proprietatea:


R kij R ikk -1 (R kkk-1 ) * R kkj-1 R kij-1 , k {1, 2, . . . , n} iar R 0ij {a | (q i , a) q j } A unde
, daca i j
A
{}, daca i j

n toate aceste relaii i 1, n, j 1, n .


Apoi, R ijk este format din toate cuvintele peste alfabetul care duc automatul M din
starea qi n starea qj fr s treac prin nici o stare de indice mai mare dect k. n
particular, R ijn este format din toate cuvintele care duc automatul din starea qi n starea
qj;
R 1jn unde qjF, este format din toate cuvintele acceptate de automat n starea final qj.
Avem T(M) R 1jn
q jF

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

unde q j (q j , a m ), m {1, 2, . . . s} iar x


rijk rikk-1 (rkkk-1 ) * rkjk-1 rijk-1 , i, j, k {1, 2, . . . n} .

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 } .

Observaie: Expresia regular obinut R ijk nu depinde de ordinea de numerotare a


strilor automatului, singura cerin este ca starea iniial s fie q1.
37

2) Fie M = ({q1,q2,...,qn}, , , q1, F) un automat finit cu n stri i care nu conine stri


inaccesibile.
Acestui automat i se va ataa urmtorul sistem de n ecuaii liniare cu n necunoscute
expresii regulare i coeficieni expresii regulare:
i
i
X i = X1 1 + ... + X n n + i i { 1,2,..., n }, unde
i

ik = a k1 + ... + a k p ; cu qi (q k , a k j ) j {1,..., p}, k {1,..., n}


i

(a k1 , . . . , a kp ; sunt toate etichetele de pe arcul de la q k la qi);

k = dac nu exist a astfel nct qi (qk,a);


daca q i este stare initiala
i =
altfel

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

Avem astfel un sistem de ecuaii algebrice n care coeficienii se afl la dreapta


necunoscutelor.
Deducem succesiv valoarea lui XC ce reprezint chiar expresia regular
corespunztoare limbajului acceptat de automatul finit dat:
XC = X A ab + XA b + XC a = X A ( ab + b ) + XC a = ( + XC b ) ( ab + b ) + XC a =
= ab + b + XC ( bab + bb) + XC a = ab + b + XC ( bab + bb + a ).
38

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.

1.3.1. Probleme rezolvate


Problema 1. S se construiasc o expresie regular corespunztoare automatului finit dat
prin graful de mai jos.

Vom folosi cele dou metode:


Metoda 1:
Avem n vedere cele prezentate n partea de teorie privind mulimile R ijk , expresiile r kij etc.
3
3
+ r13
.
Limbajul acceptat de automat se poate specifica cu ajutorul expresiei regulare: r11
Vom construi tabelul:
k=2

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

r11 = a + , r12 = b, r13 = c, r 21 = b, r 22 = , r 23 = , r31 = , r 32 = , r 33 = a + ;


0

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* ;

Expresia regular corespunztoare automatului dat este:


*
*
*
*
*
3
3
r11 + r13 = (a + bb ) + (a + bb ) ca = (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

Soluia acestei ecuaii este X = * i ea este unic dac .


Rezolvm sistemul astfel: nlocuim Y n prima ecuaie i obinem X = Xa + Xbb + adic
X = X(a + bb) + i soluia acestei ecuaii este X = (a + bb )* adic X = (a + bb )* .
nlocuind valoarea lui X n ultima ecuaie obinem Z=Za+(a+bb)*c adic Z=(a+bb)*ca*.
Nu este nevoie s mai calculm Y.
Deci expresia regular ataat automatului dat este :
X + Z = (a + bb )* + (a + bb )* ca* = (a + bb )* ( + ca*)

i este aceeai cu cea obinut folosind prima metod.


Problema 2:
S se construiasc o expresia regular corespunztoare automatului finit dat tabelar:
Q\

Q1

q2

q2

Q2

q3

q2

Q3

q2

q3

Folosim metoda a doua i atam acestui automat sistemul:


X1

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;

corespunztoare mulimii cuvintelor care aduc


c n starea q1 e acceptat doar secvena vid (q1
corespunztoare mulimii cuvintelor care aduc
corespunztoare mulimii cuvintelor care aduc

Rezolvm sistemul prin metoda substituiei, nlocuim X1 n ecuaia a doua i obinem :


X2=(a+b)+X2c+X3a i de aici X2=(a+b+X3a)c*, iar apoi nlocuim n ultima ecuaie
X3=(a+b+X3a)c*a+X3c i obinem:
X3=(a+b)c*a(ac*a+c)*
42

Nu mai calculm valoarea efectiv a lui X2 deoarece ea nu apare n expresia regular


final (q2 nu e stare final). Expresia regular corespunztoare automatului dat este
*
*
*
X1 + X3 = + (a b)c a(ac a c) .

1.3.2. Probleme propuse


1.3.1.
S se construiasc expresii regulare care reprezint limbaje acceptate de automatele finite
urmtoare:

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.

1.3.3. Indicaii i soluii


1.3.2.
a) 01*+(110)*; b) 0(00+1)*.
1.3.3.
a) 100*1 sau 10+1;
b) (a+b)*a(a+b)*;
c) (a+b)*aa(a+b) *.
1.3.4.
a) da; b) nu; c) nu; d) da.
1.3.7.
M
{q0}
{q1}
{q0, q1}

0
{q0, q1}
{q0}
{q0, q1}

1
{q1}
{q0, q1}
{q0, q1}

1
0
1

expresia regular: (0*+(0+1)1*(0+1))*;


45

1.4. GRAMATICI I LIMBAJE REGULARE


Produciile unei gramatici regulare G = (N, , P, S) diferite de S sunt numai
de forma AaB, Ab.
Limbajul generat de o gramatic regular l numim limbaj regular.

1.4.1. Legtura dintre gramaticile regulare i automatele finite


Teorem. Oricare ar fi o gramatic regular G = (N, , P, S), exist un automat
finit M = (Q, , , qo, F) astfel nct limbajul acceptat de M s coincid cu
limbajul generat de G, adic T(M) = L(G).

Construcia.
Se d G = (N, , P, S). Automatul M = (Q, , , qo, F) cu proprietatea T(M) = L(G) are:
Q = N { k }, k N;

- acelai cu al gramaticii date;


qo=S;

{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

1.4.2. Proprieti de nchidere ale limbajelor regulare


Teorem. Dac L1, L2 sunt limbaje regulare peste alfabetul , atunci
n
*
*
L1 L2 , L1 L2 , L1 L2 , L1 = L1 , L1 = - L1 , sunt limbaje regulare.
n0

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

b) Automatul care accept limbajul L1L2 este M = (Q, , , qo, F) unde:


Q = Q1 Q2 ;
,

qo = qo ;
F , daca q "0 F2
;
F 2
"
F1 F2 , daca q 0 F2
1 (q, a), daca q Q1 - F1

(q, a) 1 (q, a) (q "0 , a), daca q F1 .


(q, a), daca q Q
2
2

c) Automatul care accept limbajul L*1 este M = (Q, , , qo, F) unde:


Q = Q1 { q o } ;
F = F1 { q o} ;
(q o , a) = 1 (q,o , a) ;
(q, a), daca q Q1 - F1
(q, a) 1
.
"
1 (q, a) 1 (q 0 , a) daca q F1

46

d) Automatul care accept limbajul L1 * - L 1 are n vedere faptul c automatul M1 care


accept limbajul L1 trebuie s aib proprietatea: (s,a)=1, (s,a)Qx, adic s fie
total definit.
Atunci automatul care accept limbajul L1 notat M = (Q, , , qo, F) are Q=Q1,
,
q o = q o , = 1 , F = Q - F1 .

Observaie. Dm o metod de a construi automatul M1 total definit echivalent cu M de la


punctul d):
Fie M = (Q, , , qo, F) atunci automatul total definit echivalent cu M este:
,
M1 = (Q1 , , 1 , q o , F1) astfel ca T(M) = T(M1), i are Q1 Q {k}, F1 F iar funcia
1: Q1x P(Q1), este definit astfel:
(q, a), daca | (q, a) | 0
1 (q, a)
{k}, daca | (q, a) | 0

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.

Exist i alt metod:


considerm automatele care accept cele dou limbaje
M1 = (Q1 , , 1 , q o , F1), M 2 = (Q2 , , 2 , q o , F2 )
,

,,

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. Lema de pompare pentru limbaje regulare


Propoziie . Dac L este un limbaj regular, atunci exist un numr natural p astfel nct,
orice cuvnt wL de lungime cel puin p (wp) s aib o descompunere
de forma w=xyz, unde 0<yp cu proprietatea c xyi zL, iN.
O interpretare pe graful de tranziie: dac cuvntul wL are lungimea mai mare dect
numrul strilor (deci pQ) atunci exist un ciclu n graf.
47

Observaie. n practic pentru a se demonstra c un limbaj nu este regular se utilizeaz


negaia lemei de pompare. Dac nu are loc lema de pompare limbajul nu este regular.
Atenie, lema d o condiie necesar dar nu i suficient: dac condiiile din concluzie au
loc nu e sigur c limbajul e regular.

1.4.4. Probleme propuse


1.4.1.
Fie limbajele L1={01n0 | n1} i L2={10n1 | n1}. S se construiasc automatele care
accept limbajele:
*
*
*
*
L1 L2 , L1 L2 , L! L2 , L1 , L2 , L1 = - L1 L2 = - L2 unde ={0,1}.
1.4.2.
S se arate c urmtoarele limbaje nu sunt regulare:
a) L = { a n | n 1 };
b) L={akk=numr prim};
c) L={aibjcmmdc(i,j)=1};
d) L = { a 2 | n 0 };
e) L={anbnn1}.
2

1.4.3.
S se arate c o gramatic care are numai producii de forma ABa i Aa este
regular.
1.4.4.
~

S se arate c dac L este un limbaj regular, atunci L {w | w L} este regular.


~

( w este oglinditul lui w, adic cuvntul citit de la sfrit spre nceput).

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.

1.4.5. Indicaii i soluii


1.4.2.
a)Folosim lema de pompare, adic condiia de necesitate. Presupunem c L este regular
i fie p dat de lema de pompare.
Alegem wL cu w=p2p i conform lemei exist o descompunere a lui w de forma
w=xyz cu 0<yp i xyizL, i0.
Fie i=2 i avem xy2z=xyz+y=p2+y; de aici p2 < xy2z p2+p < < (p+1)2,
lungimea lui w nu e un ptrat perfect deci w=xy2z L, ceea ce contrazice ipoteza de
plecare. n concluzie L nu este regular.

50

b)Folosim lema de pompare, adic condiia de necesitate. Presupunem c L este regular


i fie p dat de lema de pompare.
Alegem wL cu w=ak ,kp i conform lemei exist o descompunere a lui w de forma
w=xyz cu 0<y=ajp i xyiz=ak-j+i*j=ak'L i0.
Dac alegem i=k+1 atunci k'=k-j+(k+1)*j=k-j+k*j+j=k+k*j=k*(j+1) se poate
descompune n factori, deci k' nu e un numr prim i xyizL ceea ce contrazice ipoteza
de plecare. n concluzie L nu este un limbaj regular.
1.4.3.
Fie G = (N, , P, S) cu producii de forma celor din enun.
Vom construi o gramatic G' = (N, , P', S) echivalent cu gramatica dat i care are
producii numai de forma AaB i Aa, pstrnd aceleai neterminale i acelai
simbol de start.
Avem urmtoarele reguli de transformare:
a) dac (ABa)P i AS se construiete producia (BaA)P';
b) dac (Aa)P i AS se construiete (SaA)P';
c) dac (SAa)P se construiete (Aa)P';
d) dac (Sa)P rmne aceast producie i n P': (Sa)P';
e) dac (S)P rmne aceast producie i n P' : (S)P'.
Regulile enunate transform n mod unic produciile de prima form n producii de a
doua form. De fapt n definiia unei gramatici regulare se poate lua sau numai producii
de prima form sau numai producii de forma a doua.
Observaie: Gramatica care are producii doar de forma AaB, Aa genereaz
cuvintele de la stnga la dreapta, pe cnd gramatica care are doar producii de forma
ABa, Aa genereaz aceleai cuvinte de la dreapta spre stnga.
Exemplu:
Fie gramatica G = ({S,A,B}, {a,b}, P, S) cu produciile:
P={SBb | Ab, BBb | Ab, AAa | a} care genereaz limbajul L={aibj | i,j>0}
considerm produciile numerotate n ordinea scrierii lor.
Se observ c un cuvnt al limbajului se genereaz de la sfrit spre nceput :
Fie w=a3b2
S Bb Abb Aabb Aaabb aaabb
1

Conform regulilor de transformare de mai sus se pot obine urmtoarele producii:


- din (1) (SBb)P se obine (Bb)P' (1')
- din (2) (SAb)P se obine (Ab)P' (2')
- din (3) (BBb)P se obine (BbB)P' (3')
- din (4) (BAb)P se obine (AbB)P' (4')
- din (5) (AAa)P se obine (AaA)P' (5')
- din (6) (Aa)P se obine (SaA)P' (6')
51

w se va genera de la stnga spre dreapta astfel:


S ' aA ' aaB ' aaaA ' aaabB ' aaabb
6

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}.
~

Se demonstreaz uor c aceast gramatic genereaz L , iar conform

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

neaprat proprii) cuvintelor limbajului L.


Dac dorim sufixele proprii eliminm din reuniune M0;
c)combinm a) i b).

52

1.4.7.
a) Automatul construit este:

iar gramatica este G = ({A,B,C,D,E,F,G,H,I}, {a,b}, P, A)


unde P: AbA | aB | a | b |
BbC | bG | b
CbD | b
DbE | b
EbF | b
FaB | a
GbH
HbI
I bB | b

53

1.5. GRAMATICI I LIMBAJE INDEPENDENTE DE CONTEXT


O gramatic G = (N, , P, S) este independent de context dac produciile P ale
acestei gramatici sunt numai de forma A, AN; (N)*.
Gramaticile regulare sunt cazuri particulare de gramatici independente de context.
Limbajul generat de o gramatic independent de context se numete limbaj
independent de context.

1.5.1. Proprieti de nchidere ale limbajelor independente de context


Teorem. Dac L1 i L2 sunt limbaje independente de context atunci L1 L2 , L1 L2 , L1*
sunt limbaje independente de context.
Observaii. Fie GI = (Ni, i, Pi, Si), i=1,2, dou gramatici independente de context i
LI = L(Gi), i=1,2.
1o. Dac L = L1 L 2 , L = L(G), G = { N, , P, S } atunci:
N = N 1 N 2 { S }, = 1 2 , P = P1 P2 { S S1 | S 2 }, S N 1 N 2 .

2o. Dac L = L1 L 2 , L = L(G), G = (N, , P, S), atunci:


N = N 1 N 2 { S }, = 1 2 , P = P1 P2 { S S1S 2 }, S N 1 N 2 .

3o. Dac L = L*1 , L = L(G), G = (N, , P, S), atunci:


G = ( N 1 { S }, 1 , P1 { S S S1 | }, S).

4o. L1 L 2 nu e independent de context; dm un contraexemplu L1 = {a m b n c n | m, n 1}


i L 2 = {a m b m c n | m, n 1} sunt dependente de context, dar L1 L 2 = {a m bm cm | m 1}
nu este independent de context.
5o. L1 nu e independent de context, pentru c dac ar fi atunci conform relaiei
L1 L2 = L1 L2 ar rezulta c intersecia este independent de context (ceea ce n
general nu e adevrat).

1.5.2. Arbori de derivare


Arborii de derivare sunt arborescene ordonate cu vrfuri etichetate cu simboluri
din mulimea neterminalelor i mulimea terminalelor; ei conin o r!aa!cin, noduri
interioare i noduri terminale (care nu au succesori).
Fie G = (N,,P,S) o gramatic independent de context. Numim arbore de
derivare sau arbore de analiz sintactic (a.a.s) o arborescen cu urmtoarele
proprieti:

1o. Fiecare vrf are o etichet, care este un simbol din N { } ;


2o. Eticheta din r!aa!cin este S;
3o. Dac un nod este interior i are eticheta A atunci A trebuie s fie din N;
4o. Dac un nod are eticheta A iar nodurile succesoare acestuia, n ordine de la stnga
la dreapta sunt etichetate cu X1, X2, . . . Xn atunci AX1X2. . . Xn trebuie s fie o
producie din P.
o
5 . Dac un nod are eticheta , atunci acesta nu are succesori.
Nodurile terminale formeaz frontiera arborelui i ea, n ordine de la stnga la
dreapta, formeaz o secven peste { }.
Fie G o gramatic independent de context. Dac ntr-o derivare direct se
nlocuiete cel mai din stnga neterminal atunci derivarea direct o numim derivare de
stnga i o notm . Dac ntr-o derivare direct se nlocuiete cel mai din dreapta
s

neterminal, atunci derivarea direct se numete derivare de dreapta i o notm .


d

Fie gramatica independent de context G = (N, , P, S) atunci pentru o secven


w succesiunea de derivri directe:
*

S => 1 => 2 => . . . => n = w


reprezint o derivare pentru cuvntul w sau altfel spus o analiz sintactic. Dac aceast
succesiune de derivri directe se obine pornind de la S la w atunci avem o analiz
sintactic descendent i aceasta corespunde construirii a.a.s. de sus n jos. Dac
construirea a.a.s. se face de jos n sus, adic de la w la S, atunci avem o analiz sintactic
ascendent. Aceste derivri pot fi fcute numai cu derivri de stnga sau numai cu
derivri de dreapta.
Teorem. Fie G = (N, , P, S) o gramatic independent de context. Un cuvnt w peste
alfabetul , deci din *, aparine limbajului generat de G, adic wL(G),
dac i numai dac w este frontul unui arbore de analiz sintactic.
O gramatic G = (N, , P, S) independent de context este ambigu dac i
numai dac exist cel puin un cuvnt care admite doi a.a.s. distinci; n caz contrar
gramatica este neambigu.
Limbajul generat de o gramatic ambigu (neambigu) este un limbaj ambiguu
(neambiguu).
Observaii.
1o. Noiunea de ambiguitate poate fi definit mai general, pentru orice tip de gramatic.
Astfel o gramatic este ambigu dac exist un cuvnt al limbajului generat de ea cu
proprietatea c exist cel puin dou derivri de stnga (sau de dreapta) distincte pentru
el.
55

2o. Definia anterioar este, de fapt, o particularizare relativ la gramaticile independente


de context.

1.5.3. Simplificarea gramaticilor independente de context


Fie G = (N,,P,S) o gramatic independent de context cu L = L(G), L .
1. Simboluri inaccesibile
Un simbol xN este simbol inaccesibil dac nu exist nici o derivare
*

S x cu ,(N)*, n caz contrar simbolul este accesibil.

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

Mulimea produciilor P' este: {A (A>)P, AN', (N'')*}.

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

2o. Fie n P producia A oB11B22...Bkk, unde k 0, B i N iar n i nu exist


simboluri din N , 1ik.
n P' includem toate produciile A oX11X22...Xkk, ce se obin punnd n toate
modurile posibile:
Bi
i = 1, k .
Xi =

i excluznd eventualele producii de forma A care s-ar obine prin acest


procedeu.
5. Redenumiri
O producie de forma AB se numete redenumire.
Lema 5. Gramatica G este echivalent cu o gramatic G' = (N, , P', S) fr redenumiri.
Algoritm
*

1o Pentru fiecare AN se construiete mulimea NA = {B | A B };


Construcia este iterativ:
a) No := {A}, i:=1;
b) Ni: = Ni-1 {C | (B>C)P, BNi-1}
c) dac NiNi-1 atunci i:=i+1, salt la b)
altfel NA:=Ni.
2o Produciile din P' se obin dup cum urmeaz:
dac (B)P, atunci NA astfel nct BNA. n P' introducem toate produciile
A cu proprietatea c BNA. Produciile de forma AB din P nu se includ n P'.
O gramatic independent de context fr simboluri neutilizabile, fr -producii i fr
redenumiri se numete gramatic proprie.
Teorem. Oricare ar fi o gramatic G independent de context cu L(G) i L(G),
exist o gramatic proprie G', echivalent cu G, adic L(G) = L(G').
6. Recursivitate
7.
O producie de forma A A se numete recursiv la stnga.
Lema 6. Fie G o gramatic proprie cu produciile P. Aceast gramatic G este
echivalent cu o gramatic G' = (N', , P', S) ale crei producii P' nu
conin recursiviti la stnga.
58

Pentru produciile din P cu membrul stng A, considerm urmtoarea partiie:


M1 = {AA1, AA2, . . . AAr}
M2 = {A1, A2, . . . As}.
Atunci P' va fi format din produciile:
Ai, AiZ; 1is apoi Zi, ZiZ; 1ir.
Procedm analog cu celelalte producii de acest fel ale mulimii P. Atunci
N'=N mulimea neterminalelor Z astfel introduse.
Observaie: Recursivitatea nu se poate elimina, ea se transform din recursivitate la
stnga n recursivitate la dreapta.

1.5.4. Forma normal Chomsky


O gramatic independent de context G = (N, , P, S) se spune c este n forma
normal Chomsky (FNC) dac orice producie din P este de una din formele:
a) A BC, A,B,CN;
b) A a, a, AN;
c) dac L(G) atunci (S ) P , iar S nu apare n membrul drept al nici unei
producii.
Teorem. Oricare ar fi G=(N, , P, S) o gramatic independent de context, ntotdeauna
exist o gramatic n forma normal Chomsky G', astfel nct L(G) = L(G').

1.5.5. Forma normal Greibach


O gramatic G = (N, , P, S) este n forma normal Greibach (FNG) dac P are
producii numai de forma:
a) A a, AN, a, N*;
b) dac L(G) atunci (S ) P, iar S nu apare n membrul drept al nici unei
producii.
Teorem. Oricare ar fi G = (N, , P, S) o gramatic independent de context,
ntotdeauna exist o gramatic n forma normal Greibach, astfel
nct L(G)=L(G').

59

1.5.6. Leme de pompare pentru limbaje independente de context


Propoziie. (Lema de pompare) Fie L un limbaj independent de context. Exist atunci
atunci o constant n dependent numai de L astfel c dac zL i |z|n,
atunci avem descompunerea z=uvwxy cu proprietile:
a) |vx| 1,
b) |vwx| n,
c) uviwxiyL i0.
Propoziie. (Lema Bar-Hillel) Dac L este un limbaj independent de context, atunci
exist p>0, q>0 astfel nct pentru orice zL, |z|>p s avem o
descompunere z=uvwxy cu |vwx| q i |v| + |x| 0 (v i x nu sunt
simultan vide), iar uviwxiyL, i0.

1.5.7. Probleme propuse


1.5.1.
S se construiasc gramatica care genereaz expresiile regulare peste alfabetul {a,b}.
1.5.2.
Fie limbajele L1 = {01n0 | n1} i L2={10n1 | n1}. S se construiasc gramaticile care
genereaz limbajele:
L1 L2, L1L2, L*1 , L*2 .
1.5.3.
S se defineasc o gramatic independent de context care genereaz peste alfabetul
{b,c} toate cuvintele ce au acelai numr de b-uri ca i c-uri.
1.5.4.
S se defineasc o gramatic independent de context care genereaz peste alfabetul
{b,c,d} toate cuvintele n care bc nu este o subsecven.
1.5.5.
S se defineasc o gramatic independent de context care genereaz mulimea
palindroamelor peste alfabetul {b,c}. (Un palindrom este un cuvnt identic cu oglinditul
su).
1.5.6.
S se construiasc gramaticile independente de context care genereaz limbajele:
a) {bmc2mdenfn | m, n1};
b) {bmcndnemfp(ghk)p | m2, k,n0, p1};
c) {bmcn | 1nm2n};
d) {bm+pcdm+nefn+p | m, n, p0}.
60

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

a) L1={ x x | x{0,1}*} x este oglinditul (reversul) lui x;


~

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.

1.5.8. Indicaii i soluii


1.5.1.
G = (N, , P, S);
N = {S}, = {a,b,+,*,(,)}, P = {SS+S | SS | (S) | S* | a | b | | }.
1.5.3.
O astfel de gramatic este:
G = (N, , P, S) cu
N = {S}, = {b,c} P = {SbSc | cSb | SS | bc | cb}.
1.5.4.
G = (N, , P, S) cu
N = {S,E}, = {b,c,d}, P = {SbE | cS | dS | b | c | d, EbE | dS | b | d}.
1.5.5.
G = (N, , P, S) cu
N = {S}, = {b,c}, P = {SbSb | cSc | b | c | }.
1.5.6.
a) G = (N, , P, S)
N = {S,J,K}, = {b,c,d,e,f}, P = {SJdK, JbJcc | bcc, KeKf | ef}.
b) G = (N, , P, S)
N = {S,J,L,K,Q}, = {b,c,d,e,f,h,g},
P = {SJK, JbJe | bbee | bbLee, LcLd | cd, KfKQ | fQ, QghQ | gh}.
c) G = (N, , P, S)
N = {S}, = {b,c}, P = {SbSc | bbSc | bc | bbc}.
d) G = (N, , P, S)
N = {S,G,H}, = {b,c,d,e,f}, P = {SbSf | GH, GbGd | c, HdHf | e}.
Un cuvnt wL(G) se poate scrie w=bm+pcdm+nefn+p=bp((bmcdm)(dnefn))fp.

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

b) Pentru w=if b then if b then a else a avem dou derivri de stnga


distincte:
S > if b then S else S > if b then if b then S else S >
if b then if b then a else S > if b then if b then a else a
i
S > if b then S > if b then if b then S else S >
if b then if b then a else S > if b then if b then a else a .
Ambiguitatea rezult din faptul c else-ul se poate ataa oricruia din cele dou
then-uri. Pentru a nltura ambiguitatea trebuie s facem o convenie de ataare a unui
else la un then. Convenia va fi urmtoarea: else-ul se va ataa ultimului then.
Gramatica neambigu care modeleaz if...then..else... va fi:
G = (N, , P, S)
N = {S,S'}, = {a,b,if,then,else}
P = {S if b then S | if b then S' else S | a, S'if b then S' else S' | a }.
Faptul c doar S' precede un else, asigur c ntre o pereche then-else generat de
orice producie trebuie s apar fie a fie un alt else.
c) Pentru w=aaaa avem urmtoarele derivri:
S > aB > aaB > aaaB > aaaa=w
i
S > aB > aSB > aaBB > aaaB > aaaa=w.
Limbajul generat de aceast gramatic este L = {ann1}, iar o gramatic neambigu
care l genereaz este:
G = (N, , P, S}
N = {S}, ={a}, P = {SaS | a}.
d) Dou derivri de stnga distincte pentru w=((1) sunt:
S > (S > ((S > ((S) > ((1)=w
i
S > (S > ((S) > ((1)=w
Gramatica genereaz limbajul L = {(m1)n | m,n0};
O gramatic neambigu care genereaz acest limbaj este:
G = (N, , P, S)
N = {S,A}, = {(,1,)}
P = {S(S | 1A, A>A) | }
n acest caz cuvintele se genereaz n mod unic de la stnga la dreapta: nti se
genereaz parantezele deschise, apoi simbolul 1, iar la sfrit parantezele nchise.
S > (S > ((S > ((1A > ((1A) > ((1)=w.

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:

b) Fie cuvntul w=aL(G).


Cei doi arbori de derivare cu frontul w sunt:

68

c) Cei doi arbori de derivare cu frontul w pentru w=a sunt:

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. AUTOMATE PUSH-DOWN


Un automat push-down (APD) este un ansamblu M = (Q, , , , qo, Zo, F) unde:
- Q este o mulime finit i nevid de elemente numite stri;
- este un alfabet denumit alfabetul de intrare;
- este un alfabet denumit alfabetul memoriei stiv;
- qoQ, qo este stare iniial;
- Zo, Zo este simbolul de start al memoriei stiv;
- FQ, F este mulimea strilor finale;
- :Qx({})xP0(Qx*) este funcia de tranziie care are ca valori submulimi
finite din Qx* (n general parial definit).
Fie APD M = (Q, , , , qo, Zo, F). Spunem c acest automat este determinist dac:
1) qQ i Z, n cazul c |(q,,Z)| = 1, atunci (q,a,Z) = , a;
2) |(q,a,Z)| 1, qQ, a {}, Z.
n caz contrar APD este nedeterminist.
Observaie.
Dac qQ, a {}, Z atunci (q,a,Z)={(p1,1), . . . (pn,n)} pkQ, k*,
k{1,..,n}.
O configuraie a automatului M este (q,w,)Qx*x* care nseamn c automatul
se gsete n starea q, pe banda de intrare urmeaz s se citeasc (accepte) secvena w,
iar n memoria stiv avem secvena .
Pe mulimea configuraiilor se definesc relaiile binare:
a) tranziie direct
(q,ax,Z) (p,x,) <=> (q,a,Z)(p,)
sau
(q,ax,Z) (p,ax,) <=> (q,,Z)(p,)
n ultimul caz spunem c a avut loc o -tranziie, adic nu s-a avansat pe banda de intrare
(unde p,qQ, a, Z, x*, , din *).
Tranziia direct nseamn cu alte cuvinte urmtoarele:
- se trece (eventual) n alt stare;
- se avanseaz (sau nu) pe banda de intrare;
- se nlocuiete simbolul Z, din vrful stivei, cu o secven de simboluri din ;
k

b) k tranziia (k tranziii directe);

c) + tranziia (nchiderea tranzitiv);


*

d) * tranziia (nchiderea reflexiv i tranzitiv)


70

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)

1.6.2. Limbaj acceptat de un APD


Fie APD M = (Q, , , , qo, Zo, F). Configuraia (qo,w,Zo) o numim
configuraie iniial. Configuraia (q,,), qF o numim configuraie final dup
criteriul strii finale, iar configuraia (q,,) se numete configuraia final dup
criteriul stivei vide.
Limbajul acceptat de APD, M, dup criteriul strii finale este:
*

T1(M) = {w | w*, (qo,w,Zo) (q,,), qF, *}

iar limbajul acceptat de APD, M, dup criteriul stivei vide este


*

T2(M) = {w| w*, (qo,w,Zo) (q,,), qQ}


71

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.

Teorem. Fie automatul push-down M. Exist ntotdeauna un automat push-down M'


astfel nct T(M') = T1(M); de asemenea i reciproc.
Teorem. Oricare ar fi L un limbaj independent de context, exist un automat
push-down M astfel nct T(M) = L.
Vom da un algoritm de trecere de la o gramatic independent de context la
automatul push-down care accept limbajul generat de gramatic.
Fie L un limbaj independent de context, atunci exist o gramatic independent
de context G = (N, , P, S) astfel nct L = L(G). Se construiete automatul push-down
M = ({q}, , N, , q, S, ) cu proprietatea T(M)=L(G), astfel:
a) dac (A)P atunci (q,)(q,,A);
(neterminalul din vrful stivei este expandat prin );
b) (q,a,a );={(q,)} a;
(se terge simbolul din vrful stivei dac acesta coincide cu cel de pe banda de
intrare)
c) (.,.,.)= n celelalte cazuri.

1.6.3. Probleme propuse


1.6.1.
S se construiasc un automat push-down care accept limbajul L = {anbn | n0}.
1.6.2.
S se construiasc un automat push-down care accept limbajul L = {anb3n | n>0}.
1.6.3.
S se construiasc un automat push-down care accept limbajul L = {a3nbn | n0}.
1.6.4.
S se construiasc un automat push-down care accept limbajul L = {a2nb3n | n0}.
1.6.5.
S se construiasc un automat push-down care accept limbajul L = {anbn|n1}
{anb2n | n1}.
72

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.
~

S se construiasc un automat push-down care accept limbajul L={ w w |w{a,b,c}*}}.


1.6.13.
S se arate c cele dou criterii de acceptare ale unui APD sunt echivalente, adic:
a) Fiind dat un APD care accept un limbaj L dup criteriul stivei vide, atunci un
automat APD care accept acelai limbaj dup criteriul strii finale (S se dea
construcia);
b) analog, n sens invers.
1.6.14.
S se arate c nu pentru orice APD nedeterminist exist unul determinist echivalent cu
el; adic exist limbaje independente de context care nu sunt acceptate de un APD
determinist ci doar de unul nedeterminist.
1.6.15.
S se construiasc un automat push-down care accept limbajul
L = {w{a,b}* | nra(w)=nrb(w)}.

1.6.4. Indicaii i soluii


1.6.1.
Ideea rezolvrii const n:
- la fiecare simbol a citit de pe banda de intrare se adaug n stiv un simbol A;

73

- la terminarea citirii tuturor simbolurilor a consecutive de pe banda de intrare, n stiv


sunt attea simboluri A cte simboluri b trebuie s urmeze pe banda de intrare pentru a
respecta forma cuvintelor din limbaj;
- la fiecare simbol b citit de pe banda de intrare se scoate din stiv un simbol A;
- dup ce s-a citit un simbol b de pe banda de intrare, nu pot s mai apar simboluri a pe
banda de intrare;
- dac la terminarea citirii cuvntului de pe banda de intrare n stiv este doar simbolul
Z0 atunci stiva se golete i cuvntul este acceptat dup criteriul stivei vide;
M = (Q, , , , q0, Z0, F);
Q = {q0,q1}, = {a,b}, = {Z0,A};
F= (automatul accept limbajul dup criteriul stivei vide);
:{q0,q1}x{a,b,}x{Z0,A} P({q0,q1}x{Z0,A}*) i este definit astfel:
q0 - este starea n care se citesc repetat simboluri a de pe banda de intrare
adugndu-se cte un A n stiv;
q1 - este starea n care se trece dup citirea primumului b de pe banda de intrare, apoi se
vor citi repetat b-uri tergndu-se cte un A din stiv pentru fiecare b;
1. (q0,,Z0) = {(q0,)}
-este acceptat secvena vid prin vidarea stivei;
2. (q0,b,Z0) =
-cuvntul nu poate s nceap cu un simbol b;
3. (q0,a,Z0) = {(q0,A,Z0)}
-s-a citit primul simbol a i s-a adugat un A n stiv;
4. (q0,,A) =
-nu e o situaie valid pentru c am terminat de citit cuvntul i nu am citit nici un b,
deci forma cuvntului nu e cea dorit (cuvntul este format numai din simboluri a);
5. (q0,a,A) = {(q0,AA)}
-se citete un a de pe banda de intrare i se adaug un A n stiv;
6. (q0,b,A) = {(q1,)}
-s-a citit primul b i s-a ters un A din stiv;
-s-a trecut n starea q1 pe care o putem numi stare de tergere;
7. (q1,,A) =
-s-a terminat de citit cuvntul, dar n stiv au mai rmas simboluri a, deci cuvntul are
mai multe simboluri a dect b;
8. (q1,b,A) = {(q1,)}
-suntem n starea de tergere, se citete un b de pe banda de intrare, se terge un A din
stiv;
74

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

-cuvntul este acceptat dup criteriul stivei vide;


3) w=abab
(q0,abab,Z0) (q0,bab,AZ0) (q1,ab,Z0) blocare
3

11

-cuvntul nu este acceptat, forma lui nu convine;


4) w=ba
(q0,ba,Z0) blocare
2

-cuvntul nu este acceptat, forma lui nu convine;


75

5) w=aab
(q0,aab,Z0) (q0,ab,AZ0) (q0,b,AAZ0) (q1,,AZ0) blocare
3

-cuvntul nu este acceptat, forma lui nu convine;


6) w=aaba
(q0,aaba,Z0) (q0,aba,AZ0) (q0,ba,AAZ0) (q1,a,AZ0) blocare
3

-cuvntul nu este acceptat, forma lui nu convine;


7) w=aa
(q0,aa,Z0) (q0,a,AZ0) (q0,,AAZ0) blocare
3

-cuvntul nu este acceptat, forma lui nu convine;


8) w=abb
(q0,abb,Z0) (q0,bb,AZ0) (q1,b,Z0) blocare
3

12

-cuvntul nu este acceptat, forma lui nu convine;


1.6.2.
Vom prezenta dou automate echivalente care accept limbajul L:
a) la fiecare simbol a citit de pe banda de intrare se adaug n stiva 3 simboluri A;
- dup citirea tuturor simbolurilor a n stiv sunt attea simboluri A, cte simboluri b
trebuie s urmeze pe banda de intrare;
- la fiecare b citit se scoate din stiv un A;
- cuvintele din limbaj vor fi acceptate dup criteriul strii finale;
- automatul este determinist
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,AAAZ0)}
(q0,a,A) ={(q0,AAAA)}
(q0,b,A) ={(q1,)}
(q1,b,A) ={(q1,)}
(q1,,Z0)={(q2,Z0)}
- n acest moment s-a terminat de citit cuvntul de pe banda de intrare, iar n stiv
este doar simbolul Z0; (deci cuvntul este de forma dorit). Pentru ca automatul s
accepte cuvntul dup criteriul strii finale el trebuie s treac intr-o stare final q2;
(., . ,.) = 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 puine simboluri
A dect numrul simbolurilor b care trebuie citite n continuare;
- la fiecare grup de 3 simboluri b citite se va scoate din stiv un A, aceasta se
realizeaz folosind nc dou stri intermediare;
76

- cuvintele vor fi acceptate dup criteriul stivei vide;


- automatul este determinist;
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:
(q0,a,Z0)={(q0,AZ0)}
(q0,a,A) ={(q0,AA)}
(q0,b,A) ={(q1,A)}
-s-a citit primul simbol b, stiva rmne nemodificat, se trece n starea
intermediar q1;
(q1,b,A) ={(q2,A)}
-s-a citit un numr multiplu de 3 plus 2 simboluri b, nu se modific
coninutul stivei, se trece n starea intermediar q2;
(q2,b,A) ={(q3,)}
-s-a citit un numr multiplu de 3 simboluri b, se terge un A se revine la stare q3
pentru a se citi un alt grup de 3 simboluri b;
(q3,b,A) ={(q1,A)}
-s-a citit un numr multiplu de 3 plus 1 simboluri b, stiva rmne
nemodificat, se trece n starea intermediar q1;
(q3,,Z0)={(q3,)}
(., ., .) = n celelalte cazuri;
Observaii:
1o. Cnd automatul este n starea q1 s-au citit un numr multiplu de 3 plus 1 simboluri
b;
20. 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.
1.6.3.
Vom prezenta dou automate echivalente care accept limbajul {a3nbn}:
a) la un grup de trei simboluri a citite de pe banda de intrare se adaug n stiv un
simbol A, aceasta se realizeaz folosind nc dou stri intermediare;
-dup citirea tuturor simbolurilor a, n stiv sunt attea simboluri A, cte
simboluri b trebuie s urmeze pe banda de intrare;
-la fiecare b citit se scoate din stiv un A;
-cuvintele din limbaj vor fi acceptate dup criteriul stivei vide;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2,q3}, = {a,b}, = {A,Z0}
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:
77

(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

-dac se ajunge la starea q1 i Z0 n vrful stivei nseamn c s-a citit


subcuvntul de forma anbn i deci se pot citi n continuare orici de b; pentru aceasta
trecem ntr-o stare final q2, stiva nu se modific;
(q2,b,Z0)={(q2,Z0)}
-permite citirea unui numr oarecare de simboluri b, coninutul stivei nu se
modific;
(., ., .) = n celelalte cazuri.
1.6.7.
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,,A) ={(q2,A)}
-dac se ajunge la starea q1, A n vrful stivei i cuvntul a fost citit n
ntregime, nseamn c s-au citit mai puine simboluri b dect a-uri, deci trecem ntr-o
stare final q2 i cuvntul este acceptat;
(., ., .) = n celelalte cazuri.
1.6.8.
a) automatul este nedeterminist
-la fiecare a citit se adaug n stiv unul sau dou 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,AZ0),(q0,AAZ0)}
(q0,a,A) ={(q0,AA),(q0,AAA)}
(q0,b,A) ={(q1,)}
(q1,b,A) ={(q1,)}
(q1,,Zo)={(q1,)}
(., ., .) = n celelalte cazuri.
b)
-la fiecare a citit se adaug n stiv un A;
-la fiecare b citit sau la un grup de dou b-uri citite se terge din stiv un A;
M = (Q, , , , q0, Z0, F)
Q = {q0,q1,q2}, = {a,b}, = {Z0,A}
F = criteriul de acceptare este cel al stivei vide
80

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

i este definit astfel:


(q1,,Z0)={(q1,)} este acceptat secvena vid
(q0,x,Z0)={(q0,xZ0)}
x{a,b,c}
(q0,x,y) ={(q0,xy)}
x,y{a,b,c} i xy
(q0,x,x) ={(q0,xx),(q1,)} x{a,b,c}
-dac simbolul citit coincide cu cel din vrful stivei sunt dou variante (nu se poate
determina varianta, de aici apare nedeterminismul):
a) nu s-a ajuns nc la mijlocul cuvntului i atunci adugm n stiv
simbolul citit;
b) s-a ajuns la mijlocul cuvntului i atunci trebuie s ncepem tergerea
elementelor din stiv;
(q1,x,x) ={(q1,)} x{a,b,c}
-dup ce s-a trecut de mijlocul cuvntului (suntem n stare de tergere q1), dac
simbolul citit coincide cu cel din vrful stivei se terge din stiv;
(q1,,Z0)={(q1,)}
(., ., .) = n celelalte cazuri.
1.6.15.
M = (Q, , , , q0, Z0, F)
Q = {q0,q1}, = {a,b}, = {Z0,A,B}
F = criteriul de acceptare este cel al stivei vide
:{q0,q1,}x{a,b,}x{Z0,A,B}P({q0,q1}x{Z0,A,B}*)
i este definit astfel:
(q0,,Z0)={(q0,)};
(q0,a,Z0)={(q0,AZ0)};
(q0,b,Z0)={(q1,BZ0)}; (q0,a,A) ={(q0,AA)};
(q0,b,A) ={(q0,)};
(q1,,Z0)={(q1,)};
(q1,a,Z0)={(q0,AZ0)}; (q1,b,Z0) ={(q1,BZ0)};
(q1,a,B) ={(q1,)};
(q1,b,B)={(q1,BB)};
(., ., .)= n celelalte cazuri.

83

1.7. TRANSLATARE I TRANSLATOARE


Fie un alfabet numit alfabet de intrare i D un alfabet numit alfabet de ieire.
Fie L1*, L2D* dou limbaje (de intrare, respectiv de ieire).
Numim translatare a limbajului L1 n limbajul L2 o relaie T de la * la D* a crui
domeniu de definiie este L1, iar imaginea lui T este L2.
Dac pentru yD* exist x* astfel ca (x,y)T atunci y este o translatare a lui x.
Definim translator pentru translatarea T ca fiind un "dispozitiv" care este capabil s
produc pentru orice ir de intrare x un ir de ieire y astfel nct (x,y)T.

1.7.1. Translator finit


Numim translator finit un ansamblu M = (Q, , D, , qo, F) unde:
- Q este o mulime nevid i finit format din stri;
- este alfabetul de intrare;
- D este alfabetul de ieire;
- qoQ, qo este starea iniial;
- FQ, F este mulimea strilor finale;
- :Qx( {})P(QxD*) este funcia de tranziie cu valori n mulimea prilor finite.
Observaie.
Dac qQ i a {} atunci (q,a)={(p1,1),...,(pn,n)}, ( pi , i ) QxD* , i = 1, n.
Tripletul (q,x,y)Qx*xD* unde q este starea translatorului, x este secvena ce urmeaz
s fie citit la intrare, iar y este secvena scris la ieire, se numete configuraie.
Pe mulimea configuraiilor Qx*xD* se definesc relaiile binare:
a) tranziie direct
(q, ax, y) (p, x, yz) <=> ((qa) (p, z), a { }}x * , y, z D*.
k

b) k tranziia (o succesiune de k tranziii directe);

c) + tranziia (nchiderea tranzitiv a tranziiei directe);


*

d) * tranziia (nchiderea reflexiv i tranzitiv)

Dac M este un translator finit, atunci y este o ieire pentru intrarea x, dac avem:
*

(qo,x,) (q,,y), qF
84

adic din configuraia iniial (qo,x, ) printr-un ir de tranziii directe ajungem n


configuraia final (q, ,y), qF.
Translatarea definit de translatorul M = (Q, , D, , qo, F) este:
*

T(M)={(x,y) | x*, yD*, (qo,x,) (q,,y), qF}

1.7.2. Translator push-down


Numim translator push-down un ansamblu M = (Q, , , D, , qo, Zo, F) unde:
- Q este alfabetul strilor;
- este alfabetul de intrare;
- este alfabetul memoriei stiv;
- D este alfabetul de ieire;
- qoQ, qo este starea iniial;
- FQ, F este mulimea strilor finale;
- Zo este simbolul iniial al stivei;
- :Qx( {})xP(Qx*xD*) este funcia de tranziie cu valori n mulimea
prilor finite.
Observaie.
Dac qQ, a {}, Z atunci
(q,a,Z)={(p1,1,1),(p2,2,2),. . .,(pn,n,n)}, ( pi , i , i) Qx * x D* , i = 1, n.
Apoi (q,x,,y)Qx*x*xD* unde q este starea translatorului push-down, x este secvena
ce urmeaz s fie citit la intrare, este secvena din memoria stiv, iar y este secvena
scris la ieire, se numete configuraie.
Pe mulimea configuraiilor Qx*x*xD* se definesc relaiile binare:
a) tranziie direct

(q, ax, Z , y) (p, x, , yt) <=> (q,a,Z)(p,,t);

unde: qQ, a {}, x*, Z, iar ,* i y,tD*.


k

b) k tranziia (o succesiune de k tranziii directe);

c) + tranziia (nchiderea tranzitiv a tranziiei directe);


*

d) * tranziia (nchiderea reflexiv i tranzitiv).


Secvena y este o ieire pentru intrarea x dup criteriul strii finale dac (o
trecere din configuraia iniial n configuraia final) avem:
85

(qo,x,Zo,) (q,,,y), qF,


iar translatarea dup acest criteriu este:
*

Tf(M)={(x,y)x*, yD*, (qo,x,Zo,) (q,,,y), qF}.


Analog definim translatarea dup criteriul stivei vide:
*

Tv(M)={(x,y)x*, yD*, (q0,x,Z0,) (q,,,y)}.

1.7.3. Probleme propuse.


1.7.1.
Fie translatorul finit M = ({qo,q1}, {a}, {b}, , qo, {q1}) unde
(qo,a) = {(q1,b)},
(q1,) = {(q1,b)},
(.,.)= n restul cazurilor.
S se determine translatarea definit de M.
1.7.2.
S se construiasc un translator push-down care transform o expresie aritmetic de la
forma polonez prefixat n forma polonez postfixat. Presupunem c expresia
aritmetic conine operatorii binari +, *, i operanzii simbolizai prin a.

1.7.4. Indicaii i soluii


1.7.1.
Translatarea obinut este T(M) = {(a,bi) | i1}.
1.7.2.
Un translator push-down care funcioneaz dup criteriul stivei vide i care transform o
expresie aritmetic din forma polonez prefixat n forma polonez postfixat este
M = (Q, , , D, q0, Z0, ) unde:
Q = {q};
= {a,+,*};
= {E,+,*};
D = {a,+,*};
Z0 = E;
q0 = q;
funcia este dat prin:
(q,a,E) = {(q,,a)};
(q,+,E) = {q,EE+,)};
(q,*,E) = {q,EE*,)};
(q,,+) = {(q,,+)};
86

(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

2. PROBLEME I PROGRAME COMPLEXE


n acest capitol se propun cteva probleme legate de tematica primului capitol.
Pentru unele din aceste probleme se d rezolvarea complet inclusiv programele aferente
n limbajul C.

2.1. PROBLEME PROPUSE


2.1.
S se scrie programe n limbajul C pentru urmtoarele probleme:
a) reprezentarea unei gramatici independente de context sub formele:
- vectorial;
- tabelar;
- liste nlnuite ramificate;
b) trecerea de la reprezentarea vectorial la reprezentarea cu ajutorul listelor nlnuite.
2.2.
S se scrie un program C pentru reprezentarea unui automat finit determinist i care
verific dac o secven peste alfabetul automatului este acceptat sau nu de automat.
2.3.
S se scrie un program C pentru reprezentarea unui automat finit nedeterminist i care
verific dac o secven peste alfabetul automatului este acceptat sau nu de automat.
2.4.
S se scrie o funcie C care face trecerea de la o gramatic regular la automatul finit
care accept limbajul generat de gramatica dat.
2.5.
S se scrie o funcie C care face trecerea de la un automat finit la gramatica regular care
genereaz limbajul acceptat de automatul dat.
2.6.
S se scrie o funcie C care face trecerea de la un automat finit nedeterminist dat la un
automat finit determinist (echivalent cu cel iniial).
2.7.
S se scrie o funcie C care face trecerea de la un automat finit dat la automatul finit
redus echivalent.

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.

2.1. INDICAII I SOLUII


2.2.
Reprezentarea i simularea funcionrii unui automat finit determinist (verificarea dac o
secven este acceptat sau nu de automat).
#include
#include
#include
#include

<stdio.h>
<string.h>
<conio.h>
<ctype.h>

int este(char x,char M[])


{ /* verifica daca simbolul x apartine multimii M si returneaza
pozitia sa in multime sau -1 daca nu apartine */
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 (prima stare este starea initiala):\n";
else mesaj="starilor finale:";
printf("\nDati multimea %s ", mesaj);
gets(M);
}
void citdelta(char delta[15][10],char Q[],char S[], char F[])
{
// citeste functia de tranzitie delta din tabel
int i,j;
gotoxy(10,4);
printf("Q\\ %c",179);
for(i=0;i<strlen(S);i++)
{ gotoxy(10+5+i*3,4);
printf("%c",S[i]);
}
printf(" %c Z",179);
gotoxy(10,5);
printf("%c%c%c%c",196,196,196,197);
for(i=0;i<strlen(S);i++) printf("%c%c%c",196,196,196);
printf("%c%c%c",197,196,196);

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

void Citeste_Delta (void);


void Afis_Automat
(void);
bool Include
(char*);
void Verifica
(void);
void Tabel
(void);
};
inline void automat::Citeste_Stari (void)
{ cout<<"Q="; cin>>Q; }
void automat::Citeste_Alfabet(void)
{ for(;;)
{ bool temp=True;
cout<<"="; cin>>S;
for(int i=0;i<strlen(S);i++)
{ if (Este_Stare(S[i]))
{ cout<<"simbolul "<<S[i]<<" este stare\n";
temp=False;
break;
} //endif
}// endfor
if (temp) break;
} // endfor
}
void automat::Citeste_qo (void)
{ for(;;)
{ cout<<"qo="; cin>>qo;
if (Este_Stare(qo)) break;
else
{cout<<"n-ai dat o stare din Q\n";
continue;
} // endif
} // endfor
}
void automat::Citeste_Finale (void)
{ for(;;)
{ bool temp=True;
cout<<"F="; cin>>F;
for(int i=0;i<strlen(F);i++)
{ if (!Este_Stare(F[i]))
{ cout<<"simbolul "<<F[i]<<" nu este stare\n";
temp=False;
break;
} //endif
}// endfor
if (temp) break;
} // endfor
}
void automat::Citeste_Delta(void)
{ int l,c;
for(l=0;l<strlen(Q);l++)
for(c=0;c<strlen(S);c++)
{ cout<<"("<<Q[l]<<","<< S[c]<<")=";
cin>>delta[l][c];
}
}

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";
}

Programul anterior este scris n spiritul programrii prin abstractizarea datelor i


este mult mai clar i lizibil.
2.3.
Reprezentarea i simularea funcionarii unui automat finit nedeterminist.
Rezolvarea consta n aplicarea nerecursiv a metodei backtracking.
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <conio.h>
#include <ctype.h>
struct {
char stare,simb;
char *var;

//
//
//
//
//
//
//
//
//
//

starea si simbolul curent


toate variantele - strile in care
se poate ajunge din starea curent
cu simbolul curent;
la nceput strile sunt simbolizate
cu litere mici, dar n momentul n
care se alege o variant simbolul
pentru stare se transform n liter mare
stiva este folosit pentru simularea
nerecursiv a metodei backtracking

char *delta[10][10];

//
//
//
//
//
//

funcia de tranziie a automatului


delta[i][j] conine mulimea strilor n
care se poate ajunge din starea i cu
simbolul j i este un ir de caractere de
lungime variabil pentru care se aloc
dinamic zon de memorie

char Q[15],S[10],F[15];

//
//
//
//
//
//

Q = multimea starilor automatului


(litere mici)
S = multimea simbolurilor alfabetului
de intrare
F = multimea starilor finale ale
automatului

} stiva[100];

95

int este(char x,char M[])

// verifica daca caracterul x se


// afla n mulimea M

{ 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;

//
//
//
//

starea in care trece automatul


sirul de simboluri cu care se inlocuieste
simbolul din varful stivei
o vom numi varianta

tip_delta *delta[15][10][10]; // functia de tranzitie


// deoarece automatul push-down
// este nedeterminist fiecare
// element al tabloului delta
// este o adresa la care se vor
// memora dinamic
// variantele posibile
char Q[15];
// multimea starilor automatului
char S[10];
// multimea simbolurilor alfabetului de intrare
char Z[10];
// multimea simbolurilor alfabetului stivei
char F[15];
// multimea starilor finale ale automatului;
// este folosita doar daca criteriul de
// acceptare
// este cel al starii finale
char secv[50];
// secventa citita de pe banda de intrare
char crt;
// criteriul de acceptare
// crt='v' ( stiva vida)
// crt='f' ( stare finala)
char stiva[50];
// memoria stiva
int este(char x,char M[])
{
// returneaza pozitia simbolului x in multimea M,
// sau -1 daca x nu apartine lui M
int i;
for(i=0;M[i];i++)
if(M[i]==x) return i;
return(-1);
}

98

void citeste(char M[],char x)


{
char *mesaj;
switch(x)
{
case 's':
mesaj="simbolurilor alfabetului de intrare";
break;
case 'q':
mesaj="starilor (prima stare este starea initiala)\n";
break;
case 'f':
mesaj="starilor finale";
break;
case 'p':
mesaj="simbolurilor alfabetului memoriei stiva:";
strcat(mesaj,"\n(primul simbol este simbolul initial al stivei)");
}
printf("\nDati multimea %s: ", mesaj);
gets(M);
}
void citdelta()
{ int i,j,k,l;
tip_delta *pd;
char sir1[50],*s,*s1;
printf("\n exemplu pentru furnizarea functiei delta\n");
printf(" delta[p,0,Z]=(p,&),(q,AA),(p,AZ) \n\n");
for(i=0;Q[i];i++)
for(j=0;S[j];j++)
for(k=0;Z[k];k++)
{
printf("\n delta[%c,%c,%c]=",Q[i],S[j],Z[k]);
fflush(stdin);
gets(sir1);
if(strlen(sir1)==0)
// nu e definita functia pentru
// tripletul Q[i],S[j],Z[k]
{delta[i][j][k]=NULL; continue;}
s=sir1;
l=0; //se numara variantele citite si se aloca dinamic zona necesara
//pentru memorarea lor ultima varianta introdusa va fi o
//varianta fictiva care va contine componenta sir=NULL si este
//utilizata pentru a depista sfarsitul variantelor
while(s=strchr(s,'('))
{l++;s++;}
pd=delta[i][j][k]=(tip_delta*)malloc((l+1)*sizeof(tip_delta));
s=sir1;
while(s=strchr(s,'('))
{pd->st=*(s+1);
s1=s+3;
s=strchr(s1,')');
*s='\0';
pd->sir=(char *)malloc(strlen(s1)+1);
strcpy(pd->sir,s1);
s=s+1;
pd++;
}
pd->sir=NULL; // completarea variantei fictive
}
}
99

int push(char *x,int vs)


{
// inlocuieste simbolul din varful stivei cu
// sirul de caractere de la adresa x
// se actualizeaza varful stivei : vs
char *p;
vs--;
if(*x!='&')
{ for(p=x;*p;p++);
for(p--;p>=x;p--) stiva[vs++]=*p;
}
return vs;
}
int accept(char q,int i,int vs)
{
// functia returneaza valoarea 1 daca secventa este acceptata
// de automat si -1 in caz contrar
// se modeleaza metoda backtracking recursiv pentru gasirea
// solutiei
char simb[2];
int j,n,vf,k,l,m;
tip_delta *p;
n=0;
if(crt=='v')
// criteriul stivei vide
{if(secv[i]=='\0')
if(vs==0) return(1);
else n=1;
}
else
// criteriul starii finale
{if(secv[i]=='\0')
if(este(q,F)!=-1) return(1);
else n=1;
}
simb[0]=secv[i];
simb[1]='&';
vf=vs;
for(j=n;j<2;j++)
{
// se incearca cele doua posibilitati:
// -daca simb[j]=secv[i] se incearca avansarea pe banda
// de intrare cu simbolul secv[i]
// -daca simb[j]='&' se incearca o epsilon tranzitie
if((k=este(q,Q))==-1)break;
if((l=este(simb[j],S))==-1) {j++;continue;}
if(vf<1) break;
if((m=este(stiva[vf-1],Z))==-1) break;
p=delta[k][l][m];
for(;p && p->sir;p++) // se parcurg toate variantele
{ vs=vf
vs=push(p->sir,vs);
if(accept(p->st,i+1-j,vs)!=-1) return(1);
}
} return(-1);
}
void main(void)
{
int ind,i,j,k;
int vs;
// virf stiva ( vs=0 indica stiva vida )
char q;
clrscr();
printf("\nSimularea functionarii unui automat push-down\n nedeterminist");
citeste(Q,'q');
// citire stari automat
100

citeste(S,'s');
strcat(S,"&");
citeste(Z,'p');

//
//
//
//

citire alfabet de intrare


se adauga la alfabetul de intrare epsilon
simbolizat prin &
citire alfabet memorie stiva

printf("\n Dati criteriul de acceptare");


printf("\n stiva vida(v) ,stare finala (f) :");
if((crt=tolower(getche()))=='f')
citeste(F,'f');
// citire stari finale
printf(" \n\n Functia de tranzitie delta:");
printf("\n (simbolul & reprezinta epsilon)");
printf("\n(daca delta nu e definita pentru un triplet\n tastati ENTER)\n");
citdelta();
printf("\n\n Doriti sa verificati secventa?(d/n):");
while(tolower(getche())!='n')
{printf("\n Dati secventa (pt secventa vida dati ENTER):\n");
gets(secv);
// citirea secventei de pe banda de intrare
stiva[0]=Z[0]; // initializarea stivei cu simbolul initial al
// stivei
vs=1;
// arata pozitia pe care se poate adauga un nou
// element in stiva;
// vs=0 indica stiva vida elementul din varful
// stivei este stiva[vs-1]
if(accept(Q[0],0,vs)!=-1)
printf("\n secventa este acceptata");
else
printf("\n secventa nu este acceptata");
printf("\n\n Doriti sa verificati secventa?(d/n):");
}
}

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

12. JOHNSONBAUGH,R. "Discrete Mathematics"


New York: Macmillan Publ. Co., 1990.
13. KERNIGHAN,B.W., RITCHIE,D.M. "The C programming languages"
Englewood. Cliffs, N.J.: Prentice-Hall, 1978.
14. LIVOVSCHI,L. POPOVICI,C.P., GEORGESCU,M., NDREANU,N.
"Bazele Informaticii"
Editura Didactic i Pedagogic, Bucureti, 1981.
15. McNAUGHTON,R. "Elementary Computability, Formal Languages,
and Automata"
Englewood. Cliffs, N.J.: Prentice-Hall, 1982.
16. MARCU,S. "Gramatici i automate finite"
Editura Academiei RSR, Bucureti, 1964.
17. MOLDOVAN,Gr., CIOBAN,V., LUPEA,M.,
"Probleme pentru programare n limbajul C"
Universitatea "Babe-Bolyai" Cluj-Napoca, 1995.
18. MOLDOVAN,Gr. "Bazele Informaticii II"
Universitatea "Babe-Bolyai" Cluj-Napoca, 1985.
19. ORMAN,G. "Limbaje formale"
Editura Tehnic, Bucureti, 1982.
20. PAUN,Gh. "Gramatici contextuale"
Editura Academiei RSR, Bucureti, 1982.
21. SALOMAA,A. "Theory of Automata"
Oxford: Pergamon Press, 1969.
22. SALOMAA,A. "Formal Languages "
New York: Academic Press, 1993.

104

23. ERBNAI,L.D. "Limbaje de programare i compilatoare"


Editura Academiei RSR, Bucureti, 1987.
24. TOADERE,T. "Teoria grafelor"
Universitatea "Babe-Bolyai" Cluj-Napoca, 1992.

105

Вам также может понравиться