Está en la página 1de 23

Lenguaje Formales y de

Programación

Clase IX
David Morales
Expresión regular a AFD

Optimización de los
buscadores por
concordancia de
patrones basados en AFD
Definiciones
Estados significativos de una AFN tienen una transición de salida que
no sea cadena vacía.

Funciones calculadas para un árbol sintáctico


● anulable(n): función que detalla si la subexpresión n puede hacerse nula.
● primerapos(n): posiciones en un subárbol con raíz n, corresponden al
primer símbolo de por lo menos una cadena del lenguaje.
● ultimapos(n): posiciones en un subárbol con raíz n, corresponden al último
símbolo de por lo menos una cadena del lenguaje.
● siguientepos(p): para una posición p es el conjunto de posiciones q en todo
el árbol sintáctico de tal forma que haya cierta cadena x=a1a2…an.
Método del Árbol
Método del Árbol

El método del árbol es un algoritmo muy utilizado en los


procesadores de lenguajes por su eficiencia y simplicidad.

El método del árbol tiene como objetivo crear un AFD


mediante un expresión regular, esto mediante la creación de
una tabla de transiciones.
Método del Árbol

Cabe mencionar que el método del árbol hace uso de un


árbol binario, por el cual cada nodo puede tener como
máximo 2 hijos, donde el nodo inicial se llama raíz y los
nodos al final del árbol reciben el nombre de hojas.
Ventajas

- Produce autómatas eficientes.


- Permite la reducción de estados repetitivos.
- Permite la eliminación de nulos.
Desventajas

- Dependiendo de la complejidad de la expresión regular, el


árbol puede ser difícil de diagramar.
- Este algoritmo se recomienda utilizar cuando la expresión
regular es medianamente compleja o compleja, ya que el
proceso para encontrar el AFD puede ser un poco tardío.
Nomenclatura – Árbol de expresiones
a* a+ a? a|b ab
Hojas
Ejercicios
Convertir la siguiente ER a un AFD utilizando el método del árbol:
● (a|b)* abb
Algoritmo para obtener el AFD

1. Aumentar la expresión regular con un carácter de finalización, ya


sea # o $.

Expresión Regular Extendida: (a|b)* abb#


Algoritmo para obtener el AFD
2. Crear el árbol asociado a la ER y enumerar las hojas de izquierda
a derecha.

(a|b)* abb#
Algoritmo para obtener el AFD
2. Crear el árbol asociado a la ER y enumerar las hojas de izquierda
a derecha.

(a|b)* abb#
Algoritmo para obtener el AFD

3. Marcar los anulables del árbol (amarillo). Nodo Anulable

Hoja epsilon Verdadero


(a|b)* abb#
Hoja X Falso

Alternativa Anulable(c1) or
Anulable(c2)

Concatenación Anulable(c1) and


Anulable(c2)

Cerradura de Kleen Verdadero


(*)

Cerradura Positiva Anulable(c1)


(+)

Aparición (?) Verdadero


Algoritmo para obtener el AFD
4. Calcular los primeros, últimos y siguientes de cada nodo.
Nodo Primeros Últimos
(a|b)* abb# a (hoja) a a

c1 | c2 First(c1) U Last(c1) U
First(c2) Last(c2)

c1 c2 A(c1) ? First(c1) A(c2) ?


U First(c2) : Last(c1) U
First(c1) Last(c2) :
Last(c2)

c1 * First(c1) Last(c1)

c1+ First(c1) Last(c1)

c1? First(c1) Last(c1)


Algoritmo para obtener el AFD
4. Calcular los primeros, últimos y siguientes de cada nodo.
Nodo Primeros Últimos
1,2,3 6
(a|b)* abb# 1,2,3 a (hoja) a a
5
1,2,3
4 c1 | c2 First(c1) U Last(c1) U
6 6
5 5 First(c2) Last(c2)
1,2,3
3
4 4 c1 c2 A(c1) ? First(c1) A(c2) ?
1,2 1,2 U First(c2) : Last(c1) U
3 3 First(c1) Last(c2) :
Last(c2)
1,2 1,2
c1 * First(c1) Last(c1)
1 1 2 2
c1+ First(c1) Last(c1)

c1? First(c1) Last(c1)


Algoritmo para obtener el AFD

5. Construir los subconjuntos resultantes de los siguientes.

Regla de Siguientes. Únicamente se calcula los siguientes de los elementos (*), (+)y (.)

. (concatenación): para cada valor de últimos en C1 sus siguientes serán iguales a los
primeros de C2.

+: para cada valor de últimos en C1, sus siguientes serán los primeros de C1.

*: para cada valor de últimos en C1, sus siguientes serán los primeros de C1.
Algoritmo para obtener el AFD

5. Construir los subconjuntos resultantes de los siguientes.


1,2,3 6
(a|b)* abb# Elemento Índice Siguientes
1,2,3 (numero de
5 hoja)
1,2,3
4 6 6
5 5 a 1
1,2,3
3 b 2
4 4
1,2 1,2
3 3 a 3

b 4
1,2 1,2
b 5
1 1 2 2
# 6
Algoritmo para obtener el AFD

5. Construir los subconjuntos resultantes de los siguientes.


1,2,3 6
(a|b)* abb# Elemento Índice Siguientes
1,2,3 (numero de
5 hoja)
1,2,3
4 6 6
5 5 a 1 1,2,3
1,2,3
3 b 2 1,2,3
4 4
1,2 1,2
3 3 a 3 4

b 4 5
1,2 1,2
b 5 6
1 1 2 2
# 6 -
Algoritmo para obtener el AFD

6. Calcular los estados (se empieza por el primero de la raíz).


1,2,3 6
(a|b)* abb#
1,2,3
5
1,2,3
4 6 6
1,2,3 5 5
3
4 4
1,2 1,2
3 3

1,2 1,2

1 1 2 2
Algoritmo para obtener el AFD

6. Calcular los estados (se empieza por el primero de la raíz).

Elemento Índice (número Siguientes ¿Estado inicial?


de hoja)
a 1 1,2,3 Q0 = {1,2,3}
b 2 1,2,3
a 3 4
b 4 5
b 5 6
# 6 -
Algoritmo para obtener el AFD

6. Calcular los estados (se empieza por el primero de la raíz).

Elemento Índice (número Siguientes ¿Estado inicial? Q1= {4}


de hoja) Sig (4) = {5} = Q2
a 1 1,2,3 Q0 = {1,2,3}
Q2= {5}
b 2 1,2,3
sig(1) = {1,2,3} = Q0 Sig (5) = {6} = Q3
a 3 4
sig (2) = {1,2,3} = Q0
b 4 5 Sig(3) = {4} =Q1 Q3= {6}
b 5 6 Sig (6) = Aceptar
# 6 -
Algoritmo para obtener el AFD Elemento Índice Siguiente
(numero s
de hoja)

7. Construir la tabla de transiciones (opcional).


a 1 1,2,3
8. Construir el AFD asociado. b 2 1,2,3
a 3 4
¿Estado inicial? Q1= {4} b 4 5
Sig (4) = {5} = Q2
b 5 6
Q0 = {1,2,3}
Q2= {5} # 6 -
a,b
sig(1) = {1,2,3} = Q0 Sig (5) = {6} = Q3
sig (2) = {1,2,3} = Q0
Sig(3) = {4} =Q1 Q3= {6}
Sig (6) = Aceptar a b b

Q0 Q1 Q2 Q3

También podría gustarte