Lenguajes regulares

Anuncio
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
TEMA 1. Lenguajes Regulares
1. Expresiones Regulares (ER)
2. Autómatas Finitos Deterministas (AFD)
3. Autómatas Finitos No Deterministas (AFND)
1
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
1. Expresiones Regulares (ER)
Las expresiones regulares definen la notación que se usa para describir
lenguajes regulares. Si el lenguajes no es regular no podemos describirlo.
-
Expresiones regulares básicas
•
•
•
-
λ describe Lλ = { λ }
Φ describe LΦ = { } (lenguaje vacío)
Sea a ∈ ∑, a describe La = {a}
Operadores para expresiones regulares
•
Concatenación: α ·β , cuyo resultado describe Lα · β = Lα ·Lβ
•
Asociativa, α ·( β ·χ ) = (α ·β )·χ
No conmutativa en general, ∃α , β / α ·β ≠ β ·α
Elemento neutro, λ ·α = α ·λ = α
Elemento anulador, Φ·α = α ·Φ = Φ
Distributiva respecto a la unión, α ·( β + γ ) = α ·β + α ·γ
Unión: α + β , cuyo resultado describe Lα + β = Lα U Lβ
•
Asociativa, (α + β ) + γ = α + ( β + γ )
Conmutativa, α + β = β + α
Elemento neutro, α + Φ = Φ + α = Φ
Idempotencia, α + α = α
∞
Clausura: α * , cuyo resultado describe Lα * = ( Lα )* = U Liα
i =0
λ =λ
Φ* = λ
α * = λ + α ·α *
α ·α * = α * ·α
α * ·α * = α *
(α * )* = α *
(α * + β * ) * = (α + β )*
(α + β )* = (α * ·β * )*
α * = (λ + α + α ·α +···+α ···α * )
*
n-1 veces
La prioridad entre los operadores anteriores, de mayor a menor es:
clausura (*), concatenación(·) y unión(+).
2
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
Ejemplo:
00 
→ L00 = L0 ·L0 = {0}·{0} = {00}
0 +1
→ L0+1 = L0 U L1 = {0} U {1} = {0,1}
(0 + 1)* 
→ L( 0+1)* = ( L0+1 )* = {0,1}* = {λ ,0,1,00,01,10,11}
0 + 1* 
→ L0 U ( L1 ) * = {λ ,0,1,11,111,...}
■
CONCLUSIÓN: todos los lenguajes finitos son regulares
Ejemplo: lenguaje NO regular
L = {a n ·b n | n ≥ 0} 
→{λ , ab, aabb,...}
■
Ejemplo práctico: Encontrar una ER que represente los identificadores de un
lenguaje de programación.
Definimos dos macros para facilitar el trabajo:
letra = a + b +···+ z + A + B +···+ Z
dígito = 0 + 1 +···+9
{letra}·({letra} + {digito}) *
Restringimos ahora el problema a representar identificadores de 4 caracteres:
{letra}·({letra} + {digito} + λ )·({letra} + {dígito} + λ )·({letra} + {dígito} + λ )
■
-
Equivalencia
Dos expresiones regulares, e1 ,e2 , son equivalentes ( e1 ≡ e2 ) si definen el
mismo lenguaje ( Le1 = Le2 )
3
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
2. Autómatas Finitos Deterministas (AFD)
Se define un Autómata Finito Determinista como una tupla de 5 elementos
( ∑, Q , δ , q 0 , F )
∑ : alfabeto
Q : conjunto finito y no vacío de estados
δ : función de transición, δ : Q × ∑ 
→ Q
q0 : estado inicial, q0 ∈ Q
F : conjunto de estados finales o de aceptación, F ⊆ Q
L
w0
Qi
w1
w2
w2
MC
Ejemplo:
ADF1 = ({0,1},{q0 , q1 ,}, δ ,{q0 })
δ ( q 0 ,0 ) = q 0
δ (q0 ,1) = q1
δ (q1 ,0) = q1
δ (q1 ,1) = q0
■
-
Tabla de transiciones
δ
···a ∈ ∑···

→ q0
λ q ∈Q
i
···
≡
* Con este símbolo marcaremos los estados finales
4
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
Ejemplo: con el autómata del ejemplo anterior tendríamos,
δ
qo
q1
1
q1
qo
0
qo
q1
■
-
Diagrama de transiciones
Ejemplo: con el autómata anterior tendríamos,
0
0
1
q0
q1
1
Detecta un lenguaje con un número par de 1’s.
■
-
Función de transición extendida a palabra
δ : Q × ∑* 
→ Q
Definición recursiva:
δ * (q, λ ) = q∀q ∈ Q
 *
δ (q,α ·ω ) = δ * (δ (q,α ), ω )
α ∈∑
ω ∈ ∑*
Ejemplo:
δ (q1 ,011) = δ * (δ (q1 ,0),11) = δ * (δ (q1 ,1),1) = δ * (δ (q0 ,1), λ ) = q1
aw
q1
aw
q0
a
q1
■
El lenguaje reconocido por el Autómata Finito Determinista será:
L( AFD) = {ω | ω ∈ ∑ * yδ * (q0 , ω ) ∈ F }
-
Equivalencia de Autómatas Finitos Deterministas
Dos AFD son equivalentes si reconocen el mismo lenguaje.
5
Lenguajes Formales y Autómatas
-
2. Lenguajes Regulares
Autómatas Finitos Deterministas Conexos
•
Accesibilidad entre estados: pΑq
Desde q puedo llegar a p si y sólo si existe una palabra tal que
esa palabra lleva de q a p.
pΑq ⇔ ∃ω ∈ ∑ * | δ * (q, ω ) = p
* Aquellos estados que no son accesibles desde el estado inicial
pueden ser eliminados del AFD.
•
Parte conexa
Todos aquellos estados del AFD que son accesibles desde el
estado inicial.
Ejemplo:
0
Parte conexa
0
1
q0
q1
1
PC = {q0 , q1}
0
1
q2
■
Por tanto, definimos Autómata Finito Determinista Conexo como aquél
que tiene todos sus estados accesibles desde el estado inicial, es decir,
que carece de parte no conexa.
Se define AFD conexo equivalente como aquel autómata que se obtiene
eliminando la parte no conexa
Cualquier Autómata Finito Determinista puede ser representado por el siguiente
programa:
estado q0
símbolo siguiente_símbolo()
mientras símbolo
estado δ (estado_símbolo)
símbolo siguiente_símbolo()
fmientras
si (estado ∈ F)
aceptada()
|otras:
no_aceptada()
fsi
6
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
3. Autómatas Finitos No Deterministas (AFND)
Estos autómatas se caracterizan, fundamentalmente, por poder encontrarse en
varios estados al mismo tiempo.
Pueden ser obtenidos modificando el AFD.
Qi
-
MC
Autómata Finito No Determinista
Este tipo de máquinas permite, con la entrada de un símbolo, cambiar a
varios estados al mismo tiempo.
ADFND (∑, Q, δ , q0 , F )
Cambia la función de transición
δ :Q×∑ 
→ Ρ(Q) Va a “partes de Q”
Ejemplo:
y
x
q0
x
q1
Supongamos la entrada xyy, la traza sería la siguiente,
q0
x
x
q0
q1
y
q1
y
q1
La palabra xyy es aceptada si uno de los estados es final.
■
•
Función de transición extendida a palabra
δ * :Q×∑ 
→ Ρ(Q)
Definición recurrente:
δ * (q, λ ) = {q}∀q ∈ Q

δ * (q, ω ·α ) = U δ ( p, α )

p∈δ * ( q ,ω )
,α ∈ ∑
ω ∈ ∑*
7
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
Ejemplo: con el autómata del ejemplo anterior
δ * (q0 , xyx)
q0
x
x
q0
q1
y
q1
x
M
//Estado muerto
(*)
*
Uδ ( p, x) = δ (q0 , xy) = Uδ ( p, y ) = δ (q0 , x) =
δ * (q0 , xyx) =
p∈δ * ( q0 , xy )
=
p∈δ * ( q0 , x )
Uδ ( p, x) = δ (q , x) = {q , q }
0
0
1
p∈δ * ( q0 ,λ )
q0
Uδ ( p, y ) = δ (q , y) U δ (q , y) = {q }
(*)
0
1
1
p∈δ * ( q0 , x )
⇒ δ * (q0 , xyx) =
U δ ( p, x) = δ ( q , x) = Φ
1
p∈δ * ( q , xy ) ={ q1 }
■
•
Lenguaje definido por un AFND
L( AFND ) = {ω ∈ ∑ * | δ * (q0 , ω ) I F ≠ Φ}
Ejemplo:
El autómata del ejemplo anterior reconoce el lenguaje cuya expresión
regular es x·x*·y*
Ejemplo:
a, b
q0
a
q1
b
q2
a
q3
b
a, b
q1
Este autómata realiza una búsqueda de la subcadena “abab” para cada
símbolo que le entra.
■
8
Lenguajes Formales y Autómatas
-
2. Lenguajes Regulares
Autómata Finito No Determinista con transiciones vacías (λ-AFND)
Permiten cambiar el estado cuando la entrada es vacía. Este tipo de
autómata nos permite “fundir” estados.
λ − AFND (∑, Q,δ , q0 , F )
δ : Q × (∑ U{λ}) 
→ Ρ(Q)
•
λ – cierre: Ρ(Q) 
→ Ρ(Q) (λ - clausura)
Indica en qué otros estados se encuentra el autómata sin leer
nada.
Ejemplo:
q1
λ
q0
λ − cierre({q0 }) = {q0 , q1 , q2 }
λ − cierre({q1 , q3 }) = {q1 , q3 , q2 }
λ
λ
a
q3
q2
■
Reglas para el cálculo del λ-cierre
S ⊆Q
1)∀q ∈ S , q ∈ λ − cierre( S )
2)∀q ∈ λ − cierre( S ), δ (q, λ ) ∈ λ − cierre( S )
λ − cierre( S )
•
Función de transición extendida a palabra
Definición recursiva:
δ * (q, λ ) = λ − cierre({q})∀q ∈ Q



 *


=
−
δ
(
q
,
w
,
a
)
λ
cierre
δ
(
p
,
a
)
U

 *

 p∈δ ( q ,w)


Ejemplo:
x
q0
y
λ
q1
9
Lenguajes Formales y Autómatas
2. Lenguajes Regulares


δ ( p, y )  = λ − cierre(δ (q0 , y ) U δ (q1 , y ) ) = {q1}
U
 p∈δ * ( q , xx )

0


δ * (q0 , xxy) = λ − cierre


1)δ * (q0 , xx) = λ − cierre U δ ( p, x)  = {q0 , q1}
 p∈δ *q , x )

0




2)δ * (q0 , x) = λ − cierre U δ ( p, x)  = λ − cierre(δ (q0 , x) U δ (q1 , x) ) =
 p∈δ * ( q ,λ )

0


= λ − cierre({q0 }) = {q0 , q1}
Reconoce el lenguaje cuya expresión regular es x*·y*
■
•
Lenguaje reconocido por λ – AFND
L(λ − AFND ) = {ω ∈ ∑ * | δ * (q0 , ω ) I F ≠ Φ}
Los tres tipos de autómatas vistos hasta ahora tienen la misma capacidad de
reconocimiento: SÓLO RECONOCEN LENGUAJES REGULARES.
10
Lenguajes Formales y Autómatas
2. Lenguajes Regulares
ALGORITMO PARA OBTENER UN AFD A PARTIR DE UN AFND
La estrategia a seguir para obtener un AFD a partir de un AFND es simulando
el comportamiento del AFND. Los estados del AFD vendrán etiquetados con un
conjunto de estados del AFND, por ejemplo si nos encontramos en un estado
C1 en el AFD etiquetado con {q0, q1, q2} significa que cuando el AFND ha
leído la misma porción de la cadena de entrada se encuentra en los estados
q0, q1 y q2 a la vez.
Algoritmo:
Entrada: AFND(E,Q,d,q0,F)
Salida: AFD(E,Q',d',C0,F')
1) El estado inicial del AFD C0 se etiqueta con los estados en los que
se encuentra el AFND al iniciar su ejecución, es decir, d(q0, λ), o lo
que es lo mismo {q0}.
2) El resto de estados del AFD se obtienen a partir del estado inicial
aplicando la función de transición d'. d' se define de la siguiente
forma: d'(Ci,a) = Cj . De manera que si el Ci viene etiquetado con el
conjunto de estados {qi, qi+1, .... ,qi+n} Cj vendrá etiquetado con los
estados d(qi,a)Ud(qi+1,a)U···Ud(qi+n,a)
3) Los estados finales del AFD serán aquellos que estén etiquetados
con al menos un estado final del AFND
11
Descargar