Sunteți pe pagina 1din 28

1

Curs 4 - plan

Expresii regulate
Automatul determinist echivalent cu o
expresie regulat

Proprieti de nchidere pentru L
3

Dac L eL
3
atunci L = (E
*
\L) eL
3

Fie A=(Q,E,o,q
0
, F) automat cu L(A)=L.
Automatul A care recunoate L(A):
A=(Q, E,o,q
0
, Q-F)

2
b
a,b
a b
a
b
a,b
0
a b
a
0
2
1
1
2
Consecin : dac L
1
, L
2
eL
3
atunci L
1
\L
2
eL
3

Proprieti de nchidere pentru L
3

Fie A1 si A2 automate cu o singur stare final.
Automatul A (cu c-tranzitii) care recunoate L(A1) L(A2)
3
q
01

f
1

q
02

f
2

A1 A2
A:
Proprieti de nchidere pentru L
3

Fie A1 si A2 automate cu o singur stare final.
Automatul A (cu c-tranzitii) care recunoate
L(A1) L(A2)
4
q
0

q
01

f
1

q
02

f
2

f
A1
A2
A:
Proprieti de nchidere pentru L
3

Fie A automat cu o singur stare final.
Automatul A (cu c-tranzitii) care recunoate L(A)
*

5
A2
A:
q
01

q
f
q
0

f
A
Proprieti de nchidere pentru L
3

Fie A=(Q,E,o,q
0
, {qf}) automat cu o singur stare final.
Automatul A (cu c-tranzitii) care recunoate (L(A))
R
:
A=(Q,q0-,E,o,q
0
, ,q0-) i
- o(q1,a) = q2 ddac o(q2,a)=q1 (inversarea arcelor n graf)
- o(q0,c)=qf
- Daca c eL(A), atunci o(q0,c)=q0

6
A:
qf
q0
A
q0
7
Expresii regulate
Reprezentarea limbajelor de tip 3 prin expresii algebrice
Dac E este un alfabet atunci o expresie regulat peste E se
definete inductiv astfel:
u, c, a (a e ) sunt expresii regulate ce noteaz respectiv limbajele
u, {c}, {a}
Dac E, E1, E2 sunt expresii regulate atunci:
(E1 | E2) este expresie regulat ce noteaz limbajul L(E1) L(E2)
(E1E2) este expresie regulat ce noteaz limbajul L(E1)L(E2)
(E*) este expresie regulat ce noteaz limbajul L(E)*
Ordinea de prioritate a operatorilor este *, ., |
n scrierea expresiilor regulate se renun la unele paranteze
dac restabilirea lor ine cont de ordinea de prioritate a
operatorilor
8
Expresii regulate
Exemple
(a|b) | (c|d) {a,b,c,d}
(0|1)(0|1) {00,01,10,11}
a
*
b
*
{a
n
b
k
|n,k > 0}
(a|b)
*
{a,b}
*

(0|1|2|...|9)(0|1|2...|9)*
noteaz mulimea ntregilor fr semn
(a|b|c|...|z)(a|b|c|...|z|0|1|2...|9)*
noteaz mulimea identificatorilor
Dou expresii regulate E1, E2 sunt echivalente i
scriem E1 = E2 dac L(E1) = L(E2)



9
Expresii regulate - Proprieti
Dac p, q, r sunt expresii regulate atunci:
(p | q) | r = p | (q | r)
(pq)r = p(qr)
p | q = q | p
pc = cp = p
p | u = p | p = p
up = pu = u
p(q | r) = pq | pr
(p | q)r = pr | qr
c | pp* = p*
c | p*p = p*
10
De la o expresie regulat la automatul finit
Teorem Pentru orice expresie regulat E peste
E exist un automat finit (cu c - tranziii) A,
astfel nct L(A) = L(E).
Demonstraie inducie structural.
Dac E e {u, c, a} ( a e E) atunci automatul
corespunztor este respectiv:

a
0 0
1 1
0
1
11
De la o expresie regulat la automatul finit
E = E1 | E2


E = E1E2


E = E1*

q
0

q
01

f
1

q
02

f
2

f
q
01

f
1

q
02

f
2

q
01

q
f
q
0

f
Reprezentarea expresiilor regulate sub
form de arbore
Intrare: Expresia regulat E = e
0
e
1
e
n-1
Precedena operatorilor:
prec(|) = 1, prec(.) = 2, prec(*) = 3.

Ieire: Arborele asociat t.

Metoda: Se consider dou stive:
STIVA1 stiva operatorilor
STIVA2 stiva operanzilor (care va conine arborii pariali construii)
Metoda tree(op,S,D)

12
Algoritm (I)
i = 0;
while(i < n){
c = e
i
;
switch(c){
case ( : {STIVA1.push(c); break;}
case operand : {STIVA2.push(c); break;}
case operator: {
while(prec(STIVA1.top())>=prec(c))
build_tree();
STIVA1.push(c); break;
}//endcase
case ) : {
do{build_tree();}while(STIVA1.top()!= ();
STIVA1.pop(); break;
}//endcase
}//endswitch
i++;
}//endwhile
while(STIVA1.not_empty()) build_tree();
t = STIVA2.pop();
13
Algoritm (II)
build_tree(){
op = STIVA1.pop();
D = STIVA2.pop();
switch(op){
case *: {
t = tree(op, D, NULL);
STIVA2.push(t); break;
}
case |: case .:{
S = STIVA2.pop();
t = tree(op, S, D);
STIVA2.push(t); break;
}
}
14


|
.
*
|
*
a
b c
a
b
15
Un algoritm
.
a
*
b | a (b | c)
*

16
De la o expresie regulat la automatul finit


E = E1 | E2


E = E1E2


E = E1*

q
0

q
01

f
1

q
02

f
2

f
q
01

f
1

q
02

f
2

q
01

q
f
q
0

f
a
0 0
1 1
0
1
17
De la o expresie regulat la automatul finit-
algoritm
fiecare din apariiile operatorilor | i * dintr-o
expresie regulat E introduce dou noi stri n
automatul construit
operatorul nu introduce alte stri
pentru orice apariie a unui simbol din E, ct i
pentru c, dac acesta apare explicit n E, este nevoie
de 2 stri n automatul construit.
dac n este numrul de simboluri din E iar m este
numrul de paranteze mpreun cu apariiile
simbolului , atunci numrul strilor automatului
echivalent cu E este p = 2(n m).
18
Algoritm
din orice stare a automatului, se fac cel mult dou
tranziii: fie o tranziie cu un simbol din E, fie una sau
dou c - tranziii, fie zero tranziii.
reprezentarea automatului echivalent cu o expresie
regulat se poate face cu 3 tablouri de dimensiune
p, unde p este numrul strilor (acestea sunt
numerotate de la 1 la p):
simbol[i]=a: din starea i se face o tranziie cu simbolul a
(daca simbol[i+= , din starea i se fac doar c - tranziii sau
nu exist tranziii)
next1[i]=j: din starea i se face o tranziie ctre starea j (cu
un simbol sau c)
next2[i]=j : din starea i se face o c - tranziie ctre j .
Intrare: Expresia regulat E cu n simboluri dintre care m
sunt paranteze i apariii ale operatorului produs;

Ieire: Vectorii simbol, next1, next2 de dimensiune
p = 2(n-m) ce descriu automatul cu c - tranziii echivalent cu
E, starea final f;

Metoda:
1. Se construiete arborele ataat expresie E
2. Se parcurge arborele n preordine i se ataeaz nodurilor
vizitate, exceptnd pe cele etichetate cu produs , respectiv
numerele 1, 2, , n-m;


19
Algoritm


5
7
6
3
2
1
|
.
.
*
a
b c
4
b
20
Algoritm
*
E=a
*
b|(bc)
*

21
Algoritm
3. Se parcurge arborele n postordine i se ataeaz fiecrui nod
N o pereche de numere (i, f) care reprezint starea iniial
respectiv final a automatului corespunztor expresiei din
subarborele cu rdcina N, astfel:

Dac nodul are numrul k (de la pasul 2) atunci:
N.i = 2k-1, N.f = 2k;

Dac nodul este etichetat cu produs atunci
N.i = S.i iar N.f = D.f

(S i D sunt fii lui N, stng respectiv drept);

(1,2)
(9,10)
(11,14)
(13,14)
(11,12)
(3,8)
(7,8)
(3,4)
5
7
6
3
2
1
|
.
.
*
a
b c
4
b
22
Algoritm
*
(5,6)
E=a
*
b|(bc)
*

24
Algoritm
4. for(j =1..2(n - m)) ,simbol*j+ = , next1*j+ = next2*j+ = 0-
5. Se parcurge din nou arborele obinut n postordine .
Dac N este nodul curent iar S i D sunt fii si, atunci, n
funcie de eticheta lui N, se execut urmtoarele:
Dac N este etichetat cu a (deci este frunz):
simbol*N.i+ = a, next1[N.i] = N.f
Dac N este etichetat cu |:
next1[N.i] = S.i, next2[N.i] = D.i,
next1[S.f] = N.f, next1[D.f] = N.f
Dac N este etichetat cu :
next1[S.f] = D.i
Dac N este etichetat cu * (D nu exist n acest caz):
next1[N.i] = S.i, next2[N.i] = N.f,
next1[S.f] = S.i, next2[S.f] = N.f
6. f este starea pentru care next1[f] = next2[f] = 0
27
p simbol[p] next1[p] next2[p]
1 3 9
2 0 0
3 5 4
4 7 0
5 a 6 0
6 5 4
7 b 8 0
8 2 0
9 11 10
10 2 0
11 b 12 0
12 13 0
13 c 14 0
14 11 10
28
Corectitudinea algoritmului
Teorem Algoritmul descris este corect: automatul cu c -
tranziii obinut este echivalent cu expresia regulat E.

Demonstraie
Modul n care au fost alese perechile (i, f) de stri pentru
fiecare nod al arborelui construit corespunde construciilor
din teorema precedent.
De asemenea tranziiile care se definesc n pasul 5 al
algoritmului urmresc construcia din teorema amintit.
Aadar, automatul obinut este echivalent cu expresia dat
la intrare.



Gramatici i limbaje independente de context
G = (N, T, S, P)
N i T sunt mulimi nevide, finite, disjuncte de
neterminali (variabile), respectiv terminali,
E = N T se numete vocabularul gramaticii,
S e V este o variabil special numit simbol de start
P _ N (N T)* este mulimea regulilor
(produciilor).

Limbajul generat de gramatica G (notat L(G)) este
L(G)= {w| w e T*, S
+
w }.

31
Derivri extrem stngi/drepte
Fie G = (N, T, S, P) i w e L(G);
exist o derivare extrem stng pentru w:
derivarea n care, la orice pas se rescrie
(nlocuiete) cel mai din stnga neterminal din
cuvntul obinut

exist o derivare extrem dreapt pentru w:
derivarea n care, la orice pas se rescrie
(nlocuiete) cel mai din dreapta neterminal
din cuvntul obinut

32
Exemplu
G=({E},{a,b,+,*),( },E,P) unde
P: E E+E |E*E|(E) | a|b

Fie a+(b*a)
Derivare extrem stng:
EE+E a+E a+(E) a+(E*E) a+(b*E) a+(b*a)
Derivare extrem dreapt:
EE+E E+(E) E+(E*E) E+(E*a) E+(b*a) a+(b*a)

Exista derivari care nu sunt nici extrem drepte nici extrem stangi!
33