Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Planasint 3
Planasint 3
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