Está en la página 1de 43

t

Universidad Nacional del Santa


Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
1odo lengua[e de programacln tlene reglas que prescrlben la estructura slntctlca
de programas blen lormados. Ln ascal, por e[emplo, un programa se compone de
bloques, un bloque de proposlclones, una proposlcln de expreslones, una
expresln de componentes lexlcos, y asl suceslvamente.
Se puede descrlblr la slntaxls de las construcclones de los lengua[es de
programacln por medlo de gramtlcas lndependlentes del contexto o notacln 8nl
(lorma de 8ackus - naur). Las gramtlcas olrecen venta[as slgnlllcatlvas a los
dlsenadores de lengua[es y programadores de complladores.
una gramtlca da una especlllcacln slntctlca preclsa y lcll de entender de un
lengua[e de programacln.
A partlr de algunas clases de gramtlcas se puede construlr automtlcamente un
anallzador slntctlco ellclente que determlne sl un programa luente est
slntctlcamente blen lormado.
una gramtlca dlsenada adecuadamente lmparte una estructura a un lengua[e de
programacln utll para la traduccln de programas luente a cdlgo ob[eto correcto y
para la deteccln de errores.
Los lengua[es evoluclonan con el tlempo, adqulrlendo nuevas construcclones y
reallzando tareas adlclonales. Lstas nuevas construcclones se pueden anadlr con
ms lacllldad a un lengua[e cuando exlste una apllcacln basada en una descrlpcln
gramatlcal del lengua[e
L P4PL uL 4N4Ll24uOk 5lN14c1lcO
Ln este modelo de compllador, el anallzador slntctlco obtlene una cadena de
componentes lexlcos del anallzador lexlco, como se muestra en la llgura y
comprueba sl la cadena pueda ser generada por la gramtlca del lengua[e luente. Se
supone que el anallzador slntctlco lnlormar de cualquler error de slntaxls de
ANALI SI S SI NTACTI CO
lN1kOuucclON
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
manera lntellglble. 1amblen deberla recuperarse de los errores que ocurren
lrecuentemente para poder contlnuar procesando el resto de su entrada.
Los metodos empleados generalmente en los complladores se claslllcan como
descendentes o ascendentes. Como sus nombres lndlcan, los anallzadores
slntctlcos descendentes construyen rboles de anllsls slntctlco desde arrlba (la
ralz) hasta aba[o (las ho[as), mlentras que los anallzadores slntctlcos ascendentes
comlenzan en las ho[as y suben hacla la ralz. Ln ambos casos, se examlna la entrada
al anallzador slntctlco de lzqulerda a derecha, un slmbolo a la vez.
Los metodos descendentes y ascendentes ms ellclentes traba[an slo con subclases
de gramtlcas, pero varlas de estas subclases, como las gramtlcas LL y L8, son lo
sullclentemente expreslvas para descrlblr la mayorla de las construcclones
slntctlcas de los lengua[es de programacln. Los anallzadores slntctlcos
lmplantados a mano a menudo traba[an con gramtlcas LL1, por e[emplo, el metodo
de la seccln 2.4 construye anallzadores slntctlcos para gramtlcas LL1. Los
anallzadores slntctlcos para la clase ms grande de gramtlcas L8 se construyen
normalmente con herramlentas automatlzadas.
Monejo de rrores
Sl un compllador tuvlera que procesar solo programa correctos, su dlseno e
lmplantacln se slmpllllcarlan mucho. ero los programadores a menudo escrlben
programas lncorrectos y un buen compllador deberla ayudar al programador a
ldentlllcar y locallzar errores
Se sabe que los programas pueden contener errores de muy dlverso tlpo. or
e[emplo, los errores pueden ser:
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Lexlcos, como escrlblr mal un ldentlllcador, palabra clave u operador.
Slntctlcos, como una expresln arltmetlca con parentesls no equlllbrados.
Semntlcos, como un operador apllcando a un operando lncompatlble.
Lglcos, como una llamada lnllnltamente recurslva.
A menudo, gran parte de la deteccln y recuperacln en un compllador se centra en
la lase de anllsls slntctlco. una razn es que muchos errores son de naturaleza
slntctlca o se manlllestan cuando la cadena de componentes lexlcos que provlene
de un anallzador lexlco desobedece las reglas gramatlcales que dellnen al lengua[e
de programacln.
Ll mane[ador de errores en un anallzador slntctlco tlene ob[etlvos lclles de
establecer:
uebe lnlormar de la presencla de errores con clarldad y exactltud.
Se debe recuperar de cada error con la sullclente rapldez como para detectar
errores posterlores.
no debe retrasar de manera slgnlllcatlva el procesamlento de programas
correctos.
varlos metodos de anllsls slntctlco, como los metodos LL y L8, detectan un error
lo antes poslble. Ls declr, tlenen la propledad del prell[o vlable, lo cual qulere declr
que detectan la presencla de un error nada ms ver un prell[o de la entrada que no
es prell[o de nlnguna cadena del lengua[e.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Muchas construcclones de los lengua[es de programacln tlenen una estructura
lnherentemente recurslva que se puede dellnlr medlante gramtlcas
lndependlentemente del contexto. or e[emplo, se puede tener una proposlcln
condlclonal dellnlda por una regla como:
Sl 51 y 52 son proposlclones y L es una expresln, entonces:
ll then 51 else 52" es una proposlcln.
no se puede especlllcar esta lorma de proposlcln condlclonal usando la notacln
de las expreslones regulares .
Sl utlllzamos la varlable slntctlca prop para denotar la clase de las proposlclones y
expr para la clase de las expreslones, ya se puede expresar la proposlcln usando la
produccln gramatlcal.
ptop |f expt then ptop e|se ptop
1. Los termlnales son los slmbolos bslcos con que se lorman las cadenas.
Componente Lexlco" es un slnnlmo de termlnal" cuando se trata de
gramtlcas para lengua[es de programacln. (|f, then, e|se).
2. Los no termlnales son varlables slntctlcas que denotan con[untos de
cadenas. (ptop y expt son no termlnales). Los no termlnales dellnen con[untos
de cadenas que ayudan a dellnlr el lengua[es generado por la gramatlca.
3. Ln una gramtlca, un no termlnal es conslderado como el slmbolo lnlclal, y el
con[unto de cadenas que representa es el lengua[e dellnldo por la gramtlca.
4. Las producclones de una gramtlca especlllcan como se pueden comblnar los
termlnales y los no termlnales para lormar cadenas. Cada produccln consta
de un no termlnal, seguldo por una llecha (a veces se usa el slmbolo ::==, en
lugar de la llecha), segulda por una cadena de no termlnales y termlnales.
6romtico Libre de contexto
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
convenciones de Notocin
ara evltar tener que establecer slempre que estos son los termlnales",
estos son los no termlnales", etc., a partlr de ahora se emplearn las
slgulentes convenclones de notaclones con respecto a las gramtlcas:
1. Lstos slmbolos son termlnales:
a. Las prlmeras letras mlnusculas del allabeto, como a, b, c.
b. Los slmbolos de los operador, como +, -, etc.
c. Los slmbolos de puntuacln, como parentesls, coma, etc.
d. Los dlgltos 0, 1, . 9.
e. Cadenas en negrltas como |d o |f.
2. Lstos slmbolos son no termlnales:
a. Las prlmeras letras mayusculas del allabeto, como A, 8, C.
b. La letra 5, que cuando aparece suele ser el slmbolo lnlclal.
c. Los nombres en curslvas mlnusculas, como expt o ptop.
3. Las ultlmas letras mlnusculas del allabeto, prlnclpalmente u,v,.., z.
representan cadenas de termlnales.
4. Las ultlmas letras mayusculas del allabeto como \, , 2, representan
slmbolos gramatlcales, es declr, termlnales o no termlnales.
3. Las letras grlegas mlnusculas , , , or e[emplo, representan slmbolos
gramatlcales.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
jemp/o: La gramtlca con las slgulentes producclones dellne expreslones
arltmetlcas slmples:
Ln esta gramtlca los slmbolos termlnales son:
? los no termlnales son: expt y op y expt es el slmbolo lnlclal
jemp/o: usando estas abrevlaturas se podrla en lorma conclsa la gramtlca del
e[emplo anterlor.
Las convenclones de notacln lndlcan que y A son no termlnales, con como
slmbolo lnlclal. Ll resto de slmbolos son termlnales.
jemp/o: La cadena - (ld + ld) es una lrase de la gramtlca anterlor, porque exlste la
derlvacln.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
4rbo/ de 4n/isis 5intctico y uerivociones
un rbol de anllsls slntctlco se puede conslderar como una representacln grllca
de una derlvacln que no muestra la eleccln relatlva al orden de sustltucln.
jemp/o: Se consldera de nuevo la gramtlca anterlor de expreslones arltmetlcas. La
lrase ld + ld * ld tlene las dos claras derlvaclones por la lzqulerda.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
4mbiqedod:
Se dlce que una gramtlca que produce ms de un rbol slntctlco para alguna lrase
es amblgua. C dlcho de otro modo, una gramtlca amblgua es la que produce mas
de una derlvacln por la lzqulerda o por la derecha de la mlsma lrase.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Ln todos los lengua[es de programacln con proposlclones condlclonales, se prellere
el prlmer rbol slntctlco. La regla general es empare[ar cada else con el then sln
empare[ar anterlor ms cercano". Lsta regla para ellmlnar amblguedades se puede
lncorporar dlrectamente a la gramtlca.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
4n/isis 5intctico uescendente con ketroceso
Ll anllsls slntctlco descendente (ASu) lntenta encontrar entre las
producclones de la gramtlca la derlvacln por la lzqulerda del slmbolo lnlclal
para una cadena de entrada.
L[emplo:
Anallzar la cadena de entrada cad" dada la gramtlca slgulente:
cad", se toma la prlmera produccln
Anlisis Sintctico Descendente
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
cad", se toma la segunda produccln.
slgulente ho[a del rbol A - cabd
cad" se compara con la slgulente ho[a del rbol etlquetada con b". Como
no concuerda, se lndlca el error y se vuelve a A para ver sl hay otra
alternatlva no lntentada.
cad", se toma la slgulente alternatlva que comlenza por a.
slgulente ho[a del rbol A, - cad
cad", colnclde d con d - anllsls exltoso
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
4n/isis 5intctico uescendente con Predictivo
Ll anallzador debe reallzar la prevlsln de la regla a apllcar slo con ver el
prlmer slmbolo que produce para que el algorltmo tenga una comple[ldad llneal.
L[emp|o:
. Sent |f Lxpress then Sent
. Sent wh||e Lxpress do Sent
. Sent beg|n Sent end
Lxlste slo una poslbllldad de derlvacln, segun que el prlmer slmbolo que haya en
la entrada sea un ll, whlle o begln
4n/isis 5intctico uescendente con Predictivo
Las gramtlcas que son susceptlbles de ser anallzadas slntctlcamente de
lorma descendente medlante un anllsls predlctlvo y consultando un
unlcamente un slmbolo de entrada pertenecen al grupo LL(1).
A partlr de gramtlcas LL(1) se pueden construlr anallzadores slntctlcos
descendentes predlctlvos (ASu), que son ASu sln retroceso.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
conjuntos de Prediccin
Son con[untos de slmbolos termlnales
Ayudan a predeclr que regla se debe apllcar para el no 1ermlnal
que hay que derlvar.
Se construyen a partlr de los slmbolos de las partes derechas de las
producclones de la gramtlca.
Ll anallzador consulta el slgulente slmbolo en la entrada.
sl pertenece al con[unto de predlccln de una regla apllca esa regla, sl
no da error.
jemp/os de conjuntos de Prediccin
Supngase la entrada babxcc", que se han leldo ya los slmbolos subrayados
en babxcc", y la gramtlca es:
A - a 8 c | x C | 8
8 - bA
C - c
Cue produccln debe tomar para segulr el anllsls?
La cadena de derlvaclones ha sldo:
A - 8 - bA - ba8c - babAc
Ahora hay que segulr desarrollando la varlable A utlllzando los con[untos
de predlccln.
Como la slgulente letra es una .x. se ellge la segunda opcln (A - x C)
La gramtlca
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
no cumple los requlsltos para LL(1) porque sl aparece una a" en la entrada hay dos
poslbles opclones.
Luego el anllsls:
no puede ser predlctlvo y,
la gramtlca no es LL(1).
Clculo de los con[untos de predlccln
Clculo de los prlmeros
Clculo de los slgulentes
c/cu/o de /os conjuntos de Prediccin
Los con[untos de predlccln se calculan:
en luncln de los prlmeros slmbolos que puede generar la parte
derecha de la regla, y
cuando la parte derecha puede generar la cadena vacla, en luncln
de los slmbolos que pueden aparecer a contlnuacln de la parte
lzqulerda de la regla en una lorma sentenclal derlvable del slmbolo
lnlclal.
ara poder dellnlr el con[unto de predlccln es necesarlo determlnar:
conjunto de primeros
calcular los prlmeros slmbolos que genera
una cadena de termlnales y no termlnales
conjunto de siquientes
obtener los slmbolos que pueden segulr a un no termlnal en una
lorma sentenclal.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
C|cu|o de |os pr|meros
Sea una gramtlca
uel.-
Sl o es una lorma sentenclal compuesta por una concatenacln de
slmbolos, 8lM() es el con[unto de termlnales (o \) que pueden aparecer
lnlclando las cadenas que pueden derlvar de o.
uel. lormal-
keg|as:
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Gramt|ca
C|cu|o de |os S|gu|entes
Se apllca a no termlnales (_
n
) de la gramtlca (A)
uevuelve el con[unto de termlnales que pueden aparecer a contlnuacln
de A en alguna lorma sentenclal derlvada del slmbolo lnlclal y
un slmbolo ($) que representa el llnal de la cadena de entrada.
uel.-
Sl A es un slmbolo lnlclal no termlnal de la gramtlca, SlC(A) es el
con[unto de termlnales (y $) que pueden aparecer a contlnuacln de A en
alguna lorma sentenclal derlvada del slmbolo lnlclal.
uel. lormal
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
keg|as para e| C|cu|o de| con[unto de |os s|gu|entes
c/cu/o de /os siquientes de /o qromtico:
6romtico
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
C|cu|o de |os con[untos de pred|cc|n
La luncln 8Lu
se apllca a producclones de la gramtlca
(A -o )
devuelve un con[unto de predlccln que puede contener cualesqulera de
los termlnales de la gramtlca y el slmbolo $, pero nunca puede contener \.
Cuando el ASu tlene que derlvar un no 1ermlnal
consulta el slmbolo de entrada y lo busca en los con[untos de
predlccln de cada regla de ese no termlnal.
sl los con[untos de predlccln son dls[untos, el AS podr construlr
una derlvacln por la lzda. de la cadena de entrada.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
La Cond|c|n LL(1)
Gramt|cas LL(1), se debe cump||r:
Caracter|st|cas de |a cond|c|n LL(1)
La secuencla de tokeos se anallza de lzqulerda a derecha.
Slempre derlva el no termlnal que aparezca ms a la lzqulerda.
Slo es necesarlo ver un tokeo de la secuencla de entrada para
averlguar que regla de produccln segulr.
L[emp|o de |a Gramt|ca LL(1)
Sl se anade la regla 8 a
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
jCump|e esta gramt|ca |a cond|c|n LL(1)?
Mod|f|cac|n de gramt|cas no LL(1)
Lllmlnacln de la amblguedad
lactorlzacln por la lzqulerda
Lllmlnacln de la recurslvldad por la lzqulerda
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Caracter|st|cas
Algunas caracterlstlcas garantlzan que una gramtlca no es LL(1):
8ecurslva por la lzqulerda
Slmbolos comunes por la lzqulerda
Amblgua
Lxlsten metodos para modlllcarla y convertlrla en una gramtlca LL(1)
L||m|nac|n de |a Amb|gedad
Ms de un rbol slntctlco poslble.
no exlste una metodologla para ellmlnarla
5o/ucin: replantearse el dlseno de la mlsma para encontrar una
gramtlca no amblgua equlvalente (que genere el mlsmo lengua[e).

Iactor|zac|n por |a Izqu|erda:


Sl dos producclones alternatlvas de un slmbolo A emplezan lgual, no se
sabr por cul de ellas segulr.
5o/ucin: reescrlblr las producclones de A para retrasar la declsln hasta
haber vlsto lo sullclente de la entrada como para eleglr la opcln correcta.
keg|a genera| para factor|zar por |a |zqu|erda:
Lncontrar el prell[o ms largo comun a dos o ms producclones de A,
pero slempre aquel que sea comun a ms producclones
Sl exlste un prell[o comun ms corto en varlas producclones y otro ms
largo en un par de ellas, hay que ellmlnar prlmero el ms corto comun a las
varlas ( y= tal que || < | y |).
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
So|uc|n: sustltulr las producclones:
Sea la gramtlca
Sent - ll xpt then 5eot else 5eot endll
Sent - ll xpt then 5eot endll
Sent - ottos
Solucln: sustltulrlo por dos producclones de la lorma
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
L||m|nac|n recurs|va por |a |zqu|erda:
una gramtlca es recurslva por la lzqulerda.
keg|a para mod|f|car una gramt|ca
8egla para modlllcar una gramtlca y de[e de ser recurslva por la lzqulerda.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
L[emp|o de una convers|n de una gramt|ca en LL(1)
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Ana||zador s|ntct|co descendente pred|ct|vo d|r|g|do por tab|a
Modelo de un ASu no recurslvo dlrlgldo por tabla
Modelo del anallzador slntctlco predlctlvo
Construccln de la tablas de anllsls slntctlco
rocedlmlento para construlr tablas de anllsls LL(1)
Mensa[es de error de tlpo slntctlco
Caracter|st|cas
Ls otra lorma de construlr un ASu
Construccln utlllzando una plla de slmbolos (termlnales y no termlnales)
A la vlsta de un tokeo de preanllsls se buscar en la tabla de anllsls.
rlmero construlr la tabla y despues reallzar el proceso de anllsls.
Lxp||cac|n de| grf|co
Ll programa tlene en cuenta A, el slmbolo de la clma de la plla, yo, el slmbolo
en curso de la entrada.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Construcc|n de |as tab|as de an||s|s S|ntct|co
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
roced|m|entos para constru|r tab|as de an||s|s
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Ll ob[etlvo de un anllsls ascendente conslste en construlr el rbol slntctlco desde
aba[o hacla arrlba, esto es, desde los tokeos hacla el axloma lnlclal, lo cual dlsmlnuye
el numero de reglas mal apllcadas con respecto al caso descendente (sl hablamos
del caso con retroceso) o amplla el numero de gramtlcas susceptlbles de ser
anallzadas (sl hablamos del caso LL(1)).
1anto sl hay retroceso como sl no, en un momento dado, la cadena de entrada
estar dlvldlda en dos partes, denomlnadas o y :
: representa el trozo de la cadena de entrada (secuencla de tokeos)
por consumlr: 1* . Colncldlr slempre con algun trozo de la parte
derecha de la cadena de entrada. Como puede suponerse, lnlclalmente
colnclde con la cadena a reconocer al completo (lncluldo el LCl del
llnal).
o: colncldlr slempre con el resto de la cadena de entrada, trozo al que
se habrn apllcado algunas reglas de produccln en sentldo lnverso: o
(n u 1)*
or e[emplo, sl qulsleramos reconocer ld + ld + ld", partlendo de la gramtlca del
cuadro
Se comenzarla a construlr el rbol slntctlco a partlr del rbol vaclo (o = c) y con
toda la cadena de entrada por consumlr ( = ld + ld + ld):
y tras consumlr el prlmer tokeo:
y ahora podemos apllcar la regla 3 hacla atrs, con lo que o es l:
Anlisis Sintctico Ascendente
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
a lo que ahora se puede apllcar la regla 4, produclendo:
Asl, poco a poco se va construyendo el rbol:
Como puede verse, representa al rbol slntctlco vlsto desde arrlba conlorme se
va construyendo ascendentemente: o es una lorma sentenclal ascendente.
Cperac|ones en un ana||zador ascendente
A medlda que un anallzador slntctlco va construyendo el rbol, se enlrenta a una
conllguracln dlstlnta (se denomlna conllguracln al par -) y debe tomar una
declsln sobre el slgulente paso u operacln a reallzar. 8slcamente se dlspone de
cuatro operaclones dllerentes, y cada tlpo de anallzador ascendente se dlstlngue de
los dems en base a la lntellgencla sobre cundo apllcar cada una de dlchas
operaclones.
Cualquler mecanlsmo de anllsls ascendente conslste en partlr de una conllguracln
lnlclal e lr apllcando operaclones, cada una de las cuales permlte pasar de una
conllguracln orlgen a otro destlno. Ll proceso llnallzar cuando la conllguracln
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
destlno llegue a ser tal que o represente al rbol slntctlco completo y en se hayan
consumldo todos los tokeos. Las operaclones dlsponlbles son las slgulentes:
1. ACL1Ak: se acepta la cadena: EOF yS (axioma inicial).
2. kLCnA2Ak: la cadena de entrada no es vlida.
3. kLDUCIk: consiste en aplicar una regla de produccin hacia atrs a algunos
elementos situados en el extremo derecho de . Por ejemplo, si tenemos la
configuracin:
4.- DLSLA2Ak: consiste nicamente en quitar el terminal ms a la izquierda dey
ponerlo a la derecha de. Por ejemplo, si tenemos la configuracin:
Resumiendo, mediante reducciones y desplazamientos, tenemos que llegar a
aceptar o rechazar la cadena de entrada. Antes de hacer los desplazamientos
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
tenemos que hacerles todas las reducciones posibles a, puesto que stas se hacen
a la parte derecha de , y no por en medio. Cuando es el axioma inicial yes la
tira nula (slo contiene EOF), se acepta la cadena de entrada. Cuando no es la tira
nula o no es el axioma inicial y no se puede aplicar ninguna regla, entonces se
rechaza la cadena de entrada.
An||s|s ascendente con retroceso
Al igual que ocurra con el caso descendente, este tipo de anlisis intenta probar
todas las posibles operaciones (reducciones y desplazamientos) mediante un
mtodo de fuerza bruta, hasta llegar al rbol sintctico, o bien agotar todas las
opciones, en cuyo caso la cadena se rechaza.
Retomemos a continuacin la gramtica del cuadro anterior y veamos el proceso
que se sigue para reconocer la cadena id * id:
Nota: Ntese como la cola de puede ser , g, F, etc., lo que hace que la regla F
pueda aplicarse indefinidamente.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Este mtodo es ms eficiente que el descendente con retroceso puesto que
consume los tokeos a mayor velocidad y, por tanto, trabaja con mayor cantidad de
informacin a la hora de tomar cada decisin. No obstante resulta inviable para
aplicaciones prcticas pues su ineficiencia sigue siendo inadmisible.
An||s|s ascendente de gramt|cas Lk(1)
En esta parte se introducir una tcnica eficiente de anlisis sintctico ascendente
que se puede utilizar para procesar una amplia clase de gramticas de contexto
libre. La tcnica se denomina anlisis sintctico LR(k). La abreviatura LR obedece a
que la cadena de entrada es examinada de izquierda a derecha (en ingls, left-to-
t|qbt), mientras que la R indica que el proceso proporciona el rbol sintctico
mediante la secuencia de derivaciones a derecha (en ingls, k|qbtmost Jet|vot|oo)
en orden inverso.
Por ltimo, la k hace referencia al nmero de tokeos de pre-bsqueda utilizados
para tomar las decisiones sobre si reducir o desplazar. Cuando se omite, se asume
que k, es 1.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
l ool|s|s lk es ottoct|vo pot vot|os tozooes.
Pueden reconocer la inmensa mayora de los lenguajes de
programacin que puedan ser generados mediante gramticas de
contexto-libre.
El mtodo de funcionamiento de estos analizadores posee la ventaja de
localizar un error sintctico casi en el mismo instante en que se produce
con lo que se adquiere una gran eficiencia de tiempo de compilacin
frente a procedimientos menos adecuados como puedan ser los de
retroceso. Adems, los mensajes de error indican con precisin la
fuente del error.
El principal inconveniente del mtodo es que supone demasiado trabajo construir
manualmente un analizador sintctico LR para una gramtica de un lenguaje de
programacin tpico, siendo necesario utilizar una herramienta especializada para
ello: un generador automtico de analizadores sintcticos LR.
Esta tcnica, al igual que la del LL(1), basa su funcionamiento en la existencia de una
tabla especial asociada de forma nica a una gramtica. Existen varias tcnicas para
construir dicha tabla, y cada una de ellas produce un reemp/oto del mtodo
principal. La mayora de autores se centra en tres mtodos principales. El primero de
ellos, llamado LR sencillo (5lk, en ingls) es el ms fcil de aplicar, pero el menos
poderoso de los tres ya que puede que no consiga producir una tabla de anlisis
sintctico para algunas gramticas que otros mtodos s consiguen.
El segundo mtodo, llamado LRcannico, es el ms potente pero el ms costoso. El
tercer mtodo, llamado LR con examen por anticipado (look AbeoJ lk, en ingls),
est entre los otros dos en cuanto a potencia y coste. El mtodo LALR funciona con
las gramticas de la mayora de los lenguajes de programacin y, con muy poco
esfuerzo, se puede implantar de forma eficiente. Bsicamente, un mtodo es ms
potente que otro en funcin del nmero de gramticas a que puede aplicarse.
Mientras ms amplio sea el espectro de gramticas admitidas ms complejo se
vuelve el mtodo.
Funcionalmente hablando, un analizador LR consta de dos partes bien diferenciadas:
a) un programa de proceso y
b) una tabla de anlisis.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
El programa de proceso posee, como se ver seguidamente, un funcionamiento muy
simple y permanece invariable de analizador a analizador. Segn sea la gramtica a
procesar deber variarse el contenido de la tabla de anlisis que es la que identifica
plenamente al analizador.
La figura siguiente muestra un esquema sinptico de la estructura general de una
analizador LR. Como puede apreciarse en ella, el analizador procesa una cadena de
entrada finalizada con el smbolo $ que representa el delimitador EOF. Esta cadena
se lee de izquierda a derecha, y el reconocimiento de un solo smbolo permite tomar
las decisiones oportunas (LR(1)).
Adems, el algoritmo hace uso de una pila que tiene la forma:
Donde el smbolo s
m
se encuentra en la cima tal y como se muestra en la figura.
Cada uno de los Xi es un smbolo de la gramtica (Xi (N U T) *) y los srepresentan
distintos estados del autmata asociado a la gramtica; al conjunto de estados lo
denominaremos E: S
i
E. Cada estado s tiene asociado un smbolo X , excepto el S
0
que representa al estado inicial y que no tiene asociado smbolo ninguno.
Los estados se utilizan para representar toda la informacin contenida en la pila y
situada antes del propio estado. Consultando el estado en cabeza de la pila y el
siguientetokeo a la entrada se decide qu reduccin ha de efectuarse o bien si hay
que desplazar.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Por regla general una tabla de anlisis para un reconocedor LR consta de dos partes
claramente diferenciadas entre s que representan dos tareas distintas, la tarea de
transitar a otro estado (GOTO) y la tarea de qu accin realizar (ACCION). La tabla
GOTO es de la forma E (N U T U {$}) y contiene estado de E, mientras que la tabla
ACCION es de la forma E (N U T) y contiene una de las cuatro acciones que vimos
en el apartado anterior.
Suponiendo que en un momento dado el estado que hay en la cima dela pila es s
m
y
el tokeo actual es a
i
, el funcionamiento del analizador LR consiste en aplicar
reiteradamente los siguientes pasos, hasta aceptar o rechazar la cadena de entrada:
1. Consultar la entrada (s , a ) en la tabla de ACCION. El contenido de la casilla
puede ser:
Si se acepta o rechaza, se da por finalizado el anlisis, si se desplaza se mete a
j
en la pila, y si se reduce, entonces la cima de pila coincide con el consecuente
(amn de los estados), y se sustituyepor A.
2. Una vez hecho el proceso anterior, en la cima de la pila hay un smbolo y un
estado, por este orden, lo que nos dar una entrada en la tabla de GOTO. El
contenido de dicha entrada se coloca en la cima de la pila.
Formalmente se define una conf|gurac|n de un ana||zador Lk como un par
de la forma:
Es decir, el primer componente es el contenido actual de la pila, y el segundo la
subcadena de entrada que resta por reconocer, siendo a
i
el tokeo de pre- bsqueda.
Partiremos de esta configuracin general para el estudio que prosigue.
As, formalmente, cada ciclo del algoritmo LR se describe como:
1.1.- Si ACCION(s
m
, a
j
) =Desplazar, entonces se introduce en la pila el smbolo a
i
,
produciendo:
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
A continuacin se consulta la entrada (s
m
,a
i
) de la tabla GOTO: GOTO(s
m
,a
i
)=s
m+1
,
producindose finalmente:
Pasando s
m+1
a estar situado en cabeza de la pila y a
i+1
el siguiente smbolo a
explorar en la cinta de entrada.
1.2.- Si ACCION(s
m
,a
i
) =Reducir por A , entonces el analizador ejecuta la
reduccin oportuna donde el nuevo estado en cabeza de la pila se obtiene mediante
la funcin GOTO(s
m-r
, a
i
) =s donde r es precisamente la longitud del consecuente.
O sea, el analizador extrae primero 2.r smbolosde la pila (r estados y los r smbolos
de la gramtica que cada uno tiene por debajo), exponiendo el estado s
m-r
en la
cima. Luego se introduce el no terminal A (antecedente de la regla aplicada),
produciendo:
A continuacin se consulta la entrada (s
m-r
, a
i
) de la tabla GOTO: GOTO(sm-r,A) =s
m-
r+1
, producindose finalmente:
donde s
m-r+1
es el nuevo estado en la cima de la pila y no se ha producido variacin
en la subcadena de entrada que an queda por analizar.
1.3.- Si ACCION(s
m
,a
i
) =ACEPTAR, entonces se ha llegado a la finalizacin en el
proceso de reconocimiento y el anlisis termina aceptando la cadena de entrada.
1.4-. Si ACCION(s
m
,a
i
) =RECHAZAR, entonces el analizador LR ha descubierto un
error sintctico y se debera proceder en consecuencia activando las rutinas de
recuperacin de errores. Como se ha comentado, una de las ventajas de este tipo de
anlisis es que cuando se detecta un error, el tokeo errneo suele estar al final de
o al principio de , lo que permite depurar con cierta facilidad las cadenas de
entrada (programas).
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
La aplicacin de uno de estos cuatro pasos se aplica de manera reiterada hasta
aceptar o rechazar la cadena (en caso de rechazo es posible continuar el
reconocimiento si seaplica alguna tcnica de recuperacin de errores sintcticos). El
punto de partida es la configuracin:
donde s
0
es el estado inicial del autmata.
Vamos a ilustrar con un ejemplo la aplicacin de este mtodo. Para ello partiremos
de la gramtica del cuadro siguiente. Dicha gramtica tiene asociadas dos tablas una
de ACCION y otra de GOTO. Por regla general, y por motivos de espacio, ambas
tablas suelen fusionarse en una sola. Una tabla tal se divide en dos partes: unas
columnas comunes a ACCION y GOTO, y otras columnas slo de GOTO. Las casillas
de las columnas que son slo de GOTO contienen nmeros de estados a los que se
transita; si estn vacas quiere decir que hay un error. Las columnas comunes a
ambas tablas pueden contener:
D-i: significa desplazar y pasar al estado i (ACCION y GOTO todo en uno,
para ahorrar espacio).
R j: significa reducir por la regla de produccin nmero j. En este caso debe
aplicarse a continuacin la tabla GOTO.
Aceptar: la gramtica acepta la cadena de terminales y finaliza el proceso de
anlisis.
En blanco: rechaza la cadena y finaliza el proceso (no haremos recuperacin
de errores por ahora).
La tabla asociada a la gramtica del cuadro anterior siguiendo los criterios
anteriormente expuestos es:
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Supongamos ahora quese desea reconocer o rechazar la secuencia id*(id+0 id), y
que el estado s
0
es, en nuestro caso, el 0. As, la siguiente tabla muestra un ciclo del
algoritmo por cada fila.
t
Universidad Nacional del Santa
Facultad de Ingeniera
E.A.P. de Ingeniera de Sistemas e Informtica
TEORIA DE COMPILADORES
Ntese que con este mtodo, la pila hace las funciones de. La diferencia estriba en
la existencia de estados intercalados: hay un estado inicial en la base de la pila, y
cada smbolo de tiene asociado un estado. Ntese, adems, que cuando se reduce
por una regla, el consecuente de la misma coincide con el extremo derecho de.
Uno de los primeros pasos que se deben dar durante la construccin de un
traductor consiste en la adecuada seleccin de la gramtica que reconozca el
lenguaje. Y no es un paso trivial ya que, aunque por regla general existe una
multitud de gramticas equivalentes, cuando se trabaja con aplicaciones prcticas
las diferencias de comportamientos entre gramticas equivalentes adquiere especial
relevancia.

También podría gustarte