Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Analizadores LL (Handout)
Analizadores LL (Handout)
Cristina T rn auc a
6, 7 y 13 de abril de 2011
Cristina T rn auc a
Cristina T rn auc a
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
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.
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)
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
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
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
E E T T F
Anulable no s no s no
FIRST (, id + (, id (, id
FOLLOW $, ) $, ) $, ), + $, ), + $, ), +,
Cristina T rn auc a
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
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 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
S F S (S + F ) F a
S F
Anulable no no
FIRST a, ( a
FOLLOW + +, )
S F
( 2 -
) -
a 1 3
+ -
$ -
Entrada: w = (a + a)
Cristina T rn auc a
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
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
Conictos (II)
Cristina T rn auc a