Exposicion FINAL
Exposicion FINAL
Exposicion FINAL
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?
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.
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 λ.
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)
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
n
|
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.