Tema 6: Compiladores e intrpretes
Teora de autmatas y lenguajes formales I
Tema 6: Compiladores e intrpretes 2 Manuel Mucientes
Bibliografa
Sudkamp,T.A.Languages and machines:anintroduction to the theory of computer science.AddisonWesley.1997. captulos4,15y16
Aho A.,Sethi R.and Ullman J.Compiladores.Principios,tcnicasyherramientas.AddisonWesley.1990. captulo1
Tema 6: Compiladores e intrpretes 3 Manuel Mucientes
Introduccin Un compilador es un programa que lee un programa escrito en
un lenguaje (fuente) y lo traduce a un programa equivalente en otro lenguaje (objeto)
El primer compilador FORTRAN necesit de 18 aos de trabajo para su implantacin
Hoy en da existen tcnicas sistemticas para manejar muchas de las tareas que surgen en la compilacin, y herramientas software que facilitan el diseo
Tema 6: Compiladores e intrpretes 4 Manuel Mucientes
Sistema para procesamiento de un lenguaje
Tema 6: Compiladores e intrpretes 5 Manuel Mucientes
Fases de un compilador
Tema 6: Compiladores e intrpretes 6 Manuel Mucientes
Traduccin de una proposicin
Tema 6: Compiladores e intrpretes 7 Manuel Mucientes
Anlisis sintctico
Tres tipos generales de analizadores sintcticos
mtodos universales de anlisis sintctico algoritmos de Cocke-Younger-Kasami y de Early
descendentes construyen rboles de anlisis sintctico desde arriba (raz) hasta abajo
(hojas)
ascendentes
Tema 6: Compiladores e intrpretes 8 Manuel Mucientes
Anlisis descendente en anchura
Tema 6: Compiladores e intrpretes 9 Manuel Mucientes
Anlisis descendente en anchura Se obtiene una derivacin si la entrada pertenece al lenguaje Puede no ser capaz de determinar si una cadena no est en el lenguaje
camino infinito: recursividad por la izquierda solucin: conocer la longitud de la cadena
para ello son necesarios analizadores de varias pasadas
Implementacin prctica: crecimiento exponencial del rbol
Tema 6: Compiladores e intrpretes 10 Manuel Mucientes
Anlisis descendente en profundidad
Tema 6: Compiladores e intrpretes 11 Manuel Mucientes
Anlisis descendente en profundidad (II) No est garantizado que se encuentre una derivacin para
todas las cadenas del lenguaje se puede entrar en caminos infinitos
Ejemplo: cadena de entrada (b) + b
Tema 6: Compiladores e intrpretes 12 Manuel Mucientes
Anlisis ascendente Se construirn las derivaciones ms a la derecha Reduccin: dada w=u1qu2, y A q, entonces v=u1Au2 Ejemplo: reduccin de la cadena (b) + b a S
Generacin de todas las posibles reducciones de una cadena w=uv si u=u1q y A q, se produce la reduccin de w a u1Av hay que probar con todas las posibles combinaciones de u y v
Tema 6: Compiladores e intrpretes 13 Manuel Mucientes
Anlisis ascendente en anchura
Si la cadena forma parte del lenguaje, siempre se encontrar su derivacin ms a la derecha Para gramticas cuyas reglas tengan todas una longitud de su parte derecha mayor que 1, est
garantizado que la longitud del rbol no puede exceder la de la cadena, asegurando la terminacin del anlisis con una derivacin o un fallo
Tema 6: Compiladores e intrpretes 14 Manuel Mucientes
Anlisis ascendente en profundidad
En la pila se almacena [u, i, v], donde uv es la forma sentencial que se va a reducir, e i el identificador de la regla usada en la reduccin
El axioma de la gramtica debe ser no recursivo cualquier GIC se puede transformar a una equivalente con axioma no recursivo otra posibilidad es eliminar la condicin que restringe las reducciones con S, y
cambiar la condicin de finalizacin del lazo desde (u=S) a (u=S y v=)
Tema 6: Compiladores e intrpretes 15 Manuel Mucientes
Anlisis ascendente en profundidad (II) Ejemplo: construir la derivacin para (b + b) para la gramtica AE
Tema 6: Compiladores e intrpretes 16 Manuel Mucientes
Prediccin en analizadores descendentes Construccin de la derivacin ms a la izquierda para p
las derivaciones sern de la forma S * uAv u es el prefijo de p
analizando lo que resta de cadena de entrada se puede reducir elnmero de reglas de A que es necesario examinar
Se asumir que las gramticas no tienen smbolos intiles Ejemplo: derivacin de la cadena acbb para la gramtica
Tema 6: Compiladores e intrpretes 17 Manuel Mucientes
Prediccin en analizadores descendentes (II) Sea G = (V, , P, S) una GIC, y
conjunto predictivo de la variable A: conjunto predictivo de la regla A w:
Los conjuntos LA(A wi) satisfacen:
para cualquier GIC
para todo 1
Tema 6: Compiladores e intrpretes 18 Manuel Mucientes
Prediccin en analizadores descendentes (III) Ejemplo: cadena abc: prediccin de cuatro smbolos
Tema 6: Compiladores e intrpretes 19 Manuel Mucientes
Prediccin en analizadores descendentes (IV) Sea G = (V, , P, S) una GIC, y k>0 un nmero natural
LAk(A) = trunck(LA(A)) LAk(A w) = trunck(LA(A w))
Ejemplo: conjuntos predictivos de longitud 3
}con o ,ucon |{)( kuXuvkXuuXtrunck ==
Tema 6: Compiladores e intrpretes 20 Manuel Mucientes
FIRST Sea G una GIC. Para cada cadena y k>0
Ejemplo:
Para cada k>0, FIRSTk() = {} FIRSTk(a) = {a} FIRSTk(uv) = trunck(FIRSTk(u) FIRSTk(v)) si A w es una regla de G, entonces
*)( Vu}) ,|({)( ** = uxuxtruncuFIRST kk
)}(|{)( 1 uFIRSTvavauFIRST kk =
)()( AFIRSTwFIRST kk
Tema 6: Compiladores e intrpretes 21 Manuel Mucientes
FOLLOW Sea G una GIC. Para cada variable y k>0
Ejemplo:
Para todo k>0, FOLLOWk(S) contiene (S es el axioma de G)
VA)})(y ,|({)( * vFIRSTxuAvSxtruncAFOLLOW kkk =
Tema 6: Compiladores e intrpretes 22 Manuel Mucientes
Conjunto predictivo Sea G una GIC. Para todo k>0, y regla A u1u2 . . . un
LAk(A) = trunck(FIRSTk(A) FOLLOWk(A)) LAk(A w) = trunck(FIRSTk(w)FOLLOWk(A)) =
trunck(FIRSTk(u1)...FIRSTk(un)FOLLOWk(A))
Ejemplo:
VA
Tema 6: Compiladores e intrpretes 23 Manuel Mucientes
Gramticas fuertemente LL(k) Las gramticas fuertemente LL(k) (Left la cadena se lee de
izqda. a dcha.- Left derivacin ms a la izqda.-) garantizan que los conjuntos predictivos LAk(A) estn particionados por los conjuntos LAk(A wi) para cada variable
Cuando se predice con k smbolos, es til concatenar un marcador de final de cadena, #k, al final de cada cadena del lenguaje si S (axioma) es no recursivo, se aade #k al final de cada regla de S en caso contrario, se crea un nuevo axioma S y la regla S S#k
Sea G una GIC con marcador final #k. G es fuertemente LL(k) si siempre que existan dos derivaciones ms a la izquierda S * u1Av1 * u1xv1 * u1zw1 S * u2Av2 * u2yv2 * u2zw2 donde ui, wi, z * y |z|=k. Entonces x = y
VA
Tema 6: Compiladores e intrpretes 24 Manuel Mucientes
Construccin de FIRSTk
Ejemplo: First2
Tema 6: Compiladores e intrpretes 25 Manuel Mucientes
Construccin de FOLLOWk
Ejemplo:
Para A u1 ... un
FL(ui) = FL(ui) trunck { Firstk (ui+1) ... Firstk (un) FL(A) }
U
Tema 6: Compiladores e intrpretes 26 Manuel Mucientes
Un ejemplo Ejemplo: conjuntos predictivos de longitud 2 para la
gramtica
LAk(A w) = trunck(FIRSTk(u1)...FIRSTk(un)FOLLOWk(A))
G es fuertemente LL(2), pues los conjuntos LAk(A wi) particionan LAk(A) para cada variable VA
Tema 6: Compiladores e intrpretes 27 Manuel Mucientes
Una gramtica fuertemente LL(1)
Tema 6: Compiladores e intrpretes 28 Manuel Mucientes
Analizador fuertemente LL(k)
Ejemplo: anlisis de la cadena (b + b)# para la siguiente gramtica fuertemente LL(1)
Tema 6: Compiladores e intrpretes 29 Manuel Mucientes
Gramticas LL(k) Sea G una GIC con marcador final #k. G es LL(k) si siempre
que existan dos derivaciones ms a la izquierda S * uAv * uxv * uzw1 S * uAv * uyv * uzw2 donde ui, wi, z * y |z|=k. Entonces x = y
Las gramticas fuertemente LL(k) requieren que exista una nica regla de A que pueda derivar la cadena predictiva zdesde cualquier forma sentencial que contenga A
Las gramticas LL(k) slo requieren que la regla sea nica para una forma sentencial dada, uAv
Tema 6: Compiladores e intrpretes 30 Manuel Mucientes
Gramticas LL(k) (II) Sea G una GIC, y uAv una forma sentencial de G
el conjunto predictivo de la forma sentencial uAv es LAk(uAv)=FIRSTk(Av)
el conjunto predictivo de la forma sentencial uAv y la regla A w es LAk(uAv, A w)=FIRSTk(wv)
Para seleccionar de forma nica una regla para la forma sentencial uAv , el conjunto LAk(uAv) debe estar particionadopor los conjuntos LAk(uAv, A wi) si la gramtica es fuertemente LL(k), esto est garantizado y la
gramtica tambin ser LL(k)
Tema 6: Compiladores e intrpretes 31 Manuel Mucientes
Gramticas LL(k) (III) Ejemplo: una gramtica LL(k) no necesita ser fuertemente
LL(k)
es fuertemente LL(3), es LL(2), pero no fuertemente LL(2)
Ejemplo: la siguiente gramtica es LL(3), pero no es fuertemente LL(k) para ningn k
Tema 6: Compiladores e intrpretes 32 Manuel Mucientes
Gramticas LL(k) (IV) El anlisis determinstico con gramticas LL(k) requiere la
construccin de los conjuntos predictivos para las formas sentenciales generadas durante el anlisis
LAk(uAv, A w) donde w=w1 ... wn y v=v1 ... vm ser: LAk(uAv, A w)=trunck(FIRSTk(w1)...FIRSTk(wn)FIRSTk(v1)...FIRSTk(vm))
Tema 6: Compiladores e intrpretes 33 Manuel Mucientes
Gramticas LR(k) Analizadores ascendentes
LR left: se lee la cadena de entrada de izquierda a derecha right: se selecciona la derivacin ms a la derecha
Un analizador ascendente determinista trata de reducir la cadena de entrada al smbolo inicial de la gramtica
Tema 6: Compiladores e intrpretes 34 Manuel Mucientes
Problemas finales Dada la gramtica G=({a, b}, {S, A, B}, P, S), donde P viene
dada por: S C C aC | AB | B A abA | ab B ba | BB
Obtener el rbol de derivacin para el anlisis descendente en profundidad con la cadena aababa. Mostrar la configuracin del rbol y de la pila en cada instante.
Es la gramtica fuertemente LL(2)? Para probarlo es obligatorioconstruir los conjuntos FIRST y FOLLOW (para todas las variables).
Tema 6: Compiladores e intrpretes 35 Manuel Mucientes
Problemas finales (II) Dada la gramtica G=({a, b}, {S, A, B}, P, S), donde P viene
dada por: S aAbB | bAbB A ab | a B aB | b
Obtener el rbol de derivacin para el anlisis descendente en profundidad con la cadena babab. Mostrar la configuracin del rbol y de la pila en cada instante.
Es la gramtica fuertemente LL(2)? Para probarlo es obligatorioconstruir los conjuntos FIRST y FOLLOW (para todas las variables).
Tema 6: Compiladores e intrpretes 36 Manuel Mucientes
Problemas finales (III) El lenguaje {aiabci | i > 0} es generado por las gramticas:
Construir los conjuntos FIRST y FOLLOW de todas las variables, as como los conjuntos predictivos para cada una de las reglas.
Determinar cuntos smbolos son necesarios para realizar la prediccin en cada una de las variables.
Estimar si la gramtica es fuertemente LL(k) para algn valor de k.