Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Automatas Finitos
Automatas Finitos
Autmatas Finitos
III
AUTMATAS FINITOS.
3.1 INTRODUCCIN
........................................
................
.............
92
.......
....................
93
102
105
127
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
92
Autmatas Finitos
3.1 INTRODUCCIN.
Habamos establecido en los captulos anteriores, que un analizador lxico reconoca
tokens, mediante un monitoreo de izquierda a derecha del programa fuente. Para hacer
esta tarea menos difcil, utilizbamos las expresiones regulares para la especificacin de
los patrones o reglas que cumplen los tokens.
Los autmatas finitos son las herramientas empleadas como reconocedores de tokens,
fig. 3.1.
PROGRAMA
FUENTE
ANALIZADOR
LXICO
TOKENS
(a)
PROGRAMA
FUENTE
AUTMATA
FINITO
TOKENS
(b)
AUTMATA
FINITO
SI ( reconocimiento de X )
NO ( No reconocimiento o
rechazo de X )
93
Autmatas Finitos
[ A-Za-z ]
[ 0-9 ]
_
Letra ( Letra | Dig | Sub ) *
Letra
Letra
Inicio
1
Dig
Sub
94
Autmatas Finitos
inicio
s
S = { 0,1 }
LyA
2.
del AFD.
Dig
Sub
95
Autmatas Finitos
LyA
Estados
0
1
Smbolos en la entrada
Letra
Dig Sub
1
1
1
1
Fig. 3.4 Funcin move para el AFD que reconoce al token id en Pascal.
La construccin de la tabla de transicin -funcin move- se inicia identificando los
estados que tienen al menos un arco que salga de ellos. Para nuestro ejemplo el estado
0 (cero) tiene un arco etiquetado por Letra que sale de l, y el estado 1 tiene 3 arcos:
Letra, Dig y Sub. Los estados que tengan esta caracterstica son aadidos como los
renglones en la tabla.
LyA
En las columnas debemos ubicar a todos los posibles smbolos del alfabeto que pueden
ocurrir, al efectuar una lectura en la entrada (cadena). En nuestro caso son: Letra, Dgito
y Subrayado.
96
Autmatas Finitos
LyA
es el conjunto vaco.
1
Error
Error
1
1
1
De dnde salieron
estos pares ?
LyA
La tabla antes del mapeo de los pares p ( s , a ) a un estado t, estaba vaca, es decir :
Simbolos en la entrada
Letra
Dig Sub
Estados
0
1
97
LyA
Autmatas Finitos
Pues precisamente del diagrama del AFD de la fig. 3.3. Por ejemplo, el par ( 0 , Letra )
se puede leer : Si el estado es el 0, y la lectura en la entrada es una letra, el autmata se
mover al estado 1. O sea que :
move ( 0 , Letra ) = 1
Esta transicin es representada por el arco etiquetado por Letra, y que sale del estado 0
hacia el estado 1, en el diagrama del AFD. El resultado de la funcin move ( s , a ) para
un automata finito detreminstico es un solo estado bien ninguno (caso de error).
LyA
LyA
98
Autmatas Finitos
4.
s0 = 0
LyA
LyA
99
Autmatas Finitos
Entrada
Cadena x terminada en el caracter eof.
D (autmata AFD) con estado de inicio s0 y F conjunto de estados finales.
Proceso
s = s0
c = NextChar ( )
while ( c eof ) do
s = move ( s , c )
c = NextChar ( )
endwhile
if ( s est en F )
then
return si
else
return no
Salida
Respuesta si si D acepta a x, de otra manera la respuesta es no.
{1} 0
move ( s , c )
move ( 0 , i )
C
move ( 1 , C )
o
s = s0
c = NextChar()
while ( c eof ) do
s = move ( s , c )
c = NextChar()
endwhile
move ( 1 , o)
n
move ( 1 , n )
t
move ( 1 , t )
1
move ( 1 , 1 )
100
Autmatas Finitos
iCont
LyA
De la tabla de transicin del AFD Fig. 3.4. Por ejemplo el move ( 0 , i ) = 1, se lee : si
el autmata se encuentra en el estado 0 y llega una letra -en este caso la i-, el autmata
pasa al estado 1. El move ( 1 , 1 ) = 1, se busca en el rengln cuyo estado es 1 y la
columna Dig (dgito).
Ejemplo 3.2. Existe otro AFD para reconocer el token id del ejemplo 3.1 que no es
ptimo, ya que tiene ms estados y transiciones que el anterior. Letra
Letra
Letra
Letra
Inicio
Dig
Sub
Dig
Dig
3
Dig
Letra
Sub
4
Sub
El estado de inicio es :
s0 = 0,
Sub
101
Autmatas Finitos
F = { 1, 2, 3, 4 }
Estados
move ( 0 , Letra ) = 1
move ( 0 , Dig ) = Error
move ( 0 , Sub ) = Error
move ( 1 , Letra ) = 2
move ( 1 , Dig ) = 3
move ( 1 , Sub ) = 4
move ( 2 , Letra ) = 2
move ( 2 , Dig ) = 3
0
1
2
3
4
Smbolos en la entrada
Letra
Dig Sub
1
2
3
4
2
3
4
2
3
4
2
3
4
move ( 2 , Sub ) = 4
move ( 3 , Letra ) = 2
move ( 3 , Dig ) = 3
move ( 3 , Sub ) = 4
move ( 4 , Letra ) = 2
move ( 4 , Dig ) = 3
move ( 4 , Sub ) = 4
En la fig. 3.8 se muestra el trazo del algoritmo que simula al AFD, en el reconocimiento
de la cadena X11A_2.
102
s0
{ 1, 2, 3, 4 }
Autmatas Finitos
move ( s , c )
move ( 0 , x )
move ( 1 , 1 )
move ( 3 , 1 )
move ( 3 , A )
move ( 2 , _ )
move ( 4 , 2 )
1
1
s = s0
c = NextChar()
while ( c eof ) do
s = move ( s , c )
c = NextChar()
endwhile
A
_
2
LyA
Ya que s = 3 y
s pertenece a F,
el AFD retorna un
.................... si
103
Autmatas Finitos
LyA
.....
Arcos
b
a
En la Fig. 3.9 se muestra el AFND para la expresin regular a+b+. La funcin move (1 ,a)
se define como :
move ( 1 , a ) = { 1 , 2 } y move ( 2 , b ) = { 2 , 3 }
104
Autmatas Finitos
No est determinado !
Por esta razn es un autmata finito no
determinstico (AFND).
LyA
move ( 1 , a ) = { 1 , 2 }
move ( 1 , b ) = Error
move ( 2 , a ) = Error
move ( 2, b) = { 2 , 3}
inicio
105
Autmatas Finitos
S = { 1, 2, 3 }
s0 = 0
= { A, B, ... , Z, a, b, ... , z, 0, 1, ... , 9 , _, }
F = {2}
La funcin de transicin move :
Estados
0
1
Smbolos en la entrada
Letra
Dig
Sub
{1}
{1}
{1}
{1}
{2}
C
1
o
1
n
1
t
1
si acepta la
cadena iCont
LyA
106
Autmatas Finitos
El algoritmo que permite construir el autmata finito determinstico est fuera del
alcance de estas notas ( el alumno no tiene los prerequisitos para su estudio en este
curso).
Sin embargo, el algoritmo utilizado para la construccin del autmata finito no
determinstico AFND, es relativamente sencillo de aplicar, ya que se basa en reglas
simples. Existen muchas variantes de este algoritmo denominado Algoritmo de
Thompson.
ALGORITMO
DE
THOMPSON
Expresin
Regular
Autmata finito no
determinstico (AFND)
Proceso
Primero, reconocemos las subexpresiones que constituyen a r.
Usando las reglas (1) y (2), construmos los AFNDs para cada smbolo bsico en r.
Guiados por la estructura sintctica de la expresin regular r, combinamos estos
AFNDs de manera inductiva usando la regla (3) hasta obtener el AFND para la
expresin regular r.
Salida
Un AFND que reconoce al lenguaje L ( r ).
107
Autmatas Finitos
inicio
3. Supongamos que N(s) y N(t) son AFNDs para las expresiones regulares s y t,
respectivamente.
a) Para la expresin regular s | t (alternancia), construir el siguiente AFND, N(s|t) :
inicio
N(s)
N(t)
inicio
i
N(s)
N(t)
108
Autmatas Finitos
El estado de inicio de N(s) es ahora el estado de inicio para el AFND N(st), y el estado de
aceptacin de N(t) se vuelve el estado de aceptacin del AFND, N(st). El estado de
aceptacin de N(s) es mezclado con el estado inicial de N(t); esto significa que todas las
transiciones, desde el estado inicio de N(t) son ahora arcos o transiciones desde el estado
de aceptacin de N(s). El nuevo estado que resulta de esta mezcla, pierde su estatus de
estado de inicio o aceptacin para el nuevo AFND. El AFND as construido, reconoce el
lenguaje L(s) L(t).
c) Para la expresin regular s*, construir el AFND, N(s*) :
inicio
i
N(s)
(c|d*)a construir su
correspondiente AFND.
La descomposicin sintctica de la expresin regular consiste de 6 etapas bsicamente:
c
d
d*
c|d*
a
(c|d*)a
(c|d*)a
LyA
109
Autmatas Finitos
inicio
inicio
inicio
4
AFND para d *
inicio
Regla 3 a).
LyA
c|d*
110
Autmatas Finitos
Por ltimo, aplicaremos la regla 3b, para concatenar el AFND para c|d* con el AFND
del smbolo a:
a
inicio
8
AFND para a
c
inicio
7y8
LyA
inicio
( 3.4.1 )
d
4
111
Autmatas Finitos
=
=
=
=
0 ; estado inicial.
{ 8 } ; estado de aceptacin.
{ 0, 1, 2, 3, 4, 5, 6, 7, 8 } ; conjunto de estados que forman el AFND.
{ , c, d, a }
Estados
Ejemplo 3.5.
Letra
Dig
Sub
Id
0
1
2
3
4
5
6
7
Smbolos en la entrada
a
c
d
{ 1,3 }
{2}
{
7
}
{ 4,6 }
{5}
{
4,6
}
{7}
{8}
-
A|B|...|Z|a|b|...|z
0|1|...|9
_
(Letra ) ( Letra | Dig | Sub ) *
112
Autmatas Finitos
LyA
( 3.5.1 )
El AFND para letra es construido dos veces, en forma separada. En lo anterior hace
hincapi el algoritmo de Thompson. Se construye dos veces, dado que la expresin
regular Letra aparece en dos operaciones :
Concatenacin y la
LyA
( Letra )
alternancia
( 3.5.2 )
La misma regla 2 es aplicada para obtener el AFND para las expresiones regulares Dig y
Sub :
Dig
inicio
( 3.5.3 )
113
Autmatas Finitos
Sub
inicio
( 3.5.4 )
La regla 3a) se aplica sobre los AFNDs 3.5.2 y 3.5.3 para obtener Letra | Dig :
Letra
inicio
( 3.5.5 )
Dig
El AFND para Letra | Dig | Sub es encontrado con la regla 3 a) y los autmatas (3.5.4) y
(3.5.5) :
Letra
2
inicio
10
Dig
Sub
11
( 3.5.6 )
Letra
inicio
12
10
Dig
4
Sub
( 3.5.7 )
11
13
114
Autmatas Finitos
Slo hace falta encontrar la concatenacin de Letra con (Letra|Dig|Sub)*. Los AFNDs
involucrados son el 3.5.1 y 3.5.7. Los estados 1 y 12 se mezclan regla 3 b).
Letra
Letra
inicio
4
Sub
Dig
10
11
13
12
1 y 12
Letra
Letra
inicio
Dig
Sub
10
( 3.5.8 )
11
=
=
=
=
0
{ 0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }
{ A, B, ... , Z, a, b, ... , z, 0, 1, ... , 9 , _ }
{ 12 }
115
Autmatas Finitos
Smbolos en la entrada
Letra Dig
Sub
Estados
0
1
2
3
4
5
6
7
8
9
10
11
{1}
{5}
-
{7}
-
{ 10 }
-
{ 2,12 }
{ 3,9 }
{ 4,6 }
{8}
{8}
{ 11 }
{ 11 }
{ 2,12 }
0 | 1 | ... | 9
Dig+.Dig+
NumEsp es una expresin regular que denota al lenguaje formado por las cadenas que
son nmeros con punto decimal y al menos una cifra entera y una cifra en la fraccin.
La descomposicin sintctica de la expresin regular NumEsp, es una concatenacin de 3
subexpresiones regulares :
Dig+
// Cerradura positiva de Dig
// Caracter punto
+
Dig
// Cerradura positiva de Dig
Tenemos que construir 7 autmatas para llegar a la solucin :
Dig
Dig+
.
Y ... Cmo encuentro Dig + ?
+
Dig .
Dig
No existe regla
Dig+
!!
Dig+ . Dig+
Pero sabemos que :
r+ = r r*
LyA
116
Autmatas Finitos
LyA
inicio
Dig
Dig
( 3.6.1 )
Dig*
Dig
= Dig+
117
Autmatas Finitos
inicio
Dig
4y5
Dig
El AFND para Dig Dig*, expresin regular que forma el tercer trmino en
NumEsp
Dig+.Dig+, es igual que el AFND (3.6.1) salvo la numeracin de
estados :
inicio
Dig
Dig
10
11
( 3.6.3 )
Los estados 6 y 7 se mezclan en uno, al aplicar la regla 3 b), para los AFND 3.6.2 y
3.6.3.
inicio
Dig
Dig
Dig
6y7
Dig
10
11
118
Autmatas Finitos
inicio
Dig
Dig
Dig
Dig
Solucin !
LyA
Los componentes del AFND para la expresin regular NumEspDig+.Dig+ son los que
a continuacin se mencionan.
s0 = 0
S = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
= { 0, 1, ... , 9,. }
F = {9}
Funcin move (s,a) :
Smbolos en la entrada
Dig
.
Estados
0
1
2
3
4
5
6
7
8
{1}
{3}
{6}
{8}
-
{5}
-
{ 2,4 }
{ 2,4 }
{ 7,9 }
{ 7,9 }
119
move (0, .)
move (0, )
move (1, Dig)
move (1, .)
move (2, .)
move (2, )
=
=
=
=
=
=
Autmatas Finitos
Error
Error
Error
Error
Error
Error
0 | 1 | ... | 9
( . Dig+ ) ?
( E ( + | - ) ? Dig+ ) ?
( Dig+ ) ( FraccionOpcional ) ( ExponenteOpcional )
Construir el AFND que reconozca el lenguaje denotado por la expresin regular Num.
La descomposicin sintctica :
Dig+
FraccionOpcional
ExponenteOpcional
Dig
Dig*
DigDig* // Dig+
.
Dig
Dig*
Dig+
// DigDig*
+
. Dig
// .DigDig*
( . Dig+ ) ?
E
+
+|(+|-)?
E(+|-)?
Dig
Dig*
DigDig* // Dig+
E (+ | -) ? Dig+
( E (+ | -) ? Dig+ ) ?
120
Autmatas Finitos
inicio
Dig
Dig
( 3.7.1 )
= Dig+
Dig*
Dig
Sigamos con la concatenacin
FraccinOpcional :
.Dig+ perteneciente
a la expresin regular
inicio
( 3.7.2 )
inicio
7
Dig
Dig
10
11
( 3.7.3 )
121
Autmatas Finitos
inicio
Dig
Dig
10
11
( 3.7.4 )
6y7
Pero ......
( . Dig + ) ?
inicio
12
13
( 3.7.5 )
Y con la regla 3 a, unimos 3.7.4 con 3.7.5, y tenemos el AFND para la alternancia
122
Autmatas Finitos
Dig
Dig
inicio
14
6y7
10
11
15
12
13
( 3.7.6 )
Ya tenemos los AFNDs para dos de los tres trminos de la concatenacin que define a
la expresin regular Num. Construyamos el AFND para la subexpresin regular
ExponenteOpcional.
Pasos en la construccin del AFND para E ( + | - ) ? :
inicio
inicio
inicio
E
16
+
18
20
17
19
21
inicio
22
19
18
23
20
21
123
Autmatas Finitos
19
18
22
26
23
inicio
21
20
27
(+|-)?=(+|-)|
24
25
inicio
19
18
22
16
17,26
21
20
23
27
24
25
( 3.7.7 )
inicio
28
Dig
29
30
Dig
( 3.7.8 )
31
32
Reglas 2,
3 c) y 3 b).
124
Autmatas Finitos
inicio
19
18
22
16
17,26
21
20
23
27,28
24
25
AFND para :
Dig
29
30
Dig
E ( + | - ) ? Dig
31
32
( 3.7.9 )
( E ( + | - ) ? Dig + ) ? = E ( + | - ) ? Dig + |
es encontrado aplicando la regla 1 y 3 a), para el autmata ( 3.7.9 ) y el autmata para el
smbolo :
125
Autmatas Finitos
18
19
22
23
27,28
20
29
30
16
31
-
21
32
Dig
Dig
17,26
24
25
inicio
36
35
33
34
( 3.7.10 )
AFND para la
expresin regular
ExponenteOpcional
126
Autmatas Finitos
inicio
Dig
Dig +
Dig
Dig
Dig
10
13
12
11
FraccionOpcional
+
17
18
16
21
24
14
19
25
15
26
27
-
Dig
28
20
Dig
22
23
31
13
29
30
ExponenteOpcional
Fig. 3.11 AFND para el token Num, con los estados reenumerados.
127
Autmatas Finitos
ALGORITMO
DE
THOMPSON
AFND
ALGORITMO DE
CONSTRUCCIN
DE SUBGRUPOS
AFD
OPTIMIZACIN
POR
PARTICIONES
AFD reducido
-cerradura (T)
move (T,a)
Descripcin
Es el conjunto de estados del AFND que son alcanzados desde el estado s del
AFND, con transiciones (arcos) solamente.
Es el conjunto de estados del AFND que son alcanzados desde algn estado s
en T del AFND, con arcos (transiciones) solamente.
Es el conjunto de estados del AFND hacia los cuales hay una transicin con un
smbolo a en la entrada, desde algn estado s en T del AFND.
128
Autmatas Finitos
Entrada
AFND Autmata finito no determinstico.
Proceso
D = -cerradura ( so )
Salida
Dtran : Tabla de transicin del AFD.
No Determinstico
LyA
Determinstico.
129
Autmatas Finitos
Entrada
T : Cualesquier conjunto de estados del AFND.
Proceso
Meter todos los estados en T a la pila
cerradura (T) = T
While ( Pila no est vacia ) Do
Begin
Sacar t, elemento tope de la pila
for ( cada estado u con un arco desde t a u ) Do
if ( u no est en cerradura (T) )
then
Begin
aadir u a cerradura (T)
meter u a la pila
end
end
Salida
-cerradura (T)
Ejemplo 3.8.
Cmo empiezo ?
LyA
Los algoritmos se
ven muy feos !!!!
130
AFND
CONSTRUCCIN
DE
SUBGRUPOS
Autmatas Finitos
DTran
DTran
Smbolos en la entrada
c
d
a
Estados
LyA
Los renglones de la tabla Dtran son los estados del nuevo AFD que vamos a obtener,
aplicando el algoritmo de construccin de subgrupos. Debemos tener cuidado, tal y
como se establece en la seccin 3.1, que los smbolos de entrada c1 , c2 ,.. ck cumplan :
ci cj = ,
para
i j
En nuestro caso c1 = c, c2 = d, c3 = a :
cd =
ca =
da =
Si se cumple
!!!
131
Autmatas Finitos
cumple :
={a,c,d}
Iniciemos con la primera instruccin del algoritmo :
0
4
LyA
3
6
132
Autmatas Finitos
As, cerradura ({0}) = { 0,1,3,4,6,7 } por lo que el primer estado del nuevo autmata
AFD es en realidad el conjunto de estados { 0,1,3,4,6,7 } del AFND :
A = { 0,1,3,4,6,7 }
Agreguemos este estado as calculado a la tabla de transicin Dtran.
Smbolos en la entrada
c
d
a
Estados
{0,1,3,4,6,7}
Ahora el conjunto de estados del nuevo AFD D ={A}, tiene un nuevo estado, el primero!
Enseguida, el algoritmo de la construccin de subgrupos, establece que hay que obtener
la transicin que da lugar cuando el AFD se encuentra en el estado A y en la entrada se
tiene el smbolo c. Lo mismo se calcula para el smbolo d y el smbolo a. Estas
transiciones son los nuevos estados para el AFD que se debern aadir al conjunto D.
Los nuevos estados son calculados mediante la -cerradura de las funciones move para
el estado A y cada smbolo en la entrada.
B = cerradura ( move(A,c) )
C = cerradura ( move(A,d) )
D = cerradura ( move(A,a) )
Calculemos primeramente a todos los moves.
El move (A,c) es el conjunto de estados del AFND que son alcanzados desde A, al existir
en la entrada un smbolo c. Recordemos que A = { 0,1,3,4,6,7 }. Entonces :
move ( {0,1,3,4,6,7}, c ) = {2}
ya que el estado 2 es alcanzado desde el estado 1 con una entrada c, ( ver autmata
3.4.1), y el estado 1 est en A.
move ( {0,1,3,4,6,7}, d ) = {5}
133
Autmatas Finitos
LyA
Smbolos en la entrada
c
d
a
A
B
C
D
B
C
D
134
Autmatas Finitos
LyA
Obtengamos primero los moves, tal y como lo hicimos anteriormente con el estado A :
move ( B,c ) = move ({2,7}, c ) =
move ( B,d ) = move ({2,7}, d ) =
move ( B,a ) = move ({2,7}, a ) = {8}
// vaco
// vaco
Luego :
E = cerradura (vaco) = No existe transicin, por lo tanto, tampoco el estado E.
F = cerradura (vaco) = No existe transicin, por lo tanto, tampoco el estado F.
G = cerradura ({8}) = {8}, ya que desde el estado 8 no se alcanza ningn
estado con un arco .
Adems, G = D.
135
Estados
{0,1,3,4,6,7}
{2,7}
{4,5,6,7}
{8}
Autmatas Finitos
Smbolos en la entrada
c
d
a
A
B
C
D
B
D
C
D
// vaco
Smbolos en la entrada
c
d
a
A
B
C
D
B
D
C
C
D
D
136
Autmatas Finitos
// vaco
// vaco
// vaco
y las cerraduras tambin son vacas, es decir, del estado D a otro estado no existen
transiciones.
Estados
{0,1,3,4,6,7}
{2,7}
{4,5,6,7}
{8}
A
B
C
D
Smbolos en la entrada
c
d
a
B
C
D
D
C
D
-
LyA
Smbolos en la entrada
c
d
a
A
B
C
D
B
D
C
C
D
137
Autmatas Finitos
Con la tabla DTran as obtenida, podemos mostrar el diagrama del AFD. El estado de
inicio del nuevo AFD siempre ser A, es decir la cerradura (s0).
B
d
A
inicio
LyA
a
a
D AFD, son los que contienen al estado de
Los estados de aceptacin del nuevo
aceptacin del AFND.
A
B
C
D
=
=
=
=
{0,1,3,4,6,7}
{2,7}
{4,5,6,7}
{8}
//
//
//
//
No contiene al estado 8.
No contiene al estado 8.
No contiene al estado 8.
Si lo contiene.
Por lo tanto, D es el estado (en este caso, el nico) de aceptacin del nuevo AFD.
Ejemplo 3.9. Dado el autmata finito no determinstico AFND ( 3.5.8 ) del ejemplo
3.5. obtener su correspondiente AFD aplicando el algoritmo de construccin de
subgrupos.
Iniciamos con las columnas por la tabla Dtran.
Smbolos en la entrada
Letra Dig
Sub
Estados
.
138
Autmatas Finitos
Ahora, tenemos que encontrar los estados que forman al conjunto D y aadirlos junto a
sus transiciones, a la tabla de transicin Dtran.
//
//
vaco
vaco
12
B = {1,2,3,4,6,9,12 }
LyA
139
Autmatas Finitos
Estados
{0}
A
B
.
.
.
.
El estado A, se dice que est marcado, ya que sus transiciones para los smbolos de
entrada fueron calculados. El estado B no est marcado, pues falta calcular las
transiciones, que posiblemente nos lleven a nuevos estados.
{1,2,3,4,6,9,12}
LyA
cerradura ( move(B,Letra) )
move( {1,2,3,4,6,9,12} , Letra ) = {5}
4
3
2
11
12
C = {2,3,4,5,6,8,9,11,12}
cerradura ( move(B,Dig) )
move ( {1,2,3,4,6,9,12},Dig ) = {7}
cerradura ({7}) = {7,8,11,2,3,4,6,9,12}
140
Autmatas Finitos
4
6
9
11
D = {2,3,4,6,7,8,9,11,12}
12
cerradura (move(B,Sub))
move({1,2,3,4,6,9,12},Sub) = {10}
4
3
2
10
E = {2,3,4,6,9,11,12}
6
11
12
A
B
C
D
E
Smbolos en la entrada
Letra
Dig
Sub
B
C
D
E
141
//
Autmatas Finitos
Estado C
Smbolos en la entrada
Letra
Dig
Sub
A
B
B
C
D
E
C
C
D
E
D
E
Transiciones estado D.
cerradura (move(D,Letra))
move ({2,3,4,6,7,8,9,11,12},Letra) = {5}
//
//
142
Autmatas Finitos
Estados
{0}
{1,2,3,4,6,9,12}
{2,3,4,5,6,8,9,11,12}
{2,3,4,6,7,8,9,11,12}
{2,3,4,6,9,11,12}
LyA
A
B
C
D
E
Transiciones estado E.
cerradura (move(E,Letra))
move ({2,3,4,6,7,8,9,11,12},Letra) = {5}
//
//
143
La tabla Dtran
Autmatas Finitos
Estados
{0}
{1,2,3,4,6,9,12}
{2,3,4,5,6,8,9,11,12}
{2,3,4,6,7,8,9,11,12}
{2,3,4,6,9,11,12}
A
B
C
D
E
Smbolos en la entrada
Letra
Dig
Sub
B
C
D
E
C
D
E
C
D
E
C
D
E
LyA
Letra
Letra
Dig
Dig
Letra
A
Dig
B
Sub
Letra
inicio
Sub
Dig
Sub
E
( 3.9.1 )
El AFD tiene 4 estados de aceptacin : B, C, D y E debido a que la regla establece que :
144
Autmatas Finitos
si un estado s del nuevo AFD contiene al estado final f del AFND, s ser
un estado de aceptacin.
B =
C =
D =
E =
{1,2,3,4,6,9,12}
{2,3,4,5,6,8,9,11,12}
{2,3,4,6,7,8,9,11,12}
{2,3,4,6,9,10,11,12}
LyA
inicio
Cons
4|6|8
Vocal
Letra
Dig
( 3.10.1 )
145
Estados
Autmatas Finitos
Smbolos en la entrada
Cons
Vocal Letra
Tres
Dig
Cul error ?
LyA
.... ( r1 )
Estados
Smbolos en la entrada
Cons
Vocal
Tres
Otros
Otros = {0,1,2,3,5,7,9}
146
Autmatas Finitos
Alfabeto de entrada
A = cerradura ( s 0 )
LyA
Estados
{0,1,3}
Otros
1
Aadimos A en la tabla Dtran
0
3
Luego, se calculan las transiciones del estado A para cada smbolo en la entrada.
Transiciones estado A.
cerradura (move(A,Cons))
move ({0,1,3},Cons) = {2}
//
147
//
Autmatas Finitos
Nuevo estado B
1
2
3
cerradura (move(A,Vocal))
move ({0,1,3},Vocal) =
cerradura (move(A,Vocal)) = No existe
cerradura (move(A,Tres))
move ({0,1,3},Tres) = {4}
cerradura ({4}) = {4}
//
//
cerradura (move(A,Otro))
move ({0,1,3},Otro) =
cerradura (move(A,Otro)) = No existe
Aadimos las transiciones del estado A, y los nuevos estados B y C, a la tabla Dtran.
Estados
{0,1,3}
{2,3,1}
{4}
LyA
Transiciones para B.
A
B
C
Smbolos en la entrada
Cons
Vocal
Tres
B
C
Otros
-
148
cerradura (move(B,Cons))
move ({1,2,3},Cons) = {2}
cerradura ({2}) = Estado B
cerradura (move(B,Vocal))
move ({1,2,3}, Vocal) =
cerradura (move(B,Vocal)) = No existe
cerradura (move(B,Tres))
move ({1,2,3}, Tres) = {4}
cerradura ({4}) = Estado C
{0,1,3}
{2,3,1}
{4}
A
B
C
//
No hay transicin
// Error
// Estado C
cerradura (move(B,Otros))
move ({1,2,3}, Otros) =
cerradura (move(B, Otros)) = No existe
Estados
Autmatas Finitos
// No hay transicin
// Error
Smbolos en la entrada
Cons
Vocal
Tres
B
C
B
C
Otros
-
Transiciones para C.
cerradura (move(C,Cons))
move ({1,2,3}, Cons) =
cerradura (move(C, Cons)) = No existe
cerradura (move(C,Vocal))
move ({4},Vocal) = {5}
cerradura ({5}) = {5,6,8}
//
No hay transicin
// Error
//
6
5
cerradura (move(C,Tres))
move ({4},
8 Tres) =
//
No hay transicin
149
Autmatas Finitos
// Error
cerradura (move(C,Otros))
move ({4}, Otros) =
cerradura (move(C, Otros)) = No existe
// No hay transicin
// Error
Estados
{0,1,3}
{2,3,1}
{4}
{5,6,8}
A
B
C
D
Smbolos en la entrada
Cons
Vocal
Tres
B
C
B
C
D
-
Otros
-
Transiciones para D.
cerradura (move(D,Cons))
move ({5,6,8}, Cons) = {7}
6
7
8
cerradura (move(D,Vocal))
move ({5,6,8}, Vocal) = {7}
150
Autmatas Finitos
// Nuevo estado F
cerradura (move(D,Otros))
move ({5,6,8}, Otros) = {9}
A
B
C
D
E
F
Smbolos en la entrada
Cons
Vocal
Tres
B
C
B
C
D
E
E
F
Otros
F
Y ...
sto nunca acaba ? !!!
LyA
LyA
Transiciones para E.
Entonces, an no hemos
terminado, ya que falta de
calcular las transiciones para
los nuevos estados E y F .
151
cerradura (move(E,Cons))
move ({6,8,7}, Cons) = {7}
cerradura ({7}) = Estado E
Autmatas Finitos
cerradura (move(E,Vocal))
move ({6,8,7}, Vocal) = {7}
cerradura ({7}) = Estado E
cerradura (move(E,Tres))
move ({6,8,7}, Tres) = {9}
cerradura ({9}) = Estado F
cerradura (move(E,Otros))
move ({6,8,7}, Otros) = {9}
cerradura ({9}) = Estado F
Transiciones para F.
cerradura (move(F,Cons))
move ({9}, Cons) =
//
cerradura (move(F,Vocal))
move ({9}, Vocal) =
// Transicin no existe
cerradura (move(F,Tres))
move({9}, Tres) =
// Transicin no existe
cerradura (move(F,Otros))
move ({9}, Otros) =
// Transicin no existe
Transicin no existe
Smbolos en la entrada
Estados
Cons
Vocal
Tres Otros
{0,1,3}
A
B
C
{2,3,1}
B
B
C
{4}
C
D
{5,6,8}
D
E
E
F
F
{6,7,8}
E
E
E
F
F
{9}
F
Ahora, todos los estados estn marcados. En el anterior clculo de transiciones para E y
F no se generaron nuevos estados.
Lolanico
que del
nosestado
restaE es
Dtran con
transicim
y Fconstruir
aadidos. el nuevo AFD a
152
Autmatas Finitos
Estados
{0,1,3}
A
B
C
D
E
{2,3,1}
{4}
{5,6,8}
{6,7,8}
Smbolos en la entrada
Cons
Vocal
Tres
B
C
B
C
D
E
E
F
E
E
F
Cons
Cons
B
4|6|8
Cons
Otros
F
F
Vocal
Cons
Vocal
4|6|8
Otros
inicio
A
4|6|8
( 3.10.2 )
4|6|8
Vocal
Otros
=
=
=
=
=
=
{0,1,3}
{1,2,3}
{4}
{5,6,8}
{6,7,8}
{9}
El nico estado del nuevo AFD que contiene al estado 9 de aceptacin del AFND es el
F. Por lo tanto, el nuevo AFD slo tiene un estado de aceptacin : estado F.
153
Autmatas Finitos
B
Letra
Tres
Cons
Dig
inicio
A
Tres
Vocal
Dig
154
Autmatas Finitos
Entrada
AFD
Proceso
1. Construir una particin inicial del conjunto S de estados del AFD, con dos grupos : El de estados de
aceptacin F y el de los estados de no aceptacin S-F.
2. Obtener una nueva particin nueva a partir de aplicando el sig. procedimiento :
for ( cada grupo G de ) Do
Begin
Particionar G en subgrupos, tales que 2 estados s y t de G estn en el mismo
subgrupo si y solo si para todos los smbolos a de entrada, los estados s y t tienen
transiciones para a hacia estados en el mismo grupo de .
Reemplazar G en nueva por el conjunto de todos los subgrupos formados
End
3. Si nueva = , entonces final = y continuar con la etapa 4. De otra manera repetir la etapa (2) con
:= nueva.
4. Seleccionar un estado de cada grupo de la particin final final como el estado representativo de ese
grupo.
Los estados representativos sern los estados del nuevo AFD mnimo u ptimo.
Salida
AFD mnimo
b
inicio
A
a
b
a
= {a,b}
( 3.11.1 )
// Alfabeto de entrada
155
s0 = A
F = {E}
S = {A,B,C,D,E}
Autmatas Finitos
// Estado de inicio
// Estados de aceptacin
// Estados del autmata
Smbolos en la entrada
a
b
A
B
C
B
B
D
C
B
C
D
B
E
E
B
C
( 3.11.2 )
LyA
= { (E) , (ABCD) }
LyA
156
Autmatas Finitos
nueva = { (E) }.
a
a
a
a
B
B
B
B
b
b
b
C
D
C
D
E
En este caso, los estados A, B y C transicionan hacia un estado perteneciente al grupo G2,
pero el estado D tiene una transicin a un estado E que no forma parte de este grupo G2.
Por lo tanto SI HAY PARTICIN y sta es :
157
G21 = (ABC)
Autmatas Finitos
G22 = (D)
Paso 3.
Comparamos nueva
LyA
con :
No son iguales !
Por lo tanto el paso (3) dice que debemos repetir la etapa (2), pero ahora con :
= nueva
LyA
Con = { (E), (ABC), (D) }, el grupo que puede aceptar ser particionado es : (ABC).
Analicemos las transiciones de los estados de este grupo para cada smbolo en la entrada:
158
Transiciones para a
A
B
C
a
a
a
Autmatas Finitos
Transiciones para b
b
C
b
no hay particin.
si hay particin.
Entonces, la particin de (ABC) es : (AC) y (B). Estos nuevos subgrupos son aadidos a
nueva , en lugar del grupo (ABC) :
nueva
Por lo tanto, repetimos el paso (2), con := nueva .
= {(E), (AC), (B), (D)} es el valor para la particin que se somete al paso (2). El nico
grupo que puede particionarse es (AC). Analicemos pues, sus transiciones :
Transiciones para a
A
C
Transiciones para b
NO HAY PARTICIN
nueva = ,
por lo tanto nos vamos al paso 4.
159
Autmatas Finitos
LyA
En el paso (4), de = {(E), (AC), (B), (D)} seleccionamos de cada grupo, un estado
representativo. Es claro, que los estados representativos para los grupos (E), (B) y (D)
son los mismos estados que componen a cada grupo. Pero en el grupo (AC) si debemos
escoger a uno de los estados sea A, o bien C, como un estado representativo.
LyA
Lo que queda por realizar es obtener la tabla de transicin del nuevo AFD mnimo. Los
renglones de dicha tabla sern los estados representativos. Las transiciones son obtenidas
del autmata 3.11.1.
Estados
representativo
s
Smbolos en la entrada
a
b
A
B
A
B
D
E
B
B
B
D
E
A
Observa que respecto a la tabla 3.11.2 , el
estado C es sustitudo por el estado A. El
estado C ya no existe como rengln en la
nueva tabla de transicin del AFD reducido.
a
a
160
Autmatas Finitos
inicio
D
a
a
b
Ejemplo 3.12.
= { (A) , (BCDE) }.
nueva
LyA
El procedimiento del paso (2) nos dice como calcular la nueva particin nueva.
Observemos las transiciones de los estados del grupo (BCDE). El grupo (A) ya no es
susceptible de particin.
161
Autmatas Finitos
C
Letra
C
Letra
C
Letra
No hay particin.
D
Dig
D
Dig
No hay particin.
Dig
E
Sub
E
Sub
Sub
No hay particin.
Entonces,
No hay particin ?
LyA
162
Autmatas Finitos
Al aplicar el paso (3) la igualdad nueva = se cumple, por lo que la secuencia del
algoritmo nos enva al paso (4), con final = .
LyA
Selecciono del grupo (A) al propio A ,
y de ( BCDE ) a B.
Construimos la tabla de transicin del nuevo AFD reducido, donde los renglones son los
estados representativos.
Estados
Representativos
A
B
Smbolos en la entrada
Letra
Dig
Sub
B
B
B
B
El diagrama del AFD mnimo, ahora se ha reducido de 5 estados a 2, y los arcos que
antes eran 13 ahora slo son 4, tal y como es mostrado enseguida.
Letra
Letra
inicio
Dig
B
Sub
Id (Letra) (Letra|Dig|Sub)*
Ejemplo 3.13. Construir el AFD reducido o mnimo, a partir del AFD 3.10.2 del
ejemplo 3.10, (pag. 156).
163
Autmatas Finitos
LyA
Paso 2.
El grupo (F) ya no tiene mas particin. Analicemos el grupo (ABCDE) para cada
smbolo en la entrada. Existen 4 posibles entradas : Cons, Vocal, Tres, Otros; segn el
ejemplo 3.10. (ver tabla de transicin de dicho ejemplo).
Transicin smbolo Cons
A
164
Autmatas Finitos
nueva
Por lo que tenemos que repetir el paso (2), segn el algoritmo de particin.
165
LyA
Autmatas Finitos
(2).
Ahora, := nueva = { (AB) (C) (DE) (F)}. Analicemos los grupos (AB) y (DE), ya que
(F) y (C) no tienen particin posible.
Grupo (AB)
TRANSICIONES
Smbolo Cons
A
B
B
B
Smbolo Vocal
A
Z
B
Z
Smbolo Tres
A
C
B
C
Smbolo Otros
A
Z
B
Z
Smbolo Cons
D
E
E
E
Smbolo Vocal
D
E
E
E
Smbolo Tres
D
F
E
F
Smbolo Otros
D
F
E
F
nueva =
Ahora si !! , pasaremos al paso (4) a
seleccionar los estados representativos.
Paso (4).
Grupo
Estado representativo
(AB)
LyA
166
(C)
(DE)
(F)
Autmatas Finitos
C
D
F
A
C
D
Smbolos en la entrada
Cons Vocal Tres Otros
A
C
D
D
D
F
F
Cons
Cons
inicio
A
Tres
Tres
Vocal
Vocal
Otros
Sabemos que Letra Cons | Vocal; y que Dig Tres | Otros. Aplicamos estas
definiciones al AFD y tenemos al nuevo diagrama del AFD mnimo o reducido :
Cons
inicio
Letra
A
Tres
D
Vocal
Dig
167
Autmatas Finitos
LyA
Lenguajes regulares .
L(r) *
( 3.6.1 )
Por definicin una expresin regular denota un lenguaje regular (conjunto de cadenas),
cuyas cadenas son una concatenacin de smbolos de un alfabeto . Y dado que la
cerradura se define como :
* = U = 0 U 1 U 2 U 3 U ...
i=0
donde :
0 = {}
1 = {x | | x | = 1}
2
= {x
|
|
| x | = 2}
//
Cadenas de longitud 1
//
Cadenas de longitud 2
3 = {x | x | = 3}
// Cadenas de longitud 3
Podemos ver que si L(r) *, entonces un lenguaje regular, puede ser aqul que slo
tenga la cadena vaca . El autmata que reconoce a este lenguaje regular es :
inicio
El estado de inicio tambin es un estado de aceptacin.
1
Finalmente, la principal propiedad que debe cumplir un lenguaje regular, es que las
cadenas que lo componen puedan ser reconocidas por un autmata finito.
168
Autmatas Finitos
AFD
inicio
0
inicio
inicio
2
y
0
inicio
3
y
...
169
Autmatas Finitos
Lenguajes como los anteriores, que no pueden ser reconocidos por un autmata finito, se
denominan lenguajes no regulares.
lenguaje regular ;
LyA
de lo contrario es un
lenguaje no regular.
inicio
c
inicio
(b)
a
a
b
2
170
Autmatas Finitos
(c)
Dig
%
inicio
Dig
c|f |d
+|-
Dig
(d)
2|4
Dig
2 | 4 | 6| 8
inicio
0|1|9
3|5|7
171
Autmatas Finitos
(b) <
(c) = =
inicio
=
1
=
4
<
=
5
>
=
8
(c) 4769.486
inicio
Non
Non
Dig
.
Par
2
5. Aplica el algoritmo de Thompson para construir los AFNDs que reconozcan las
expresiones regulares :
Par) ( Dig )
(a) ( Cons* ) ( 4 | 6 ) ( Vocal ? ) ( Letra*
(b) ( w + x ? ) ( y ? | z* ) ?
172
Autmatas Finitos
(c) ( a | b + ) ? ( c* d ? ) *
(d) <= | < | > | >= | = = | !=
(e) ( 0 | 2 | 4 ) ? ( a | b* ) +
(f) ( Dig* ) ( Non ) ( Punto ) ( Par ) ( Dig* )
//
Punto