cocke younger kasami

64
Análisis Sintáctico Tema 3 Juan A. Bot´ ıa Blaya [email protected] http://ants.dif.um.es/staff/juanbot/traductores/traductores.html Depar tamento de Ingenier´ ıa de la Informaci ´ on y las Comunicaciones Univ ersidad de Murcia An ´ alisis Sint ´ act ico .1/ 64

Upload: elmisteriodecalenda

Post on 16-Oct-2015

72 views

Category:

Documents


1 download

TRANSCRIPT

  • Anlisis SintcticoTema 3

    Juan A. Bota [email protected]

    http://ants.dif.um.es/staff/juanbot/traductores/traductores.html

    Departamento de Ingeniera de la Informacion y las ComunicacionesUniversidad de Murcia

    Analisis Sintactico p.1/64

  • ndiceIntroduccin al Anlisis Sintctico.1. Objetivo del analizador sintctico2. Gramticas libres de contexto y autmatas con pila3. Anlisis sintctico ascendente y descendente4. El problema de la ambigedad en el anlisis sintctico5. Mtodos Universales de anlisis sintctico

    (a) El mtodo de Cocke-Younger-Kasami(b) El mtodo de Early

    6. Transformaciones de gramticas

    Analisis Sintactico p.2/64

  • Gramticas libres de contexto (CFG) y Autmatas de pila (PA)

    Definicin 1 Una gramtica libre de contexto G = (VN , Vt, S, P ) es aquella cuyasproducciones tienen la forma A , siendo A VN y (VN

    VT )

    .

    Definicin 2 Un autmata de pila se define como una 7-tupla AP = (Q, V, , , q0, z0, F )en donde:

    Q es un conjunto finito de estados.V es el alfabeto de entrada. es el alfabeto de la pila.q0 es el estado inicial.z0 es el smbolo inicial de la pila.F Q es el conjunto de estados finales. es la funcin de transicin:

    : Q (V {}) 2Q

    Analisis Sintactico p.3/64

  • Gramticas libres de contexto (CFG) y Autmatas de pila (PA)

    Definicin 3 Se entiende por configuracin de un atommata con pila a su situacin en uninstante considerado expresada formalmente por medio de una tripla(q, w, ) (Q V ) en donde:

    q Q es el estado actual del autmata.w V es la subcadena de entrada que aun no se ha analizado. es el contenido actual de la pila.

    Si w = no queda nada por analizar. Si = se ha reconocido la cadena.

    Analisis Sintactico p.4/64

  • Gramticas libres de contexto (CFG) y Autmatas de pila (PA) (II)

    Definicin 4 Un movimiento de un AP es una transicin entre configuraciones. Unatransicin no tiene porqu realizarse en un solo movimiento.Por ej. el movimiento (q, aw, Z) ` (q, w, ) es un movimiento vlido siempre y cuando(q, ) (q, a, Z) con q Q, a (V ), w V , , .

    Se debe sealar que un AP no puede realizar ningn movimiento si la pila est vaca.Entonces, un autmata de pila reconocer una cadena de entrada sii partiendo de suconfiguracin inicial, (q0, t, Z0), llega a una configuracin final (qf , , ) empleandomovimientos vlidos y lo expresamos:

    (q0, t, Z0) ` (qf , , ), qf F,

    La cadena ser aceptada por vaciado de pila si despues de leerse toda la cadena se llega aun estado con la pila vaca, independientemente del tipo de estado en el que se encuentreel AP.

    Analisis Sintactico p.5/64

  • Gramticas libres de contexto (CFG) y Autmatas de pila (PA) (III)

    Ejemplo. Sea G = (VN , VT , P, S) con PS S + A

    S A

    A A B

    A B

    B (S)

    B a

    Sea AP = (Q, V, , , q, s, ) en donde Q = {q}, V = {a, +, , (, )} y :

    (q, , S) = {(q, S + A), (q, A)}

    (q, , A) = {(q, A B), (q, B)}

    (q, , B) = {(q, (S)), (q, a)}

    (q, op, op) = {(q, )}

    siendo op V . Intentaremos reconocer la cadena w = a + a a.

    Analisis Sintactico p.6/64

  • Gramticas libres de contexto (CFG) y Autmatas de pila (PA) (IV)

    Ejemplo (y II) El rbol de alternativas posibles es

    ...

    ...

    ...

    ...

    ...

    ...(q,a+a*a,S+A)

    (q,a+a*a,a+A)

    (q,+a*a,+A)

    (q,a*a,A)

    (q,a*a,A*B)

    (q,a*a,B*B)

    (q,a*a,a*B)

    (q,*a,*B)

    (q,a,B)

    (q,a,a)

    (q,a*a,(S)*B)

    (q,a*a,B)

    (q,a+a*a,S+A+A)

    (q,a+a*a,A)

    (q,a+a*a,S)

    (q,a+a*a,(S)+A)

    (q,a+a*a,A*B+A)

    (q,\,\)

    (q,a+a*a,B+A)

    (q,a+a*a,A+A)

    Analisis Sintactico p.7/64

  • Anlisis Sintctico Ascendente y Descendente

    Definicin 5 Una sentencia w L(G), para alguna CFG (Context Free Grammar) ha sidoreconocida cuando conocemos alguno de (o quiz todos) sus rboles de derivacin.

    Definicin 6 Sea una gramtica G = (VN , VT , P, S). Se dice que la cadena derivadirectamente a la cadena , denotndolo , si se puede escribir

    = A y =

    para alguna cadena y (VT VN ), y adems existe A P .

    Definicin 7 Sea una gramtica G = (VN , VT , P, S). Para cualquier A VN y (VN VT )

    se dice que A = si se deriva de A, con una cadena de derivacionesde longitud cualqiera, incluso nula.

    Analisis Sintactico p.8/64

  • Anlisis Sintctico Ascendente y Descendente

    Definicin 8 Sea una gramtica G = (VN , VT , P, S). Las formas sentenciales de G vienendadas por el conjunto

    D(G) = { / S

    = y (VN VT )}

    Definicin 9 El lenguaje definido por una gramtica G, denotado L(G) es el conjunto decadenas de smbolos terminales, que se pueden derivar partiendo del axioma de lagramtica, y empleando para las derivaciones las reglas de P . E.d.:

    L(G) = {x/S

    = x, y x T }

    Definicin 10 Sea una gramtica G = (VN , VT , P, S). Sea una forma sentencial endonde V T , VN y (VT VN ). Una derivacin izquierda se obtienesustituyendo por alguna de las partes derechas que la definen.Definicin 11 Sea una gramtica G = (VN , VT , P, S). Sea una forma sentencial endonde (VT VN ), VN y V T . Una derivacin derecha se obtiene sustituyendo por alguna de las partes derechas que la definen.

    Analisis Sintactico p.9/64

  • Anlisis Sintctico Ascendente y Descendente (II)

    Un ejemplo de este tipo de derivaciones, para la gramtica

    A BF

    B EC

    E a

    C b

    F c

    puede verse

    en el rbol

    D Derivacin derechaI Derivacin izquierda

    A

    BF

    ECF Bc

    aCF EbF ECc ECc

    abF aCc abF Ebc aCc Ebc aCc Ebc

    abc abc abc abc abc abc abc abc

    I D

    I

    I

    I

    D

    D

    D

    Analisis Sintactico p.10/64

  • Anlisis Sintctico Ascendente y Descendente (III)

    Existen dos grandes grupos de mtodos de anlisis sintctico, dependiendo de la direccinen la que se recorre el rbol sintctico.

    Descendente: en este tipo de anlisis, se va recorriendo el rbol sintctico desde la razhasta las hojas, llegando a generar la sentencia que se est analizando. La razrepresenta al smbolo inicial de la gramtica.Ascendente: se parte de las hojas y se intenta construir el rbol hacia arriba, hastallegar al smbolo inicial de la gramtica.

    En un anlisis top-down un parser hacer corresponder cadenas de entrada con suscorrespondientes derivaciones izquierdas.En un anlisis bottom-up un parser hace corresponder cadenas de entrada con las inversasde las correspondientes derivaciones derechas.Entre los mtodos generales, los algoritmos de Cocke-Younger-Kasami (CYK) y el mtodo deEarly son los ms conocidos son bastante ineficientes desde un punto de vistacomputacional.Para la mayora de lenguajes de programacin es suficiente con trabajar con subconjuntosde las CFG, como los de las LL y LR que permiten algoritmos de parsing ms eficientes.

    Analisis Sintactico p.11/64

  • El problema de la ambigedad en el anlisis sintctico

    Definicin 12 Un rbol ordenado y etiquetado D es un rbol de derivacin para unagramtica libre de contexto G(S) = (VN , VT , P, S) si:

    1. La raz de D est etiquetada con S.2. Si D1, . . . , Dk son los subrboles de los descendientes directos de la raz, y la raz de

    cada Di est etiquetada con Xi, entonces S X1 Xk P . Adems Di debe serun rbol de derivacin en G(Xi) = (VN , VT , P, Xi) si Xi VN , bien un nodo hojacon etiqueta Xi si Xi VT .

    3. Alternativamente, si D1 es el nico subrbol de la raz de D, y la raz de D1 tienecomo etiqueta e, entonces S e P .

    Definicin 13 La frontera de un rbol de derivacin es la cadena que se obtieneconcatenando, de izquierda a derecha, las etiquetas de las hojas.Definicin 14 Sea una CFG G = (VN , VT , P, S). Decimos que G es ambigua si existe almenos una sentencia w L(G) para la cual hay un rbol de derivacin distinto, con fronteraw.

    Analisis Sintactico p.12/64

  • El problema de la ambigedad en el anlisis sintctico (II)

    El hecho de que una gramtica sea ambigua es una situacin indeseable ya que cada rbolde derivacin representa una ejecucin distinta de la misma sentencia, y por lo tanto cadauno podra producir resultados distintos.

    Ejemplo: sea la gramtica G = (VN , VT , P, S) con P = {E E + E, E E E, E a}Caben dos interpretaciones para a + a a:

    E E

    E

    a E * E

    a a

    E + E * E

    E E+

    a a

    a

    Analisis Sintactico p.13/64

  • El problema de la ambigedad en el anlisis sintctico (III)

    Otro ejemplo clsico de este tipo de problemas es el de las gramticas que incluyensentencias del tipo if-then/if-then-else.Sea la gramtica

    prop if expr then prop| if expr then prop else prop| otra

    De acuerdo con ella, la sentenciaif E1 then S1 else if E2 then S2 else S3

    no es ambigua, ya que el rbol de derivacin correspondiente sera

    if expr then prop else prop

    prop

    if expr then prop else prop

    E1 S1

    E2 S2 S3

    Analisis Sintactico p.14/64

  • El problema de la ambigedad en el anlisis sintctico (IV)

    sin embargo, la sentenciaif E1 then if E1 then S1 else S2

    si lo sera, ya que dara lugar a la siguiente pareja de rboles dederivacin distintos.

    if expr then prop else prop

    prop

    if expr then prop

    E2 S2

    E1 S1

    if expr then prop

    prop

    if expr then prop else prop

    E1

    E2 S1 S2

    Analisis Sintactico p.15/64

  • El problema de la ambigedad en el anlisis sintctico (V)

    Hay dos enfoques distintos usados para solucionar esteproblema.1. Transformar la definicin del lenguaje para que las

    construcciones if-then-else tengan delimitadores debloque, y los else se asocien con los if explcitamente.

    2. Transformar la gramtica en otra equivalente y que nosea ambigua.

    Analisis Sintactico p.16/64

  • El problema de la ambigedad en el anlisis sintctico (VI)

    Ejemplo con el mtodo 1:

    prop if expr then prop endif| if expr then prop else prop endif| otra

    entonces, para escribir una sentencia como la del ejemplo, y en la que se asocie el else alsegundo if quedara

    if E1 then if E1 then S1 else S2 endif endif

    Una sentencia que ahora asociara el else con el primer if sera

    if E1 then if E1 then S1 endif else S2 endif

    Analisis Sintactico p.17/64

  • El problema de la ambigedad en el anlisis sintctico (VII)

    Ejemplo con el mtodo 2:

    Se debe elegir entre los dos rboles de la transparencia 10.Elegir el rbol de la izquierda implica emparejar el else con el then anterior y sin emparejarms cercano.Elegir el rbol de la derecha implica emparejar el else con el then ms lejano y que aun estsin emparejar.

    Eligiendo el rbol de la izquierda, se dividen las proposiciones entre emparejadas y noemparejadas.

    Toda proposicin que aparezca entre un then y un else debe estar emparejada, e.d. no debeterminar con un then sin emparejar porque entonces el else estara obligado a concordar conella.Una proposicin emparejada es una proposicin if-then-else que no contenga proposicionessin emparejar o cualquier otra clase de proposicin no condicional.

    prop prop_emparejada| prop_no_emparejada

    prop_emparejada if expr then prop_emparejada else prop_emparejada| otra

    prop_no_emparejada if expr then prop| if expr then prop_emparejada else prop_no_emparejada

    Analisis Sintactico p.18/64

  • Mtodos universales de anlisis sintctico

    Aplicables a cualquier GLCMtodos tabularesComplejidad espacial O(n2) y temporal O(n3)No aplicables para lenguajes de programacinconvencionalesAplicables si interesan todos los rboles de derivacinposibles (G. ambiguas)

    Analisis Sintactico p.19/64

  • Algoritmo Cocke-Younger-Kasami

    Basado en programacin dinmicaPoca aplicabilidad

    Complejidad espacial proporcional a n2 (n longitud dew)Complejidad temporal proporcional a n3Algoritmo de Early consigue complejidades linealespara muchas gramticas LC

    Necesita gramticas en CNF y libres

    Analisis Sintactico p.20/64

  • CYK-Funcionamiento bsicoSea w = a1a2 . . . an con ai VTi = 1, . . . , nEl algoritmo construye una tabla T triangular, con elementos

    tij VN , 1 i n y 1 j n i + 1,

    i

    j

    t11

    t32

    t12 t13 t14

    t23t21 t22

    t31

    t41

    en donde A tij sii A + aiai+1 ai+j1Entonces w L(G) si S t1n

    Analisis Sintactico p.21/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK

    Algoritmo 1 Algoritmo de anlisis sintctico de Cocke-Younger-Kasami.Entrada: Una gramtica G = (VN , VT , P, S) en CNF y sin -producciones, junto con unacadena de entrada w = a1a2 an V T .

    Salida: La tabla T en la que cada ti,j contiene a A VN sii A += aiai+1 ai+j1.Mtodo:

    1. Hacer ti,1 = {A|A ai P} para todo i.2. Supongamos que ti,j se ha calculado para todo i, 1 i n, y para todo j ,

    1 j < j. Hgase

    ti,j = {A| para algun k , 1 k < j, A BC P, B ti,k, y C ti+k,jk}

    Dado que i k < j, tanto k como j k son menores que j. Por lo tanto, ti,k yti+k,jk han sido calculados antes de ti,j . Despus de este paso, si ti,j contiene aA, entonces

    A BC+

    = ai ai+k1C+

    = ai ai+k1ai+k ai+j1

    3. Realizar el paso anterior, hasta que ti,j haya quedado calculado para todo 1 i ny 1 j n i + 1.

    Analisis Sintactico p.22/64

  • CYK-ObservacionesSe trata de encontrar A,B,C tales que

    a1a2 . . .

    C A

    ai . . .

    B . . . ai+j1 . . . an

    hasta que al final tengamosS

    D a1a2 . . .

    E . . . an

    y por lo tanto podamos asegurar queS DE + a1a2 . . . E

    + a1a2 . . . an

    Analisis Sintactico p.23/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK (II)

    Vemos la aplicacin del algoritmo con un ejemplo en el que el conjunto P de nuestragramtica viene dado por el conjunto de producciones

    S AA|AS|b

    A SA|AS|a

    Sea w = abaab la cadena de entrada. Aplicando el algoritmo, la tabla resultante ser unatriangular de 5 5. Aplicando el paso 1, tenemos

    t11 = {A}, ya que A a P .t21 = {S}, ya que S b P .t31 = {A}, ya que A a P .t41 = {A}, ya que S a P .t51 = {S}, ya que A b P .

    Analisis Sintactico p.24/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK (III)

    Ahora, hacemos j = 2. Tenemos que ti,j se ha calculado para j = 1. Tenemos queencontrar no-terminales que produzcan subcadenas de w de longitud 2.

    t1,2 = {S, A}, ya que 1 k < 2, y la regla ha de ser tal que el primer no-terminal dela parte derecha est en t1,1 y el segundo no-terminal en t2,1. Por lo tanto la partederecha ha de ser AS. Tanto S como A tienen reglas con esa parte derecha.t22 = {A}, ya que 1 k < 2, y la regla ha de ser tal que el primer no-terminal de laparte derecha est en t2,1 y el segundo no-terminal en t3,1. La parte derecha seraSA. nicamente A tiene partes derechas de ese tipo.t3,2 = {S}, ya que 1 k < 2, y la regla ha de ser tal que el primer no-terminal de laparte derecha est en t3,1, y el segundo en t4,1. Por lo tanto, la parte derecha seraAA. Slamente S tiene reglas de produccin con esa parte derecha.t4,2 = {A, S}, ya que 1 k < 2, y la regla ha de ser tal que el primer no-terminal dela parte derecha est en t4,1, y el segundo en t5,1. Por lo tanto, la parte derecha seraAS.

    Analisis Sintactico p.25/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK (IV)

    Despus de hacer el paso 2, con j = 2 la tabla T queda as:

    1 2 3 4 51 {A} {S,A}2 {S} {A}3 {A} {S}4 {A} {A,S}5 {S}

    Analisis Sintactico p.26/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK (V)

    Ahora, hacemos j = 3. Tenemos que ti,j se ha calculado para 1 j < 3. Tenemos queencontrar no-terminales que produzcan subcadenas de w, de longitud 3.

    t1,3 = {A, S}, ya que 1 k < 3, y la regla ha de ser tal que el primer no-terminal dela parte derecha est en t1,1 (o en t1,2) y el segundo no-terminal en t2,2 (o en t3,1).Por lo tanto la parte derecha ha de ser AA (o SA).t2,3 = {S}, ya que 1 k < 3, y la regla ha de ser tal que el primer no-terminal de laparte derecha est en t2,1 (o en t2,2) y el segundo no-terminal en t3,2 (o en t4,1). Laparte derecha sera SS (o AA). nicamente S tiene una produccin S AA.t3,3 = {A, S}, ya que 1 k < 3, y la regla ha de ser tal que el primer no-terminal dela parte derecha est en t3,1 (o en t3,2), y el segundo en t4,2 (o en t5,1). Con t3,1 yt4,2 tenemos dos posibles partes derechas que son AA y AS, y por ello tanto S comoA deben estar en t3,3. Con t3,2 y t5,1 tenemos como parte derecha SS, que no esgenerada por ningun no-terminal.

    Analisis Sintactico p.27/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK (VI)

    Despus de hacer el paso 2, con j = 3 la tabla T queda as:

    1 2 3 4 51 {A} {S,A} {A,S}2 {S} {A} {S}3 {A} {S} {A,S}4 {A} {A,S}5 {S}

    Analisis Sintactico p.28/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK (VII)

    Ahora, hacemos j = 4. Tenemos que ti,j se ha calculado para 1 j < 4. Tenemos queencontrar no-terminales que produzcan subcadenas de w, de longitud 4.

    t1,4 = {A, S}, ya que 1 k < 4, y la regla ha de ser tal que el primer no-terminal dela parte derecha est en t1,1, k = 1, o en t1,2, k = 2, o en t1,3, k = 3 y el segundono-terminal en t2,3, k = 1, o en t3,2, k = 2 o en t4,1. El conjunto de no-terminales quepodran formar el primer no-terminal de la parte derecha es {A, S} y el deno-terminales que podran formar el segundo no-terminal de la parte derecha es{A, S}. Por lo tanto la parte derecha va a estar en {AA, AS, SA, SS}.t2,4 = {A, S}, ya que 1 k < 4, y la regla ha de ser tal que el primer no-terminal dela parte derecha est en t2,1, k = 1, o en t2,2, k = 2 o en t2,3, k = 3 y el segundono-terminal en t3,3, k = 1, o en t4,2, k = 2, o en t5,1. El conjunto de no-terminalesque podran formar el primer no-terminal de la parte derecha es {A, S}, y el deno-terminales que podran formar el segundo no-terminal de la parte derecha es{A, S}. Por lo tanto la parte derecha va a estar en {AA, AS, SA, SS}.

    Analisis Sintactico p.29/64

  • Mtodos Universales de anlisis sintctico. El algoritmo CYK (VIII)

    Despus de hacer el paso 2, con j = 4 la tabla T queda as:

    1 2 3 4 51 {A} {S,A} {A,S} {A,S}2 {S} {A} {S} {A,S}3 {A} {S} {A,S}4 {A} {A,S}5 {S}

    Hacer el paso 2, con j = 5 en clase, y completar la tabla Tcon t1,5.

    Analisis Sintactico p.30/64

  • Obteniendo una secuencia de derivaciones a partir de T

    Especifiacin algortmicaAlgoritmo 2 Derivacin ms a la izquierda a partir de la tabla T de parsing.Entrada: una gramtica G = (VN , VT , P, S) en formato CNF, y en la que lasproducciones de P estn numeradas de 1 a p, una cadena de entradaw = a1a2 an, y la tabla T generada por el algoritmo CYK.Salida: una derivacin izquierda de w o un error.Mtodo: se va a basar en el uso de una rutina recursiva gen(i, j, A) que va a generarla derivacin A += aiai+1 ai+j1. Se define como sigue:1. Si j = 1 y la produccin m-sima es A ai, entonces la salida de gen(i, 1, A)

    es m.

    2. Si j > 1, sea k el entero ms pequeo, 1 k < j, tal que para algn B ti,k yC ti+k,jk se tiene que A BC P . Si hay varias, elegimos la que tenga elndice ms pequeo, digamos m. La salida de gen(i, j, A) es m, ms las salidasde gen(i, k, B) y gen(i + k, j k, C).

    Por lo tanto, para obtener la derivacin para w llamamos a gen(1, n, S)

    Analisis Sintactico p.31/64

  • Obteniendo una secuencia de derivaciones a partir de T

    Tomemos la gramtica del ejemplo anterior y dispongmosla en el ordensiguiente:

    (1)S AA(2)S AS(3)S b(4)A SA(5)A AS(6)A a

    Sea la cadena de entrada w = abaab la misma que para TTenemos que llamar a gen(1, 5, S), siempre que S t1,5

    Analisis Sintactico p.32/64

  • Obteniendo una secuencia de derivaciones a partir de T

    Ahora la evolucin, con el k y m correspondientes es

    gen(1,5,S)

    gen(1,1,A) gen(2,4,A)

    gen(2,1,S) gen(3,3,A)

    gen(3,1,A) gen(4,2,5)

    gen(4,1,A) gen(5,1,S)

    m=1

    m=6 m=4

    m=3 m=5

    m=6 m=2

    m=6 m=3

    k=1

    k=1 k=1

    k=1 k=1

    k=1 k=1

    k=1 k=1

    En esa figura puede verse que la secuencia de derivaciones obtenida es la siguiente

    S 1 AA 6 aA 4 aSA 3 abA 5 abAS 6 abaS 2 abaAS 6 abaaS 3 abaab

    Analisis Sintactico p.33/64

  • El algoritmo de Early

    Complejidad proporcional a n2 si gramtica no es ambiguaPara lenguajes ms usados, complejidades espacial y temporal sonlineales

    Partimos deLa gramtica G = (VN , VT , P, S), de tipo CFG.Una cadena w = a1a2 an, en donde w V T .

    Un elemento [A X1X2 Xk Xk+1 Xm, i] es lo que vamos adenominar un item para la cadena w, si A X1 Xm P y0 i n.

    El punto es un smbolo adicional, y el entero k es tal que0 k m.

    Si la produccin es A entonces el item es [A , i]

    Analisis Sintactico p.34/64

  • El algoritmo de Early (II)El algoritmo trabaja construyendo un conjunto de items Ij para cada j, 0 j n, detal forma que [A , i] Ij , con 0 i j sii para algn y , se tiene que:

    S A

    a1 ai

    ai+1 aj

    Los ndices i y j delimitan el segmento de cadena en w que se produce por la cadenaque est a la izquierda del smbolo , si se observa la tercera derivacin.Las dos derivaciones primeras aseguran que el prefijo izquierdo de la cadena, desdea1 hasta ai se ha producido a partir del smbolo inicial de la gramtica.La secuencia de listas de items generada, I0, I1, . . . , In se denomina listas del parser,para la cadena de entrada w.w L(G) sii existe algn item en la forma [S , 0] In.

    Analisis Sintactico p.35/64

  • El algoritmo de Early (III)Algoritmo 3 El algoritmo de parsing de EarlyEntrada: la gramtica CFG, G = (VN , VT , P, S) y la cadena de entradaw = a1a2 an V T .

    Salida: Las listas del parser, I0, I1, . . . , In.Mtodo: Primero se construye I0 usando los pasos (1) a (3)

    1. Si S P entonces, aadir el item [S , 0] a I0.Ejecutar (2) y (3) hasta que no se aada ningn item nuevo a I0.

    2. Si [B , 0] I0, aadir [A B , 0] para todo [A B, 0] I0.3. Sea [A B, 0] I0. Para toda produccin B , aadir el item [B , 0] a

    I0, siempre que no estuviera aadido ya.Ahora, sea I0, I1, . . . , Ij1 el conjunto de listas de items ya construidos. Para laconstruccin de Ij , hacer:

    4. Para cada [B a, i] Ij1 tal que a = aj , aadir [B a , i] a Ij .Ejecutar los dos ltimos pasos, para cada j, hasta que no se pueda aadir ningnitem ms a Ij .

    5. Sea [A , i] Ij . Si existe un [B A, k] Ii, entonces, aadir[B A , k] a Ij .

    6. Sea [A B, i] Ij . Para todo B P , aadimos [B , j] a Ij .

    Analisis Sintactico p.36/64

  • Interpretacin del algoritmoPaso 1: Iniciamos la construccin de la tabla con todas las producciones de SPaso 2: Exploramos todas las producciones a partir de SPaso 3: Si en I0 tenemos A B, debemos incluir tambin todas las producciones deB

    Paso 4: Si [B a, i] Ij1 sabemos entonces que (suponiendo que w L(G))

    a1a2 . . .

    ai+1ai+2 . . . aj1 aj . . . an

    entonces, si a = aj podemos decir que

    a1a2 . . .

    aaj ai+1ai+2 . . . aj1aj . . . an

    por lo tanto incluimos [B a , i] Ij

    Analisis Sintactico p.37/64

  • Interpretacin del algoritmoPaso 5: Si [A , i] Ij tenemos que

    . . .

    ai+1ai+2 . . . aj . . .

    y como A entonces decimos tambin que

    A

    ai+1ai+2 . . . aj

    entonces, si tenemos que [B A, k] Ii significa que tenemos

    ak+1 . . . ai

    A

    ai+1ai+2 . . . aj

    por lo que hacemos [B A , k] IjPaso 6: anlogo al 3

    Analisis Sintactico p.38/64

  • EjemploVemos la aplicacin del algoritmo con un ejemplo: sea G = (VN , VT , P, E) en donde Pviene dado por

    1. E T + E2. E T3. T F T4. T F5. F (E)6. F a

    Y sea w = (a + a) a la cadena de entrada.

    Segn el paso (1) aadimos a I0 los items [E T + E, 0] y [E T, 0].Dado que la gramtica es libre, el paso (2) no incorpora ningn item adicional.Si en el paso (3) hacemos = tenemos que incluir [T F T, 0] y [T F, 0].En otra iteracin ms del paso (3) incluimos adems [F (E), 0], y [F a, 0].

    Analisis Sintactico p.39/64

  • EjemploNo podemos incluir ms. El contenido de I0 queda:

    [E T + E, 0]

    [E T, 0]

    [T F T, 0]

    [T F, 0]

    [F (E), 0]

    [F a, 0]

    As que pasamos a construir ahora I1. Por el paso (4)observamos que [F (E), 0] cumple que (= a1, y por lotanto aadimos [F (E), 0] a I1.

    Analisis Sintactico p.40/64

  • EjemploPor el paso (6), intentamos desplazar el metasmbolo a la derechadel no-terminal E, y para ello aadimos [E T + E, 1] y[E T, 1] a I1. A su vez, estos generan la adicin de[T F T, 1] y [T F, 1]. Estos generan tambin laincorporacin de [F (E), 1], y [F a, 1]. I1 queda entonces conel siguiente contenido:

    [F (E), 0]

    [E T + E, 1]

    [E T, 1]

    [T F T, 1]

    [T F, 1]

    [F (E), 1]

    [F a, 1]

    Construmos ahora I2. Ahora a2 = a. Por el paso (4), aadimos[F a, 1].

    Analisis Sintactico p.41/64

  • EjemploAhora, por el paso (5) intentamos aprovechar el hecho de que se hareconocido parcialmente a para reducir el no-terminal que laproduce, y por ello introducimos [T F T, 1] y [T F, 1].Dado que acabamos de aadir [T F, 1], nuevamente, por el paso(5) aadimos [E T +E, 1] y [E T, 1]. Este ltimo causa laintroduccin de [F (E), 0]. Ahora, I2 est completo.El contenido de I2 queda:

    [F a, 1]

    [T F T, 1]

    [T F, 1]

    [E T +E, 1]

    [E T, 1]

    [F (E), 0]

    Analisis Sintactico p.42/64

  • EjemploLa coleccin de cjtos. de items queda:

    I1 I2 I3 I4

    [F (E), 0]

    [E T + E, 1]

    [E T, 1]

    [T F T, 1]

    [T F, 1]

    [F (E), 1]

    [F a, 1]

    [F a, 1]

    [T F T, 1]

    [T F, 1]

    [E T +E, 1]

    [E T, 1]

    [F (E), 0]

    [E T + E, 1]

    [E T + E, 3]

    [E T, 3]

    [T F T, 3]

    [T F, 3]

    [F (E), 3]

    [F a, 3]

    [F a, 3]

    [T F T, 3]

    [T F, 3]

    [E T +E, 3]

    [E T, 3]

    [E T + E, 1]

    [F (E), 0]

    I5 I6 I7

    [F (E), 0]

    [T F T, 0]

    [T F, 0]

    [E T +E, 0]

    [E T, 0]

    [T F T, 0]

    [T F T, 6]

    [T F, 6]

    [F (E), 6]

    [F a, 6]

    [F a, 6]

    [T F T, 6]

    [T F, 6]

    [T F T, 0]

    [E T +E, 0]

    [E T, 0]

    y como [E T, 0] I6, tenemos que w L(G).

    Analisis Sintactico p.43/64

  • Obtencin de una derivacin derechaAlgoritmo 4 Construccin de un rbol de derivacin a partir de I0, I1, . . . , In.Entrada: una gramtica CFG, libre de ciclos, G = (VN , VT , P, S), en donde lasproducciones estn numeradas, de 1 . . . p, una cadena w = a1 . . . an, y la listaI0, I1, . . . , In.Salida: , un rbol de derivacin derecho para w, un mensaje de error.Mtodo: si 6 un [S , 0] en In, entonces w / L(G). Emitir salida de error. Sino, hacer = . Ejecutar R([S , 0], n), en donde R se define como sigue:Rutina R([A , i], j):

    1. Sea h el ndice de A . Entonces, hacer + h2. Si = X1X2 Xm, hacer k = m, l = j.3. Mientras que k > 0 hacer:

    (a) Si Xk VT , hacer k = k 1 y l = l 1.(b) Si Xk VN ,

    i. Encontrar un item [Xk , r] Il, para algn rii. Ejecutar R([Xk , r], l). Hacer k = k 1 y l = r.

    Analisis Sintactico p.44/64

  • EjemploVamos a obtener un rbol de derivacin, que defina una derivacin ms a la derechapara

    1. E T + E2. E T3. T F T4. T F5. F (E)6. F a

    Y w = (a + a) a la misma cadena de entrada que el ejemplo anterior. Usaremostambin la lista I1, . . . , I7 producida en el ejemplo anterior.Inicialmente ejecutamos R([E T, 0], 7). = {2}.Paso 2. Ahora, = T . Hacemos k = 1 y l = 7.Paso 3b. Como X1 = T VN , tenemos que encontrar un item [T , r] I7 talque [E T, 0] est en Ir .

    El item [T F, 6] I7 no vale pues [E T, 0] / I6.El item [T F T, 0] I7 si pues [E T, 0] I0.

    Analisis Sintactico p.45/64

  • EjemploLlamamos a R([T F T, 0], 7):

    Paso 2: = F T , k = 3 y l = 7.Paso 3b: Se ha de encontrar un [T , r] I7 tal que [T F T, 0] Ir .

    Una opcin no vlida es [T F T, 0] porque [T F T.0] / I0.La opcin correcta es [T F, 6] ya que [T F T, 0] I6.

    Llamamos a R([T F, 6], 7).Paso 2: = F , k = 1 y l = 7.Paso 3b: Se ha de encontrar un [F , r] I7 tal que [T F, 6] Ir . Lanica opcin es [F a, 6] porque [T F, 6] I6.Al llamar a R([F a, 6], 7) termina la ejecucin de esta rama.Paso 3bcont: k = k 1. Termina.

    Analisis Sintactico p.46/64

  • EjemploSeguimos:

    Seguimos con R([T F T, 0], 7)Paso 3bcont: k = k 1, l = l 1.Paso 3a: k = k 1, k = 1, l = l 1, l = 5.Paso 3b: Se ha de encontrar un [F , r] I5 tal que [T F T, 0] Ir .La nica opcin es [F (E), 0] y [T F T, 0] I0.Llamamos a R([F (E), 0], 5).

    Paso 2: = (E), k = 3 y l = 5.Paso 3a: k = k 1, k = 2, l = l 1, l = 4.

    Analisis Sintactico p.47/64

  • EjemploPaso 3b: Se ha de encontrar un [E , r] I4 tal que [F (E), 0] Ir .Tenemos las opciones:

    [E T +E, 3] y [E T, 3], no vlidas.[E T + E, 1] vlida ya que [F (E), 0] I1.

    Llamamos a R([E T + E, 1], 4):Paso 2: = T + E, k = 3 y l = 4Paso 3b: Se debe encontrar un [E , r] I4 tal que [E T + E, 1] Ir .1. [E T + E, 1] no es vlida2. [E , 3] si ya que, [E T + E, 1] I3.Llamamos a R([E T, 3], 4)

    Se obtiene el rbol de derivacin derecho 64642156432.

    Analisis Sintactico p.48/64

  • rbol de derivacin obtenidoE

    T

    F * T

    F

    a

    )(

    E

    T

    a

    F

    +

    E

    T

    F

    a

    R([E T, 0], 7)

    R([T F T, 0], 7)

    R([T F, 6], 7)

    R([F a, 6], 7)

    R([E T + E, 1], 4)

    R([F a, 3], 4)

    R([T F, 3], 4)

    R([E T, 3], 4)

    R([F a, 1], 2)

    R([T F, 1], 2)

    R([F (E), 0], 5)

    Analisis Sintactico p.49/64

  • Transformaciones de gramticas

    1. Eliminacin de smbolos intiles2. Gramtica -libre3. Eliminacin de producciones unitarias4. Eliminacin de la recursividad por la izquierda5. Factorizacin6. Forma normal de Chomsky

    Analisis Sintactico p.50/64

  • Eliminacin smbolos intilesPasos para eliminar los smbolos no tiles de una gramtica

    1. Eliminacin de variables (A VN ) improductivas.2. Eliminacin de smbolos inaccesibles.

    Definicin 15 Una variable A VN es improductiva si no existe ningunaderivacin tal que A w con w V T .Definicin 16 Un smbolo X es inaccesible si no aparece en ningunaforma sentencial de la gramtica, es decir, , (VN

    VT )

    tal queS X.

    Teorema 1 Dada una g.l.c. G = (VN , VT , S, P ), con L(G) 6= , existe unag.l.c. equivalente G = (V N , VT , S, P ) tal que A V N se cumple queexiste una serie de derivaciones tal que A w, w V T , es decir, existeuna gramtica equivalente sin variables improductivas.

    Analisis Sintactico p.51/64

  • Eliminacin de variables improductivas

    El algoritmo para el clculo de G (V N y P ) es el siguiente:Algoritmo 5begin

    OLDV := NEWV := {A VN |A w P, w V T }

    while OLDV 6= NEWV dobegin

    OLDV := NEWVNEWV := OLDV

    {A VN |A , (VT

    OLDV )}

    endV N := NEWVP = {A P |A V N , (V

    N

    VT )

    }

    end

    Analisis Sintactico p.52/64

  • Eliminacin de smbolos inaccesiblesTeorema 2 Dada una g.l.c. G = (VN , VT , S, P ), con L(G) 6= , existe unag.l.c. equivalente G = (V N , VT , S, P ) sin smbolos inaccesibles.El algoritmo para el clculo de G (V N , V T y P ) es el siguiente:Algoritmo 6begin

    V N := {S}; VT := ; P

    := ;

    repeatfor A V N , A 1|2| |n, no procesada aun

    {anadir todas las variables de i a V Nanadir todos los terminales de i a V T }

    until V N no vareP = {A P |A V N (V

    N

    V T )

    }

    end

    Analisis Sintactico p.53/64

  • Eliminacin de smbolos intilesTeorema 3 Dada una gramtica libre de contexto G, conL(G)6= , existe una GLC G equivalente sin smbolos intiles.Los pasos a seguir seran (el orden es importante):

    Pasamos de G a G1 segn el algoritmo 5Pasamos de G1 a G segn el algoritmo 6

    G no contiene smbolo intiles, es decir, todo smboloX (VN VT ) es tal que S X w.

    Analisis Sintactico p.54/64

  • Grmatica -libreDefinicin 17 Decimos que una gramtica l.c.G = (VN , VT , S, P ) es -libre si cumple que en sus reglas deproduccin no aparece ninguna de la forma A , excepto alos sumo S , con la condicin de que S no aparezca en laparte derecha de ninguna otra regla de produccin.

    Teorema 4 Dada una g.l.c. G = (VN , VT , S, P ), existe unag.l.c. equivalente G = (V N , VT , S , P ) que es -libre.

    Analisis Sintactico p.55/64

  • Grmatica -libreAlgoritmo 7

    1. Obtenemos V = {A VN |A }: Conjunto de variables anulablesInicialmente V contiene A si A . Luego, si tenemos B x1x2 . . . xn y xi Vi, aadir B.

    2. Obtenemos P del siguiente modo:Por cada produccin A x1x2 . . . xk (k > 0) aadimos:A Y1Y2 . . . Yn, dnde cada Yi es:(a) Si xi no es anulable entonces Yi = xi(b) Si x V, entonces se toma Yi como xi y como (c) No aadir ninguna produccin A

    3. Si 6 L(G) entonces V N = VN y S = S.En otro caso,(a) si S no aparece en la parte derecha

    i. Aadir la produccin S ii. V N = VN y S = S

    (b) en otro casoi. V N = VN

    {S}, siendo S el nuevo smbolo inicial

    ii. Aadir a P S S|Analisis Sintactico p.56/64

  • Eliminacin de producciones unitariasDefinicin 18 Llamamos producciones unitarias a las que tienen laforma A B, con A, B VN .Teorema 5 Dada una g.l.c. G = (VN , VT , S, P ) existe una g.l.c.equivalente G = (VN , VT , S, P ) que no contiene producciones unitarias.El algoritmo para calcular G es el siguiente:Algoritmo 8 1. Suponemos que G es -libre; si no es as, se

    transforma segn el algoritmo 32. Para cada A VN se calcula VV (A) = {B VN |A + B}.3. P = Producciones no unitarias de P .

    4. Para cada A VN tal que VV (A) 6= .Para cada B VV (A)

    Para cada B P (no unitaria)Aadir A a P

    Analisis Sintactico p.57/64

  • Gramtica libre de ciclosDefinicin 19 Una gramtica libre de ciclos es aquella que no contienederivaciones de la forma A A.Definicin 20 Una gramtica es propia si no tiene smbolos intiles, es-libre y libre de ciclos.Para convertir una gramtica en otra equivalente propia, podemos seguirlos siguientes pasos:

    1. Pasar la gramtica a una equivalente -libre.2. Eliminar las producciones unitarias (no hay ciclos).3. Eliminar smbolos intiles.

    No debemos olvidar que una gramtica puede tener producciones uni-

    tarias y ser propia.

    Analisis Sintactico p.58/64

  • Recursividad en las gramticasDefinicin 21 Una gramtica G = (VN , VN , P, S) es recursiva por la izquierda (derecha) siexiste un A VN tal que existe una derivacin A

    += A (A += A) para alguna cadena

    .

    Definicin 22 Una gramtica G = (VN , VN , P, S) es recursiva si existe un A VN tal queexiste una derivacin A += A.Algoritmo 9 Eliminacin de la recursividad inmediata por la izquierda.Entrada: Un conjunto de producciones {pi/pi P} con el no terminal A VN como parteizquierda de una gramtica G CFG sin -producciones.Salida: Un nuevo conjunto de producciones sin recursividad inmediata por la izquierda.

    1. Ordnense las producciones de Ai en la formaA A1|A2| |Am|1|2| |n

    en donde ninguna i comienza con A.2. Sustituir todas las producciones de A por

    A 1A|2A| |nA

    A 1A|2A| |mA|

    3. La salida es el conjunto de nuevas producciones obtenidas en el paso anterior.

    Analisis Sintactico p.59/64

  • Recursividad en las gramticas (III)Algoritmo 10 Eliminacin de la recursividad por la izquierda.Entrada: La gramtica G propiaSalida: Una gramtica equivalente, sin recursividad por la izquierda.

    1. Ordnense los Ai VN en un orden A1, A2, . . . , An.2. for i:=1 to n do

    beginfor j:= 1 to i 1 do

    sustituir cada produccin de la forma Ai Ajpor las producciones Ai 1|2| |k, endonde Aj 1|2| |k es el conjunto deproducciones actuales del no terminal Aj ;

    Adems, eliminar la recursividad inmediata por laizquierda de las producciones de Ai.

    end

    Analisis Sintactico p.60/64

  • Forma normal de Chomsky

    Definicin 23 Sea una CFG G = (VN , VT , P, S). Se dice queG est en Forma Normal de Chomsky (CNF), si todaproduccin de P est en una de las formas siguientes:1. A BC, en donde A, B y C estn en VN ,2. A a, en donde A VN y a VT ,

    3. Si L(G) entonces S est en P y adems S noaparece en la parte derecha de ninguna produccin de P .

    Analisis Sintactico p.61/64

  • Forma normal de Chomsky (II)

    Algoritmo 11 Conversin a Forma Normal de Chomsky.Entrada: Una gramtica CFG propia, G = (VN , VT , P, S) sin producciones simples.Salida: Una gramtica G en forma CNF, tal que L(G) = L(G).Mtodo: Sea el conjunto P formado por las producciones siguientes:

    1. Aadir toda produccin en la forma A a P2. Aadir toda produccin en la forma A AB P3. Si S P entonces aadirla tambin.4. Para cada produccin en la forma A X1 Xk con k > 2, aadir las producciones resultantes a

    continuacin: asumimos que Xi representa a Xi si Xi VN , y X

    i es un nuevo no-terminal si Xi VT . Lasnuevas producciones sern las siguientes:

    A X1 < X2 Xk >

    < X2 Xk > X

    2 < X3 Xk >

    < Xk2 Xk > X

    k2 < Xk1Xk >

    < Xk1Xk > X

    k1X

    k

    en donde cada < Xi Xk > es un nuevo smbolo no-terminal.5. Para cada produccin de la forma A X1X2 en donde bien X1 o X2 los dos estn en VT , aadir

    A X1X

    2 a P

    6. Para cada a introducido en los pasos 4 y 5, aadir a a. Sea V N igual a VN ms todos los nuevosno-terminales introducidos en los pasos anteriores.

    La nueva gramtica G = (V N , VT , P, S) es la deseada.

    Analisis Sintactico p.62/64

  • Forma normal de Chomsky (III)

    Veamos la aplicacin del algoritmo con la gramtica CFG cuyo conjuntoP est formado por las siguientes producciones:

    S aAB|BA

    A BBB|a

    B AS|b

    En el nuevo conjunto P introducimos las producciones S BA, A a yB AS|b. La produccin S aAB generar el siguiente grupo denuevas producciones

    S a < AB >

    < AB > AB

    a a

    que irn a parar a P .

    Analisis Sintactico p.63/64

  • Forma normal de Chomsky (IV)

    Para la produccin A BBB, se generarn las siguientes nuevas produccionesA B < BB >

    < BB > BB

    que tambin se introducirn en P . La nueva gramtica, G = (V N , V T , P , S) quedar, conV N = {S, A, B, < BB >, < AB >, a

    }, y P contendr las siguientes producciones:S a < AB > |BA

    A B < BB > |a

    B AS|b

    < AB > AB

    < BB > BB

    a a

    Analisis Sintactico p.64/64

    ndice{small Gramticas libres de contexto (CFG)y Autmatas de pila (PA) }{small Gramticas libres de contexto (CFG)y Autmatas de pila (PA) }{small Gramticas libres de contexto (CFG)y Autmatas de pila (PA) (II)}{small Gramticas libres de contexto (CFG)y Autmatas de pila (PA) (III)}{small Gramticas libres de contexto (CFG)y Autmatas de pila (PA) (IV)}{small Anlisis Sintctico Ascendente y Descendente}{small Anlisis Sintctico Ascendente y Descendente}{small Anlisis Sintctico Ascendente y Descendente (II)}{small Anlisis Sintctico Ascendente y Descendente (III)}{small El problema de la ambig"uedad en el anlisis sintctico}{small El problema de la ambig"uedad en el anlisis sintctico (II)}{small El problema de la ambig"uedad en el anlisis sintctico (III)}{small El problema de la ambig"uedad en el anlisis sintctico (IV)}{small El problema de la ambig"uedad en el anlisis sintctico (V)}{small El problema de la ambig"uedad en el anlisis sintctico (VI)}{small El problema de la ambig"uedad en el anlisis sintctico (VII)}small Mtodos universales de anlisis sintcticoAlgoritmo Cocke-Younger-KasamiCYK-Funcionamiento bsico{small Mtodos Universales de anlisis sintctico. El algoritmo CYK}CYK-Observaciones{small Mtodos Universales de anlisis sintctico. El algoritmo CYK (II)}{small Mtodos Universales de anlisis sintctico. El algoritmo CYK (III)}{small Mtodos Universales de anlisis sintctico. El algoritmo CYK (IV)}small Mtodos Universales de anlisis sintctico. El algoritmo CYK (V)small Mtodos Universales de anlisis sintctico. El algoritmo CYK (VI){small Mtodos Universales de anlisis sintctico. El algoritmo CYK (VII)}{small Mtodos Universales de anlisis sintctico. El algoritmo CYK (VIII)}{small Obteniendo una secuencia de derivaciones a partir de $T$}small Obteniendo una secuencia de derivaciones a partir de $T$small Obteniendo una secuencia de derivaciones a partir de $T$ El algoritmo de EarlyEl algoritmo de Early (II)El algoritmo de Early (III)Interpretacin del algoritmoInterpretacin del algoritmo EjemploEjemploEjemploEjemploEjemploObtencin de una derivacin derechaEjemploEjemploEjemploEjemplorbol de derivacin obtenidoTransformaciones de gramticasEliminacin smbolos intiles{small Eliminacin de variables improductivas}Eliminacin de smbolos inaccesiblesEliminacin de smbolos intilesGrmatica $lambda $-libreGrmatica $lambda $-libreEliminacin de producciones unitariasGramtica libre de ciclosRecursividad en las gramticasRecursividad en las gramticas (III){small Forma normal de Chomsky}{small Forma normal de Chomsky (II)}{small Forma normal de Chomsky (III)}{small Forma normal de Chomsky (IV)}