U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
CONVERSIÓN DE AF- A AFD: ALGORITMO PARA OBTENER UN AFD A PARTIR DE UN AF-:
Entrada: AF- = < Q1 , , q10 , F1 , f1 > || Salida: AFD = < Q2 , , q20 , F2 , f2 >
{ Sean: T Q1 , p q Q1 , p’ q’ Q2 , función Clausura(T) Pila ← T ; Clausura ← T mientras Pila hacer descargar q de la Pila para cada p f1(q , ) hacer si p Clausura entonces agregar p a Clausura cargar p en la Pila
x }
función Destino(T,x) Destino ← para cada q T hacer Destino ← Destino f1(q , x) retorno
retorno ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
CONVERSIÓN DE AF- A AFD: inicio q20 ← clausura({q10}) ; agregar q20 a Q2 si q20 F1 entonces agregar q20 a F2 marcar q20 como no procesado mientras q’ Q2 no procesado hacer marcar q’ como procesado para cada x hacer p’ ← clausura(destino(q’,x)) f2(q’,x) ← p’ si p’ Q2 entonces agregar p’ a Q2 si p’ F1 entonces agregar p’ a F2 marcar p’ como no procesado fin ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
EJEMPLO DE CONVERSIÓN DE AF- A AFD: A partir del grafo hacemos la tabla: AF-2
a
b
1
a
b
b
4
0
a
a
2
3
b
5
b
8
6
b
a
7
a,b
AFD16
a
b
*q0 ={0,1,4,6,8} q1 ={1,7,2} *q2 ={2,1,5,6,8} *q3 ={1,7,3,4,2,8}
q1 q3 q3 q3
q2 q4 q5 q6
*q4 ={2,7,5,8} *q5 ={5,2,6,8} *q6 ={2,7,1,5,8} *q7 ={3,4,7,8,2} *q8 ={5,6,8} q9 ={7,2}
q7 q7 q3 q7 q9 q7
q4 q8 q4 q6 q8 q4
ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
EJEMPLO DE CONVERSIÓN DE AF- A AFD: Normalmente el AFD que se obtiene no es mínimo, aplicando el algoritmo de minimización llegamos a un AFD16 reducido: C1 C2 P0 = { [0,2,3,4,5,6,7,8] , [1,9] } C1 C2 C3 C4 P1 = { [0] , [2,3,4,5,6,7] , [8] , [1,9] } C2 C1 C3 C4 C5 P2 = { [0] , [2,3,4,6,7] , [5] , [8] , [1,9] } C1 C2 C3 C4 C5 C6 P3 = { [0] , [2] , [3,4,6,7] , [5] , [8] , [1,9] }
AFD16 Mínimo *C1 C6 *C2 *C3
a
b
C6 C3 C3 C3
C2 C3 C4 C3
*C4 *C5
C3 C6
C5 C5
P4 = P3 ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
EJEMPLO DE CONVERSIÓN DE AF- A AFD: Para integrar este ejemplo con los mecanismos vistos anteriormente, tomemos el grafo del AFD16 con un cambio de nomenclatura, para obtener la GR y la ER:
a,b
AFD16
AFD16 GR
N={S, A, B, C, D, E} T={a, b}
D
a,b
a S
a
A
a b
b
C
b
E
a
b B
ER=b*.a.(a+b).(a+b)*+b.b.b*+b.b.a+b.a+
P
S aA | bB | A aD | bD | a | b B aD | bE | a | b C aA | bC | b D aD | bD | a | b E aD | bC | a | b ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
OBTENCIÓN DEL AF- A PARTIR DE UNA ER: Veamos a continuación algunos casos particulares de construcción de AF- para ER sencillas, donde x y : x
x*
x
x
x+y
x
y
x.y x
y
ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
OBTENCIÓN DEL AF- A PARTIR DE UNA ER: A partir de una ER, con alfabeto base , en general se puede construir el AF- que acepta el lenguaje asociado con dicha expresión, teniendo en cuenta las siguientes pautas: 1) Se construye un AF- correspondiente a cada símbolo de y también para si fuera necesario. 2) Se procede a realizar las operaciones entre estos AF-, de acuerdo a la ER de partida. 3) Se recomienda unificar los estados finales en cada paso. ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
EJEMPLO DE OBTENCIÓN DEL AF DE UNA ER: ER = a.(a+b.a*.c)*.c+b.b.a
AF-7
1
a
3
2
a
4
8
a
0
5
b
6
c
7
10
b
11
b
12
a
9
c
14
13 ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
EJEMPLO DE OBTENCIÓN DEL AF DE UNA ER: Para integrar este ejemplo con los mecanismos vistos anteriormente, vamos a obtener el AFD Mínimo correspondiente: AFD17
a
b
c
q0 ={0,10} q1 ={1,2,9,3,5} q2 ={11} q3 =
q1 q5 q3 q3
q2 q7 q4 q3
q3 q8 q3 q3
P0={[q6, q8],[q0, q1, q2, q3, q4, q5, q7, q9]}
q6 q5 q3 q7 q3 q5
q3 q7 q3 q3 q3 q7
q3 q8 q3 q9 q3 q8
P3=P2
q4 ={12} q5 ={4,8,9,2,3,5} *q6 ={13,14} q7 ={6} *q8 ={14} q9 ={7,8,9,2,3,5}
A
B
A
C
B
D
P1={[q6, q8],[q0, q2, q3, q7],[q4],[q1, q5, q9]} A
B
D
C
E
G
F
P2={[q6, q8],[q0],[q2],[q3],[q7],[q4],[q1, q5, q9]} AFD17 mínimo B C D
a
b
c
G D D
C F D
D D D
E F G *A
E A G D
D D E D
G D A D
ING. JORGE BUABUD
U.T.N. – F.R.T. S. y S. de los L.
LENGUAJES REGULARES Y AUTÓMATAS FINITOS
Complejidad de los Autómatas Finitos AUTÓMATA / ORDEN
Espacial
Temporal
AFD AFND
2|r| |r|
|x| |r|.|x|
Donde “r” es la expresión regular asociada al autómata y “x” es la secuencia de entrada que se desea analizar. Vemos que en general el AFD es más rápido que el AFND, pero a la vez ocupa más memoria y viceversa. Esta ventaja del AFD, en cuanto a la complejidad temporal, hace que sea la opción más eficiente para implementar el algoritmo de análisis léxico. ING. JORGE BUABUD