You are on page 1of 15

El Problema

Clculo del FIRST


FOLLOW

Las Gramticas LL
Gramticas con Parsing Eficiente

Universidad de Cantabria

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

Outline

El Problema

Clculo del FIRST

FOLLOW

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

El Problema

Hemos visto que es posible hallar un rbol de derivacin dada


una gramtica libre de contexto. Para ello,
Se transforma en una gramtica en forma normal de
Chomsky.
Se aplica el algoritmo CYK con la funcin gen().

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

El Problema

Este algoritmo es ineficiente, nos gustara que el algoritmo


fuera lineal en el tamao de la entrada. Nos decantaremos por
la estrategia descendente, es decir asumiremos que la palabra
esta en el lenguaje.

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

El Problema

Introduciremos varios conceptos que sern necesarios para


definir los autmatas con pila deterministas que aceptaran
estos lenguajes.

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

FIRST

Definicin
Sea G := (V , , Q0 , P) una gramtica libre de contexto. Para
cada forma sentencial (V ) y para cada k N
definiremos la funcin
FIRSTkG () := {x :

|x| = k
|x| < k

, `G
lm x }.
`G
lm x

Omitiremos el superndice G siempre que su presencia sea


innecesaria por el contexto.

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

FIRST

El operador FIRSTk asocia a cada forma sentencial los


primeros k smbolos de cualquier forma terminal alcanzable
desde mediante derivaciones ms a la izquierda.

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

FIRST

Investigaremos el caso de k = 1 y denotaremos


FIRST () := FIRST1 ().
La primera pregunta es responder como calcular el FIRST de
cada elemento.

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

FIRST

Definicin
Sean L1 , . . . , Ln (V ) lenguajes. Definiremos el lenguaje
L1 1 1 Ln (V ) mediante la siguiente igualdad: Sea
j {1, . . . , n} tal que Li para 1 i j 1 y 6 Lj .
Entonces,
L1 1 1 Ln :=

j
[

Li .

i=1

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

FIRST
Teorema
Con las anteriores notaciones, se tienen las siguientes
propiedades.
1

Si X = a y la gramtica no contiene smbolos intiles,


entonces FIRST (X ) = {a}.
Si := X1 Xn donde Xi (V ) , entonces
FIRST () = FIRST (X1 ) 1 1 FIRST (Xn ).

Si V son los smbolos no terminales que alcanzan la


palabra vaca, entonces FIRST (X ) si y solamente si
X V .

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

Notacin

Para simplificar la notacin, supongamos dada una aplicacin


F : (V ) P((V )) ,
escribiremos F1 para cada forma terminal queriendo
denotar
F1 := F (X1 ) 1 1 F (Xn ),
cuando = X1 Xn .

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

Algoritmo

Hallar V := {A V : A ` }.
Si A , entonces F (A) := {A}
en otro caso
G(A) := 

{A} si A 6 V
F (A) :=
{A, } si A V
mientras F (A) 6= G(A) para algn A V hacer
G(A) := F (A)
F (A) := {F1 : X 7 , X F (A)} {F (A)}
fin mientras

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

FOLLOW
Definition (FOLLOW)
Para cada forma sentencial (V ) definiremos la funcin
FOLLOWkG () del modo siguiente.
Si existe una forma sentencial (i.e. si Q0 `G ), con
(V ) , entonces FOLLOWkG ().
Adicionalmente, definamos
FOLLOWkG () := {x : Q0 ` , x FIRSTkG ()}.
De nuevo, omitiremos el superndice G cuando no genere
confusin.

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

FOLLOW

De nuevo nos ocuparemos solamente de


FOLLOW := FOLLOW1 . Obsrvese que FOLLOWk () y
que para cada x FOLLOWk (), |x| k .

Gramticas LL

El Problema
Clculo del FIRST
FOLLOW

Algoritmo

Hallar FIRST (X ), para cada X (V ).


G(X ) := , para cada X V
F (Q0 ) := {}
F (A) := , para cada A 6= Q0 .
mientras F (A) 6= G(A) para algn A V , hacer
G(A) = F (A) para cada A V
"
#
[

FIRST ( 0 ) \ {}
F (A) :=
B7A 0

F (B)

B7A 0 , FIRST ( 0 )

fin mientras

Gramticas LL

F (A)

You might also like