Sei sulla pagina 1di 21

Las Gramticas LL(k)

Extensin del Clculo de FIRST


Tablas de Anlisis Sintctico LL(1)

Las Gramticas LL
Gramticas con Parsing Eficiente

Universidad de Cantabria

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Outline

Las Gramticas LL(k)

Extensin del Clculo de FIRST

Tablas de Anlisis Sintctico LL(1)

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Formalizalizacin del Concepto LL

Definicin
Una gramtica libre de contexto G = (V , , Q0 , P) se dice de
clase LL(k ) si verifica la siguiente propiedad: Dadas dos
derivaciones, donde , A V , , , (V ) , del tipo
siguiente:
Q0 `lm A `lm ` x ,
Q0 `lm A `lm ` y ,
Si FIRSTk (x) = FIRSTk (y ), entonces = .

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Idea

La idea es que si hacemos dos derivaciones a izquierda desde


una variable de nuestra gramtica, y si llegamos a dos formas
terminales en las que los primeros k smbolos a partir de A de
una forma terminal coinciden, entonces es que hemos tenido
que hacer la misma derivacin desde A.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Observacin

Propiedades:
Son gramticas no ambiguas.
Existe una tabla que permite generar rboles sintcticos
para cualquier palabra con un nmero de operaciones
proporcional a la longitud.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Ejemplos

Ejemplo
Un ejemplo de gramtica LL(1) es la dada mediante:
Q0 7 aAQ0 | b, A 7 a | bQ0 A

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Ejemplos

Ejemplo
La gramtica {Q0 7 | abA, A 7 Q0 aa | b} es una gramtica
LL(2)

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Ejemplos

Hay gramticas que no son LL(k ) para ningn k .


{Q0 7 Acd | Ac, A 7 aA|b}.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Teorema

Teorema
Una gramtica G = (V , , Q0 , P) es LL(k ) si y solamente si se
verifica la siguiente propiedad:
Dadas dos producciones A 7 y A 7 tales que A es
accesible y se tiene Q0 `lm A, con y (V ) ,
entonces
FIRSTk () FIRSTk () = .

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Idea

Como nos dicta la intuicin, en las gramticas LL(k ) tendremos


que calcular FIRSTk (), donde es una forma no terminal.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Propiedades

Definicin
Sea L1 , L2 , dos lenguajes definimos:
(
(
|xy | k y = xy , o
L1 k L2 = : x 1 , y 2
w = FIRSTk (xy ).

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Resultado

Teorema
Dada una gramtica libre de contexto G y una forma sentencial
se tiene que
FIRSTk () = FIRSTk () k FIRSTk ().

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Algoritmo

Definir Fi (a) = a para todo smbolo del alfabeto y para todo


0 i k.
Definir F0 (A) = {x k : A 7 x} para todo smbolo del
alfabeto y para todo 0 i k .
Para 1 i k y mientras Fi1 (A) 6= Fi (A) para alguna
variable A hacer
Para cada variable A hacer
Fi (A) = {x k : A 7 Y1 . . . Yn y
x Fi1 (Y1 ) k k Fi1 (Yn )}.
fin hacer
fin hacer
Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Antes de Comenzar..

Suponemos enumeradas nuestras producciones, asignndole


un nmero natural a cada una de ellas.
Adems, introduciremos un nuevo smbolo que har las
funciones de fondo de la pila.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Objetivo

Construiremos una tabla


M : (V {}) ( {}) P(P),
donde P(P) es el conjunto de todos los subconjuntos del
conjunto de las producciones.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Algoritmo

La tabla ser construida a partir de la gramtica dada y cuyas


filas estn indicadas por los elementos de V {} y cuyas
columnas estn indicadas por los elementos de {}.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Algoritmo

Dada una produccin (i) A 7


Para cada a FIRST (), a 6= , aadir i a la casilla
M(A, a).
Si FIRST () aadir i en todas las casillas M(A, b) para
cada b FOLLOW (A).

M(a, a) =pop para cada a .


M(, ) =accept.
En todos los dems casos escribir M(X , i) =error.

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Resultado

Teorema
Dada una gramtica libre de contexto G, y dada T (G) la tabla
construida por el algoritmo anterior, entonces G es LL(1) si y
solamente si todos las casillas de la tabla T (G) contienen
exactamente una produccin o una de las palabras
seleccionadas (pop, accept, error).

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Ejemplo
Como ejemplo, consideremos la gramtica G = (V , , Q0 , P),
donde las producciones son:
P := {Q0 7 aAQ0 | b, A 7 a | bQ0 A}.
Enumeramos estas producciones del modo siguiente:
(1) Q0 7 aAQ0
(2)
Q0 7 b
(3)
A 7 a
(4) A
7 bQ0 A

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Ejemplo

Q0
A
a
b

a
1
3
pop
error
error

b
2
4
error
pop
error

error
error
error
error
accept

Gramticas LL

Las Gramticas LL(k)


Extensin del Clculo de FIRST
Tablas de Anlisis Sintctico LL(1)

Observaciones Finales

Las gramticas LL(1) son la forma ms natural de realizar


el parsing. Algunos lenguajes de programacin estn
definidos por una gramtica LL(1).
Encontrar una gramtica que sea LL(1) es un problema
difcil, pero hay producciones que no pueden estar en
gramticas LL(1).
Es factible testar si una gramtica es LL(1).
Todavia queda por ver como recuperar el rbol de
derivacin.

Gramticas LL

Potrebbero piacerti anche