tema 6: compiladores e intérpretes -...

36
Tema 6: Compiladores e intérpretes Teoría de autómatas y lenguajes formales I

Upload: ngominh

Post on 18-Sep-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.