4-5_LL(K)
-
Upload
nilas-arcanister -
Category
Documents
-
view
223 -
download
0
description
Transcript of 4-5_LL(K)
-
El ProblemaClculo del FIRST
FOLLOW
Las Gramticas LLGramticas con Parsing Eficiente
Universidad de Cantabria
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
Outline
1 El Problema
2 Clculo del FIRST
3 FOLLOW
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
El Problema
Hemos visto que es posible hallar un rbol de derivacin dadauna gramtica libre de contexto. Para ello,
Se transforma en una gramtica en forma normal deChomsky.Se aplica el algoritmo CYK con la funcin gen().
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
El Problema
Este algoritmo es ineficiente, nos gustara que el algoritmofuera lineal en el tamao de la entrada. Nos decantaremos porla estrategia descendente, es decir asumiremos que la palabraesta en el lenguaje.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
El Problema
Introduciremos varios conceptos que sern necesarios paradefinir los autmatas con pila deterministas que aceptaranestos lenguajes.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
FIRST
DefinicinSea G := (V ,,Q0,P) una gramtica libre de contexto. Paracada forma sentencial (V ) y para cada k Ndefiniremos la funcin
FIRST Gk () := {x :|x | = k , `Glm x|x | < k `Glm x
}.
Omitiremos el superndice G siempre que su presencia seainnecesaria por el contexto.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
FIRST
El operador FIRSTk asocia a cada forma sentencial losprimeros k smbolos de cualquier forma terminal alcanzabledesde mediante derivaciones ms a la izquierda.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
FIRST
Investigaremos el caso de k = 1 y denotaremosFIRST () := FIRST1().La primera pregunta es responder como calcular el FIRST decada elemento.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
FIRST
DefinicinSean L1, . . . ,Ln (V ) lenguajes. Definiremos el lenguajeL1 1 1 Ln (V ) mediante la siguiente igualdad: Seaj {1, . . . ,n} tal que Li para 1 i j 1 y 6 Lj .Entonces,
L1 1 1 Ln :=j
i=1
Li .
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
FIRST
TeoremaCon las anteriores notaciones, se tienen las siguientespropiedades.
1 Si X = a y la gramtica no contiene smbolos intiles,entonces FIRST (X ) = {a}.
2 Si := X1 Xn donde Xi (V ), entonces
FIRST () = FIRST (X1)1 1 FIRST (Xn).3 Si V son los smbolos no terminales que alcanzan la
palabra vaca, entonces FIRST (X ) si y solamente siX V.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
Notacin
Para simplificar la notacin, supongamos dada una aplicacin
F : (V ) P((V )),
escribiremos F1 para cada forma terminal queriendodenotar
F1 := F (X1)1 1 F (Xn),cuando = X1 Xn.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
Algoritmo
Hallar V := {A V : A ` }.Si A , entonces F (A) := {A}
en otro casoG(A) := F (A) :=
{ {A} si A 6 V{A, } si A V
mientras F (A) 6= G(A) para algn A V hacerG(A) := F (A)F (A) := {F1 : X 7 , X F (A)} {F (A)}
fin mientras
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
FOLLOW
Definition (FOLLOW)
Para cada forma sentencial (V ) definiremos la funcinFOLLOW Gk () del modo siguiente.
Si existe una forma sentencial (i.e. si Q0 `G ), con (V ), entonces FOLLOW Gk ().Adicionalmente, definamos
FOLLOW Gk () := {x : Q0 ` , x FIRST Gk ()}.
De nuevo, omitiremos el superndice G cuando no genereconfusin.
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
FOLLOW
De nuevo nos ocuparemos solamente deFOLLOW := FOLLOW1. Obsrvese que FOLLOWk () yque para cada x FOLLOWk (), |x | k .
Gramticas LL
-
El ProblemaClculo del FIRST
FOLLOW
Algoritmo
Hallar FIRST (X ), para cada X (V ).G(X ) := , para cada X VF (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
F (A) :=
[ B 7A
(FIRST () \ {})]
B 7A, FIRST ()
F (B)
F (A)fin mientras Gramticas LL
El ProblemaClculo del FIRSTFOLLOW