-
Anlisis SintcticoTema 3
Juan A. Bota [email protected]
http://ants.dif.um.es/staff/juanbot/traductores/traductores.html
Departamento de Ingeniera de la Informacion y las
ComunicacionesUniversidad de Murcia
Analisis Sintactico p.1/64
-
ndiceIntroduccin al Anlisis Sintctico.1. Objetivo del analizador
sintctico2. Gramticas libres de contexto y autmatas con pila3.
Anlisis sintctico ascendente y descendente4. El problema de la
ambigedad en el anlisis sintctico5. Mtodos Universales de anlisis
sintctico
(a) El mtodo de Cocke-Younger-Kasami(b) El mtodo de Early
6. Transformaciones de gramticas
Analisis Sintactico p.2/64
-
Gramticas libres de contexto (CFG) y Autmatas de pila (PA)
Definicin 1 Una gramtica libre de contexto G = (VN , Vt, S, P )
es aquella cuyasproducciones tienen la forma A , siendo A VN y
(VN
VT )
.
Definicin 2 Un autmata de pila se define como una 7-tupla AP =
(Q, V, , , q0, z0, F )en donde:
Q es un conjunto finito de estados.V es el alfabeto de entrada.
es el alfabeto de la pila.q0 es el estado inicial.z0 es el smbolo
inicial de la pila.F Q es el conjunto de estados finales. es la
funcin de transicin:
: Q (V {}) 2Q
Analisis Sintactico p.3/64
-
Gramticas libres de contexto (CFG) y Autmatas de pila (PA)
Definicin 3 Se entiende por configuracin de un atommata con pila
a su situacin en uninstante considerado expresada formalmente por
medio de una tripla(q, w, ) (Q V ) en donde:
q Q es el estado actual del autmata.w V es la subcadena de
entrada que aun no se ha analizado. es el contenido actual de la
pila.
Si w = no queda nada por analizar. Si = se ha reconocido la
cadena.
Analisis Sintactico p.4/64
-
Gramticas libres de contexto (CFG) y Autmatas de pila (PA)
(II)
Definicin 4 Un movimiento de un AP es una transicin entre
configuraciones. Unatransicin no tiene porqu realizarse en un solo
movimiento.Por ej. el movimiento (q, aw, Z) ` (q, w, ) es un
movimiento vlido siempre y cuando(q, ) (q, a, Z) con q Q, a (V ), w
V , , .
Se debe sealar que un AP no puede realizar ningn movimiento si
la pila est vaca.Entonces, un autmata de pila reconocer una cadena
de entrada sii partiendo de suconfiguracin inicial, (q0, t, Z0),
llega a una configuracin final (qf , , ) empleandomovimientos
vlidos y lo expresamos:
(q0, t, Z0) ` (qf , , ), qf F,
La cadena ser aceptada por vaciado de pila si despues de leerse
toda la cadena se llega aun estado con la pila vaca,
independientemente del tipo de estado en el que se encuentreel
AP.
Analisis Sintactico p.5/64
-
Gramticas libres de contexto (CFG) y Autmatas de pila (PA)
(III)
Ejemplo. Sea G = (VN , VT , P, S) con PS S + A
S A
A A B
A B
B (S)
B a
Sea AP = (Q, V, , , q, s, ) en donde Q = {q}, V = {a, +, , (, )}
y :
(q, , S) = {(q, S + A), (q, A)}
(q, , A) = {(q, A B), (q, B)}
(q, , B) = {(q, (S)), (q, a)}
(q, op, op) = {(q, )}
siendo op V . Intentaremos reconocer la cadena w = a + a a.
Analisis Sintactico p.6/64
-
Gramticas libres de contexto (CFG) y Autmatas de pila (PA)
(IV)
Ejemplo (y II) El rbol de alternativas posibles es
...
...
...
...
...
...(q,a+a*a,S+A)
(q,a+a*a,a+A)
(q,+a*a,+A)
(q,a*a,A)
(q,a*a,A*B)
(q,a*a,B*B)
(q,a*a,a*B)
(q,*a,*B)
(q,a,B)
(q,a,a)
(q,a*a,(S)*B)
(q,a*a,B)
(q,a+a*a,S+A+A)
(q,a+a*a,A)
(q,a+a*a,S)
(q,a+a*a,(S)+A)
(q,a+a*a,A*B+A)
(q,\,\)
(q,a+a*a,B+A)
(q,a+a*a,A+A)
Analisis Sintactico p.7/64
-
Anlisis Sintctico Ascendente y Descendente
Definicin 5 Una sentencia w L(G), para alguna CFG (Context Free
Grammar) ha sidoreconocida cuando conocemos alguno de (o quiz
todos) sus rboles de derivacin.
Definicin 6 Sea una gramtica G = (VN , VT , P, S). Se dice que
la cadena derivadirectamente a la cadena , denotndolo , si se puede
escribir
= A y =
para alguna cadena y (VT VN ), y adems existe A P .
Definicin 7 Sea una gramtica G = (VN , VT , P, S). Para
cualquier A VN y (VN VT )
se dice que A = si se deriva de A, con una cadena de
derivacionesde longitud cualqiera, incluso nula.
Analisis Sintactico p.8/64
-
Anlisis Sintctico Ascendente y Descendente
Definicin 8 Sea una gramtica G = (VN , VT , P, S). Las formas
sentenciales de G vienendadas por el conjunto
D(G) = { / S
= y (VN VT )}
Definicin 9 El lenguaje definido por una gramtica G, denotado
L(G) es el conjunto decadenas de smbolos terminales, que se pueden
derivar partiendo del axioma de lagramtica, y empleando para las
derivaciones las reglas de P . E.d.:
L(G) = {x/S
= x, y x T }
Definicin 10 Sea una gramtica G = (VN , VT , P, S). Sea una
forma sentencial endonde V T , VN y (VT VN ). Una derivacin
izquierda se obtienesustituyendo por alguna de las partes derechas
que la definen.Definicin 11 Sea una gramtica G = (VN , VT , P, S).
Sea una forma sentencial endonde (VT VN ), VN y V T . Una derivacin
derecha se obtiene sustituyendo por alguna de las partes derechas
que la definen.
Analisis Sintactico p.9/64
-
Anlisis Sintctico Ascendente y Descendente (II)
Un ejemplo de este tipo de derivaciones, para la gramtica
A BF
B EC
E a
C b
F c
puede verse
en el rbol
D Derivacin derechaI Derivacin izquierda
A
BF
ECF Bc
aCF EbF ECc ECc
abF aCc abF Ebc aCc Ebc aCc Ebc
abc abc abc abc abc abc abc abc
I D
I
I
I
D
D
D
Analisis Sintactico p.10/64
-
Anlisis Sintctico Ascendente y Descendente (III)
Existen dos grandes grupos de mtodos de anlisis sintctico,
dependiendo de la direccinen la que se recorre el rbol
sintctico.
Descendente: en este tipo de anlisis, se va recorriendo el rbol
sintctico desde la razhasta las hojas, llegando a generar la
sentencia que se est analizando. La razrepresenta al smbolo inicial
de la gramtica.Ascendente: se parte de las hojas y se intenta
construir el rbol hacia arriba, hastallegar al smbolo inicial de la
gramtica.
En un anlisis top-down un parser hacer corresponder cadenas de
entrada con suscorrespondientes derivaciones izquierdas.En un
anlisis bottom-up un parser hace corresponder cadenas de entrada
con las inversasde las correspondientes derivaciones derechas.Entre
los mtodos generales, los algoritmos de Cocke-Younger-Kasami (CYK)
y el mtodo deEarly son los ms conocidos son bastante ineficientes
desde un punto de vistacomputacional.Para la mayora de lenguajes de
programacin es suficiente con trabajar con subconjuntosde las CFG,
como los de las LL y LR que permiten algoritmos de parsing ms
eficientes.
Analisis Sintactico p.11/64
-
El problema de la ambigedad en el anlisis sintctico
Definicin 12 Un rbol ordenado y etiquetado D es un rbol de
derivacin para unagramtica libre de contexto G(S) = (VN , VT , P,
S) si:
1. La raz de D est etiquetada con S.2. Si D1, . . . , Dk son los
subrboles de los descendientes directos de la raz, y la raz de
cada Di est etiquetada con Xi, entonces S X1 Xk P . Adems Di
debe serun rbol de derivacin en G(Xi) = (VN , VT , P, Xi) si Xi VN
, bien un nodo hojacon etiqueta Xi si Xi VT .
3. Alternativamente, si D1 es el nico subrbol de la raz de D, y
la raz de D1 tienecomo etiqueta e, entonces S e P .
Definicin 13 La frontera de un rbol de derivacin es la cadena
que se obtieneconcatenando, de izquierda a derecha, las etiquetas
de las hojas.Definicin 14 Sea una CFG G = (VN , VT , P, S). Decimos
que G es ambigua si existe almenos una sentencia w L(G) para la
cual hay un rbol de derivacin distinto, con fronteraw.
Analisis Sintactico p.12/64
-
El problema de la ambigedad en el anlisis sintctico (II)
El hecho de que una gramtica sea ambigua es una situacin
indeseable ya que cada rbolde derivacin representa una ejecucin
distinta de la misma sentencia, y por lo tanto cadauno podra
producir resultados distintos.
Ejemplo: sea la gramtica G = (VN , VT , P, S) con P = {E E + E,
E E E, E a}Caben dos interpretaciones para a + a a:
E E
E
a E * E
a a
E + E * E
E E+
a a
a
Analisis Sintactico p.13/64
-
El problema de la ambigedad en el anlisis sintctico (III)
Otro ejemplo clsico de este tipo de problemas es el de las
gramticas que incluyensentencias del tipo if-then/if-then-else.Sea
la gramtica
prop if expr then prop| if expr then prop else prop| otra
De acuerdo con ella, la sentenciaif E1 then S1 else if E2 then
S2 else S3
no es ambigua, ya que el rbol de derivacin correspondiente
sera
if expr then prop else prop
prop
if expr then prop else prop
E1 S1
E2 S2 S3
Analisis Sintactico p.14/64
-
El problema de la ambigedad en el anlisis sintctico (IV)
sin embargo, la sentenciaif E1 then if E1 then S1 else S2
si lo sera, ya que dara lugar a la siguiente pareja de rboles
dederivacin distintos.
if expr then prop else prop
prop
if expr then prop
E2 S2
E1 S1
if expr then prop
prop
if expr then prop else prop
E1
E2 S1 S2
Analisis Sintactico p.15/64
-
El problema de la ambigedad en el anlisis sintctico (V)
Hay dos enfoques distintos usados para solucionar
esteproblema.1. Transformar la definicin del lenguaje para que
las
construcciones if-then-else tengan delimitadores debloque, y los
else se asocien con los if explcitamente.
2. Transformar la gramtica en otra equivalente y que nosea
ambigua.
Analisis Sintactico p.16/64
-
El problema de la ambigedad en el anlisis sintctico (VI)
Ejemplo con el mtodo 1:
prop if expr then prop endif| if expr then prop else prop endif|
otra
entonces, para escribir una sentencia como la del ejemplo, y en
la que se asocie el else alsegundo if quedara
if E1 then if E1 then S1 else S2 endif endif
Una sentencia que ahora asociara el else con el primer if
sera
if E1 then if E1 then S1 endif else S2 endif
Analisis Sintactico p.17/64
-
El problema de la ambigedad en el anlisis sintctico (VII)
Ejemplo con el mtodo 2:
Se debe elegir entre los dos rboles de la transparencia
10.Elegir el rbol de la izquierda implica emparejar el else con el
then anterior y sin emparejarms cercano.Elegir el rbol de la
derecha implica emparejar el else con el then ms lejano y que aun
estsin emparejar.
Eligiendo el rbol de la izquierda, se dividen las proposiciones
entre emparejadas y noemparejadas.
Toda proposicin que aparezca entre un then y un else debe estar
emparejada, e.d. no debeterminar con un then sin emparejar porque
entonces el else estara obligado a concordar conella.Una proposicin
emparejada es una proposicin if-then-else que no contenga
proposicionessin emparejar o cualquier otra clase de proposicin no
condicional.
prop prop_emparejada| prop_no_emparejada
prop_emparejada if expr then prop_emparejada else
prop_emparejada| otra
prop_no_emparejada if expr then prop| if expr then
prop_emparejada else prop_no_emparejada
Analisis Sintactico p.18/64
-
Mtodos universales de anlisis sintctico
Aplicables a cualquier GLCMtodos tabularesComplejidad espacial
O(n2) y temporal O(n3)No aplicables para lenguajes de
programacinconvencionalesAplicables si interesan todos los rboles
de derivacinposibles (G. ambiguas)
Analisis Sintactico p.19/64
-
Algoritmo Cocke-Younger-Kasami
Basado en programacin dinmicaPoca aplicabilidad
Complejidad espacial proporcional a n2 (n longitud
dew)Complejidad temporal proporcional a n3Algoritmo de Early
consigue complejidades linealespara muchas gramticas LC
Necesita gramticas en CNF y libres
Analisis Sintactico p.20/64
-
CYK-Funcionamiento bsicoSea w = a1a2 . . . an con ai VTi = 1, .
. . , nEl algoritmo construye una tabla T triangular, con
elementos
tij VN , 1 i n y 1 j n i + 1,
i
j
t11
t32
t12 t13 t14
t23t21 t22
t31
t41
en donde A tij sii A + aiai+1 ai+j1Entonces w L(G) si S t1n
Analisis Sintactico p.21/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
Algoritmo 1 Algoritmo de anlisis sintctico de
Cocke-Younger-Kasami.Entrada: Una gramtica G = (VN , VT , P, S) en
CNF y sin -producciones, junto con unacadena de entrada w = a1a2 an
V T .
Salida: La tabla T en la que cada ti,j contiene a A VN sii A +=
aiai+1 ai+j1.Mtodo:
1. Hacer ti,1 = {A|A ai P} para todo i.2. Supongamos que ti,j se
ha calculado para todo i, 1 i n, y para todo j ,
1 j < j. Hgase
ti,j = {A| para algun k , 1 k < j, A BC P, B ti,k, y C
ti+k,jk}
Dado que i k < j, tanto k como j k son menores que j. Por lo
tanto, ti,k yti+k,jk han sido calculados antes de ti,j . Despus de
este paso, si ti,j contiene aA, entonces
A BC+
= ai ai+k1C+
= ai ai+k1ai+k ai+j1
3. Realizar el paso anterior, hasta que ti,j haya quedado
calculado para todo 1 i ny 1 j n i + 1.
Analisis Sintactico p.22/64
-
CYK-ObservacionesSe trata de encontrar A,B,C tales que
a1a2 . . .
C A
ai . . .
B . . . ai+j1 . . . an
hasta que al final tengamosS
D a1a2 . . .
E . . . an
y por lo tanto podamos asegurar queS DE + a1a2 . . . E
+ a1a2 . . . an
Analisis Sintactico p.23/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(II)
Vemos la aplicacin del algoritmo con un ejemplo en el que el
conjunto P de nuestragramtica viene dado por el conjunto de
producciones
S AA|AS|b
A SA|AS|a
Sea w = abaab la cadena de entrada. Aplicando el algoritmo, la
tabla resultante ser unatriangular de 5 5. Aplicando el paso 1,
tenemos
t11 = {A}, ya que A a P .t21 = {S}, ya que S b P .t31 = {A}, ya
que A a P .t41 = {A}, ya que S a P .t51 = {S}, ya que A b P .
Analisis Sintactico p.24/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(III)
Ahora, hacemos j = 2. Tenemos que ti,j se ha calculado para j =
1. Tenemos queencontrar no-terminales que produzcan subcadenas de w
de longitud 2.
t1,2 = {S, A}, ya que 1 k < 2, y la regla ha de ser tal que
el primer no-terminal dela parte derecha est en t1,1 y el segundo
no-terminal en t2,1. Por lo tanto la partederecha ha de ser AS.
Tanto S como A tienen reglas con esa parte derecha.t22 = {A}, ya
que 1 k < 2, y la regla ha de ser tal que el primer no-terminal
de laparte derecha est en t2,1 y el segundo no-terminal en t3,1. La
parte derecha seraSA. nicamente A tiene partes derechas de ese
tipo.t3,2 = {S}, ya que 1 k < 2, y la regla ha de ser tal que el
primer no-terminal de laparte derecha est en t3,1, y el segundo en
t4,1. Por lo tanto, la parte derecha seraAA. Slamente S tiene
reglas de produccin con esa parte derecha.t4,2 = {A, S}, ya que 1 k
< 2, y la regla ha de ser tal que el primer no-terminal dela
parte derecha est en t4,1, y el segundo en t5,1. Por lo tanto, la
parte derecha seraAS.
Analisis Sintactico p.25/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(IV)
Despus de hacer el paso 2, con j = 2 la tabla T queda as:
1 2 3 4 51 {A} {S,A}2 {S} {A}3 {A} {S}4 {A} {A,S}5 {S}
Analisis Sintactico p.26/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(V)
Ahora, hacemos j = 3. Tenemos que ti,j se ha calculado para 1 j
< 3. Tenemos queencontrar no-terminales que produzcan subcadenas
de w, de longitud 3.
t1,3 = {A, S}, ya que 1 k < 3, y la regla ha de ser tal que
el primer no-terminal dela parte derecha est en t1,1 (o en t1,2) y
el segundo no-terminal en t2,2 (o en t3,1).Por lo tanto la parte
derecha ha de ser AA (o SA).t2,3 = {S}, ya que 1 k < 3, y la
regla ha de ser tal que el primer no-terminal de laparte derecha
est en t2,1 (o en t2,2) y el segundo no-terminal en t3,2 (o en
t4,1). Laparte derecha sera SS (o AA). nicamente S tiene una
produccin S AA.t3,3 = {A, S}, ya que 1 k < 3, y la regla ha de
ser tal que el primer no-terminal dela parte derecha est en t3,1 (o
en t3,2), y el segundo en t4,2 (o en t5,1). Con t3,1 yt4,2 tenemos
dos posibles partes derechas que son AA y AS, y por ello tanto S
comoA deben estar en t3,3. Con t3,2 y t5,1 tenemos como parte
derecha SS, que no esgenerada por ningun no-terminal.
Analisis Sintactico p.27/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(VI)
Despus de hacer el paso 2, con j = 3 la tabla T queda as:
1 2 3 4 51 {A} {S,A} {A,S}2 {S} {A} {S}3 {A} {S} {A,S}4 {A}
{A,S}5 {S}
Analisis Sintactico p.28/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(VII)
Ahora, hacemos j = 4. Tenemos que ti,j se ha calculado para 1 j
< 4. Tenemos queencontrar no-terminales que produzcan subcadenas
de w, de longitud 4.
t1,4 = {A, S}, ya que 1 k < 4, y la regla ha de ser tal que
el primer no-terminal dela parte derecha est en t1,1, k = 1, o en
t1,2, k = 2, o en t1,3, k = 3 y el segundono-terminal en t2,3, k =
1, o en t3,2, k = 2 o en t4,1. El conjunto de no-terminales
quepodran formar el primer no-terminal de la parte derecha es {A,
S} y el deno-terminales que podran formar el segundo no-terminal de
la parte derecha es{A, S}. Por lo tanto la parte derecha va a estar
en {AA, AS, SA, SS}.t2,4 = {A, S}, ya que 1 k < 4, y la regla ha
de ser tal que el primer no-terminal dela parte derecha est en
t2,1, k = 1, o en t2,2, k = 2 o en t2,3, k = 3 y el
segundono-terminal en t3,3, k = 1, o en t4,2, k = 2, o en t5,1. El
conjunto de no-terminalesque podran formar el primer no-terminal de
la parte derecha es {A, S}, y el deno-terminales que podran formar
el segundo no-terminal de la parte derecha es{A, S}. Por lo tanto
la parte derecha va a estar en {AA, AS, SA, SS}.
Analisis Sintactico p.29/64
-
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(VIII)
Despus de hacer el paso 2, con j = 4 la tabla T queda as:
1 2 3 4 51 {A} {S,A} {A,S} {A,S}2 {S} {A} {S} {A,S}3 {A} {S}
{A,S}4 {A} {A,S}5 {S}
Hacer el paso 2, con j = 5 en clase, y completar la tabla Tcon
t1,5.
Analisis Sintactico p.30/64
-
Obteniendo una secuencia de derivaciones a partir de T
Especifiacin algortmicaAlgoritmo 2 Derivacin ms a la izquierda a
partir de la tabla T de parsing.Entrada: una gramtica G = (VN , VT
, P, S) en formato CNF, y en la que lasproducciones de P estn
numeradas de 1 a p, una cadena de entradaw = a1a2 an, y la tabla T
generada por el algoritmo CYK.Salida: una derivacin izquierda de w
o un error.Mtodo: se va a basar en el uso de una rutina recursiva
gen(i, j, A) que va a generarla derivacin A += aiai+1 ai+j1. Se
define como sigue:1. Si j = 1 y la produccin m-sima es A ai,
entonces la salida de gen(i, 1, A)
es m.
2. Si j > 1, sea k el entero ms pequeo, 1 k < j, tal que
para algn B ti,k yC ti+k,jk se tiene que A BC P . Si hay varias,
elegimos la que tenga elndice ms pequeo, digamos m. La salida de
gen(i, j, A) es m, ms las salidasde gen(i, k, B) y gen(i + k, j k,
C).
Por lo tanto, para obtener la derivacin para w llamamos a gen(1,
n, S)
Analisis Sintactico p.31/64
-
Obteniendo una secuencia de derivaciones a partir de T
Tomemos la gramtica del ejemplo anterior y dispongmosla en el
ordensiguiente:
(1)S AA(2)S AS(3)S b(4)A SA(5)A AS(6)A a
Sea la cadena de entrada w = abaab la misma que para TTenemos
que llamar a gen(1, 5, S), siempre que S t1,5
Analisis Sintactico p.32/64
-
Obteniendo una secuencia de derivaciones a partir de T
Ahora la evolucin, con el k y m correspondientes es
gen(1,5,S)
gen(1,1,A) gen(2,4,A)
gen(2,1,S) gen(3,3,A)
gen(3,1,A) gen(4,2,5)
gen(4,1,A) gen(5,1,S)
m=1
m=6 m=4
m=3 m=5
m=6 m=2
m=6 m=3
k=1
k=1 k=1
k=1 k=1
k=1 k=1
k=1 k=1
En esa figura puede verse que la secuencia de derivaciones
obtenida es la siguiente
S 1 AA 6 aA 4 aSA 3 abA 5 abAS 6 abaS 2 abaAS 6 abaaS 3
abaab
Analisis Sintactico p.33/64
-
El algoritmo de Early
Complejidad proporcional a n2 si gramtica no es ambiguaPara
lenguajes ms usados, complejidades espacial y temporal
sonlineales
Partimos deLa gramtica G = (VN , VT , P, S), de tipo CFG.Una
cadena w = a1a2 an, en donde w V T .
Un elemento [A X1X2 Xk Xk+1 Xm, i] es lo que vamos adenominar un
item para la cadena w, si A X1 Xm P y0 i n.
El punto es un smbolo adicional, y el entero k es tal que0 k
m.
Si la produccin es A entonces el item es [A , i]
Analisis Sintactico p.34/64
-
El algoritmo de Early (II)El algoritmo trabaja construyendo un
conjunto de items Ij para cada j, 0 j n, detal forma que [A , i] Ij
, con 0 i j sii para algn y , se tiene que:
S A
a1 ai
ai+1 aj
Los ndices i y j delimitan el segmento de cadena en w que se
produce por la cadenaque est a la izquierda del smbolo , si se
observa la tercera derivacin.Las dos derivaciones primeras aseguran
que el prefijo izquierdo de la cadena, desdea1 hasta ai se ha
producido a partir del smbolo inicial de la gramtica.La secuencia
de listas de items generada, I0, I1, . . . , In se denomina listas
del parser,para la cadena de entrada w.w L(G) sii existe algn item
en la forma [S , 0] In.
Analisis Sintactico p.35/64
-
El algoritmo de Early (III)Algoritmo 3 El algoritmo de parsing
de EarlyEntrada: la gramtica CFG, G = (VN , VT , P, S) y la cadena
de entradaw = a1a2 an V T .
Salida: Las listas del parser, I0, I1, . . . , In.Mtodo: Primero
se construye I0 usando los pasos (1) a (3)
1. Si S P entonces, aadir el item [S , 0] a I0.Ejecutar (2) y
(3) hasta que no se aada ningn item nuevo a I0.
2. Si [B , 0] I0, aadir [A B , 0] para todo [A B, 0] I0.3. Sea
[A B, 0] I0. Para toda produccin B , aadir el item [B , 0] a
I0, siempre que no estuviera aadido ya.Ahora, sea I0, I1, . . .
, Ij1 el conjunto de listas de items ya construidos. Para
laconstruccin de Ij , hacer:
4. Para cada [B a, i] Ij1 tal que a = aj , aadir [B a , i] a Ij
.Ejecutar los dos ltimos pasos, para cada j, hasta que no se pueda
aadir ningnitem ms a Ij .
5. Sea [A , i] Ij . Si existe un [B A, k] Ii, entonces, aadir[B
A , k] a Ij .
6. Sea [A B, i] Ij . Para todo B P , aadimos [B , j] a Ij .
Analisis Sintactico p.36/64
-
Interpretacin del algoritmoPaso 1: Iniciamos la construccin de
la tabla con todas las producciones de SPaso 2: Exploramos todas
las producciones a partir de SPaso 3: Si en I0 tenemos A B, debemos
incluir tambin todas las producciones deB
Paso 4: Si [B a, i] Ij1 sabemos entonces que (suponiendo que w
L(G))
a1a2 . . .
ai+1ai+2 . . . aj1 aj . . . an
entonces, si a = aj podemos decir que
a1a2 . . .
aaj ai+1ai+2 . . . aj1aj . . . an
por lo tanto incluimos [B a , i] Ij
Analisis Sintactico p.37/64
-
Interpretacin del algoritmoPaso 5: Si [A , i] Ij tenemos que
. . .
ai+1ai+2 . . . aj . . .
y como A entonces decimos tambin que
A
ai+1ai+2 . . . aj
entonces, si tenemos que [B A, k] Ii significa que tenemos
ak+1 . . . ai
A
ai+1ai+2 . . . aj
por lo que hacemos [B A , k] IjPaso 6: anlogo al 3
Analisis Sintactico p.38/64
-
EjemploVemos la aplicacin del algoritmo con un ejemplo: sea G =
(VN , VT , P, E) en donde Pviene dado por
1. E T + E2. E T3. T F T4. T F5. F (E)6. F a
Y sea w = (a + a) a la cadena de entrada.
Segn el paso (1) aadimos a I0 los items [E T + E, 0] y [E T,
0].Dado que la gramtica es libre, el paso (2) no incorpora ningn
item adicional.Si en el paso (3) hacemos = tenemos que incluir [T F
T, 0] y [T F, 0].En otra iteracin ms del paso (3) incluimos adems
[F (E), 0], y [F a, 0].
Analisis Sintactico p.39/64
-
EjemploNo podemos incluir ms. El contenido de I0 queda:
[E T + E, 0]
[E T, 0]
[T F T, 0]
[T F, 0]
[F (E), 0]
[F a, 0]
As que pasamos a construir ahora I1. Por el paso (4)observamos
que [F (E), 0] cumple que (= a1, y por lotanto aadimos [F (E), 0] a
I1.
Analisis Sintactico p.40/64
-
EjemploPor el paso (6), intentamos desplazar el metasmbolo a la
derechadel no-terminal E, y para ello aadimos [E T + E, 1] y[E T,
1] a I1. A su vez, estos generan la adicin de[T F T, 1] y [T F, 1].
Estos generan tambin laincorporacin de [F (E), 1], y [F a, 1]. I1
queda entonces conel siguiente contenido:
[F (E), 0]
[E T + E, 1]
[E T, 1]
[T F T, 1]
[T F, 1]
[F (E), 1]
[F a, 1]
Construmos ahora I2. Ahora a2 = a. Por el paso (4), aadimos[F a,
1].
Analisis Sintactico p.41/64
-
EjemploAhora, por el paso (5) intentamos aprovechar el hecho de
que se hareconocido parcialmente a para reducir el no-terminal que
laproduce, y por ello introducimos [T F T, 1] y [T F, 1].Dado que
acabamos de aadir [T F, 1], nuevamente, por el paso(5) aadimos [E T
+E, 1] y [E T, 1]. Este ltimo causa laintroduccin de [F (E), 0].
Ahora, I2 est completo.El contenido de I2 queda:
[F a, 1]
[T F T, 1]
[T F, 1]
[E T +E, 1]
[E T, 1]
[F (E), 0]
Analisis Sintactico p.42/64
-
EjemploLa coleccin de cjtos. de items queda:
I1 I2 I3 I4
[F (E), 0]
[E T + E, 1]
[E T, 1]
[T F T, 1]
[T F, 1]
[F (E), 1]
[F a, 1]
[F a, 1]
[T F T, 1]
[T F, 1]
[E T +E, 1]
[E T, 1]
[F (E), 0]
[E T + E, 1]
[E T + E, 3]
[E T, 3]
[T F T, 3]
[T F, 3]
[F (E), 3]
[F a, 3]
[F a, 3]
[T F T, 3]
[T F, 3]
[E T +E, 3]
[E T, 3]
[E T + E, 1]
[F (E), 0]
I5 I6 I7
[F (E), 0]
[T F T, 0]
[T F, 0]
[E T +E, 0]
[E T, 0]
[T F T, 0]
[T F T, 6]
[T F, 6]
[F (E), 6]
[F a, 6]
[F a, 6]
[T F T, 6]
[T F, 6]
[T F T, 0]
[E T +E, 0]
[E T, 0]
y como [E T, 0] I6, tenemos que w L(G).
Analisis Sintactico p.43/64
-
Obtencin de una derivacin derechaAlgoritmo 4 Construccin de un
rbol de derivacin a partir de I0, I1, . . . , In.Entrada: una
gramtica CFG, libre de ciclos, G = (VN , VT , P, S), en donde
lasproducciones estn numeradas, de 1 . . . p, una cadena w = a1 . .
. an, y la listaI0, I1, . . . , In.Salida: , un rbol de derivacin
derecho para w, un mensaje de error.Mtodo: si 6 un [S , 0] en In,
entonces w / L(G). Emitir salida de error. Sino, hacer = . Ejecutar
R([S , 0], n), en donde R se define como sigue:Rutina R([A , i],
j):
1. Sea h el ndice de A . Entonces, hacer + h2. Si = X1X2 Xm,
hacer k = m, l = j.3. Mientras que k > 0 hacer:
(a) Si Xk VT , hacer k = k 1 y l = l 1.(b) Si Xk VN ,
i. Encontrar un item [Xk , r] Il, para algn rii. Ejecutar R([Xk
, r], l). Hacer k = k 1 y l = r.
Analisis Sintactico p.44/64
-
EjemploVamos a obtener un rbol de derivacin, que defina una
derivacin ms a la derechapara
1. E T + E2. E T3. T F T4. T F5. F (E)6. F a
Y w = (a + a) a la misma cadena de entrada que el ejemplo
anterior. Usaremostambin la lista I1, . . . , I7 producida en el
ejemplo anterior.Inicialmente ejecutamos R([E T, 0], 7). = {2}.Paso
2. Ahora, = T . Hacemos k = 1 y l = 7.Paso 3b. Como X1 = T VN ,
tenemos que encontrar un item [T , r] I7 talque [E T, 0] est en Ir
.
El item [T F, 6] I7 no vale pues [E T, 0] / I6.El item [T F T,
0] I7 si pues [E T, 0] I0.
Analisis Sintactico p.45/64
-
EjemploLlamamos a R([T F T, 0], 7):
Paso 2: = F T , k = 3 y l = 7.Paso 3b: Se ha de encontrar un [T
, r] I7 tal que [T F T, 0] Ir .
Una opcin no vlida es [T F T, 0] porque [T F T.0] / I0.La opcin
correcta es [T F, 6] ya que [T F T, 0] I6.
Llamamos a R([T F, 6], 7).Paso 2: = F , k = 1 y l = 7.Paso 3b:
Se ha de encontrar un [F , r] I7 tal que [T F, 6] Ir . Lanica opcin
es [F a, 6] porque [T F, 6] I6.Al llamar a R([F a, 6], 7) termina
la ejecucin de esta rama.Paso 3bcont: k = k 1. Termina.
Analisis Sintactico p.46/64
-
EjemploSeguimos:
Seguimos con R([T F T, 0], 7)Paso 3bcont: k = k 1, l = l 1.Paso
3a: k = k 1, k = 1, l = l 1, l = 5.Paso 3b: Se ha de encontrar un
[F , r] I5 tal que [T F T, 0] Ir .La nica opcin es [F (E), 0] y [T
F T, 0] I0.Llamamos a R([F (E), 0], 5).
Paso 2: = (E), k = 3 y l = 5.Paso 3a: k = k 1, k = 2, l = l 1, l
= 4.
Analisis Sintactico p.47/64
-
EjemploPaso 3b: Se ha de encontrar un [E , r] I4 tal que [F (E),
0] Ir .Tenemos las opciones:
[E T +E, 3] y [E T, 3], no vlidas.[E T + E, 1] vlida ya que [F
(E), 0] I1.
Llamamos a R([E T + E, 1], 4):Paso 2: = T + E, k = 3 y l = 4Paso
3b: Se debe encontrar un [E , r] I4 tal que [E T + E, 1] Ir .1. [E
T + E, 1] no es vlida2. [E , 3] si ya que, [E T + E, 1] I3.Llamamos
a R([E T, 3], 4)
Se obtiene el rbol de derivacin derecho 64642156432.
Analisis Sintactico p.48/64
-
rbol de derivacin obtenidoE
T
F * T
F
a
)(
E
T
a
F
+
E
T
F
a
R([E T, 0], 7)
R([T F T, 0], 7)
R([T F, 6], 7)
R([F a, 6], 7)
R([E T + E, 1], 4)
R([F a, 3], 4)
R([T F, 3], 4)
R([E T, 3], 4)
R([F a, 1], 2)
R([T F, 1], 2)
R([F (E), 0], 5)
Analisis Sintactico p.49/64
-
Transformaciones de gramticas
1. Eliminacin de smbolos intiles2. Gramtica -libre3. Eliminacin
de producciones unitarias4. Eliminacin de la recursividad por la
izquierda5. Factorizacin6. Forma normal de Chomsky
Analisis Sintactico p.50/64
-
Eliminacin smbolos intilesPasos para eliminar los smbolos no
tiles de una gramtica
1. Eliminacin de variables (A VN ) improductivas.2. Eliminacin
de smbolos inaccesibles.
Definicin 15 Una variable A VN es improductiva si no existe
ningunaderivacin tal que A w con w V T .Definicin 16 Un smbolo X es
inaccesible si no aparece en ningunaforma sentencial de la
gramtica, es decir, , (VN
VT )
tal queS X.
Teorema 1 Dada una g.l.c. G = (VN , VT , S, P ), con L(G) 6= ,
existe unag.l.c. equivalente G = (V N , VT , S, P ) tal que A V N
se cumple queexiste una serie de derivaciones tal que A w, w V T ,
es decir, existeuna gramtica equivalente sin variables
improductivas.
Analisis Sintactico p.51/64
-
Eliminacin de variables improductivas
El algoritmo para el clculo de G (V N y P ) es el
siguiente:Algoritmo 5begin
OLDV := NEWV := {A VN |A w P, w V T }
while OLDV 6= NEWV dobegin
OLDV := NEWVNEWV := OLDV
{A VN |A , (VT
OLDV )}
endV N := NEWVP = {A P |A V N , (V
N
VT )
}
end
Analisis Sintactico p.52/64
-
Eliminacin de smbolos inaccesiblesTeorema 2 Dada una g.l.c. G =
(VN , VT , S, P ), con L(G) 6= , existe unag.l.c. equivalente G =
(V N , VT , S, P ) sin smbolos inaccesibles.El algoritmo para el
clculo de G (V N , V T y P ) es el siguiente:Algoritmo 6begin
V N := {S}; VT := ; P
:= ;
repeatfor A V N , A 1|2| |n, no procesada aun
{anadir todas las variables de i a V Nanadir todos los
terminales de i a V T }
until V N no vareP = {A P |A V N (V
N
V T )
}
end
Analisis Sintactico p.53/64
-
Eliminacin de smbolos intilesTeorema 3 Dada una gramtica libre
de contexto G, conL(G)6= , existe una GLC G equivalente sin smbolos
intiles.Los pasos a seguir seran (el orden es importante):
Pasamos de G a G1 segn el algoritmo 5Pasamos de G1 a G segn el
algoritmo 6
G no contiene smbolo intiles, es decir, todo smboloX (VN VT ) es
tal que S X w.
Analisis Sintactico p.54/64
-
Grmatica -libreDefinicin 17 Decimos que una gramtica l.c.G = (VN
, VT , S, P ) es -libre si cumple que en sus reglas deproduccin no
aparece ninguna de la forma A , excepto alos sumo S , con la
condicin de que S no aparezca en laparte derecha de ninguna otra
regla de produccin.
Teorema 4 Dada una g.l.c. G = (VN , VT , S, P ), existe
unag.l.c. equivalente G = (V N , VT , S , P ) que es -libre.
Analisis Sintactico p.55/64
-
Grmatica -libreAlgoritmo 7
1. Obtenemos V = {A VN |A }: Conjunto de variables
anulablesInicialmente V contiene A si A . Luego, si tenemos B x1x2
. . . xn y xi Vi, aadir B.
2. Obtenemos P del siguiente modo:Por cada produccin A x1x2 . .
. xk (k > 0) aadimos:A Y1Y2 . . . Yn, dnde cada Yi es:(a) Si xi
no es anulable entonces Yi = xi(b) Si x V, entonces se toma Yi como
xi y como (c) No aadir ninguna produccin A
3. Si 6 L(G) entonces V N = VN y S = S.En otro caso,(a) si S no
aparece en la parte derecha
i. Aadir la produccin S ii. V N = VN y S = S
(b) en otro casoi. V N = VN
{S}, siendo S el nuevo smbolo inicial
ii. Aadir a P S S|Analisis Sintactico p.56/64
-
Eliminacin de producciones unitariasDefinicin 18 Llamamos
producciones unitarias a las que tienen laforma A B, con A, B VN
.Teorema 5 Dada una g.l.c. G = (VN , VT , S, P ) existe una
g.l.c.equivalente G = (VN , VT , S, P ) que no contiene
producciones unitarias.El algoritmo para calcular G es el
siguiente:Algoritmo 8 1. Suponemos que G es -libre; si no es as,
se
transforma segn el algoritmo 32. Para cada A VN se calcula VV
(A) = {B VN |A + B}.3. P = Producciones no unitarias de P .
4. Para cada A VN tal que VV (A) 6= .Para cada B VV (A)
Para cada B P (no unitaria)Aadir A a P
Analisis Sintactico p.57/64
-
Gramtica libre de ciclosDefinicin 19 Una gramtica libre de
ciclos es aquella que no contienederivaciones de la forma A
A.Definicin 20 Una gramtica es propia si no tiene smbolos intiles,
es-libre y libre de ciclos.Para convertir una gramtica en otra
equivalente propia, podemos seguirlos siguientes pasos:
1. Pasar la gramtica a una equivalente -libre.2. Eliminar las
producciones unitarias (no hay ciclos).3. Eliminar smbolos
intiles.
No debemos olvidar que una gramtica puede tener producciones
uni-
tarias y ser propia.
Analisis Sintactico p.58/64
-
Recursividad en las gramticasDefinicin 21 Una gramtica G = (VN ,
VN , P, S) es recursiva por la izquierda (derecha) siexiste un A VN
tal que existe una derivacin A
+= A (A += A) para alguna cadena
.
Definicin 22 Una gramtica G = (VN , VN , P, S) es recursiva si
existe un A VN tal queexiste una derivacin A += A.Algoritmo 9
Eliminacin de la recursividad inmediata por la izquierda.Entrada:
Un conjunto de producciones {pi/pi P} con el no terminal A VN como
parteizquierda de una gramtica G CFG sin -producciones.Salida: Un
nuevo conjunto de producciones sin recursividad inmediata por la
izquierda.
1. Ordnense las producciones de Ai en la formaA A1|A2| |Am|1|2|
|n
en donde ninguna i comienza con A.2. Sustituir todas las
producciones de A por
A 1A|2A| |nA
A 1A|2A| |mA|
3. La salida es el conjunto de nuevas producciones obtenidas en
el paso anterior.
Analisis Sintactico p.59/64
-
Recursividad en las gramticas (III)Algoritmo 10 Eliminacin de la
recursividad por la izquierda.Entrada: La gramtica G propiaSalida:
Una gramtica equivalente, sin recursividad por la izquierda.
1. Ordnense los Ai VN en un orden A1, A2, . . . , An.2. for i:=1
to n do
beginfor j:= 1 to i 1 do
sustituir cada produccin de la forma Ai Ajpor las producciones
Ai 1|2| |k, endonde Aj 1|2| |k es el conjunto deproducciones
actuales del no terminal Aj ;
Adems, eliminar la recursividad inmediata por laizquierda de las
producciones de Ai.
end
Analisis Sintactico p.60/64
-
Forma normal de Chomsky
Definicin 23 Sea una CFG G = (VN , VT , P, S). Se dice queG est
en Forma Normal de Chomsky (CNF), si todaproduccin de P est en una
de las formas siguientes:1. A BC, en donde A, B y C estn en VN ,2.
A a, en donde A VN y a VT ,
3. Si L(G) entonces S est en P y adems S noaparece en la parte
derecha de ninguna produccin de P .
Analisis Sintactico p.61/64
-
Forma normal de Chomsky (II)
Algoritmo 11 Conversin a Forma Normal de Chomsky.Entrada: Una
gramtica CFG propia, G = (VN , VT , P, S) sin producciones
simples.Salida: Una gramtica G en forma CNF, tal que L(G) =
L(G).Mtodo: Sea el conjunto P formado por las producciones
siguientes:
1. Aadir toda produccin en la forma A a P2. Aadir toda produccin
en la forma A AB P3. Si S P entonces aadirla tambin.4. Para cada
produccin en la forma A X1 Xk con k > 2, aadir las producciones
resultantes a
continuacin: asumimos que Xi representa a Xi si Xi VN , y X
i es un nuevo no-terminal si Xi VT . Lasnuevas producciones sern
las siguientes:
A X1 < X2 Xk >
< X2 Xk > X
2 < X3 Xk >
< Xk2 Xk > X
k2 < Xk1Xk >
< Xk1Xk > X
k1X
k
en donde cada < Xi Xk > es un nuevo smbolo no-terminal.5.
Para cada produccin de la forma A X1X2 en donde bien X1 o X2 los
dos estn en VT , aadir
A X1X
2 a P
6. Para cada a introducido en los pasos 4 y 5, aadir a a. Sea V
N igual a VN ms todos los nuevosno-terminales introducidos en los
pasos anteriores.
La nueva gramtica G = (V N , VT , P, S) es la deseada.
Analisis Sintactico p.62/64
-
Forma normal de Chomsky (III)
Veamos la aplicacin del algoritmo con la gramtica CFG cuyo
conjuntoP est formado por las siguientes producciones:
S aAB|BA
A BBB|a
B AS|b
En el nuevo conjunto P introducimos las producciones S BA, A a
yB AS|b. La produccin S aAB generar el siguiente grupo denuevas
producciones
S a < AB >
< AB > AB
a a
que irn a parar a P .
Analisis Sintactico p.63/64
-
Forma normal de Chomsky (IV)
Para la produccin A BBB, se generarn las siguientes nuevas
produccionesA B < BB >
< BB > BB
que tambin se introducirn en P . La nueva gramtica, G = (V N , V
T , P , S) quedar, conV N = {S, A, B, < BB >, < AB >,
a
}, y P contendr las siguientes producciones:S a < AB >
|BA
A B < BB > |a
B AS|b
< AB > AB
< BB > BB
a a
Analisis Sintactico p.64/64
ndice{small Gramticas libres de contexto (CFG)y Autmatas de pila
(PA) }{small Gramticas libres de contexto (CFG)y Autmatas de pila
(PA) }{small Gramticas libres de contexto (CFG)y Autmatas de pila
(PA) (II)}{small Gramticas libres de contexto (CFG)y Autmatas de
pila (PA) (III)}{small Gramticas libres de contexto (CFG)y Autmatas
de pila (PA) (IV)}{small Anlisis Sintctico Ascendente y
Descendente}{small Anlisis Sintctico Ascendente y
Descendente}{small Anlisis Sintctico Ascendente y Descendente
(II)}{small Anlisis Sintctico Ascendente y Descendente (III)}{small
El problema de la ambig"uedad en el anlisis sintctico}{small El
problema de la ambig"uedad en el anlisis sintctico (II)}{small El
problema de la ambig"uedad en el anlisis sintctico (III)}{small El
problema de la ambig"uedad en el anlisis sintctico (IV)}{small El
problema de la ambig"uedad en el anlisis sintctico (V)}{small El
problema de la ambig"uedad en el anlisis sintctico (VI)}{small El
problema de la ambig"uedad en el anlisis sintctico (VII)}small
Mtodos universales de anlisis sintcticoAlgoritmo
Cocke-Younger-KasamiCYK-Funcionamiento bsico{small Mtodos
Universales de anlisis sintctico. El algoritmo
CYK}CYK-Observaciones{small Mtodos Universales de anlisis
sintctico. El algoritmo CYK (II)}{small Mtodos Universales de
anlisis sintctico. El algoritmo CYK (III)}{small Mtodos Universales
de anlisis sintctico. El algoritmo CYK (IV)}small Mtodos
Universales de anlisis sintctico. El algoritmo CYK (V)small Mtodos
Universales de anlisis sintctico. El algoritmo CYK (VI){small
Mtodos Universales de anlisis sintctico. El algoritmo CYK
(VII)}{small Mtodos Universales de anlisis sintctico. El algoritmo
CYK (VIII)}{small Obteniendo una secuencia de derivaciones a partir
de $T$}small Obteniendo una secuencia de derivaciones a partir de
$T$small Obteniendo una secuencia de derivaciones a partir de $T$
El algoritmo de EarlyEl algoritmo de Early (II)El algoritmo de
Early (III)Interpretacin del algoritmoInterpretacin del algoritmo
EjemploEjemploEjemploEjemploEjemploObtencin de una derivacin
derechaEjemploEjemploEjemploEjemplorbol de derivacin
obtenidoTransformaciones de gramticasEliminacin smbolos
intiles{small Eliminacin de variables improductivas}Eliminacin de
smbolos inaccesiblesEliminacin de smbolos intilesGrmatica $lambda
$-libreGrmatica $lambda $-libreEliminacin de producciones
unitariasGramtica libre de ciclosRecursividad en las
gramticasRecursividad en las gramticas (III){small Forma normal de
Chomsky}{small Forma normal de Chomsky (II)}{small Forma normal de
Chomsky (III)}{small Forma normal de Chomsky (IV)}