Académique Documents
Professionnel Documents
Culture Documents
GUIA V
FISI 2015-I
ANALISIS SINTACTICO
En toda discusin, el primero que se incomoda y
grita suele ser el que tiene menos razn....
Por eso un necio puede refutar a un sabio en
cualquier momento, pero un sabio no puede
convencer a un necio nunca.
Li Po
Alfred V. Aho ()
El Doctor Alfred V. Aho es un
cientfico computacional. Sus
ocupaciones incluyen trabajar para los
laboratorios Bell y ser profesor de
Computacin en la Universidad de
Columbia.
Se hizo famoso por su creacin, el
lenguaje de programacin AWK (la A
viene de Aho), obra que realiz en
conjunto con Brian Kernighan y meter
J. Weinberger, adems de su coautora
de "Compiladores: Principios,
Tcnicas y Herramientas" con Ravi
SEIT y Jeffrey Ullman. El Doctor Aho
ha recibido varios prestigiosos premios,
y ha sido premiado por el doctorado de
la Universidad de Waterloo y la
Universidad de Helsinki en Finlandia..
Objetivos de aprendizaje
1
2
3
Pag.1/20
Lenguajes y Traductores
FISI 2015-I
Introduccin
Todo lenguaje es definido por una gramtica. En el lenguaje espaol la frase Juan estudia mucho consta de
un sujeto, un verbo y un predicado en ese orden. Igualmente un programa en un lenguaje formal se rige por
una gramtica. EL proceso de anlisis sintctico verifica que los componentes lxicos que son entregados por
el analizador lxico se encuentran en un orden prescrito.
Anlisis sintctico
El analizador sintctico recibe una secuencia de tokens del analizador lxico y decide si la secuencia esta bien
escrita o no. Para ello hace uso de las reglas de derivacin de la gramtica del lenguaje.
El proceso de anlisis sintctico puede describirse como el intento de construir un rbol de anlisis sintctico
para la frase que se quiere reconocer. Aunque en la practica los rboles sintcticos no se implementan porque
ocuparan mucho espacio. Por esta razn se usan como alternativa los autmatas de pila, que guarda
informacin en la pila acerca de los nodos del rbol sintctico relevantes en cada fase del proceso de anlisis.
La sintaxis de las construcciones de los lenguajes de programacin pueden describirse por medios de
gramticas libres del contexto
Ventajas
1
Los lenguajes evolucionan con el tiempo, adquiriendo nuevos construcciones y realizando tareas
adicionales. Estas nuevas construcciones se pueden aadir con mas facilidad a un lenguaje
cuando existe una aplicacin basada en una descripcin gramatical.
Una gramtica imparte una estructura a un lenguaje de programacin til para la traduccin de un
programa fuente a cdigo objeto correcto y para la deteccin de errores
componente
lxico
rbol
anlisis
sintctico
Solicita
Componente
lxico
Pag.2/20
Lenguajes y Traductores
FISI 2015-I
EJERCICIO 1
Responda ( V)erdad o (F)also
a) Es verdad que para todo conjunto finito siempre existe una expresin regular
b) Para todo lenguaje regular siempre existe un autmata finito
c) Para todo lenguaje libre de contexto existe siempre un autmata finito
d) No es cierto que todo lenguaje libre de contexto es tambin regular
e) Una gramtica libre de contexto es tambin sensible al contexto
f) Todo regular es reconocido por un autmata de pila
ANLISIS SINTACTICO DESCENDENTE
Intenta construir un rbol de anlisis sintctico, empezando desde la raz y descendiendo
hacia las hojas. Lo que es lo mismo que intentar obtener una derivacin por la izquierda
para una cadena de entrada, comenzando desde la raz y creando los nodos del rbol en
orden previo
ANLISIS SINTACTICO ASCENDENTE
Intenta construir un rbol de anlisis sintctico, empezando desde las hojas ( la cadena) y
ascendiendo hacia la raz. Lo que es lo mismo que intentar obtener una reduccin desde una
cadena hasta llegar al axioma.
MANEJO DE ERRORES
Los programadores a menudo cometen errores al escribir sus programas. Un buen
compilador debera ayudar a identificar y localizar los errores.
TIPOS DE ERRORES
LXICOS: Cuando un lexema no corresponde a ningn componente lxico definido
para el lenguaje. Ejemplo : escribir mal un identificador, verbo u operando
SINTACTICOS: Cuando una secuencia de componentes lxicos no se ajusta a las
reglas de sintaxis definida por la gramtica. Ejemplo : una expresin aritmtica con
parntesis no equilibrados
SEMANTICOS: Cuando no existe relacin semntica entre la secuencia de
componentes lxicos. Ejemplo: operador aplicado a operandos incompatibles
LGICOS: Cuando el algoritmo no corresponde a la solucin del problema. Una
llamada infinitamente recursiva.
ERRORES SINTACTICOS
La secuencia de componentes lxicos proporcionada por el analizador lexicogrfico al
analizador sintctico no satisface las reglas gramaticales
Objetivos de manejador de errores en un analizador sintctico:
1
Informar de la presencia de errores con claridad y exactitud
2
Se debe recuperar de cada error con la suficiente rapidez como para detectar
errores posteriores
3
No debe retrasar significativamente el procesamiento de programas correctos
Pag.3/20
Lenguajes y Traductores
FISI 2015-I
A
A
A
A
Pag.4/20
Lenguajes y Traductores
FISI 2015-I
A /
en G
Construimos su equivalente en G
A
A
A
A/
G es recursiva por la izquierda.
TEOREMA
Sea la gramtica recursiva por la izquierda
A
A1/ A2/ ...Am/ 1/ 2/.../ n
ninguna / i comienza con A
podemos construir la gramtica G no recursiva por la izquierda
A
A
G
G gramtica factorizada
Sea prefijo comn ms largo a dos o ms alternativas
Sustituir
A
1 / 2 /.../ n /
Por
A
A /
A
1 / 2 /.../ n
Ejemplo 1
P
i E t P /i E t P e P / a
Factorizando
P
P
i E t P P / a
e P/
P: proposicion
E: Expresion
i: IF
e: ELSE
t: Then
Pag.5/20
Lenguajes y Traductores
FISI 2015-I
EJERCICIO 2
a) De un ejemplo de gramtica recursiva por la izquierda.
b) Elimine la recursin por la izquierda
W$
Entrada
W cadena de entrada
T Tabla de anlisis sintctico
Salida
Mtodo
Pag.6/20
Lenguajes y Traductores
FISI 2015-I
ACCION ANALISIS()
INICIO
I=1
X= TOP(P)
a = B(I)
Mientras( X $ )
Si (X VT X = $)
Si X = a
DESEMPILAR(X)
I=I+1
Sino ERROR
FinSi
Sino
Si T[X,a] = X
A1A2...Ak
Desempilar X
Empilar(An),Empilar(An-1),..Empilar(A1)
escribir X A1A2...Ak
Sino
ERROR
FinSi
FinSi
X= TOP(P)
a = B(I)
Fin Mientras
FIN
Ejemplo 2
Consideremos la gramtica
A
A+B /B
eliminamos
B
B*C/C
la recursividad
C
(A)/Id
A
A
B
B
C
BA
+BA/
CB
*CB/
(A)/Id
BA
)
-
Id
A
BA
+
A
*
+BA -
CB
B
Id
(
A
CB
*CB C
(A)
Pag.7/20
Lenguajes y Traductores
Paso
PILA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$A
$AB
$ABC
$ABId
$AB
$A
$AB+
$AB
$ABC
$ABId
$AB
$ABC*
$ABC
$ABId
$AB
$A
$
FISI 2015-I
ENTRADA
SALIDA
Id+Id*Id$
Id+Id*Id$
Id+Id*Id$
Id+Id*Id$
+Id*Id$
+Id*Id$
+Id*Id$
Id*Id$
Id*Id$
Id*Id$
*Id$
*Id$
Id$
Id$
$
$
$
A
B
C
BA
CB
Id
B
A
+BA
B
C
CB
Id
*CB
Id
B
A
A Y1Y2...Yk
PRIMERO(Yq)
q = 1, 2 . . k
entonces PRIMERO(A)
Pag.8/20
Lenguajes y Traductores
FISI 2015-I
( =1 2... k )
Si =
Incluir (,PRIMERO(X))
Sino
i=1
Mientras i < k
i *
i =i+1
Fin Mientras
Incluir (PRIMERO(i), PRIMERO(X))
Fin si
Fin
Ejemplo 3
A
A
B
B
C
BA
+BA/
CB
*CB/
(A)/Id
PRIMERO(A)
+
*
Id
A
B
C
A
B
{+ }
{* }
{ Id }
{ (, Id }
{ (, Id }
{ (, Id }
{ +, }
{ *, }
SIGUIENTE(A) = {a VT /
Aa
$ SIGUIENTE(S)
Si A
B
Si [ A
S axioma de la gramtica
PRIMERO() {} SIGUIENTE(B)
B] o [
A
i.e.
entonces
SIGUIENTE(A)
PRIMERO()]
SIGUIENTE(B)
Pag.9/20
Lenguajes y Traductores
FISI 2015-I
(A)
$
)
Por (3)
en A
BA
SIGUIENTE(A) SIGUIENTE(A)
Por (3)
Por (2)
en A
en A
BA
BA
Por (3)
en B
Por (2)
en B
SIGUIENTE(A)
SIGUIENTE(A)
SIGUIENTE(A) SIGUIENTE(B)
PRIMERO(A){} SIGUIENTE(B)
{+}
CB
SIGUIENTE(B) SIGUIENTE(B)
*CB PRIMERO(T){} SIGUIENTE(C)
{*}
A
SIGUIENTE(A)
A
B
C
A
B
{ ), $}
{ +,), $ }
{ +,*,), $}
{ ), $ }
{ +,), $ }
CONSTRUCCION DE LA TABLA
Accion CONSTRUYE_TABLA()
Inicio
A
a PRIMERO()
Incluir A en T[A , a]
Si PRIMERO()
Incluir A en T[A , a]
b SIGUIENTE(A)
Fin si
Si PRIMERO() y $ SIGUIENTE(A)
Incluir A en T[A , $]
Fin si
Fin
Pag.10/20
Lenguajes y Traductores
FISI 2015-I
PRIMERO(A ) PRIMERO(A )
= si A
El teorema nos dice que para cadena de entrada existe solo una produccin posible en
un cierto estado de la derivacin; es decir, ser obvia la alternativa de la produccin que
deber aplicarse.
Ejemplo 4
Sea la gramtica libre del contexto
P Q / R
Q aQ / b
R aR / c
aac L(G) ?
Pag.11/20
Lenguajes y Traductores
FISI 2015-I
El autmata de pila para el analizador sintctico LL, se construye en base al teorema 5.2
Sea G = (VN, VT, S, P) Construimos P = ( E, , p, , 1, R, F)
Hacemos
1
= VT
2
p = VT U VN U {#}
3
E = {i, p, q, f }
4
i : estado inicial
# no esta en VT ni VN
f : estado final
(i, , ; p , #)
(p, , ; q , S)
(q, , N ; q , W)
(q, a, a ; q , )
(q, , # ; F , )
N
W ,
W (VN UVT)*
a VT
Pag.12/20
Lenguajes y Traductores
FISI 2015-I
W$
Sea P pila
1
Si TOP = X VN
remplaza X por alguna regla de produccin
2
Si TOP = a VT
elimina a de la pila y lee de la entrada el mismo
terminal.
Si lo que esta en el TOP de la pila es diferente a a , se declara la cadena
ilegal
3
Si TOP = # marca el fondo de la pila, elimina # y declara la cadena
aceptable hasta el momento
Ejemplo 5
Sea G = (VN, VT, E, P) donde VN = {E, T, F} ,
L(G) = {anbn / n 0 }
P: {
1
2
S
S
VN = {S} , VT={a, b}
aSb,
, S ; aSb
, S ;
Pag.13/20
Lenguajes y Traductores
FISI 2015-I
, ; #
, ; S
,# ;
a, a ;
b, b ;
c, c ;
Estado = 0
Empilar (P,#)
Estado = p
Empilar (P,S)
Estado = q
Mientras TOP(P) #
En caso de TOP(P)
S:
desempilar(S),Empilar (P,aSb)
o Desempilar(S)
a:
desempilar(a), Leer(a)
b:
Fin caso
Fin mientras
desempilar(b), Leer(b)
desempilar(S)
Desempilar(S),Empilar (P,aSb)
llamar a rutina de error
Desempilar(a), Leer smbolo
llamar a rutina de error
Desempilar(b), Leer smbolo
Pag.14/20
Lenguajes y Traductores
FISI 2015-I
Fin caso
Fin mientras
Desempilar(P,#)
Si smbolo no es la marca de fin de cadena Llamar rutina de error
Estado = f
Gramtica LL(2)
Supongamos
La gramtica
1
2
3
S
S
T
pSq
prTrq
Ejemplo 6
n
1
2
S
S
}
G es libre del contexto. Podemos construir el autmata de pila asociado a partir de la
gramtica aplicando el teorema 5.2
= {a, b, c}
p = {a, b, c, S}
# no esta en VT ni VN
E = {i, p, q, f } i : estado inicial
f : estado final
Introducir las transiciones
(i, , ; p , #)
(p, , ; q , S)
(q, , S ; q , aSb)
(q, , S ; q , c)
(q, a, a ; q , )
(q, b, b ; q , )
(q, c, c ; q , )
(q, , # ; F , )
Pag.15/20
Lenguajes y Traductores
FISI 2015-I
, S ; aSb
, S ; c
, ; #
, ; S
,# ;
a, a ;
b, b ;
c, c ;
Veamos el comportamiento del autmata para la secuencia acb
Orden
1
2
3
4
5
6
7
8
9
#
#S
#bSa
#bS
#bc
#b
#
Pila
entrada
acb
acb
acb
acb
cb
cb
b
transicin
(i ,
(p ,
(q ,
(q ,
(q ,
(q ,
(q ,
(q ,
, ; p , #)
, ; q , S)
, S ; q , aSb)
a , a ; q , )
, S ; q , c)
c , c ; q , )
b , b ; q , )
, # ; f , )
W$
Pag.16/20
Lenguajes y Traductores
FISI 2015-I
(operacin de reduccin)
(i, , ; p , #)
(p, , S ; q , )
(p, , W ; p , N)
N
W ,
(p, a, ; p , a) a VT
(q, , # ; F , )
(reduction)
W (VN UVT)*
(desplazamiento)
funcin:
1
Transfiere smbolos de su entrada a la pila hasta que los smbolos
superiores
2
Remplazar estos smbolos con el no terminal que se encuentra en el lado
izquierdo de la regla de antes de transferir otros smbolos de la entrada a
la pila.
La pila acumula cadenas de terminales y no terminales que son reemplazados por
los terminales mas altos
Ejemplo 7
Sea L = {ancbn / n 0 }
Donde G = (VN, VT, S, P) donde
Augusto Cortez Vsquez
Lenguajes y Traductores
P: {
1
2
FISI 2015-I
S
S
aSb,
c
}
G es libre del contexto. Podemos construir el autmata de pila asociado a partir de la
gramtica aplicando el teorema anterior:
, aSb; S
, c; S
, ; #
, S;
,# ;
a, ;a
b, ;b
c, ; c
Veamos el comportamiento del autmata para la secuencia acb
Orden Pila
1
2
3
4
5
6
7
8
Problemas
9
entrada
#
#a
#ac
#aS
#aSb
#S
al#implantar
acb
acb
cb
b
b
LR(K)
transicin
(i , , ; p , #)
(p , a , ; p , a) desp
( p, c , ; p , c) desp
( p, , c ; p , S) reduc
( p, , b ; p , b) desp
( p, ,aSb ; p , S) reduc
(p , , S ; q , )
(q , , # ; f , )
Pag.18/20
Lenguajes y Traductores
FISI 2015-I
Construya el analizador sintctico LL basado en pila para L. Realice el anlisis para la frase
aaaabbc
Construya el analizador sintctico LR basado en pila para L. Realice el anlisis para la frase
aaaabbc
Ejemplo 8
Supongamos La gramtica
1
2
3
4
5
6
S
NP
VP
DET
DET
DET
NP VP
DET N
V NP
el
las
un
7
8
9
10
11
N
N
N
V
V
mecnico
automvil
rueda
arreglaba
inflaba
Los argumentos de los Vn tambin pueden usarse para incorporar cierta informacin
contextual; tal es el caso de la concordancia en gnero, numero o persona. Asi
concordancia en gnero y nmero entre el determinante y el nombre comn de un
sintagma nominal se podra expresar mediante la regla:
Pag.19/20
Lenguajes y Traductores
NP(Num,NP(D,N), Gen )
FISI 2015-I
EJERCICIO 8
Provea un ejemplo de gramtica LL(1)
EJERCICIO 9
Provea un ejemplo de gramtica LL(2)
EJERCICIO 10
Provea un ejemplo de gramtica LR(1)
EJERCICIO 11
Provea un ejemplo de gramtica LR(2)
REFERENCIAS BIBLIOGRAFICAS
[AHO 1990] Aho A.,Sethi,Ullman Compiladores, principios, tcnicas y herramientas; AddisonWesley1990, Wilmington-Delaware EUA.
[2]
[BROOKSHEAR 1993] BROOKSHEAR J. Glean
Teora de la computacin
Addisson Wesley iberoamericana
Wilmington Delaware 1993
[3] [CORTEZ, 2014]Augusto.Cortez Vsquez. Lenguajes y Traductores Edit UCSS 2014 Lima Per
[4] [CORTEZ, 2014]Augusto.Cortez Vsquez, Procesamiento del lenguaje natural. Revista RISI Vol 6 N
2 2009 , Pg 45-54 ISSN 1815-0268 Lima Per www.opejournal.unmsm.edu.pe
[5] [CORTEZ, 2014]Augusto.Cortez Vsquez. Gramticas probabilistas, Revista Algorithmic Vol 4 N 1
2013 , Pg 9-16 ISSN 2220-3982 Lima Per www.opejournal.unmsm.edu.pe
[6]
[DEITEL 1987] Deitel Harvey M.. Introduccin a los sistemas operativos; Addison-Wesley,
Iberoamenricana 1987 Wilmigton Deleware E.U.A:
[7]
[HOPCROFT 1993] Hopcroft Jhon, Ullman Jeffrey
[1]
Pag.20/20