Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Exposicion FINAL

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 22

Algoritmo Aho-Sethi-

Ullman Para la construcción de


un AFD a partir de una expresión
regular
Alfred Vaino Aho Ravi Sethi Jeffrey David Ullman

El algoritmo de Aho-sethi-Ullman, nombre que recibe por sus creadores, para construir AFD’s a partir de ER
tiene la ventaja de que en expresiones regulares que contengan una gran cantidad de cierres * no se
generan múltiples arcos λ , a diferencia del conocido método de Thompson.
Bibliografía:
más conocido como El libro del dragón (Dragon Book
. inglés) por aparecer un dragón en su portada (que
en
representa un compilador) es un libro de referencia
en el mundo de los compiladores e intérpretes de
lenguajes de programación.
¿En que consiste el algoritmo?

Entrada --> una expresión regular r

Salida --> un AFD D que reconoce a L(r)


Objetivo de la exposición:

Emplear el método de Aho-sethi-Ullman para obtener un AFD a


partir de la expresión regular (a|b)*abb.
1.Constrúyase un árbol sintáctico T para la expresión regular aumentada
(r)#, donde # es un marcador de final único que se añade a (r).
Este árbol no es otra cosa que una forma de visualizar la
estructura o descomposición de la expresión regular.

Ejemplo: (a|b)*abb#
Elementos del árbol a destacar:
• Nodos:
nodo-concat
nodo-o
nodo-estrella
nodo-hoja

• Etiquetas
símbolos del alfabeto
posiciones
2. Constrúyase las funciones Anulable, primerapos, ultimapos y
siguientepos, haciendo recorridos en profundidad del árbol T.
1. anulable(n) es verdadera para un nodo n del árbol sintáctico
si, y sólo si, la subexpresión representada por n tiene a λ en su
lenguaje. Es decir, la subexpresión puede “hacerse nula” o
puede ser la cadena vacía, aun cuando pueda representar
también a otras cadenas.

2. primerapos(n) es el conjunto de posiciones en el subárbol con


raíz en n, que corresponde al primer símbolo de por lo menos
una cadena en el lenguaje de la subexpresión con raíz en n.

3. ultimapos(n) es el conjunto de posiciones en el subárbol con


raíz en n, que corresponde al último símbolo de por lo menos
una cadena en el leguaje de la subexpresión con raíz en n.

4.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 = aiai+1
・ ・ ・

ai+n en L((r)#) tal que para cierta i, haya una forma de explicar la
membresía de x en L((r)#), haciendo que ai coincida con la posición p del
árbol sintáctico y ai+1 con la posición q.
Ejemplo:
Consideremos el nodo-concat n en la figura, que corresponde a la
expresión (a|b)*a.

anulable(n) = falsa
ya que este nodo genera todas las cadenas de as y bs que
terminan en una a; no genera a λ.

primerapos(n) = {1, 2, 3}.

• En una cadena como aa, la primera posición de la cadena


corresponde a la posición 1 del árbol.

• En una cadena como ba, la primera posición de la cadena proviene


de la posición 2 del árbol.

• No obstante, cuando la cadena generada por la expresión del nodo n


es sólo a, entonces esta a proviene de la posición 3. ultimapos(n) = {3}. Es decir, sin importar qué cadena
se genere a partir de la expresión del
nodo n, la última posición es la a que proviene de la
posición 3 de la cadena.
Ejemplo: siguientepos(1) = {1, 2, 3}.

Consideremos una cadena …ac…

En donde la c puede ser a o b, y la a proviene de la posición 1.

Es decir, esta a es una de las que se generan mediante la a en la


expresión (a|b)*.

• Esta a podría ir seguida de otra a o b que provenga de la misma


subexpresión, en cuyo caso c proviene de la posición 1 o 2.

• También es posible que esta a sea la última en la cadena generada


por (a|b)*, en cuyo caso el símbolo c debe ser la a que proviene
de la posición 3.

Por ende, 1, 2 y 3 son exactamente las posiciones que pueden seguir a


de la posición 1.
Cálculo de anulable:

Nodo n Anulable(n)
n es una hoja etiquetada con λ True
n es una hoja etiquetada con la
False
posición i
n
|

anulable(c1) or
C1 C2 anulable (c2)

n
Un nodo-o n = c1 | c2
anulable(c1) and
C1 C2 anulable(c2)

 Un nodo-concat n = c1c2


n
*

true De todos los nodos en la figura, sólo el nodo-asterisco puede hacerse nulo.
C1

Un nodo-estrella n = c1*
Cálculo de primerapos y ultimapos

Nodo n primerapos(n) ultimapos(n)

n es una hoja etiquetada con λ ᴓ ᴓ

n es una hoja etiquetada con la


{i} {i}
posición i

n
|

primera-pos(c1) U primera-pos(c2) primera-pos(c2) U primera-pos(c1)


C1 C2

Un nodo-o n = c1 | c2
n
If (anulable(c1) ) If anulable(c2)
primera-pos(c1) U primera-pos(c2) primera-pos(c2) U primera-pos(c1)
C1 C2
else primera-pos(c1) else primera-pos(c2)
 Un nodo-concat n = c1c2
para cada uno de los nodos se muestra en la figura, con primerapos(n) a la izquierda del nodo n,
n y ultimapos(n) a su derecha.
*
primera-pos(c1) primera-pos(c1)
C1

Un nodo-estrella n = c1*
Cálculo de siguientepos(n)

1. Si n es un nodo-concat con el hijo izquierdo c1 y con el hijo derecho c2, entonces para
cada posición i en ultimapos(c1) , todas las posiciones en primerapos(c2) se encuentran en
siguientepos(i).
2. Si n es un nodo-estrella e i es una posición en ultimapos(n), entonces todas las posiciones
en primerapos(n) se encuentran en siguientepos(i).

Regla 1.

Ultimapos(c1)={1,2} Primeraposicion(c2)={3}
i=1
i=2
Cálculo de siguientepos(n)

1. Si n es un nodo-concat con el hijo izquierdo c1 y con el hijo derecho c2, entonces para
cada posición i en ultimapos(c1) , todas las posiciones en primerapos(c2) se encuentran en
siguientepos(i).
2. Si n es un nodo-estrella e i es una posición en ultimapos(n), entonces todas las posiciones
en primerapos(n) se encuentran en siguientepos(i).

Regla 2:

utlimapos(n)={1,2}
i=1
i=2

primerapos(n)={1,2}
3.Constrúyase Destados , el conjunto de estados de D, y Dtran, la tabla de
transiciones para D, por el procedimiento descrito en la siguente
diapositiva.

• Los estados dentro de Destados son conjuntos de posiciones.


• Al principio, cada estado está “no marcado”, y un estado se convierte en “marcado” justo
antes de considerar sus transiciones de salida.
• El estado inicial de D es primera-pos(n0), donde n0 es el nodo raíz del árbol.
• los estados finalizadores son todos los que contienen la posición asociada con el marcador de
final #.
Procedimiento para construir el conjunto de
estados y transiciones
Inicializar Destados para que
contenga sólo el estado sin
marcar ‘primerapos(n0)’, en
donde n0 es la raíz del árbol
sintáctico T para (r)#.
Antes de iniciar…
Autómata finito determinista

También podría gustarte