Sunteți pe pagina 1din 37

Limbaje Formale, Automate şi Compilatoare

Curs 4

2020-21

LFAC (2020-21) Curs 4 1 / 30


Curs 4

1 Gramatici de tip 3 şi automate finite

2 Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

3 Expresii regulate

4 Automatul echivalent cu o expresie regulată


Algoritm

LFAC (2020-21) Curs 4 2 / 30


Gramatici de tip 3 şi automate finite

Curs 4

1 Gramatici de tip 3 şi automate finite

2 Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

3 Expresii regulate

4 Automatul echivalent cu o expresie regulată


Algoritm

LFAC (2020-21) Curs 4 3 / 30


Gramatici de tip 3 şi automate finite

De la gramatici de tip 3 la automate finite

Pentru orice gramatică G de tip 3 (ı̂n formă normală) există un


automat A (nedeterminist) astfel ca L(A) = L(G):

În gramatica G În automatul A


T Σ=T
N Q = N ∪ {f }, F = {f }
S q0 = S
q → ap p ∈ δ(q, a)
q→a f ∈ δ(q, a)
dacă S → ǫ se adaugă S la F

LFAC (2020-21) Curs 4 4 / 30


Gramatici de tip 3 şi automate finite

De la automate finite la gramatici de tip 3

Pentru orice automat finit (nedeterminist) există o gramatică G de


tip 3 astfel ca L(A) = L(G):

În automatul A În gramatica G


Σ T =Σ
Q N=Q
q0 S = q0
p ∈ δ(q, a) q → ap
δ(q, a) ∩ F 6= ∅ q→a
dacă q0 ∈ F se adaugă q0 → ǫ

LFAC (2020-21) Curs 4 5 / 30


Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

Curs 4

1 Gramatici de tip 3 şi automate finite

2 Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

3 Expresii regulate

4 Automatul echivalent cu o expresie regulată


Algoritm

LFAC (2020-21) Curs 4 6 / 30


Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

Închiderea la intersecţie

Dacă L1 , L2 ∈ L3 , atunci L1 ∩ L2 ∈ L3

Fie A1 = (Q1 , Σ1 , δ1 , q01 , F1 ) şi A2 = (Q2 , Σ2 , δ2 , q02 , F2 ) automate


deterministe astfel ı̂ncât L1 = L(A1 ) şi L2 = L(A2 ).
Automatul A (determinist) care recunoaşte L1 ∩ L2 :

A = (Q1 × Q2 , Σ1 ∩ Σ2 , δ, (q01 , q02 ), F1 × F2 )

δ((q1 , q2 ), a)) = (q1′ , q2′ ) ddacă


δ1 (q1 , a) = q1′
δ2 (q2 , a) = q2′

LFAC (2020-21) Curs 4 7 / 30


Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

Închiderea la diferenţă

Dacă L ∈ L3 atunci L = (Σ∗ \ L) ∈ L3

Fie A = (Q, Σ, δ, q0 , F ) automat cu L(A) = L.

Automatul A′ care recunoaşte L = L(A):

A′ = (Q, Σ, δ, q0 , Q \ F )

LFAC (2020-21) Curs 4 8 / 30


Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

Închiderea la diferenţă

Dacă L ∈ L3 atunci L = (Σ∗ \ L) ∈ L3

Fie A = (Q, Σ, δ, q0 , F ) automat cu L(A) = L.

Automatul A′ care recunoaşte L = L(A):

A′ = (Q, Σ, δ, q0 , Q \ F )

Dacă L1 , L2 ∈ L3 atunci L1 \ L2 ∈ L3 : L1 \ L2 = L1 ∩ L2

LFAC (2020-21) Curs 4 8 / 30


Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

Închiderea la produs

Fie A1 = (Q1 , Σ, δ1 , q01 , {f1 }) şi A2 = (Q2 , Σ, δ2 , q02 , {f2 })


automate cu o singură stare finală astfel ı̂ncât L1 = L(A1 ) şi
L2 = L(A2 ).
Automatul A (cu ǫ-tranziţii) care recunoaşte L1 · L2 :
A = (Q1 ∪ Q2 , Σ, δ, q01 , {f2 })

LFAC (2020-21) Curs 4 9 / 30


Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

Închiderea la reuniune

Fie A1 = (Q1 , Σ1 , δ1 , q01 , {f1 }) şi A2 = (Q2 , Σ2 , δ2 , q02 , {f2 })


automate cu o singură stare finală astfel ı̂ncât L1 = L(A1 ) şi
L2 = L(A2 ).
Automatul A (cu ǫ-tranziţii) care recunoaşte L1 ∪ L2 :
A = (Q1 ∪ Q2 ∪ {q0 , f }, Σ1 ∪ Σ2 , δ, q0 , {f })

LFAC (2020-21) Curs 4 10 / 30


Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

Închiderea la iteraţie

Fie A = (Q, Σ, δ, q01 , {f }) automat cu o singură stare finală astfel


ı̂ncât L(A) = L.
Automatul A (cu ǫ-tranziţii) care recunoaşte L∗ (= L(A)∗ ):

A = (Q ∪ {q0 , f }, Σ, δ ′ , q0 , {f })

LFAC (2020-21) Curs 4 11 / 30


Expresii regulate

Curs 4

1 Gramatici de tip 3 şi automate finite

2 Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

3 Expresii regulate

4 Automatul echivalent cu o expresie regulată


Algoritm

LFAC (2020-21) Curs 4 12 / 30


Expresii regulate

Expresii regulate - definiţie

Reprezentarea limbajelor de tip 3 prin expresii algebrice

Definiţie 1
Dacă Σ este un alfabet atunci o expresie regulată peste Σ se defineşte
inductiv astfel:
∅, ǫ, a (a ∈ Σ) sunt expresii regulate ce descriu respectiv limbajele
∅, {ǫ}, {a}.
Dacă E, E1 , E2 sunt expresii regulate atunci:
(E1 |E2 ) este expresie regulată ce descrie limbajul L(E1 ) ∪ L(E2)
(E1 · E2 ) este expresie regulată ce descrie limbajul L(E1 )L(E2 )
(E ∗ ) este expresie regulată ce descrie limbajul L(E)∗

LFAC (2020-21) Curs 4 13 / 30


Expresii regulate

Expresii regulate - definiţie

Reprezentarea limbajelor de tip 3 prin expresii algebrice

Definiţie 1
Dacă Σ este un alfabet atunci o expresie regulată peste Σ se defineşte
inductiv astfel:
∅, ǫ, a (a ∈ Σ) sunt expresii regulate ce descriu respectiv limbajele
∅, {ǫ}, {a}.
Dacă E, E1 , E2 sunt expresii regulate atunci:
(E1 |E2 ) este expresie regulată ce descrie limbajul L(E1 ) ∪ L(E2)
(E1 · E2 ) este expresie regulată ce descrie limbajul L(E1 )L(E2 )
(E ∗ ) este expresie regulată ce descrie limbajul L(E)∗

Ordinea de prioritate a operatorilor este ∗, ·, |


LFAC (2020-21) Curs 4 13 / 30
Expresii regulate

Exemple

(a|b)|(c|d) −→ {a, b, c, d}
(0|1) · (0|1) −→ {00, 01, 10, 11}
a∗ b∗ −→ {an bk |n, k ≥ 0}
(a|b)∗ −→ {a, b}∗
(0|1|2|...|9)(0|1|2...|9)∗ descrie mulţimea ı̂ntregilor fără semn
(a|b|c|...|z)(a|b|c|...|z|0|1|2...|9)∗ descrie mulţimea identificatorilor

Două expresii regulate E1 , E2 sunt echivalente, şi scriem E1 = E2 dacă


L(E1 ) = L(E2 )

LFAC (2020-21) Curs 4 14 / 30


Expresii regulate

Proprietăţi

(p|q)|r = p|(q|r )
(pq)r = p(qr )
p|q = q|p
p·ǫ=ǫ·p =p
p|∅ = p|p = p
∅·p =p·∅=∅
p(q|r ) = pq|pr
(p|q)r = pr |qr
ǫ|pp∗ = p∗
ǫ|p∗ p = p∗

LFAC (2020-21) Curs 4 15 / 30


Expresii regulate

De la o expresie regulată la automatul finit

Teorema 1
Pentru orice expresie regulată E peste Σ există un automat finit (cu ǫ -
tranziţii) A, astfel ı̂ncât L(A) = L(E).

Demonstratie: inducţie structurală.

Dacă E ∈ {∅, ǫ, a} (a ∈ Σ) atunci automatul corespunzător este


respectiv:

LFAC (2020-21) Curs 4 16 / 30


Expresii regulate

Demonstraţie

E = E1 |E2

E = E1 E2

E = E1∗

LFAC (2020-21) Curs 4 17 / 30


Expresii regulate

Reprezentarea expresiilor regulate sub formă de


arbore

Intrare: Expresia regulată E = e0 e1 . . . en−1


Precedenţa operatorilor:
prec(|) = 1, prec(·) = 2, prec(∗) = 3 (prec(()= 0).

Ieşire: Arborele asociat: t.

Metoda: Se consideră două stive:


STIVA1 stiva operatorilor
STIVA2 stiva arborilor (care va conţine arborii parţiali construiţi)
Metoda tree(r , tS, tD)

LFAC (2020-21) Curs 4 18 / 30


Expresii regulate

Algoritm
i = 0;
while(i < n) {
c = ei ;
switch(c) {
case ′ (′ : { STIVA1.push(c); break; }
case simbol (din alfabet): { STIVA2.push(tree(c,NULL,NULL)); break; }
case operator : {
while (prec(STIVA1.top())>=prec(c))
build tree();
STIVA1.push(c); break;
}
case ′ )′ : {
do { build tree();} while(STIVA1.top()!= ′ (′ );
STIVA1.pop(); break;
}
}
i++;
}
while(STIVA1.not empty()) build tree();
t = STIVA2.pop();

LFAC (2020-21) Curs 4 19 / 30


Expresii regulate

Algoritm

build tree()
op = STIVA1.pop();
t1 = STIVA2.pop();
switch (op) {
case ′ ∗′ : {
t = tree(op, t1, NULL);
STIVA2.push(t); break;
}
case | , ′ ·′ : {
′ ′

t2 = STIVA2.pop();
t = tree(op, t2, t1);
STIVA2.push(t); break;
}
}

LFAC (2020-21) Curs 4 20 / 30


Expresii regulate

Exemplu

a∗ · (b|a) · b∗

LFAC (2020-21) Curs 4 21 / 30


Automatul echivalent cu o expresie regulată

Curs 4

1 Gramatici de tip 3 şi automate finite

2 Proprietăţi de ı̂nchidere pentru clasa limbajelor de tip 3

3 Expresii regulate

4 Automatul echivalent cu o expresie regulată


Algoritm

LFAC (2020-21) Curs 4 22 / 30


Automatul echivalent cu o expresie regulată Algoritm

Automatul echivalent cu o expresie regulată

E = E1 |E2

E = E1 E2

E = E1∗
LFAC (2020-21) Curs 4 23 / 30
Automatul echivalent cu o expresie regulată Algoritm

Observaţii

pentru orice apariţie a unui simbol din Σ, cât şi pentru ǫ, dacă
acesta apare explicit ı̂n E, este nevoie de 2 stări ı̂n automatul
construit.
fiecare din apariţiile operatorilor | şi ∗ dintr-o expresie regulată E
introduce două noi stări ı̂n automatul construit
operatorul · nu introduce alte stări
dacă n este numărul de simboluri din E iar m este numărul de
paranteze ı̂mpreună cu apariţiile simbolului · , atunci numărul
stărilor automatului echivalent cu E este p = 2(n − m).

LFAC (2020-21) Curs 4 24 / 30


Automatul echivalent cu o expresie regulată Algoritm

Algoritm

Intrare: Expresia regulată E cu n simboluri dintre care m sunt paranteze şi apariţii ale
operatorului produs;
Ieşire:Automatul (cu p = 2(n − m) stări) cu ǫ - tranziţii echivalent cu E

Fie o metodă generateState() care generează o stare nouă la fiecare apel (stările: numere
crescatoare incepând de la 1)
1 Se construieşte arborele ataşat expresiei E;

2 Se parcurge arborele ı̂n postordine


Pentru fiecare nod N, se vor genera (dacă este cazul) şi memora două stări , N.i,
N.f , care reprezintă starea iniţială respectiv finală a automatului AN echivalent cu
expresia EN corespunzătoare subarborelui cu rădăcina N
Automatul AN va fi construit pe baza automatelor construite la paşii anteriori,
utilizând Teorema 1
3 Starea iniţială a automatului este N.i, starea finală N.f , unde N este nodul rădăcină;

LFAC (2020-21) Curs 4 25 / 30


Automatul echivalent cu o expresie regulată Algoritm

Exemplu

E = a|b∗ · c

LFAC (2020-21) Curs 4 26 / 30


Automatul echivalent cu o expresie regulată Algoritm

2. Se parcurge arborele obţinut ı̂n postordine.


Dacă N este nodul curent iar S si D sunt fii sai, atunci, ı̂n funcţie de eticheta lui N, se
execută următoarele:

LFAC (2020-21) Curs 4 27 / 30


Automatul echivalent cu o expresie regulată Algoritm

2. Se parcurge arborele obţinut ı̂n postordine.


Dacă N este nodul curent iar S si D sunt fii sai, atunci, ı̂n funcţie de eticheta lui N, se
execută următoarele:
Dacă N este etichetat cu a (deci este frunza):
N.i = generateState(), N.f = generateState(),
δ(N.i, a) = N.f

LFAC (2020-21) Curs 4 27 / 30


Automatul echivalent cu o expresie regulată Algoritm

2. Se parcurge arborele obţinut ı̂n postordine.


Dacă N este nodul curent iar S si D sunt fii sai, atunci, ı̂n funcţie de eticheta lui N, se
execută următoarele:
Dacă N este etichetat cu a (deci este frunza):
N.i = generateState(), N.f = generateState(),
δ(N.i, a) = N.f

Dacă N este etichetat cu |:


N.i = generateState(), N.f = generateState(),
δ(N.i, ǫ) = {S.i, D.i},
δ(S.f , ǫ) = N.f , δ(D.f , ǫ) = N.f

LFAC (2020-21) Curs 4 27 / 30


Automatul echivalent cu o expresie regulată Algoritm

2. Se parcurge arborele obţinut ı̂n postordine.


Dacă N este nodul curent iar S si D sunt fii sai, atunci, ı̂n funcţie de eticheta lui N, se
execută următoarele:
Dacă N este etichetat cu a (deci este frunza):
N.i = generateState(), N.f = generateState(),
δ(N.i, a) = N.f

Dacă N este etichetat cu |:


N.i = generateState(), N.f = generateState(),
δ(N.i, ǫ) = {S.i, D.i},
δ(S.f , ǫ) = N.f , δ(D.f , ǫ) = N.f

Dacă N este etichetat cu · :


N.i = S.i, N.f = S.f ,
δ(S.f , ǫ) = D.i

LFAC (2020-21) Curs 4 27 / 30


Automatul echivalent cu o expresie regulată Algoritm

2. Se parcurge arborele obţinut ı̂n postordine.


Dacă N este nodul curent iar S si D sunt fii sai, atunci, ı̂n funcţie de eticheta lui N, se
execută următoarele:
Dacă N este etichetat cu a (deci este frunza):
N.i = generateState(), N.f = generateState(),
δ(N.i, a) = N.f

Dacă N este etichetat cu |:


N.i = generateState(), N.f = generateState(),
δ(N.i, ǫ) = {S.i, D.i},
δ(S.f , ǫ) = N.f , δ(D.f , ǫ) = N.f

Dacă N este etichetat cu · :


N.i = S.i, N.f = S.f ,
δ(S.f , ǫ) = D.i

Dacă N este etichetat cu ∗ (D nu există ı̂n acest caz):


N.i = generateState(), N.f = generateState(),
δ(N.i, ǫ) = {S.i, N.f },
δ(S.f , ǫ) = {S.i, N.f }

LFAC (2020-21) Curs 4 27 / 30


Automatul echivalent cu o expresie regulată Algoritm

2. Se parcurge arborele obţinut ı̂n postordine.


Dacă N este nodul curent iar S si D sunt fii sai, atunci, ı̂n funcţie de eticheta lui N, se
execută următoarele:
Dacă N este etichetat cu a (deci este frunza):
N.i = generateState(), N.f = generateState(),
δ(N.i, a) = N.f

Dacă N este etichetat cu |:


N.i = generateState(), N.f = generateState(),
δ(N.i, ǫ) = {S.i, D.i},
δ(S.f , ǫ) = N.f , δ(D.f , ǫ) = N.f

Dacă N este etichetat cu · :


N.i = S.i, N.f = S.f ,
δ(S.f , ǫ) = D.i

Dacă N este etichetat cu ∗ (D nu există ı̂n acest caz):


N.i = generateState(), N.f = generateState(),
δ(N.i, ǫ) = {S.i, N.f },
δ(S.f , ǫ) = {S.i, N.f }

3. Starea iniţială a automatului este N.i, starea finală N.f , unde N este nodul rădăcină;

LFAC (2020-21) Curs 4 27 / 30


Automatul echivalent cu o expresie regulată Algoritm

Exemplu

E = a|b∗ · c

LFAC (2020-21) Curs 4 28 / 30


Automatul echivalent cu o expresie regulată Algoritm

Exemplu
δ a b c ǫ
1 {2} ∅ ∅ ∅
2 ∅ ∅ ∅ {10}
3 ∅ {4} ∅ ∅
4 ∅ ∅ ∅ {3, 6}
5 ∅ ∅ ∅ {3, 6}
6 ∅ ∅ ∅ {7}
7 ∅ ∅ {8 } ∅
8 ∅ ∅ ∅ {10}
9 ∅ ∅ ∅ {1, 5}
10 ∅ ∅ ∅ ∅

LFAC (2020-21) Curs 4 29 / 30


Automatul echivalent cu o expresie regulată Algoritm

Corectitudinea algoritmului

Teorema 2
Algoritmul descris este corect: automatul cu ǫ - tranziţii obţinut este
echivalent cu expresia regulată E.

Demonstraţie:

Tranziţiile care se definesc ı̂n algoritm urmăresc construcţia din


teorema 1.

Automatul obţinut este echivalent cu expresia dată la intrare.

LFAC (2020-21) Curs 4 30 / 30

S-ar putea să vă placă și