Ejemplo para transformar un DFA en una Expresión Regular

Anuncio
Ejemplo para transformar un DFA
en una Expresión Regular
En este texto vamos a ver uno de los métodos que se usan para transformar autómatas finitos
deterministas en expresiones regulares, el método de eliminación de estados.
Cuando tenemos un autómata finito, determinista o no determinista, podemos considerar que los
símbolos que componen a sus transiciones son expresiones regulares. Cuando eliminamos un
estado, tenemos que reemplazar todos los caminos que pasaban a través de él como transiciones
directas que ahora se realizan con el ingreso de expresiones regulares, en vez de con símbolos.
Los casos bases son los siguientes:
1) La concatenación:
X
W
q0
q2
Y
q1
q0
WX*Y
q1
2) La unión:
V
q0
q1
X
W
q0
V+WX*Y
Y
q2
3) El retorno:
V
W
Y
q2
q0
X
Y+VW*X
q0
Realmente, el retorno podría verse como un caso particular de la unión, en donde q0 y q1 son el
mismo estado. De esta forma, el camino que va directo desde q0 a q0 es “Y” y el que va desde
q0 a q0 a través de q2 es “VW*X”.
q1
Consejos finales antes de empezar con el ejemplo:
A la hora de reducir un autómata, se recomienda partir eliminando primero todos los estados que no
sean ni el de inicial ni los finales.
Cuando se eliminen todos estos estados y el autómata tenga más de un estado inicial, se deben hacer
tantas copias como estados de aceptación tenga el autómata. En cada una de las copias, se debe elegir
uno de los estados de aceptación diferentes. Todos los demás estados de aceptación de esta copia
pasarán a ser estados ordinarios. Ahora se deben reducir todos los autómatas copias a expresiones
regulares. La expresión regular final será la unión de todas las expresiones regulares resultantes de
cada una de las copias.
Al reducir por completo a un autómata finito se llegará a uno de dos casos:
1) El estado de aceptación es distinto al estado inicial
V
W
q0
Y
q1
X
En este caso, la expresión final de este autómata viene dada por (W + XY*V)*XY*
2) El estado de aceptación y el de inicio son el mismo
W
q0
En este caso, la expresión final de este autómata viene dada por W*
Supongamos que un autómata particular tuviese dos estados de aceptación y los autómatas copias que
terminaría reduciendo sean estos dos últimos que hemos mostrado hasta el momento. En este caso la
expresion regular total del autómata vendría dada por W* + (W+XY*V)*XY*
Ahora veamos un ejemplo más complejo para aplicar los conocimientos adquiridos. El autómata
de ejemplo es el siguiente:
q1
a,c
a
b
c
q0
c
q4
q3
a
b
a
q2
c
Lo primero que se debe hacer es transformar todas aquellas transiciones que contemplan más
de un símbolo en expresiones regulares del tipo “R+P”. En este caso, la única transición que
tenemos como objetivo es la de q0 a q1, que queda como “a+c”. Todas las demás permanecen
iguales, por ser símbolos.
a+c
q1
a
b
c
q0
c
q4
q3
a
b
a
q2
c
Ahora procedemos a eliminar el estado q2. Tenemos que fijarnos en todos los caminos que atraviezan a q2:
●q0 puede llegar a q3 pasando por q2.
●q1 puede llegar a q3 pasando por q2.
Veamos cómo quedan las transiciones del DFA cuando eliminamos q2:
1) Para llegar a q3, q0 primero debe pasar por q2 usando el símbolo “b”, luego puede pasar repetidas
veces por q2 (o ninguna vez) usando cero, uno o varios símbolos “c” y, por último, pasa de q2 a q3
con el símbolo “a”. Esto queda expresado con la expresión regular
T = bc*a
2) Para pasar de q1 a q3, primero debemos llegar a q2 con una “c”. Después de esto, podemos volver
repetidas veces a q2, usando el símbolo “c”. Podemos pasar cero, una o muchas veces por q2 de
esta forma. Ahora, como último paso, debemos llegar desde q2 a q3 con una “a”. Al concatenar estos
tres caminos obtenemos:
S = cc*a
cc*a=S
a+c=U
q1
a
b
q0
q3
bc*a=T
c
q4
a
Ahora, haciendo las simplificaciones correspondiente, sólo dejamos las expresiones regulares resumidas
por las letras mayúsculas (incluyendo a+c = U), y nos queda el autómata así:
S
U
q0
q1
T
a
b
q3
c
q4
a
Como siguiente paso, vamos a eliminar a q1. Las transiciones afectadas son:
1) De q0 a q3, que puede hacerlo a través de q1 o directamente, usando T. La expresión regular que
va de q0 a q3 a través de q1 es US y la expresión que va directamente de q0 a q3 es T. Como puede
ser una o la otra, como resultado queda la siguiente expresión:
V = T + US
2) De q3 a q3, a través de q1. Esto es: Primero llegamos a q1 con una “a”, y luego pasamos de q1 a
q3, usando S. La expresión resultante es:
W = aS
aS=W
q0
T+US=V
b
q3
c
q4
a
En el siguiente paso, eliminaremos q3. Las transiciones afectadas son:
1) De q0 a q4, pasando por q3: Primero vamos de q0 a q3 usando la expresión V. Luego vamos
de q3 a q3 repetidas veces, usando W. Por último, pasamos de q3 a q4 usando una “a”. La
expresión regular queda como sigue:
X = V.W*.a
2) De q4 a q4, pasando por q3 o directamente por q4 con una “c”. Para pasar a través de q3,
primero vamos de q4 a q3 con una “b”. Luego vamos de q3 a q3 usando W. Y, por último,
pasamos de q3 a q4 con una “a”. Como podemos ir desde q4 a q4 tanto usando la “c” como a
través de q3, la expresión regular que nos queda es:
Y = (c + bW*a)
q0
VW*a=X
q4
(c+bW*a) = Y
Si dejamos las Expresiones Regulares de forma
resumida, el último autómata nos queda así:
q0
X
q4
Y
Completemos las transiciones vacías (de q4 a q1 y de q1 a q1) con las
expresiones regulares vacías Z y P para obtener un autómata similar al que
aparece en la página 2:
Z=Ø
P=Ø
q0
q4
X
Y
De esta forma, podemos generar la expresión regular final a partir
de la fórmula (P + XY*Z)*XY* Esta expresión es equivalente a decir
que podemos ir de q0 una o muchas veces usando el camino corto
P o el largo XY*Z. Cuando ya nos decidimos de pasar de q0 a q4,
usamos X, y estando en q4 podemos hacer Y cero, una o varias
veces.
Expresión Final = (P + XY*Z)*XY* = (Ø* + XY*Ø)* XY* = (ε+Ø)*XY* = ε*XY* = XY*
Recordemos que las propiedades de las expresiones regulares nos dicen
que la clausura del conjunto vacío nos entrega al conjunto con el string
vacío:
Ø* = ε
Y que la concatenación con el espacio vacío nos produce al espacio
vacío (el operador nulo de la concatenación):
R.Ø = Ø
Ahora imaginemos que tenemos un autómata muy parecido al del ejemplo anterior, pero que
adicionalmente tiene al estado inicial q0 como estado de aceptación y también tiene un tercer estado final
más: q5.
a,c
a
q1
b
c
q0
c
q4
q3
a
b
d
a
q2
c
d
q5
La eliminación de los estados procedería de manera muy similar, hasta llegar al siguiente autómata de
expresiones regulares:
d
X
d
q0
q4
q5
Y
Ahora procedemos a hacer las tres copias correspondientes para este autómata:
X
d
q4
q0
q5
d
Y
q0
X
d
q4
q5
d
Y
d
q0
X
d
q4
q5
Y
Reduzcamos el primero de los tres autómatas:
X
d
q4
q0
q5
d
Y
Como se puede apreciar, ninguno de los estados q4 y q5 nos llevan a algún estado de aceptación, por lo
que se pueden eliminar sin tener problemas.
P=Ø
q0
En este caso, el autómata hacepta la expresión regular P* = Ø* = ε. Nótese que el lenguaje de este
autómata no es el conjunto vacío Ø, ya que el autómata es capaz de aceptar el string vacío ε.
Reduzcamos ahora el segundo autómata:
X
q0
d
q4
q5
d
Y
En este caso, el estado que no nos llevan a ningún estado de aceptación es el estado q5. Lo eliminamos:
q0
X
q4
Y
El autómata resultante es el mismo que el del ejemplo anterior, al igual que la expresión regular que
genera: XY*
Reduzcamos el último autómata:
d
X
q0
d
q4
q5
Y
Lo primero que hacemos es eliminar el estado q4, realizando una concatenación de expresiones
regulares:
XY*d = Z
q0
q5
d
Ahora obtenemos la expresión regular final del último autómata, la cual está dada por Zd*
Lo último que queda por hacer es unir las tres expresiones regulares de las tres copias del
autómata:
Expresión Final = ε + XY* + Zd*
DCC/2006.03.30
Descargar