Está en la página 1de 29

Programacin de Sistemas Anlisis Sintctico

Anlisis Sintctico
1
Programacin de Sistemas Anlisis Sintctico
ndice
1.- INTRODUCCIN AL ANLISIS SINTCTICO
2.- ANLISIS SINTCTICO CON RETROCESO.
3.-A!UINA DE "NUT#
$.- TRATAIENTO DE ERRORES SINTCTICOS
%.- ANLISI SINTCTICO DESCENDENTE SIN RETROCESO.
%.1.- An&li'&do( sintctico LL)1* (ec+(si,o.
%.2.- Condici-n .&(& se( LL)1*.
%.3.- An&li'&do( sintctico descendente no (ec+(si,o
/.- ANLISIS SINTCTICO ASCENDENTE
/.1.- Anlisis sintctico de 0(ecedenci& Si1.le.
/.2.- Anlisis sintctico de 0(ecedenci& de O.e(&do(es.
/.3.- Anlisis Sintctico LR)1*.
2
Programacin de Sistemas Anlisis Sintctico
1.- INTRODUCCIN AL ANLISIS SINTCTICO
La funcin del analizador sintctico es la de encontrar un rbol de anlisis sintctico
para una cadena de componentes lxicos, que tenga como raz el axioma de la
gramtica, mediante la aplicacin de sus reglas!
"n caso de xito la cadena pertenece al lengua#e
"n caso de fracaso emisin de mensa#e de error $ % o recuperacin
&os tipos de anlisis!
Descendentes ! desde el axioma, mediante deri'aciones de las reglas de la
gramtica se encuentra un rbol de anlisis sintctico para la cadena de
componentes lxicos a la entrada(
Ascendentes! partiendo de la cadena de componentes lxicos, mediante
reducciones se llega al axioma $ por tanto se encuentra un rbol(
)na forma de representar un rbol de anlisis sintctico!
*umerar sucesi'amente las reglas
+ada aplicacin de una regla se representa por su n,mero
"l - parser - . anlisis / es la secuencia de n,meros resultante
Si aplicamos el punto anterior a una cadena de to0ens, .empezando por la izquierda / en
un anlisis descendente deri'ando siempre lo ms a la izquierda posible, encontraremos
el -parse1 del anlisis sintctico descendente( .2ecordad! cadena por la izquierda .left/ $
deri'aciones a la izquierda .left/( &escendentes !LL/(
Si lo aplicamos con deri'aciones lo ms a la derec3a posible .rigt3/ obtendramos un
-parse1 que es in'erso al obtenido si para la misma cadena, se 3ubiera realizado un
anlisis ascendente( . por ello los ascendentes sern L2, L de entrada por la izquierda $
2 de -parse1 deri'aciones a la derec3a /(
2.- ANLISIS SINTCTICO CON RETROCESO.
"l problema del retroceso se presenta cuando en las reglas de la gramtica 3a$
alternativas(
Si se quiere realizar el anlisis sintctico mediante un algoritmo es como si se quisiera
construir un rbol sintctico simulando de manera determinista un proceso no
determinista !
&isponiendo las reglas alternati'as en un determinado orden, aquel en que 'a$an
a ser seleccionadas, $ se apliquen las reglas de deri'acin $ entre ellas alguna de
las alternati'as, puede llegarse a un punto en que no es posible la continuacin
correcta del proceso( Podemos preguntarnos 4 $ si 3ubiera elegido otra
alternati'a5( As pues se retroceder des3aciendo las deri'aciones 3asta llegar a
una en que 3emos empleado una alternati'a $ queda alguna otra por aplicar(
Aplicar otra $ continuar el proceso( Si 3abiendo retrocedido $ elegido todas las
alternati'as de la gramtica no es posible construir el rbol sintctico para la
cadena de entrada, entonces $ slo entonces, se podr decir que esa entrada no
cumple con la sintaxis de la gramtica(
6
Programacin de Sistemas Anlisis Sintctico

Al2o(it1o .&(& +n &nlisis sintctico descendente con (et(oceso:
1( colocar las reglas de la gramtica en un orden establecido
2( construir el rbol desde el axioma aplicando los siguientes pasos de manera
recursi'a!
2(1( escoger para el nodo en expansin la 17 de las alternati'as
2(2( crear los n nodos descendientes . A a b c(((n /
2(6( el nodo en expansin pasa a ser el 18 de la izquierda .a/
2(6(1( si no 3a$ $a nodo a ser expandido se pasa al nodo derec3o ms
inmediato que pueda ser deri'ado
2(6(2( si el nodo en expansin es un terminal, compararle con el smbolo de
entrada .componente lxico/ actual!
2(6(2(1( si son iguales se a'anza un componente lxico
2(6(2(2( si son diferentes se retrocede al nodo inmediato anterior $ se
reintenta con una nue'a alternati'a para el padre(
En un anlisis descendente hay que eliminar la recursividad por la izquierda para
evitar bucles infinitos(
Sean las reglas alternati'as siguientes, algunas recursi'as $ otras no!
A A a1 9 A a2 9 b1 9 b2
. donde a1, a2, b1 $ b2 son cadenas de terminales $ % o no terminales/
Para eliminar la recursi'idad por la izquierda se introduce un nue'o no terminal
* !
A A a1 9 A a2 A b1 * 9 b2 *
b1 9 b2 * a1 * 9 a2 * 9 :
Para un anlisis ascendente con retroceso el procedimiento o algoritmo sera similar al
'isto para el descendente pero usando reducciones en 'ez de deri'aciones(
;
Programacin de Sistemas Anlisis Sintctico
3.-A!UINA DE "NUT#
)n e#emplo de parse descendente con retroceso
<aquina abstracta fcil de programar
=a#a 'elocidad, pero alto 'alor didctico
+omprueba si una sentencia pertenece al lengua#e dada su gramtica
+ada construccin tiene cuatro campos!
"tiqueta >peracin &ireccin 'erdad &ireccin falso
"n el campo de la etiqueta se escribe el smbolo no terminal de la parte izquierda
de la regla
"n el campo de operacin se escribe en 'ertical la parte derec3a de la regla( Los
no terminales entre corc3etes( Significa llamada a la funcin de ese no terminal(
"#emplo!
Sea S A 9 . S /
A = ? =
= b 9 c 9 d 9 . = @ =/
AAadir un *ue'o axioma con una regla que contenga el fn de cadena B S C
La entrada est compuesta de los siguientes componentes lxicos! . b @ c / ? c C
La especificacin de un analizador descendente con retroceso utilizando la mquina de
D*)EF!
"tiqueta >peracin Salida buena Salida mala
B! G S H
C
Ioto siguiente
A+"PEA2
Erat( "rror
Erat! error
S ! G A H 2eturn J Ioto sig ALE"2(
.
S
/
Ioto siguiente
Ioto siguiente
2eturn J
2eturn K
2eturn K
2eturn K
A ! G =H
?
G= H
Ioto siguiente
Ioto siguiente
2eturn J
2eturn K
2eturn K
2eturn K
= ! b 2eturn J Ioto sig( ALE"2(
c 2eturn J Ioto sig( ALE"2(
d 2eturn J Ioto sig ALE"2(
.
G=H
@
G=H
/
Ioto siguiente
Ioto siguiente
Ioto siguiente
Ioto siguiente
2eturn J
2eturn K
2eturn K
2eturn K
2eturn K
2eturn K
L
Programacin de Sistemas Anlisis Sintctico
Se dispone de un cursor a la entrada que no es mas que un contador ! i .inicializado a 1/
+uando en el campo de operacin 3a$ un terminal t , se compara dic3o terminal
con el smbolo a la entrada ai ( Si coinciden se 'a a la salida buena, se
incrementa el contador iMM $ se lee el siguiente carcter sigtecar .i/ a la entrada(
Si no coinciden se 'a a la salida mala(
+uando en el campo de operacin 3a$ un no terminal G * H se 'a a la etiqueta
cu$o nombre coincide con el del no terminal $ se analiza su campo de
operacin( +omo puede 3aber retroceso 3a$ que ser preca'idos, 3a$ que ir
guardando el 'alor del cursor para poder recuperarlo si 3ubiera retroceso $
'ol'er a seAalar un smbolo de entrada que $a 3aba sido comparado(as pues los
pasos seran!
o Sal'ar i ! isa'e N i O . supongamos que se guarda en isa'e/
o Llamar a la funcin . G *H/ del *o terminal entrando por la etiqueta .*!/
o Si la salida de la funcin se 3ace con un return J .true/ 'a a la salida
buena $ continua el anlisis( Si fuese con return K .false/ se retoma el
'alor del cursor que se guard pues 3abr retroceso(
La especificacin de la pgina anterior 3a$ que 'erla como un programa
estructurado en funciones!
o +ada fila sera una instruccin(
o +ada etiqueta marca una funcin (
o )na funcin pueden tener ms de una rama .ifPelse/, cuando en la regla
correspondiente 3a$ alternati'as(
o +uando 3a$ un return K, si 3a$ alternati'a indica que con la alternati'a
que se 3a analizado no se puede construir el rbol, por tanto 3a$ que
ensa$ar con otra alternati'a(
o Si 3a$ un return K $ no 3a$ $a ms alternati'as en el camino de retroceso
el anlisis da el diagnstico de cadena incorrecta(
Concl+siones del &nlisis sintctico con (et(oceso
+onstruccin fcil, aunque tedioso, pues se deduce inmediatamente de la misma
sintaxis(
Inconvenientes:
Lentitud de anlisis
"xcesi'a dependencia de la ordenacin de las reglas alternati'as
Pobre en el diagnstico, intenta todas las alternati'as 3asta decidir que la cadena
no es 'lida
&ificulta la generacin de cdigo, pues 3abra que eliminar el cdigo generado
al retroceder(
Q
Programacin de Sistemas Anlisis Sintctico
La traza para la entrada del e#emplo sera!
i ai
R
1 . B
S
A
=
bSN .
cSN .
dSN .
. NN .
2 b
=
b NNb 6 @
@NN@
; c
=
bSNc
cNNc
L /
/ NN /
Q ?
A
=
=
? NN ? R c
=
b SN c
c NN c
T C
A
S
B
C NN C
A+"PEA2
Programacin de Sistemas Anlisis Sintctico

2ecordemos!
caso de cdigo de operacin un terminal t!
o if .ai NN t / U iMM O ai N sigtecar.i/O resultado N trueO V
o else resultado N false
caso de cdigo de operacin no terminal G*H!
o isa'e N iO * ./ O
o if .Sresultado/ U i N isa'e O ai N sigtecar.i/O resultadoN falseOV
o else resultado N trueO
Jeamos el pseudocdigo de algunas funciones!
T
<ain B . /
int isa'e N WO
int i N WO
boolean resultadoO
c3ar aiO
aiNsigtecar.i/O
isa'eNiO
S ./O
if .Sresultado /
traterror./
else if .ai NN K&+/
A+"PEA2
else
traterror./O
S . /
int isa'e N WO
isa'e N iO
A . / O
if.resultado /U
resultado NtrueO
return resultadoO
V elseU
iN isa'eO
aiNsigtecar.i/O
if.ai NNX.X/U
iMMO
ai N sigtecar.i/O
resultado N true
isa'e N iO
S . /O
if.Sresultado/U
iNisa'eO
aiNsigtecar.i/O
resultado NfalseO
return resultadoO
VelseU
resultado N trueO
V
if.aiNNX/X/U
iMMO
aiNsigtecar.i/O
resultadoNtrueO
return resultadoO
VelseU
resultado N falseO
return resultadoO
V
VelseU
resultado NfalseO
return resultadoO
V
A. /
int isa'e N WO
isa'e NiO
=. /O
if.Sresultado/U
iNisa'eO
aiNsigtecar.i/O
resultadoNfalseO
return resultadoO
VelseU
resultadoNtrueO
if.aiNNX?X/U
iMMO
aiNsigtecar.i/O
isa'eNYO
= . /O
if.Sresultado/U
iNisa'eO
aiNsigtecar.i/O
resultadoNfalseO
return resultadoO
VelseU
rersultadoNtrueO
return resultadoO
V
VelseU
resultado NfalseO
return resultadoO
V
Programacin de Sistemas Anlisis Sintctico
$.- TRATAIENTO DE ERRORES SINTCTICOS3
La ma$ora de las especificaciones de los lengua#es de programacin no
describen cmo debe responder un compilador a los errores( Se de#a esa tarea al
diseAador(
Sera con'eniente considerar desde el principio el tratamiento de errores( Podra
simplificar la estructura del compilador(
Iran parte de la deteccin $ recuperacin de errores se centra en el analizador
sintctico!
o Pues la ma$ora de los errores son de naturaleza sintctica o se
manifiestan en esa fase(
o Iracias a la precisin de los mtodos modernos de anlisis(
La deteccin exacta de errores semnticos $ lgicos es muc3o ms difcil(
O45eti,os del &ne5&do( de e((o(es3
Ynformar de los errores con claridad $ exactitud
2ecuperarse de cada error con suficiente rapidez como para detectar errores
posteriores(
*o retrasar significati'amente el procesamiento de programas correctos(
Est(&te2i&s de (ec+.e(&ci-n de e((o(es3
odo .nico3
&esec3ar smbolos de entrada 3asta encontrar uno que pertenece a un con#unto
llamado de sincronizacin .generalmente delimitadores, ZOX, "*&, etc(/
Inconveniente! omite muc3o anlisis de entrada
Ventajas!
Sencillez
Alto rendimiento coste % eficacia(
Iaranta contra lazos infinitos
Adecuado cuando 3a$ pocos errores m,ltiples(
En el ni,el de 6(&se3
Al detectar un error realiza una correccin local de la entrada restante( "#emplo(
Sustituir un prefi#o por una cadena que permita seguir el anlisis . sustituir Z,X
por ZOX, suprimir ZOX sobrante, insertar ZOX/
Iran peligro con las sustituciones! puede producir lazos infinitos(
Desventaja! dificultad cuando el error real se produ#o antes del lugar de la
deteccin(
0(od+cciones de e((o(3
Si se tiene informacin sobre los errores ms comunes se aumentan las reglas de
la gramtica con reglas que generan construcciones errneas, que a su 'ez
generan diagnsticos(
Co((ecci-n 2lo4&l3
Algoritmos para elegir una secuencia mnima de cambios para conseguir una
correccin global con el menor coste(
[
Programacin de Sistemas Anlisis Sintctico
Ymplantacin costosa en tiempo $ en memoria( Actualmente slo tiene inters
terico(
%.- ANLISI SINTCTICO DESCENDENTE SIN RETROCESO.
Nociones 2ene(&les

"l o45eti,o es construir el rbol de anlisis sintctico desde la raz .axioma/ 3asta
las 3o#as .terminales/ sin retroceso( Si es posible se dir que el fragmento de
lengua#e analizado es correcto sintcticamente(
Para que no haya retroceso se ha de saber qu regla alternativa debe ser derivada.
Se 'ern dos tcnicas!
&escenso (ec+(si,o
&escenso no (ec+(si,o, utilizando una t&4l&(
Se analizarn lengua#es que responden a 2(&1tic&s LL)1*! aquellas que le$endo
un solo smbolo a la entrada se sabe qu re!la alternativa 3a de ser -expansionada1
.deri'ada/(
"e puede saber si una !ramtica es ##$%& o no. =astar que cumpla cierta condicin
que se 'er ms adelante(
No existe un algoritmo que transforme una !ramtica cualquiera en una ##$%&,
aunque en al!unos casos se puede transformar con'irtindola en LL.1/!
%. Eliminando recursividad por la i'quierda
A A a .a,b! cadenas de smbolos terminales $ no terminales( A no terminal/
A b
Se transforma en A b AX
AX a AX 9
(. )actori'ando por la i'quierda
A a b
A a c
Se transforma en A a AX
A\ b 9 c
1W
Programacin de Sistemas Anlisis Sintctico
%.1.- An&li'&do( sintctico LL)1* (ec+(si,o.
Por el momento 'amos a retrasar en el tiempo el conocer las condiciones que debe
cumplir un lengua#e para ser LL.1/( Jamos a dar por 3ec3o que 'amos a analizar uno
que lo sea( "n ese caso bastar saber qu smbolo 3a$ a la entrada para elegir la regla
alternati'a que empiece con ese mismo terminal( Podemos utilizar una 'ariante de la
mquina de D*)EF!
AAadiendo la pregunta de qu smbolo 3a$ a la entrada .llamado smbolo de
preanlisis/
"liminando la 'ariable booleana resultado( "n el momento que algo falle $a no
es necesario retroceder ni seguir! el diagnstico es que la cadena es no 'lida(
Fagmoslo con un e#emplo!
= & ] P
& & O & 9 id tipo E eliminar la recursi'idad por la izquierda!
E int 9 real & id tipo E &X
P P O P 9 id N " 9 if + t3en P &X O & &X 9 :
" " M " 9 id 9 num 9 . " / P id N " PX 9 if + t3en P PX
+ id NN id PX O P PX 9 :
" id "X 9 num "X 9 . " / "X
"X M " "X 9 :
=X! G = H
C A+"PEA2
=! G & H
]
G P H return
&! Yd
Eipo
G E H
G &X H return
E! Preanlisis N N int int return
Preanlisis N N real real return
Preanlisis N N otro Eraterror ./
&X Preanalisis NN ZOX O
G & H
G &X H return
: no 3acer nada return Preanalisis NNotro
P! Preanlisis N N id Yd
N
G " H
G PX H return
Preanlisis N N if Yf
G " H
t3en
G P H
G PX H return
Preanlisis N N otro Eraterror . /
11
Programacin de Sistemas Anlisis Sintctico
PX! Preanlisis N N O O
G P H
G PX H return
Preanlisis N N otro : . no 3acer nada/ return
"! Preanlisis N N Z.Z .
G " H
/
G "X H return
Preanlisis N N id Yd
G "X H return
Preanlisis N N num *um
G "X H return
Preanlisis N N otro Eraterror ./
"X! Preanlisis N N ZMZ M
G " H
G "X H return
Preanlisis N N otro : . no 3acer nada / return
+! id
N
N
id return
"n el pseudocdigo para cada funcin 3a$ una sentencia que se repite!
preanlisis N sigtecomlex. /O
si incluimos esta sentencia en la siguiente funcin!
'oid concuerda . complex t/ U
if.preanlisis N N t/
preanlisis N sigtecomplex./O
else
traterror ./O
V
Aunque en la ma$ora de los casos pueda ser redundante queda ms claro desde un
punto de 'ista conceptual!
Para el resto de funciones se sigue el mismo criterio(
12
=X . /
preanlisis N sigtecomplex./O
= . /O
if.preanalisis N N C/
mensa#e .aceptar/O
else
traterror./O
= . /
& . /O
concuerda .]/O
P . / O
return
P. /
s^itc3.preanalisis/U
case id! concuerda.id/O
concuerda.N/O
". /O
PX . /O
brea0O
case if! concuerda.if/
". /O
concuerda .t3en/O
P. /O
PX. /O
brea0O
default! traterror. /O
Vreturn
PX. /
s^itc3.preanalisis/U
caseXOX! concuerda.O/O
P . /O
PX. /O
brea0O
default!
Vreturn
Programacin de Sistemas Anlisis Sintctico
%.2.- Condici-n .&(& se( LL)1*.
"n primer lugar 'eamos una serie de definiciones!
De6iniciones de CA7ECERA 8 SI9UIENTE
Sea A P2Y<"2> a si(((((((((((((( A a _ . este ,ltimo representa una cadena de
terminales $ no terminales/
Sea A P2Y<"2>M a si((((((((( A A1 _1
A1 A2 _2
A2 A6 _6
(((((((((((((((((((((
An a _nM1
Si A tiene 'arias alternati'es! A _1 9 _2 9 _6 9(((((((( 9 _n
Se llamar +A="+"2A .A/ al con#unto de todos los A P2Y<"2>M de todas las
alternati'as(
Si se tiene = _ A ` ((((((( SYI)Y"*E" .A/ sern todos los P2Y<"2>SM de `
Si ` fuera anulable se aAadirn los SYI)Y"*E".=/(
CONDICIN para que sea LL.1/!
Eomar las reglas que tienen alternati'as(
Sea A a1 9 a2 .a1 $ a2 son cadenas de terminales $ % o no terminales/!
+A=.a1 SYI.A// Y*E"2S"++Ya* +A=.a2 SYI.A// N b
CONSTRUCCIN DE CA7ECERA : SI9UIENTE
+A="+"2AS!
Si A a cadena aAadir ZaX a +A=.A/
Si A : aAadir : a +A=.A/
Si A B1 B2 B6 (((((Br .Bn son *> E"2<Y*AL"S/
o Yncluir smbolos no nulos de +A=.B1/ en la +A=.A/
o Si : est en +A=.B1/ , aAadir tambin la +A=.B2/
o Si : est en +A=.B2/ , aAadir tambin la +A=.B6/
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
o si : est en +A=.Br/ aAadir : a +A=.A/(
SYI)Y"*E"S!
Si S es axioma incluir C .fin de cadena/ a SYI.S/
16
Programacin de Sistemas Anlisis Sintctico
Si A a=b .a $ b cadenas, = no terminal/ , aAadir +A=.b/ a SYI.=/
Si Aa= o A a=b $ b @ : incluir todos los SYI.A/ a SYI.=/
1;
Programacin de Sistemas Anlisis Sintctico
Se&3
0 D e S .
D id L ; < =
L > id L < =
S id ? id < 4 S R end
R ; S R < =
&iagramas de +>*cAd
03
e .
D3
id L ;
=
L3
> id =
= id >
S3
id ? id
4 S R end
R3
; S =
= S ;
1L
S
Programacin de Sistemas Anlisis Sintctico
+ab .P/ N Uid eV Sig.P/NUC V
+ab .&/ N Uid :V Sig.&/NUeV
+ab .L/ N U, :V Sig.L/NUOV
+ab .S/ N Uid bV Sig.S/NUpO endV
+ab .2/ N UO :V Sig.2/NUendV
@Es LL)1*A
+ab. id L O / N U id V
+ab .: Sig .&/ / N U eV
+ab., id L / N U , V
+ab .: Sig .L/ / N U OV
+ab. id N id / N U id V
+ab .b S 2 end/ N UbV
+ab. O S 2 / N U O V
+ab .: Sig .2/ / N U endV
Eodos dis#untos luego es LL.1/
%.3.- An&li'&do( sintctico descendente no (ec+(si,o
)tilizar una pila $ una tabla que le indique qu alternati'a debe escoger
Su estructura ser!
1Q
M a b
Eo0ens a la entrada
B
d
e
C
pila
d
(
Algoritmo salida
Eabla de anlisis sintctico
E G A, a H
<atriz bidimensional
Programacin de Sistemas Anlisis Sintctico
Ynicialmente en la pila estar el axioma $ el fin de cadena(
"l &l2o(it1o ser el siguiente!
Leer el smbolo en el tope de la pila! x
Leer el terminal en curso a la entrada! a
Si x N a N C .fin de cadena/ al A*ASY*E A+"PEA la cadena(
Si x N N a saca x de la pila $ mue'e el cursor de la entrada al siguiente to0en
Si B es un *> E"2<Y*AL consulta la tabla E G B, a H resultando!
)na regla de la gramtica B ) J c "l programa
sustitu$e B en el tope de la pila por ) J c . ) en el tope/(
)n error( "l programa 'a al tratamiento de errores(
Para construir la tabla se 3a de calcular pre'iamente los con#untos +A="+"2A d
SYI)Y"*E"(
0ASOS 0ARA CONSTRUIR LA TA7LA3
1( +alcular +A= $ SYI de todos los no terminales
2( Para cada A a . a cadena/ realizar los pasos 6 $ ;
6( Para cada t de +A=.A/ aAadir la regla Aa a EA=LAG A,tH
;( Si : est en +A=.A/ aAadir A : en EA=LAGA,mH si m est en
SYI.A/ .m puede ser C/(
Para el e#emplo anterior!
e . id ; > ? 4 end B
0
0DeS
.
0DeS
.
D D = DidL;
L L= L>idL
S Sid?id S4SRen
d
R
R;SR R=
1R
Programacin de Sistemas Anlisis Sintctico
2ealizar la traza del analizador para la entrada id > id ; e 4 id ? id ; id ? id end .
0il& ToCen &cci-n
PC id
P & e S p
& e S pC id
& id L O
id L O e S p C id Sacar $ a'anzar
L O e S p C ,
L , id L
, id L O e S p C , Sacar $ a'anzar
id L O e S p C id Sacar $ a'anzar
L O e S p C O
L :
Oe S p C O Sacar $ a'anzar
e S p C e Sacar $ a'anzar
S p C b
S b S 2 end
b S 2 end p C b Sacar $ a'anzar
S 2 end p C id
S id N id
id N id 2 end p C id Sacar $ a'anzar
N id 2 end p C N Sacar $ a'anzar
id 2 end p C id Sacar $ a'anzar
2 end p C O
2 O S 2
O S 2end p C O Sacar $ a'anzar
S 2 end p C id
S id N id
id N id 2 end p C id Sacar $ a'anzar
N id 2 end p C N Sacar $ a'anzar
id 2 end p C id Sacar $ a'anzar
2 end p C end
2 :
end p C end Sacar $ a'anzar
p C p Sacar $ a'anzar
C C A+"PEA2
O7SERDACIONES so4(e l& de.endenci& del conteEto
"n los lengua#es de programacin 3a$ construcciones dependientes del contexto(
*o se pueden analizar con los A*ASY*E pues estos reconocen slo los
lengua#es dgenerados por una gramtica libre de contexto
Se resuel'en mediante acciones semnticas
Jeamos dos de ellas!
L1 U ^ c ^ 9 ^ .a 9 b/@ V
Sera el caso de la obligatoriedad de declarar 'ariables antes de usarlas
L2 U a
n
b
m
c
n
d
m
V n?N 1, m ?N 1
Sera el caso de comprobar si el n,imero de parmetros formales en la
declaracin de una funcin coincide con el n,mero de parmetros reales(
1T
Programacin de Sistemas Anlisis Sintctico
/.- ANLISIS SINTCTICO ASCENDENTE
"n este tipo de anlisis 3a$ que resol'er dos problemas!
Situar la subcadena a ser reducida en forma de parte derec3a de una regla(
&eterminar qu regla elegir .en el caso de que 3a$a ms de una que pueda ser
reducida/(
Se utilizar una pila que ser inicializada con el smbolo de fin de cadena( +omparando
la cima de la pila en cualquier momento con el to0en de entrada, el analizador tomar
una de estas cuatro acciones!
&esplazar smbolos .to0ens/ a la pila 3asta que un pi'ote . subcadena
susceptible de ser reducida/ se encuentre en la cima(
2educir sustitu$endo el pi'ote por la parte izquierda de la regla
Aceptar la cadena de ntrada dndola 'lida sintcticamente, cuando en la pila se
3alle el smbolo de fin de cadena $ el axioma $ en la entrada se tenga el smbolo
de fin de cadena(
"rror
"n general, en un lengua#e generado por una gramtica libre de contexto, se puede dar
dos tipos de conflictos!
&e desplazamientoPreduccin, cuando conociendo el contenido de la pila $ el
simbolo a la entrada no se puede decidir si desplazar o reducir(
&e reduccinPreduccin, cuando no se puede decidir qu regla aplicar para
reducir(
Fa$ otras gramticas que analizando 0 smbolos a la entrada por anticipado se puede
decidir qu regla reducir( Son las llamadas L2.0/(
)na gramtica ambigfa no puede ser L2 , pero se pueden 3acer fciles adaptaciones en
el analizador para e'itar los conflictos( "#emplo! el else ambigfo( Se aAade la norma de
que el else 'a con el t3en ms cercano $ esto se resuel'e forzando el desplazamiento en
un conflicto de desplazamientoPreduccin(
1[
Programacin de Sistemas Anlisis Sintctico
/.1.- Anlisis sintctico de 0(ecedenci& Si1.le.
"st basado en las relaciones llamadas de -Precedencia1 que 3a$ entre los smbolos de
entrada, teniendo como ob#eti'o localizar una subcadena para la que exista una
reduccin $ con sucesi'as reducciones llegar al axioma(
"#emplo!
S a A a (((((((((((((((((( a igual precedencia que A .aMPA/,
A igual precedencia que a .AMPa/
A b = ggggg .b MP=/ $ no la simtrica
A c
= A c dgggg( .AMPc/, .cMPd/
&esarrollando todos los posibles rboles!
a menor precedencia que b .ab/
.b MP=/ , .=a/ , .b A/, .bc/ , .cPP?c/, .dPP?a/
As con todos los posibles rboles
Si 3a$ como mximo una relacin
de precedencia entre cada pare#a
3a$ un pi'ote susceptible de ser
reducido
Si todas las relaciones encontradas se resumen en una tabla!
S & A 7 c 4 d B
S

& MP

A MP MP

7

c MP

4 MP

d

B

Los blancos de la tabla representan errores(
La cadena susceptible de ser reducida es la que se encuentre entre ((($ (((((
2W
S
a A a
MP MP
S
a A
a
b
=
A c d
c

MP

Programacin de Sistemas Anlisis Sintctico


"l algoritmo de reconocimiento para precedencia simple!
1( Smbolos de entrada leidos de izquierda a derec3a
2( Se 'an introduciendo en una pila 3asta 3allar una relacin .desplazamiento/
6( Ynspeccionar el interior de la pila 3asta 3allar una relacin ( "l pi'ote est
entre $ (
;( Ynspeccionar las partes derec3as de las reglas $ decidir qu reduccin
L( Sustituir en la pila el pi'ote por la parte izquierda de la regla(
Q( 2epetir los pasos anteriores(

"#emplo! con la gramtica anterior, la tabla 3allada, escribir la traza del analizador para
la cadena! a b c c d a
0il& Rel&ci-n
0(ecedenci&
ToCen leFdo C&den& (est&nte
C

a bccdaC
Ca

b ccdaC
Cab

c cdaC
Cab c
c daC
CabA MP c daC
CabAc MP d aC
Cab Acd
a C
Ca b=
a C
CaA MP a C
C aAa
C
CS C
21
Programacin de Sistemas Anlisis Sintctico
/.2.- Anlisis sintctico de 0(ecedenci& de O.e(&do(es.
Para que sea una gramtica de >peradores se deben de cumplir !
*inguna parte derec3a es 'aca .:/
*o tiene 2 *> E"2<Y*AL"S adyacentes
Las relaciones entre los smbolos se establecen de manera similar a las de precedencia
simple, pero a3ora las tres relaciones de precedencia slo se establecen entre smbolos
terminales, siendo los no terminales transparentes para estos efectos(
"l algoritmo es el mismo que el de precedencia simple, slo cambia que las relaciones
se establecen entre los terminales( +omo se 3a dic3o antes los no terminales son
transparentes para establecer relaciones, slo sir'en para reconocer los pi'otes $ ser
reducidos como parte integrante de una parte derec3a de una regla(
Aunque slo una pequeAa clase de gramticas puede analizarse mediante este mtodo,
por su sencillez se usa con gran xito para expresiones aritmticas(
@ C-1o dete(1in&( l&s (el&ciones de 0(ecedenci& de O.e(&do(es A
Yntuiti'amente, basndose en nociones de &soci&ti,id&d $ .(io(id&d
Sea una gramtica no ambigfa para las expresiones aritmticas!
" " M E 9 " h E 9 E
E E @ K 9 E % K 9 K
K id 9 . " /
Para establecer las relaciones los no terminales son transparentes , es decir es como si
fueran el mismo no terminal( =ien, aplicaremos este artificio $ transformaremos la
gramtica en -esqueltica1!
" " M " 9 " h " 9 " @ " 9 " % " 9 . " / 9 id
A3ora trataremos de incluir prioridades $ asociati'idades en las relaciones!
Sea >P1 de ma$or prioridad que el >P2!
>P1 >P2 @ M
>P2 >P1 M @
Sea >P1 $ >p2 de igual prioridad!
Si 3a$ asociati'idad por la izquierda
>P1 >P2 M M, M P, P P, P M
>P2 >P1 @ @, @ %, % %, % @
Si 3a$ asociati'idad por la derec3a
>P1 >P2
>P2 >p1
Para los operadores unarios, si es de ma$or prioridad que otro >pu >P, caso
contrario >pu >P
22
Programacin de Sistemas Anlisis Sintctico
2esumiendo!
>P1 ma$or prioridad que >P2! O01 O02 $ O02 O01g(( @ M $ M
@
>P1 $ >P2 son el mismo operador o dos operadores de la misma prioridad!
- si son asociati'os por la izquierda!
O01 O02 $ O02 O01 gM M , M P , P P , P M
- si son asociati'os por la derec3a!
O01 O02 $ O02 O01 g( @@ @@
)n operador $ el terminal id! O0 id 8 id O0
)n operador $ abre parntesis! O0 ) $ ) O0
)n operador $ cierra parntesis! O0 * $ * O0
)n operador $ el delimitador! O0 B $ B O0
Abre $ cierra parntesis! ) G- *
Abre $ abre parntesis ! ) )
+ierra $ cierra parntesis! * *
Abre parntesis $ terminal id! ) id
+ierra parntesis $ terminal id! id *
&elimitador $ abre parntesis! B )
&elimitador $ cierra parntesis! * B
&elimitador $ terminal id! id B $ B id
>perador binario $ uno unario! O0 O0U
$ si >P) es de ma$or prioridad que >P! O0U O0
caso contrarioggggggggggg(O0U O0
G - H I HH Id ) * B
G

-

H

I

HH

Id

)

G-
*

B

Fa$ un problema con el operador P, pues se usa tanto binario como unario(
"n cadenas como id @ P id podra 3aber un error que no se reconoce(
"l analex debera en'iar un to0en diferente lo que significa que debera recordar el
to0en anterior( Si ste fuera -op1 Z.Z ZOX Z!NX el h que llega es unario
26
Programacin de Sistemas Anlisis Sintctico
La traza del analizador para la cadena id @ id @ .id M id / C, sera!
0il& Rel&ci-n ToCen leFdo C&den& (est&nte
C

id @ id M . M id / C
Cid

@ id @ . id M id / C
C"

@ id @ . id M id / C
C"@

id @ . id M id / C
C"@id

@ . id M id / C
C"@"

@ . id M id / C
C"

@ . id M id / C
C"@

. id M id / C
C"@.

id M id / C
C"@.id

M id / C
C"@."

M id / C
C"@."M

id /C
C"@."Mid

/ C
C"@."M"

/ C
C"@." MP / C
C"@."/

C
C"@"

C
C" C
J+nciones de 0(ecedenci&
Los A*ASY*E de precedencia de operadores no necesitan almacenar la tabla( "sta se
codifica mediante dos funciones llamadas de precedencia f g que E2A*SK>2<A*
los smbolos terminales en ente(os de tal manera que!
f.a/ i g.b/ cuando ab
f.a/ N g.b/ cuando aMPb
f.a/ ? g.b/ cuando a b
Se pueden establecer las relaciones mediante comparacin numrica entre f(a) y g(b)
Ktodo .&(& o4tene( l&s 6+nciones de 0(ecedenci&
1( +rear smbolos fa $ ga para cada a que sea terminal o C
2( &i'idir los smbolos creados en grupos seg,n!
2(1( si .a MP b/ fa $ gb estarn en el mismo grupo
2(2( si .aMPb/ $ .cMPb/ fa $ fc estarn en el mismo grupo
6( +rear el grafo dirigido
;( Si 3a$ ciclos no existen funciones de Precedncia
2;
Programacin de Sistemas Anlisis Sintctico
L( "l 'alor de f.a/ ser la longitud del camino ms largo 3asta f.C/ o g.C/
Sea la tabla!

id G H B
id

G

H

B

Se constru$e el grafo!
Ynclu$endo parntesis las funciones seran!
id G - H I ) * B
6)&* $ 2 2 $ $ 1 $ L
2)4* % 1 1 3 3 % 1 L
2L
fid gid
fM gM
f@ g@
fC gC
;
L
2
1
;
6
W
W
id M @ C
f
g
Sera error pero con las
funciones no se detecta
directamente, pues!
f.id/ i g.id/ por tanto sale el
absurdo id id
Puede resol'erse en tiempo
de reduccin cuando
existiendo una relacin
ficticia, el A*ASY*E no sea
capaz de encontrar un pi'ote
$ las funciones resulten ser
f.id/ $ g.id/
Programacin de Sistemas Anlisis Sintctico
Jeamos la traza del A*ASY*E con funciones de Precedencia para la cadena de entrada!
id @ .id Mid/ C
0il& 6)&* Rel&ci-n 2)4* Ent(&d&
C W

L id @ .id Mid /C
Cid ;

6 @ .id Mid /C
C" W

6 @ .id Mid /C
C"@ ;

L .id Mid /C
C"@. 1

L id Mid /C
C"@.id ;

1 Mid /C
C"@." W

1 Mid /C
C"@."M 2

L id /C
C"@."Mid ;

1 /C
C"@."M" 2

1 /C
C"@." 1 MP 1 /C
C"@."/ ;

W C
C"@" ;

W C
C" C
/.3.- Anlisis Sintctico LR)1*.
"s una clase mu$ amplia de gramticas libre de contexto con una tcnica mu$ eficiente(
Dent&5&s3
Puede reconocer practicamente todas las construcciones de los lengua#es de
programacin generados por gramticas de libre contexto(
"s el mtodo por -desplazamnientoPreduccin1 mas general conocido $ mu$
eficaz(
La clase de gramticas L2.0/ es un supracon#unto de las grmticas LL.0/(
Puede detectar un error tan pronto como sea posible en un examen de izquierdaP
derec3a de la entrada(
Incon,enientes3
<as comple#os de diseAo $ uso(
2Q
Programacin de Sistemas Anlisis Sintctico
Se 3ace necesaria una 3erramienta .generador de L2/(
Est(+ct+(& de +n &n&li'&do( LR.
+onsta de pila, un algoritmo $ una tabla(
"l &l2o(it1o es simple e in'ariante de un A*ASY*E a otro
La t&4l& 'ara de una gramtica a otra( "s difcil de construir( "s la esencia del
A*ASY*E( +onsta de dos tablas!
La t&4l& de &cci-n, accin.s,t/ .s ! estado, t! smbolo a la entrada/!
&esplazar
2educir la regla i
Aceptar
"rror
La t&4l& de i(-&, goto.s1, x / N s2 !
Eoma como argumentos un estado $ un smbolo de la gramtica
Produce otro estado
"n realidad es una funcin de transiciones de un autmata
finito,cu$os smbolos de entrada son terminales $ no terminales(
La .il&, que contiene estados -tapando1 los smbolos de la gramtica!
SW B1S1 B2S2((((((((((((BmP1SmP1 BmSm
Los estados representan la informacin contenida en la pila, son
utilizados para decidir qu reduccin o qu desplazamiento(
La con6i2+(&ci-n inici&l ser!
" la pila el estado inicia SW
"n la entrada, los to0ens a la entrada! a1 a2 a6 ((((( an C
2R
a1 gg ai gg(( an C
Algoritmo para el
A*ASY*E L2
salida Sm
Bm
SmP1
BmP1
(
(
(
(
SW
Eabla de anlisis
tabla
Accin
tabla
YrPa
Programacin de Sistemas Anlisis Sintctico
Al2o(it1o del ANASINT LR
1( &eterminar el estado Sm en el tope de la pila $ el smbolo actual a la entrada ai
2( +onsultar la funcin accin!
2(1( accon.Sm,ai/N desplazar
2(1(1( introduce ai en la pila
2(1(2( encabeza la pila con el nue'o estado goto.Sm,ai/NS
2(2( accon.Sm(ai/ N reducir la regla #
2(2(1( e#ecuta la reduccin en la pila !
.#/ A BmPrM1 BmPrM2(((((((Bm
.r longitud de la parte derec3a de la regla/
2(2(2( encabeza la pila con nue'o estado goto.Sn,A/N S
2(6( accin.Sm,ai/N aceptar( Kin del reconocimiento
2(;( accin.Sm,ai/Nerror( Acti'a las rutinas de tratamiento de errores(
"#emplo!
&ada la gramtica!
.1* S P? S GT , .2/ S P? T , .6/ T P? TH J , .;/ T P? J , .L/ J P? ) S * , .Q/ JP? id $ las tablas
siguientes!
ACTION 9OTO
ES
TA
DO
id G H ) * B id G H ) * B S T J
L & " " & " " L ; 1 2 6
1 " & " " " A+ Q
2 " 22 & " 22 22 R
3 " 2; 2; " 2; 2;
$ & " " & " " L ; T 2 6
% " 2Q 2Q " 2Q 2Q
/ & " " & " " L ; [ 6
M & " " & " " L ; 1W
N " & " " & " Q 11
O " 21 & " 21 21 R
1L " 26 26 " 26 26
11 " 2L 2L " 2L 2L
Siendo & N desplazar, 2i N reducir con la regla n8 .i/, " N error, A+ N aceptar $ los n,meros de I>E>
los nue'os estados(
&escribir la traza del contenido de la pila para reconocer la tira idH)idGid*
2T
ai aiM1 ((((
S
ai
Sm
Bm
(
(
SW
Sm
Bm
(((
(((
SmPrM1
BmPrM1
Sn
Bn
((
((
SW
Al reducir por A
S
A
Sn
Bn
((
((
SW
A
Programacin de Sistemas Anlisis Sintctico
0il& Ent(&d& Acci-n
W id@.idMid/C
&L! idL
WidL @.idMid/C
2Q!Kid,,goto.W,K/N6
WK6 @.idMid/C
2;!EK,,goto.W,E/N2
WE2 @.idMid/C
&R! @R
WE2@R .idMid/C
&;! .;
WE2@R.; idMid/C
&L! idL
WE2@R.;idL Mid/C
2Q! Kid,,goto.;,K/N6
WE2@R.;K6 Mid/C
2;!EK,,goto.;,E/N2
WE2@R.;E2 Mid/C
22!SE,,goto.;,S/NT
WE2@R.;ST Mid/C
&Q! MQ
WE2@R.;STMQ id/C
&L! idL
WE2@R.;STMQidL /C
2Q!Kid,,goto.Q,K/N6
WE2@R.;STMQK6 /C
2;!EK,,goto.Q,E/N[
WE2@R.;STMQE[ /C
21!SSME,,goto.;,S/NT
WE2@R.;ST /C
&11! /11
WE2@R.;ST/11 C
2L! K.S/,,goto.R,K/N1W
WE2@RK1W C
26! EE@K,,goto.W,E/N2
WE2 C
22! S E,,goto.W,S/N1
WS1 C aceptar
2[

También podría gustarte