Sunteți pe pagina 1din 4

2.6.

Echivalenţa dintre expresiile regulate şi automatele finite


nedeterministe

Expresiile regulate sunt importante pentru construirea unui generator de analizor


lexical, care foloseşte ca intrare expresii regulate.
Vom prezenta în cele ce urmează metode de generare a unui acceptor cu număr
finit de stări dintr-o expresie regulată sau generarea unei expresii regulate dintr-un
automat finit nedeterminist. Vom arăta deci că expresiile regulate şi mulţimile acceptate
de automate finite nedeterministe sunt echivalente, deci că mulţimile regulate şi expresiile
regulate reprezintă aceleaşi mulţimi. Pentru construcţiile ce vor urma, este necesară
următoarea definiţie.
Definiţia 2.6.1 Un automat finit nedeterminist cu λ-tranziţii este un ansamblu M=(Q, Σ,
δ, q0, F) ale cărui componente au aceleaşi semnificaţii ca la un automat finit oarecare, doar
că funcţia de tranziţie este definită astfel:
δ : Q × ( Σ  { λ} ) → P(Q) .
Avem o λ-tranziţie între două configuraţii (p, w) ├ (q, w) dacă şi numai dacă
q ∈δ(p, λ) , p ∈Q, w ∈Σ ∗ . În reprezentarea grafică, o astfel de tranziţie, practic fără
citirea benzii de intrare la acel pas, arată astfel:

λ
p q
Figura 2.9.1

Teorema 2.6.1. Mulţimea cuvintelor recunoscute de automatele finite cu λ-tranziţii este


aceiaşi cu mulţimea cuvintelor recunoscute de automatele finite nedeterministe.

▼Demonstratie
Se arată că automatele finite nedeterministe cu λ-tranziţii sunt echivalente cu cele fără λ-
tranziţii.
Vom da aici un exemplu de utilizare a homomorfismului pentru a da o altă demonstraţie
a acestei afirmaţii. Fie automatul finit cu λ-tranziţii M = (Q, Σ, δ, q0, F), unde considerăm
λ un simbol care nu este în Σ. Considerăm acum automatul finit nedeterminist M’, peste
alfabetul Σ∪{λ}:
M’ = (Q, Σ∪{λ}, δ, q0, F) ,
Definim acum acceptarea pentru automatul cu cu λ-tranziţii după cum urmează:
pentru orice x din Σ*, automatul M acceptă x dacă există y în (Σ∪{λ})* astfel încât:
M’ acceptă y relativ la definiţia acceptării unui automat finit nedeterminist;
- x este obţinut din y prin ştergerea tuturor apariţiilor simbolului λ; atunci x
= h(y), unde:
h: (Σ∪{λ})* → Σ*,
este homomorfismul definit de :
h(a) = a pentru a ∈ Σ
h(λ) = λ.
În acest fel L(M) = h(L(M’)). Dar mulţimea L(M’) este regulată şi conform
teoremei 2.9.11 va rezulta că şi L(M) este o muţime regulată.▲

Algoritmul de conversie a unei expresii regulate într-un AFN este următorul:

Algoritmul 2.6.1. Construcţia unui automat finit nedeterminist cu λ -tranziţii


pentru o expresie regulată.
Intrare: o expresie regulată r peste un alfabet ∑, sub forma unui arbore sintactic.
Ieşire: un AFN, N pentru limbajul L(r)
Metodă: Construim N, parcurgând arborele sintactic de jos în sus, aplicând regulile
(1) şi (2) şi combinând automatele obţinute la fiecare nod, cu ajutorul regulei (3) unde:
1. pentru λ , construim automatul
start
i f
λ
cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {λ }.
2. pentru a∈∑, construim automatul
start a
i f

cu i noua stare iniţială şi f noua stare finală. Automatul va recunoaşte limbajul {a}.
3. dacă N(s) şi N(t) sunt AFN pentru expresiile regulate s şi t atunci:
a) Pentru expresia regulată s|t construim următorul automat N(s|t)

N(s)
λ λ
start f
i

λ λ
N(t)

cu i noua stare iniţială a lui N(s|t) şi f noua stare finală. Avem λ _tranziţii de la i la
fostele stări iniţiale ale lui N(s) şi N(t) şi λ _tranziţii de la fostele stări finale ale lui N(s)
şi N(t) la f. Astfel, automatul N(s|t) recunoaşte L(s) U L(t).
b) Pentru expresia regulată st construim următorul automat N(st)
N(s) N(t)
start
i f

unde i, starea iniţială pentru N(s) a devenit starea iniţială pentru N(st) şi f starea finală
pentru N(t) a devenit starea finală pentru N(st). Starea finală pentru N(s) este identificată
cu starea iniţială pentru N(t) şi noua stare creată în N(st) îşi pierde statutul de stare iniţială
sau finală. Astfel, automatul N(st) recunoaşte limbajul L(s)L(t).
c) Pentru expresia regulată s* construim automatul N(s*)
λ
start λ λ
i N(s) f

cu i noua stare iniţială şi f noua stare finală pentru N(s*). Stările iniţială şi finală pentru
N(s) îşi pierd acest statut. Astfel automatul N(s*) recunoaşte limbajul L(s)*.
Exemplul 2.6.1. Să folosim algoritmul 2.3. pentru a construi AFN N(r) din expresia
regulată r=(a|b)*abb. Arborele sintactic al expresiei regulate date este:
. .
. .
b
..
b

* a a

bb
a b
Parcurgând acum arborele vom avea:
Pentru simbolul a avem: start a
2 3
Pentru simbolul b avem: start b
4 5
Pentru a|b avem:
2 3 λ
λ a
start
1 6
λ b λ
4 5
Pentru (a|b)* avem:
λ
a
2 3
λ λ
start λ 6 λ 7
0 1

λ b
4 5 λ
λ
Continând acest proces, în final vom obţine automatul următor:
λ

a
2 3
λ λ
λ 6 λ 7 a 8 b 9 b
start 0 1 10
λ λ
b
4 5
λ

Toate automatele construite astfel sunt nedeterministe cu λ-tranziţii.

Teorema 2.6.1 Fiind dată o expresie regulată R, există un automat F cu număr finit de
stări, nedeterminist şi cu λ-tranziţii, care acceptă limbajul generat de R.
▼ Demonstraţie:
- se face prin inducţie în raport cu fiecare din cele trei operaţii ale expresiilor regulate.
Construcţia formală se deduce din diagramele de stare definite mai sus. ▲

Teorema 2.6.2. Fiind dat un automat cu număr finit de stări, determinist, care acceptă
limbajul L, există o expresie regulată care reprezintă limbajul L.
▼ Demonstraţie:
- se aplică algoritmul de transformare a automatului finit determinist într-o gramatică de
tip 3, după care se aplică acesteia algoritmul de determinare a expresiei regulate
echivalente. ▲

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