Está en la página 1de 15

El an alisis descendente LL(1)

Cristina T rn auc a

6, 7 y 13 de abril de 2011

Cristina T rn auc a

El an alisis descendente LL(1)

Analizadores sint acticos (repaso)


Los analizadores descendentes: Corresponden a un aut omata de pila determinista. Construyen un arbol sint actico de la ra z hacia las hojas (del s mbolo inicial de la gram atica hacia los s mbolos terminales). Por ejemplo: el analizador LL o predictivo lee los datos de izquierda a derecha (Left to right) y construye la derivaci on izquierda (Leftmost). Emplea una pila para mantener un resumen de lo que espera ver a continuaci on hasta el nal de los datos. La recursividad izquierda les puede causar problemas. Los analizadores ascendentes (shift-reduce): Tambi en corresponden a un aut omata de pila determinista. Pero siguen la estrategia inversa: construyen un arbol sint actico de las hojas hacia la ra z (de los terminales hacia el s mbolo inicial de la gram atica). Por ejemplo: los analizadores LR leen los datos de izquierda a derecha (Left to right) y construyen la derivaci on derecha (Rightmost). (al rev es) Emplean una pila para mantener un resumen de lo que llevan visto hasta el momento. Son m as ecientes con recursividad izquierda.

Cristina T rn auc a

El an alisis descendente LL(1)

Herramientas conceptuales auxiliares

Tres nociones importantes Sobre palabras formadas por s mbolos de la gram atica, tanto terminales como no terminales. Anulabilidad de una palabra, FIRST de una palabra (terminales por los que puede empezar una parte de la entrada que derive de esa palabra), FOLLOW de una palabra (terminales que pueden aparecer en una entrada v alida justo a continuaci on de una parte de la entrada que derive de esa palabra).

Cristina T rn auc a

El an alisis descendente LL(1)

Anulabilidad
Es decir, capacidad para desaparecer

Una palabra es anulable si puede derivar en la palabra vac a. Palabras que contienen alg un s mbolo terminal:
Nunca pueden derivar en la palabra vac a, porque un s mbolo terminal que participa en una derivaci on ya no puede desaparecer de ella.

Palabras que s olo contienen s mbolos no terminales:


es anulable; si y son anulables, son anulables; si la gram atica contiene una regla X y es anulable, X es anulable.

Lo calculamos de manera iterativa, alternativamente para s mbolos no terminales y para partes derechas de las reglas: nada es anulable hasta que se demuestra lo contrario.
Cristina T rn auc a El an alisis descendente LL(1)

Por qu e nos interesa la anulabilidad?

Ejemplo S SS | aSb | bSa | Entrada: w = aabb S S S S S S SS SS SSS SS aSbS SS bSaS SS bSaS SS S S S S S S S S aSb aSb aSSb aSb aaSbb aSb abSab aSb abSab aSb ab aSb ab

S bSa S bSa

S S

Cristina T rn auc a

El an alisis descendente LL(1)

FIRST
FIRST() = {a | puede derivar en a }, donde a es un s mbolo terminal y y son palabras formadas por s mbolos terminales o no terminales. FIRST(): conjuntos lo m as peque nos posible tales que FIRST(a) = {a} para cada s mbolo terminal a; si = X y X no es anulable, FIRST() = FIRST(X ); si = X y X es anulable, FIRST() = FIRST(X ) FIRST( ); si la gram atica contiene una regla X , FIRST(X ) incluye FIRST(). C alculo iterativo: inicialmente no sabemos de ning un terminal y empezamos por ; y alternamos entre s mbolos no terminales y partes derechas de reglas.

Cristina T rn auc a

El an alisis descendente LL(1)

FOLLOW
FOLLOW(X ) = {a | S puede derivar en Xa }, donde X es un s mbolo no terminal, a es un s mbolo terminal, y son palabras formadas por s mbolos terminales o no terminales, y S es el s mbolo inicial de la gram atica. FOLLOW(X ): conjuntos lo m as peque nos posible tales que FOLLOW(S ) incluye el n de datos (representado aqu $); si la gram atica contiene una regla X Y1 . . . Yk y Yi +1 . . . Yj 1 es anulable, con 1 i < j k , FOLLOW(Yi ) incluye FIRST(Yj ) (prestemos atenci on al caso i + 1 = j ). si la gram atica contiene una regla X Y1 . . . Yk y Yi +1 . . . Yk es anulable, con 1 i k , FOLLOW(Yi ) incluye FOLLOW(X ) (prestemos atenci on al caso i = k ).

Cristina T rn auc a

El an alisis descendente LL(1)

Un ejemplo (Anulabilidad, FIRST y FOLLOW)


Consideremos G = ({E , E , T , T , F }, {+, , (, ), id }, E , P ), donde P consiste en las reglas siguientes: E TE E +TE | T FT T FT | F (E ) | id

E E T T F

Anulable no s no s no

FIRST (, id + (, id (, id

FOLLOW $, ) $, ) $, ), + $, ), + $, ), +,

Cristina T rn auc a

El an alisis descendente LL(1)

Gram aticas y lenguajes LL(1)

Denition Una gram atica libre de contexto G = (V , , S , P ) es LL(1) si


S lm wX w lm wu , S lm wX w lm wv ,

FIRST (u ) = FIRST (v ) implican = , donde u , v , w y X V . Se dice sobre un lenguaje que es LL(1) si se puede generar con una gram atica LL(1).

Cristina T rn auc a

El an alisis descendente LL(1)

Ejemplos
Gram aticas LL(1) G = ({S }, {(, )}, S , P = {S (S )|}) En esta gram atica es obvio que la primera producci on se usa cuando aparece un par entesis abierto y la segunda cuando aparece el primer par entesis cerrado. G = ({S }, {a, b }, S , P = {S aAb |b , A aSAa|b }) Una gram atica LL(2) que no es LL(1) G = ({S }, {a, b }, S , P = {S abSba|aa}) Ejemplo de lenguaje que no es LL(k ) para ning un k L = {an cb n | n 1} {an db 2n | n 1}

Cristina T rn auc a

El an alisis descendente LL(1)

El analizador LL descendente
El analizador LL est a utilizando: un buer para la entrada una pila, con s mbolos terminales y no terminales una tabla de an alisis En cada paso, el analizador lee un s mbolo del buer y el s mbolo que est a en la cima de la pila. si coinciden, el analizador los elimina del buer y de la pila si en la cima de la pila hay un s mbolo terminal distinto, devuelve ERROR (la palabra no est a aceptada) si en la cima de la pila hay un s mbolo no terminal X , el analizador mira la tabla para ver que regla se debe aplicar, y substituye X por la parte derecha de esa regla. Al principio la pila contiene el s mbolo inicial S y el s mbolo especial $ (el fondo de la pila).
Cristina T rn auc a El an alisis descendente LL(1)

Ejemplo

G = ({S , F }, {a, (, )}, S , P ) con P dado por las reglas siguientes:


1 2 3

S F S (S + F ) F a

Cuadro: FIRST y FOLLOW

Cuadro: Tabla de an alisis

S F

Anulable no no

FIRST a, ( a

FOLLOW + +, )

S F

( 2 -

) -

a 1 3

+ -

$ -

Entrada: w = (a + a)

Cristina T rn auc a

El an alisis descendente LL(1)

Tabla de an alisis

Para cada s mbolo no terminal X y cada s mbolo terminal a, a nadimos la regla X si: a FIRST(), o es anulable y a FOLLOW(X ) Si la tabla contiene a lo sumo una regla para cada una de sus celdas, entonces el analizador siempre sabe que regla se debe utilizar en cada momento.

Cristina T rn auc a

El an alisis descendente LL(1)

Conictos

FIRST/FIRST conict (dos alternativas empiezan igual) A XB A X | XYZ B YZ | FIRST/FOLLOW conict (el FIRST y el FOLLOW de un s mbolo no terminal anulable tienen algo en com un) S Aab S aab | ab Aa| Recursividad izquierda E TZ E E +T |T Z +TZ |

Cristina T rn auc a

El an alisis descendente LL(1)

Conictos (II)

Cristina T rn auc a

El an alisis descendente LL(1)

También podría gustarte