Subido por Hëctör Rüïz

Compiladores principios, técnicas y herramientas, 2da Edición - Alfred V. Aho-FREELIBROS.ORG

Anuncio
Compiladores
principios, técnicas y herramientas
Segunda edición
Upíler D«
PEARSON
A d d iso n
Wesley
Alfred V. Aho
Monica S. Lam
Ravi Sethi
Jeffrey D. Ullman
Compiladores
principios, técnicas y herramientas
S egunda ed ic ió n
Compiladores
principios, técnicas y herramientas
S egunda ed ic ió n
A lfred V. A h o
C o lu m b ia U n iversity
M o n ica S. Lam
S ta n fo rd U n iversity
Ravi Sethi
A vaya
JefFrey D . U llm an
S ta n fo rd U n iversity
TR A D UC C IÓ N
A lfo n so V id al R o m ero E liz o n d o
Ingeniero e n Electrónica y C om unicaciones
REVISIÓN TÉCNICA
Sergio F u en lab rad a V elazq u ez
E dna M. M iranda C havez
A dalberto R o b les V alad ez
O sk ar A. G o m e z C o ro n el
A cadem ia d e C om putacion U PIIC SA
Instituto Politecnico N a cio n a l
N o rm a R R offe S a m a n ieg o
E lda Q u iro g a G o n z á le z
D epartam ento d e C om putación
Instituto Tecnológico y d e Estudios Superiores d e M onterrey
C am pus M onterrey
Jesús A lfo n so Esparza
D epartam ento d e C om putación
Instituto Tecnológico y d e Estudios Superiores d e M onterrey
C am pus Estado d e M éxico
PEARSON
M é x ic o • A rg e n tin a • B rasil • C o lo m b ia • C o s ta R ic a • C h ile • E c u a d o r
E spaña • G u a te m a la • P a n a m á • P e rú • P u e r to R i c o • U ru g u a y • V enezuela
Datos de catalogación bibliográfica
A H O ,A L F R E D V.
COM PILADO RES. P R IN C IPIO S, T É C N IC A S Y
H ERRAM IENTAS. Segunda edición
PEARSON EDUCACIÓN, M éxico, 2008
ISBN: 978-970-26-1133-2
Área: Com putación
Formato: 18.5 X 23.5 cm
Páginas: 1040
A u th o rized tra n sla tio n from t h e E nglish language e d itio n , e n title d Compilers: Principles, techniques and tools, 2 nd edition
b y Alfred V. Aho, M onica S. Lam Ravi Sethi, Jeffrey D . llllm a n , p u b lish e d b y P earson E d u catio n , Inc., p u b lis h in g as
A ddison-W esley, C o p y rig h t © 2007. All rig h ts reserved.
ISBN: 0321486811
TYaducción a u to riz a d a d e la ed ició n en id io m a inglés. Compilers: Principles, techniques and tools, 2nd edition d e Alfred
V. Aho, M onica S. Lam Ravi Sethi, Jefrev D . llllm a n , p u b lic a d a p o r P earson E d u catio n , Inc., p u b lic a d a c o m o A ddisonWesley, C o p y rig h t © 2007. T o d o s los d e rech o s reservados.
Esta ed ició n e n e s p a ñ o l es la ú n ic a a u to riz a d a .
E d ició n en esp a ñ o l
Editor:
E d ito r d e d esarrollo:
S upervisor d e p ro d u cció n :
E d ició n en in g lés
P u b lish er
Executive E d ito r
A cq u isitio n s E d ito r
fro je c t E d ito r
A ssociate M anaging E d itor
Cover D esigner
D igital Assets M anager
M edia P ro d u cer
S e n io r M ark etin g M anager
M arketing A ssistan t
S en io r A u th o r S u p p o rt/
T e ch n o lo g y S pecialist
S en io r M a n u fac tu rin g Buyer
C over Im age
Luis M iguel C ru z C astillo
e-m ail: T [email protected] pearsoned.com
B e rn ard in o G u tiérrez H e rn á n d e z
E n riq u e T rejo H e rn á n d e z
.T o b in
M ichael H irsch
M a tt G o ld ste in
K atherine I Ia ru tu n ia n
Jeffrey H o lc o m b
Joyce C o se n tin o W ells
M a rian n e G ro th
B e th a n y T idd
M ichelle Brown
S arah M ilm ore
Joe V etere
C aro l M elville
S cott U llm an o f S trange T onic P ro d u c tio n s
(w w w .strag e to n ic .co m )
SEGU NDA E D IC IÓ N , 2 0 0 8
D. R.
2 0 0 8 p o r P earson E d u cació n d e M éxico, S.A. d e C.V.
A tlaco m u lco 500 -5o. p iso
Col. In d u stria l A to to
53519, N au ca lp a n d e Juárez, Edo. d e México
C ám ara N a cio n al d e la In d u stria E d ito rial M exicana. Reg. N ú m . 1031.
A ddison-W esley es u n a m arca registrada d e P earson E d u cació n d e M éxico, S.A. d e C.V.
Reservados to d o s lo s derech o s. N i la to ta lid a d n i p a rte d e esta p u b lic a c ió n p u e d e n rep ro d u cirse, registrarse o
tran sm itirse, p o r u n sistem a d e recu p eració n d e in fo rm a c ió n , e n n in g u n a fom
>rma n i p o r n in g ú n m e d io , se a electró n ico ,
m ecánico, fo to q u ím ic o , m ag n ético o e le c tro ó p tic o , p o r fo to c o p ia , g rabación o cu alq u ier o tro , sin p e rm iso p revio p o r
escrito d e l ed ito r.
El p ré sta m o , alq u iler o cu a lq u ie r o tra fo rm a d e cesión d e u so d e este e je m p la r req u erirá ta m b ié n la a u to riz a c ió n d e l
e d ito r o d e s u s rep resen tan tes.
ISBN 10: 9 7 0-26-1133-4
ISBN 13: 978-970-26-1133-2
Im p reso en M éxico. Printed in Mexico.
1 2 3 4 5 6 7 8 9 0 - 11 1 0 0 9 08
PEARSON
Prefacio
D esd e la prim era ed ición d e e s te libro, en 1986, el m undo h a cam biado en form a considerable.
Los lenguajes d e program ación han evolucionad o para presentar nuevos problem as d e com pi­
lación. Las arquitecturas com p u tacion ales ofrecen u na variedad d e reclusos, d e los cu ales el
diseñ ador d e com piladores d eb e sacar v en ta ja . Tal v e z lo m ás in teresante se a q ue la venerable
tecn ología d e la optim ización d e cód ig o h a en con trad o un uso fuera d e los com piladores. A hora
s e u tiliza en herram ientas que buscan errores e n e l softw are, y lo q u e es m ás im portan te, buscan
brechas d e seguridad en el cód igo existen te. Y gran p arte d e la tecn o lo g ía d e p u n ta (gram áti­
ca , exp resion es regulares, analizadores y trad u ctores orien tad os a la sin ta x is) tien e to d a v ía un
am plio uso.
P or en d e, la filosofía q ue m anejam os en la ed ició n anterior d e e s te libro no h a cam biado.
R econocem os q ue só lo unos cu an tos lectores llegarán a crear (o in clu sive a m antener) un com ­
pilador para un lengu aje d e program ación im portan te. Sin em bargo, los m odelos, la teoría y los
algoritm os asociados co n un com pilador p ueden aplicarse a u n a gran variedad d e problem as en
e l diseño y desarrollo de softw are. P or lo ta n to , d esta ca m o s lo s problem as q ue se encuentran
co n m ás frecuencia d u ran te e l d iseñ o d e un procesador d e lenguaje, sin im portar e l lenguaje
origen n i la m áquina d e d estin o.
C ó m o u tiliz a r e s te lib ro
S e requieren cu an do m en os d os trim estres, o in clu so d o s sem estres, para cubrir to d o e l ma­
terial d e este libro (o a l m enos la m ayor parte). Lo ideal es cubrir la prim era m itad d e l tex to
e n u n cu rso universitario y la seg u n d a m itad (que hace én fasis en la op tim iza ció n d e có d ig o ) en
otro curso, a nivel p osgrad o o m aestría. H e a q u í u n a d escrip ción general d e los capítulos:
E l ca p ítu lo 1 con tien e m aterial d e m otivación , y tam b ién p resen ta algu nos p u n to s so b re los
an tecedentes d e la arquitectura com p u tacio n a l y los prin cip ios d e los lengu ajes d e program a­
ción.
E l ca p ítu lo 2 d esarrolla un com p ilad or en m iniatu ra y p resen ta m uchos d e los co n cep to s im­
p ortantes, q u e se desarrollarán en los cap ítu lo s siguientes. E l com p ilad or en s í aparece en el
apéndice.
v
vi
Prefacio
El ca p ítu lo 3 cubre e l an álisis léxico, las exp resion es regulares, las m áquinas d e esta d o fin ito y
las herram ientas para generar exploradores. E ste m aterial es fun dam en tal para e l p rocesam ien­
to d e te x to d e to d o tipo.
El ca p ítu lo 4 cubre los principales m éto d o s d e análisis, d e arriba-abajo (recursivo d escen dente,
LL) y d e ab ajo-arriba (L R y su s variantes).
El ca p ítu lo 5 introduce las ideas principales en las d efinicion es y las trad uccion es orien tad as a
la sin taxis.
El ca p ítu lo 6 to m a la teoría d el cap ítu lo 5 y m u estra cóm o usarla para generar có d ig o interm e­
d io para un lengu aje d e program ación ordinario.
El ca p ítu lo 7 cubre los entornos en tiem p o d e ejecución, en esp ecia l la adm inistración d e la p ila
en tiem p o d e ejecución y la recolección d e basura.
El ca p ítu lo 8 tra ta d e la generación d e cód igo o b jeto . C ubre la con stru cción d e lo s bloques
fundam entales, la gen eración d e cód ig o a partir d e la s expresiones y lo s bloques básicos, así
com o las técn icas d e asign ación d e registros.
El ca p ítu lo 9 introduce la tecnología d e la op tim iza ció n d e cód igo, incluyendo los diagram as
d e flujo, los fram ew orks d e flujo d e d atos y los algoritm os itera tiv o s para resolver e sto s fra­
meworks.
El cap ítu lo 10 cubre la op tim ización a nivel d e instrucciones. S e d e sta c a aquí la extra cció n d el
paralelism o d e las secu en cias pequeñas d e in stru cciones, y cóm o program arlas en procesadores
in dividu ales q ue puedan realizar m ás d e función a la vez.
El ca p ítu lo 11 h ab la d e la d etección y exp lotació n d e l paralelism o a m ayor esca la . A quí, se
d estacan los cód igos num éricos q ue cu en ta n con m uchos ciclo s estrech os q ue varían a través d e
los arreglos m ultidim ensionales.
El ca p ítu lo 12 ex p lic a e l an álisis entre p rocedim ientos. C ubre e l an álisis y uso d e alias e n los
apuntadores, y e l análisis d e los flujos d e d a to s q ue to m a en c u en ta la secu en cia d e llam adas a
p rocedim ien tos q ue llegan a un p u n to d ad o en e l cód igo.
En C olum bia, H arvard y Stanford se han im partido cursos basados e n el m aterial d e este
libro. E n C olum bia se ofrece d e m anera regular un curso a estu d ia n tes universitarios d e l ú ltim o
año o estu d ian tes p ostgradu ados sobre los lengu ajes d e program ación y los traductores, usando
e l m aterial d e los prim eros o ch o cap ítu los. A lgo q ue d esta ca d e este cu rso es un proyecto q ue
d u ra to d o un sem estre, en e l cu a l los estu d ian tes trabajan en p eq ueños eq u ip o s para crear e
im plem entar un p equeño lengu aje q ue ellos m ism os diseñan. Los lenguajes q u e crean los es­
tud iantes han abarcado diversos dom inios d e aplicaciones, incluyendo e l cálcu lo d e cu an tos,
la sín tesis d e m úsica, los gráficos de com putadora, ju egos, op eracion es co n m atrices y m uchas
o tra s áreas m ás. Los estu d ia n tes u tilizan generadores d e com p o n en tes d e com piladores com o
A N T L R , L e x y Y acc, y las técn icas d e traducción orien tad as a la sin ta x is q ue se describen en
los cap ítu los 2 y 5 para con stru ir su s com piladores. Tam bién se ofrece u n curso d e segu im ien to
para graduados, q ue se en fo ca e n e l m aterial q ue v ien e en lo s cap ítu los 9 a 12, en d ond e se
en fa tiza la gen eración y op tim ización d e cód ig o para las m áquinas con tem poráneas, incluyendo
los procesadores d e redes y las arquitecturas con m últiples procesadores.
En Stanford, un curso introductorio d e un tetram estre apenas cubre el m aterial q ue v ien e en
los capítulos 1 a 8, aunque hay u na introducción a la optim ización d e cód igo global d el cap ítulo 9.
En e l segundo curso d e com piladores se cubren los capítulos 9 a 12, adem ás d el m aterial avanzado
Prefacio
v ii
sobre la recolección d e basura d el cap ítulo 7. Los estu diantes utilizan un sistem a llam ado Joeq,
basado en Java y desarrollado p or la com unidad local, para im plem entar los algoritm os d e análisis
d e los flujos d e datos.
R e q u is ito s p r e v io s
E l lector d eb e poseer cierto “con ocim ien to orien tad o a las cien cia s com p u tacion ales” , lo que
in clu ye por lo m enos un segu n d o curso sobre program ación, ad em ás d e cursos sobre estru ctu ­
ras d e d a to s y m atem áticas d iscretas. E s ú til tener un co n o cim ien to so b re varios lenguajes de
program ación.
E je rc ic io s
E ste libro con tien e gran can tid ad d e ejercicios para ca si to d a s las seccion es. P a ra indicar los
ejercicios difíciles, o p artes d e ellos, u tiliza m o s un sign o d e adm iración. Los ejercicios to d a v ía
m ás d ifíciles tien en d ob le sign o d e adm iración.
T a r e a s e n lín e a d e G r a d ia n c e
U n a n u eva característica d e la segu n d a ed ición es q ue h ay un con ju n to com p lem en tario de
tareas en línea, las cu ales u tilizan u n a tecn o lo g ía d esarrollada p or G radiance C orp. Los instruc­
tores p ueden asignar esta s tareas a s u clase; lo s estu d ia n tes q u e no esté n inscritos en u n a clase
p ueden inscribirse en u na “clase óm n ib u s” q u e les p erm ita realizar las tareas co m o tu to ria l (sin
u na clase cread a por un in stru ctor). Las preguntas d e G radiance tie n e n la m ism a apariencia
que las preguntas ordinarias, só lo q ue se m uestrean su s solu ciones. Si realiza u n a elección inco­
rrecta, recibe asesoría, o retroalim entación, específica para ayudarle a corregir su error. Los pro­
fesores usuarios d e este libro pueden utilizar G radiance com o apoyo a su s cla ses, y ca d a alum no
que com pre el libro p uede ob tener un cód igo para acceder a los ejercicios d e su profesor. Para
m ayor inform ación co n su lte a su representante d e Pearson E ducación o v isite e l sitio W eb de
e s te libro. C abe aclarar q ue e s ta inform ación e s tá e n inglés.
S o p o r te e n W o r ld W id e W e b
E n e l sitio W eb d e este libro:
www.pearsoneducacion.net/aho
E n con trará u n a fe d e erratas, q ue actu alizarem os a m ed ida q u e vayam os d etecta n d o los errores,
y m ateriales d e respaldo. E speram os ten er d isp on ib les lo s ap un tes para ca d a curso relaciona­
d o co n com piladores a m ed id a q ue lo im partam os, incluyendo tareas, solu ciones y exám enes.
P lan eam os publicar tam b ién descrip ciones d e los com piladores im p ortan tes escrito s por sus
im plem entadores. C abe d estacar q ue tod o el m aterial y este sitio s e en cu en tran en inglés.
A g r a d e c im ie n to s
E l arte d e la p ortad a fu e realizado por S. D . U llm an d e S trange T onic P rod uctions.
John B e n tle y nos proporcionó m uchos com entarios so b re varios ca p ítu lo s d esd e un borrador
anterior d e e s te libro. R ecibim os valiosos com entarios y fe d e erratas de: D om enico B ianculli,
v iii
Prefacio
P eter B osch, M arcio B u ss, M arc Eaddy, S tep h en Edw ards, V ib h a v G arg, K im H azelw ood,
Gaurav Kc, W ei Li, M ike S m ith , A rt Stam ness, K rysta Svore, O livier T ardieu y Jia Zeng. A gra­
decem os en gran m edida la ayu da d e tod as esta s personas. D esde luego, los errores restantes
son nuestros.
A dem ás, M on ica quisiera agradecer a su s colegas en el eq u ipo d e l com pilador S U IF por
una lección d e 18 años sobre e l proceso d e com pilación: G erald A igner, D zintars A vots, Sam an
A m arasinghe, Jennifer A nderson, M ichael Carbin, G erald C heong, A m er D iw an, R obert French,
Anwar G huloum , M ary Hall, John Hennessy, D avid H eine, Shih-W ei Liao, A m y L im , B enjam in
Livshits, M ichael M artin, Dror M aydan, T od d M owry, Brian Murphy, Jeffrey O p linger, K aren P ieper, M artin R inard, O latunji R uw ase, C on stan tin e Sapuntzakis, Patrick Sathyanathan, M ichael
Sm ith, S teven T jiang, C hau-W en T seng, C hristopher U nkel, John W haley, R obert W ilson,
C hristopher W ilson, y M ichael W olf.
A . V . A ., C hatham N J
M. S. L., M enlo P ark CA
R. S., Far H ills N J
J. D . U ., S tanford C A
Junio, 2 0 0 6
T abla de contenido
P refacio
1
v
In trod u cción
1.1
1.2
1.3
1.4
1.5
1.6
1
P rocesadores d e le n g u a je ............................................................................................................
1.1.1
E jercicios para la sección 1 .1 .....................................................................................
L a estru ctu ra d e un c o m p ila d o r ..............................................................................................
1
3
4
1.2.1
A nálisis d e lé x ic o .............................................................................................................
1.2.2
A nálisis s in t á c t ic o ..........................................................................................................
1.2.3
A nálisis s e m á n tic o ..........................................................................................................
1.2.4
G eneración d e cód ig o in term ed io ............................................................................
1.2.5
O ptim ización d e c ó d i g o ..............................................................................................
1.2.6
G eneración d e c ó d ig o ....................................................................................................
1.2.7
A dm inistración d e la ta b la d e s ím b o lo s ..............................................................
1.2.8
E l agrupam iento d e fases en p a s a d a s ....................................................................
1.2.9
H erram ientas d e construcción d e co m p ila d o res................................................
L a evolución d e los lengu ajes d e p rogram ación .................................................................
1.3.1
E l avance a los lenguajes d e alto n iv e l.................................................................
1.3.2
Im pactos en el c o m p ila d o r ........................................................................................
1.3.3
Ejercicios para la sección 1 .3.....................................................................................
L a cien cia d e construir u n co m p ila d o r..................................................................................
1.4.1
M odelado en e l diseño e im plem entación d e co m p ila d o r e s..........................
1.4.2
L a cien cia d e la op tim iza ció n d e c ó d ig o ..............................................................
A plicaciones d e la tecn o lo g ía d e c o m p ila d o r e s .................................................................
1.5.1
Im plem entación de lenguajes d e program ación d e a lto n iv e l.....................
1.5.2
O p tim izaciones para las arquitecturas d e c o m p u t a d o r a s ...........................
1.5.3
D iseño d e nuevas arquitecturas d e c o m p u ta d o r a s..........................................
1.5.4
Traducciones d e program as........................................................................................
1.5.5
H erram ientas d e p rod u ctivid ad d e s o f tw a r e ......................................................
F undam entos d e los len gu ajes d e p r o g ra m a c ió n ..............................................................
1.6.1
L a d istin ción entre está tic o y d in á m ic o ..............................................................
1.6.2
E ntorn os y e s t a d o s .......................................................................................................
1.6.3
A lcance está tico y estructu ra d e b lo q u e s ...........................................................
1.6.4
C ontrol d e acceso e x p líc ito .........................................................................................
1.6.5
A lcance d in ám ico.............................................................................................................
1.6.6
M ecanism os p ara el paso d e parám etros..............................................................
5
8
8
9
10
10
11
11
12
12
13
14
14
15
15
15
17
17
19
21
22
23
25
25
26
28
31
31
33
ix
X
Tabla d e contenido
1.6.7
U so d e a l i a s ......................................................................................................................
1.6.8
E jercicios p ara la sección 1 .6 .....................................................................................
R esu m en d el cap ítu lo 1 ................................................................................................................
R eferencias para el ca p ítu lo 1 ....................................................................................................
35
35
36
38
U n trad u ctor sim ple orien tad o a la sintaxis
2.1
In tr o d u c c ió n ......................................................................................................................................
2.2
D efinición d e s in ta x is .....................................................................................................................
2.2.1
D efinición d e g r a m á t ic a s ............................................................................................
39
40
42
42
2.2.2
D e r iv a c io n e s......................................................................................................................
2.2.3
Á rboles d e análisis s in t á c t ic o ...................................................................................
2.2.4
A m b ig ü e d a d ......................................................................................................................
2.2.5
A sociativid ad d e los o p e r a d o r e s .............................................................................
2.2.6
P recedencia d e o p e r a d o r e s .........................................................................................
2.2.7
Ejercicios para la sección 2.2 ......................................................................................
Traducción orientada a la sin ta x is...........................................................................................
2.3.1
N otación p o s tfija .............................................................................................................
2.3.2
A trib utos s in t e t iz a d o s ..................................................................................................
2.3.3
D efiniciones sim ples orientadas a la s in ta x is ......................................................
2.3.4
Recorridos d e los á r b o le s ............................................................................................
2.3.5
Esquem as d e tra d u cció n ...............................................................................................
2.3.6
Ejercicios p ara la sección 2 .3 .....................................................................................
A nálisis s in t á c t ic o ..........................................................................................................................
2.4.1
A nálisis sin tá ctico tip o a r r ib a -a b a jo .....................................................................
2.4.2
A nálisis sin tá ctico p red ictivo......................................................................................
2.4.3
C uándo usar las producciones e ..............................................................................
2.4.4
D iseño d e un analizador sin tá ctico p r e d ic tiv o ...................................................
2.4.5
R ecursividad a la izqu ierda.........................................................................................
2.4.6
Ejercicios para la sección 2.4 ......................................................................................
U n traductor para las expresiones s im p le s ..........................................................................
2.5.1
S intaxis a b stra cta y c o n c r e t a ...................................................................................
2.5.2
A dap tación d el esqu em a de t r a d u c c ió n ..............................................................
2.5.3
P roced im ien tos para los no term in a les..................................................................
2.5.4
Sim plificación d el t r a d u c to r ......................................................................................
44
45
47
48
48
51
52
53
54
56
56
57
60
60
61
64
65
66
67
68
68
69
70
72
73
2.5.5
E l program a c o m p le t o .................................................................................................
A nálisis lé x ic o ...................................................................................................................................
2.6.1
E lim inación d e esp acio e n b lanco y c o m e n ta r io s.............................................
2.6.2
L ectura a d e la n ta d a .......................................................................................................
2.6.3
C o n s t a n te s .........................................................................................................................
2.6.4
R econocim ien to d e palabras clave e id en tifica d o res.......................................
2.6.5
U n analizador l é x i c o .....................................................................................................
2.6.6
E jercicios para la sección 2 .6 .....................................................................................
T ablas d e s í m b o l o s ........................................................................................................................
2.7.1
T ab la d e sím b olos por alcan ce...................................................................................
2.7.2
E l uso d e las tablas d e s ím b o lo s .............................................................................
74
76
77
78
78
79
81
84
85
86
89
1.7
1.8
2
2.3
2.4
2.5
2.6
2.7
Tabla d e contenido
2.8
G eneración d e cód ig o in term ed io..............................................................................................
2.8.1
D os tip os d e representaciones in te r m e d ia s ........................................................
2.8.2
C onstrucción d e árboles s in tá c tic o s .......................................................................
2.8.3
C om probación e s tá tic a .................................................................................................
2.8.4
C ódigo d e tres d ir e c c io n e s ........................................................................................
2.8.5
Ejercicios para la sección 2 .8 .....................................................................................
R esum en d el cap ítulo 2 ................................................................................................................
91
91
92
97
99
105
105
A nálisis lé x ic o
3.1
L a función d el analizador l é x i c o ..............................................................................................
3.1.1
C om paración en tre análisis léxico y análisis sin tá c tic o .................................
3.1.2
Tokens, p atrones y l e x e m a s .....................................................................................
3.1.3
A tributos para los to k e n s ...........................................................................................
3.1.4
Errores léx ico s..................................................................................................................
3.1.5
Ejercicios para la sección 3 .1 .....................................................................................
3.2
U so d e búfer e n la e n tr a d a .........................................................................................................
3.2.1
Pares d e b ú f e r e s ............................................................................................................
3.2.2
C en tin ela s...........................................................................................................................
3.3
Especificación d e los t o k e n s .......................................................................................................
3.3.1
C adenas y len gu ajes.......................................................................................................
3.3.2
O peraciones en los len gu ajes.....................................................................................
3.3.3
E xp resion es reg u la res...................................................................................................
3.3.4
D efiniciones regulares....................................................................................................
3.3.5
E x ten sion es d e las expresiones r e g u la r e s ...........................................................
3.3.6
E jercicios para la sección 3 .3 .....................................................................................
3.4
R econocim ien to d e t o k e n s ..........................................................................................................
3.4.1
D iagram as d e tran sición d e e s ta d o s .......................................................................
3.4.2
R econocim ien to d e las palabras reservadas y los id en tifica d o res............
3.4.3
F inalización d el b o s q u e jo ...........................................................................................
3.4.4
A rq uitectura d e u n analizador léxico b asado en diagram as
d e tran sición d e e s t a d o s ....................................................................................
3.4.5
Ejercicios para la sección 3 .4 .....................................................................................
3.5
E l generador d e analizadores léxicos L e x .............................................................................
3.5.1
U so d e L e x ........................................................................................................................
3.5.2
E stru ctu ra d e los program as en L e x ...................................................................
3.5.3
R esolución d e co n flictos en L e x ...............................................................................
3.5.4
E l operador a d e la n ta d o .............................................................................................
109
109
110
111
112
113
114
115
115
116
116
117
119
120
123
124
125
128
130
132
133
2.9
3
XI
3.6
3.5.5
Ejercicios para la sección 3 .5 .....................................................................................
A u tóm atas f i n i t o s ...........................................................................................................................
3.6.1
A u tóm atas fin ito s no d eter m in ista s.......................................................................
3.6.2
Tablas d e tra n sició n .......................................................................................................
3.6.3
A ceptación d e las cad en as d e en trad a m ediante los a u tó m a ta s.................
3.6.4
A u tóm atas finitos d e te r m in is ta s .............................................................................
3.6.5
E jercicios para la sección 3 .6 ....................................................................................
134
136
140
140
141
144
144
146
147
147
148
149
149
151
XII
Tabla d e contenido
3.7
D e las exp resion es regulares a los a u t ó m a ta s ....................................................................
3.7.1
C onversión d e un A F N a A F D ...............................................................................
3.7.2
Sim ulación d e u n A F N .................................................................................................
3.7.3
E ficien cia d e la sim ulación d e u n A F N .................................................................
3.7.4
C onstrucción d e un A F N a partir d e una exp resión r e g u la r.....................
3.7.5
E ficien cia d e los algoritm os d e p rocesam ien to d e c a d e n a s ........................
3.7.6
E jercicios para la sección 3 .7 .....................................................................................
D iseño d e un generador d e analizadores l é x i c o s ..............................................................
3.8.1
L a estru ctu ra d e l analizador g e n e r a d o .................................................................
3.8.2
C oincid en cia d e p atrones con base e n los A F N s .............................................
3.8.3
A F D s p ara analizadores léx ico s................................................................................
3.8.4
Im plem entación d el operador d e p rea n á lis is.....................................................
3.8.5
Ejercicios para la sección 3 .8 .....................................................................................
O ptim ización d e los buscadores por concordancia d e p atrones basados
en A F D .........................................................................................................................................
3.9.1
E stad os significativos d e un A F N ..........................................................................
3.9.2
Funciones calcu ladas a partir d el árbol s in t á c t ic o ..........................................
3.9.3
C álculo d e anulable, p rim era p o s y id tim a p o s.....................................................
3.9.4
C álculo d e s ig u ie n te p o s ..............................................................................................
3.9.5
C onversión d irecta d e una expresión regular a un A F D ..............................
152
152
156
157
159
163
166
166
167
168
170
171
172
3.9.6
M inim ización d el núm ero d e estad os d e un A F D ..........................................
3.9.7
M inim ización d e esta d o s e n los analizadores l é x i c o s ....................................
3.9.8
Intercam bio d e tiem p o por espacio en la sim ulación d e un A F D .............
3.9.9
Ejercicios p ara la sección 3 .9 .....................................................................................
R esu m en d el cap ítu lo 3 ...............................................................................................................
R eferencias para el ca p ítu lo 3 ....................................................................................................
180
184
185
186
187
189
A nálisis sin táctico
4 .1
In tro d u cció n .......................................................................................................................................
4.1.1
L a función d el analizador sin tá c tic o .......................................................................
191
192
192
4 .1 .2
R epresentación d e g ra m á tica s...................................................................................
4 .1 .3
M anejo d e los errores sin tá c tic o s .............................................................................
4 .1 .4
E strategias p ara recuperarse d e los errores........................................................
G ram áticas libres d e co n tex to ....................................................................................................
4.2.1
L a definición form al d e una gram ática libre d e c o n t e x t o ...........................
4 .2 .2
C onvenciones d e n o ta c ió n ...........................................................................................
193
194
195
197
197
198
4 .2 .3
4 .2 .4
4 .2 .5
4 .2 .6
4 .2 .7
199
201
203
204
3 .8
3.9
3.10
3.11
4
4 .2
4 .3
D e r iv a c io n e s.....................................................................................................................
Á rb oles d e an álisis sin tá ctico y d eriv a cio n es.....................................................
A m b ig ü e d a d .....................................................................................................................
Verificación d el lenguaje generado por una g r a m á tic a .................................
C om paración entre gram áticas libres d e con tex to
y expresiones r e g u la r e s.......................................................................................
4.2.8
Ejercicios para la sección 4 .2 .....................................................................................
E scritu ra d e u n a g r a m á t ic a .......................................................................................................
4.3.1
C om paración entre análisis léxico y análisis sin tá c tic o .................................
4 .3 .2
E lim inación d e la a m b ig ü e d a d ................................................................................
173
173
175
176
177
179
205
206
209
209
210
Tabla d e contenido
4.3.3
4.3.4
4 .3 .5
4 .3.6
x iii
E lim in ación d e la recursividad por la izquierda................................................
F actorización por la izq u ierd a ...................................................................................
C onstrucciones d e lenguajes que no so n libres d e co n tex to .........................
E jercicios para la sección 4 .3 ......................................................................................
212
214
215
216
4 .4
A nálisis sin tá ctico d e sc e n d e n te ................................................................................................
4.4.1
A nálisis sin táctico d e d escen so r e c u r s iv o ............................................................
4.4.2
P R IM E R O y S IG U IE N T E .........................................................................................
4.4.3
G ram áticas L L ( 1 ) ..........................................................................................................
4 .4 .4
A nálisis sin táctico predictivo n o r e c u r s iv o .........................................................
4 .4 .5
R ecuperación d e errores en el análisis sin tá ctico p r e d ic tiv o ......................
4 .4.6
E jercicios para la sección 4 .4 ......................................................................................
217
219
220
222
226
228
231
4 .5
A nálisis sin tá ctico a sc e n d e n te ...................................................................................................
4.5.1
R e d u c c io n e s ......................................................................................................................
4 .5 .2
P o d a d e m a n g o s .............................................................................................................
4 .5 .3
A nálisis sin táctico d e d e sp la za m ie n to -r ed u c ció n .............................................
4 .5 .4
C onflictos d urante el análisis sin tá ctico d e d esplazam iento-reducción .
4.5.5
Ejercicios para la sección 4 .5 ......................................................................................
233
234
235
236
238
240
4 .6
Introducción al análisis sin táctico LR: SL R (L R s im p le ) ............................................
4.6.1
¿Por q u é analizadores sin tácticos L R ? ..................................................................
4.6.2
L os elem en tos y el a u tó m a ta L R (0 ).......................................................................
4.6.3
E l algoritm o d e análisis sin táctico L R .................................................................
4 .6 .4
C onstrucción d e ta b la s d e análisis sin tá ctico S L R ..........................................
4.6.5
P refijos v i a b l e s ................................................................................................................
4.6.6
Ejercicios para la sección 4 .6 .....................................................................................
241
241
242
248
252
256
257
4 .7
A nalizadores sin táctico s L R m ás p o d e r o s o s .......................................................................
4.7.1
E lem en tos L R (1) can ón icos.........................................................................................
4 .7 .2
C onstrucción d e con jun tos d e elem entos L R (1 )................................................
4 .7 .3
Tablas d e análisis sin tá ctico L R (1) can ón ico......................................................
4 .7 .4
C onstrucción d e ta b la s d e análisis sin tá ctico L A L R ....................................
4 .7 .5
C onstrucción eficien te d e tab las d e an álisis sin tá ctico L A L R ...................
4 .7 .6
C om p actación d e las ta b la s d e an álisis sin tá ctico L R ..................................
4.7.7
E jercicios para la sección 4 .7 .....................................................................................
259
260
261
265
266
270
275
277
4.8
U so d e
4.8.1
4 .8.2
4 .8 .3
4 .8.4
278
279
281
283
285
4 .9
G eneradores d e analizadores sin tá c tic o s............................................................................... 287
4.9.1
E l generador d e analizadores sin táctico s Y acc...................................................287
4 .9 .2
U so d e Y acc con gram áticas a m b igu as.................................................................. 291
4 .9 .3
C reación d e analizadores léxicos d e Yacc co n L e x .......................................... 2 9 4
4 .9 .4
R ecuperación d e errores en Y a c c ............................................................................. 295
4.9.5
Ejercicios para la sección 4 .9 ..................................................................................... 297
4 .1 0
R esum en del cap ítulo 4 ................................................................................................................ 297
4.11
R eferencias para e l ca p ítu lo 4 ....................................................................................................
gram áticas am bigu as.......................................................................................................
P reced en cia y asociatividad para resolver c o n f lic t o s ....................................
L a am bigüedad d e l “else co lgan te” .......................................................................
R ecuperación d e errores en el análisis sin tá ctico L R ....................................
E jercicios para la sección 4 .8 ......................................................................................
300
x iv
5
Tabla d e contenido
T raducción orientada p o r la sin ta x is
5.1 D efin iciones d irigidas por la s in ta x is .......................................................................................
5.1.1
A trib utos heredados y s in t e t iz a d o s .......................................................................
5.1.2
E valuación d e u n a definición d irig id a p or la sin ta x is en los
303
304
304
n od os d e un árbol d e análisis s in t á c t ic o ....................................................
5.1.3
E jercicios para la sección 5 .1 ......................................................................................
Ó rdenes d e evalu ación para las d efinicion es dirigidas por la s i n t a x i s ...................
5.2.1
G ráficos d e d e p e n d e n c ia s ............................................................................................
5.2.2
O rden d e e v a l u a c ió n ....................................................................................................
5.2.3
D efin iciones con atrib u tos sin te tiz a d o s.................................................................
5.2.4
D efin iciones con atrib u tos h ere d a d o s....................................................................
5.2.5
R eglas sem án ticas co n efectos adicionales c o n tr o la d o s..................................
5.2.6
E jercicios para la sección 5 .2 ......................................................................................
A plicaciones d e la trad ucción orien tad a por la s in t a x is ...............................................
5.3.1
C onstrucción d e árboles d e análisis s in tá c tic o ..................................................
5.3.2
L a estru ctu ra d e t i p o s ..................................................................................................
306
309
310
310
312
312
313
314
317
318
318
321
5.3.3
Ejercicios para la sección 5 .3 ......................................................................................
Esquem as d e traducción orientados por la s in t a x is ........................................................
5.4.1
Esquem as d e traducción p o s t f ij o s ..........................................................................
5.4.2
Im plem entación d e esqu em as d e traducción orientados
a la sin ta x is p o stfijo co n la p ila d el analizador s in t á c t ic o .................
5.4.3
E squem as d e traducción orien tad os a la sin ta x is co n acciones
den tro d e las p r o d u c c io n e s ..............................................................................
5.4.4
E lim inación d e la recursividad por la izquierda d e lo s esquem as
d e traducción orientados a la sin ta x is .......................................................
5.4.5
Esquem as d e traducción orientados a la sin ta x is p ara definiciones
co n atrib utos heredados por la iz q u ie r d a .................................................
5.4.6
Ejercicios para la sección 5 .4 ......................................................................................
Im plem entación d e definiciones dirigidas por la sin ta x is co n atributos
heredados por la iz q u ie r d a ................................................................................................
5.5.1
Traducción d urante e l análisis sin tá ctico d e d escen so recursivo................
5.5.2
G eneración d e cód igo a l in s ta n te .............................................................................
5.5.3
Las definiciones dirigidas por la sin ta x is co n a trib u to s heredados
por la izquierda y e l an álisis sin tá ctico L L ..............................................
5.5.4
A n álisis sin tá ctico ascen dente d e las d efinicion es d irigidas por
la sin ta x is co n atrib utos heredados p or la izq u ierd a .............................
5.5.5
Ejercicios para la sección 5 .5 ......................................................................................
R esu m en d el ca p ítu lo 5 ...............................................................................................................
R eferencias para el ca p ítu lo 5 ....................................................................................................
323
323
324
5.2
5.3
5.4
5.5
5.6
5.7
6
325
327
328
331
336
337
338
340
343
348
352
353
354
G en eración de cód igo in term ed io
357
6.1
V ariantes d e los árboles s in t á c t ic o s ........................................................................................ 358
6.1.1
Grafo d irigido acíclico para las e x p r e s io n e s ...................................................... 359
6.1.2
E l m étod o núm ero d e valor para construir G D A s .......................................... 360
6.1.3
E jercicios para la sección 6 .1 ..................................................................................... 362
Tabla d e contenido
6.2
6.3
6.4
6.5
6.6
6.7
6.8
C ódigo d e tres d ir e c c io n e s .........................................................................................................
6.2.1
D irecciones e in str u c c io n e s........................................................................................
6.2.2
C u á d ru p lo s........................................................................................................................
6.2.3
T r ip le ta s..............................................................................................................................
6.2.4
F orm a d e asignación in dividu al e s tá tic a ..............................................................
6.2.5
Ejercicios para la sección 6 .2 .....................................................................................
T ip o s y d eclaracion es....................................................................................................................
6.3.1
E xp resion es d e t i p o s ....................................................................................................
6.3.2
E q uivalen cia d e t i p o s ....................................................................................................
6.3.3
D e c la r a c io n e s ...................................................................................................................
6.3.4
D istrib u ción d el alm acenam iento p ara los nom bres lo ca les..........................
6.3.5
Secuencias d e las d ecla ra c io n e s................................................................................
6.3.6
C am pos en registros y c la s e s .....................................................................................
6.3.7
E jercicios para la sección 6 .3 .....................................................................................
T raducción d e e x p r e s io n e s ..........................................................................................................
6.4.1
O peraciones d en tro d e e x p r e s io n e s .......................................................................
6.4.2
T raducción in c r e m e n ta l..............................................................................................
XV
363
364
366
367
369
370
370
371
372
373
373
376
376
378
378
378
380
6.4.3
D ireccionam iento d e los elem en tos d e un arreglo.............................................. 381
6.4.4
T raducción d e referencias a a r r e g l o s .................................................................... 383
6.4.5
E jercicios para la sección 6 .4 ..................................................................................... 384
C om probación d e t i p o s ................................................................................................................ 386
6.5.1
R eglas para la com probación d e t i p o s ................................................................. 387
6.5.2
C onversiones d e t ip o s .................................................................................................... 388
6.5.3
Sobrecarga d e funciones y o p e r a d o r e s ................................................................. 390
6.5.4
Inferencia d e tip o s y funciones p o lim ó r fic a s..................................................... 391
6.5.5
U n algoritm o para la u n ifica ció n ............................................................................. 395
6.5.6
Ejercicios para la sección 6 .5 ..................................................................................... 398
Flujo d e co n tro l................................................................................................................................. 399
6.6.1
E xp resion es b o o le a n a s ................................................................................................. 399
6.6.2
C ódigo d e corto c ir c u ito .............................................................................................. 400
6.6.3
Instrucciones d e flu jo d e c o n tr o l............................................................................. 401
6.6.4
Traducción d el flujo d e con trol d e las expresiones b o o le a n a s .................. 403
6.6.5
E v ita r g o to s re d u n d a n te s........................................................................................... 405
6.6.6
V alores b oléan os y cód ig o d e sa lto .......................................................................... 408
6.6.7
E jercicios para la sección 6 .6 ..................................................................................... 408
Parcheo d e retroceso (b a c k p a tc h ).......................................................................................... 410
6.7.1
G eneración d e cód ig o d e u n a pasada, m ed ian te parcheo d e retroceso . 410
6.7.2
T écn ica d e parcheo d e retroceso para las exp resion es b o o le a n a s ..............411
6.7.3
In strucciones d e flujo d e c o n t r o l............................................................................. 413
6.7.4
In strucciones break, con tin u é y g o t o .................................................................... 416
6.7.5
E jercicios para la sección 6 .7 ..................................................................................... 417
In strucciones sw itc h ........................................................................................................................ 418
6.8.1
T raducción d e las instrucciones sw itc h ................................................................. 419
6.8.2
Traducción orien tad a por la sin ta xis d e las instrucciones s w itc h .............420
6.8.3
E jercicios para la sección 6 .8 ..................................................................................... 421
xvi
Tabla d e contenido
6.9
6.10
6.11
7
C ódigo interm edio para p roced im ien to s.............................................................................. 422
R esu m en d el ca p ítu lo 6 .............................................................................................................. 424
R eferencias para el ca p ítu lo 6 ................................................................................................... 425
E ntornos e n tiem p o de eje cu ció n
7.1
O rganización d el a lm a ce n a m ie n to ..........................................................................................
7.1.1
A sign ación d e alm acenam iento e s tá tic a y d in á m ic a .......................................
7.2
A sign ación d e espacio en la p i l a ............................................................................................
7.2.1
Á rb oles d e a ctiv a c ió n ....................................................................................................
7.2.2
R egistros d e activ a ció n .................................................................................................
427
427
429
430
430
433
7.2.3
S ecu en cias d e llam ad as.................................................................................................
7.2.4
D a to s d e lon gitu d variable en la p ila ....................................................................
7.2.5
E jercicios para la sección 7 .2 .....................................................................................
A cceso a los d a to s no locales en la p i l a ..............................................................................
7.3.1
A cceso a los d atos sin p rocedim ien tos a n id a d o s .............................................
7.3.2
P rob lem as co n los p rocedim ien tos a n id a d o s .....................................................
7.3.3
U n lenguaje co n declaraciones d e p rocedim ien tos a n id a d o s .....................
7.3.4
P rofundidad d e a n id a m ie n to .....................................................................................
7.3.5
E n lace d e a c c e s o ............................................................................................................
7.3.6
M anipulación d e los en laces d e a c c e s o .................................................................
7.3.7
E nlaces d e acceso para los parám etros d e p r o c e d im ie n to s.........................
7.3.8
E structu ra d e d a to s D is p la y .....................................................................................
7.3.9
Ejercicios para la sección 7 .3 .....................................................................................
A dm in istración d el m o n tícu lo ..................................................................................................
7.4.1
E l adm inistrador d e m e m o r ia ..................................................................................
436
438
440
441
442
442
443
443
445
447
448
449
451
452
453
7.4.2
7.4.3
7.4.4
454
455
457
7.3
7.4
7.5
7.6
7.7
L a jerarquía d e m em oria d e una c o m p u ta d o r a ...............................................
Localidad en los p r o g r a m a s .....................................................................................
R educción d e la fr a g m e n ta c ió n ...............................................................................
7.4.5
S olicitu des d e d esasignación m a n u a l.................................................................... 460
7.4.6
Ejercicios para la sección 7 .4 ..................................................................................... 463
Introducción a la recolección d e b a s u r a .............................................................................. 463
7.5.1
M etas d e d iseñ o para los recolectores d e b a s u r a .............................................
7.5.2
C apacidad d e a lca n ce....................................................................................................
7.5.3
R ecolectores d e basura con con teo d e r e fe r e n c ia s ..........................................
7.5.4
Ejercicios para la sección 7 .5 ....................................................................................
Introducción a la recolección b asad a e n el rastreo..........................................................
7.6.1
U n recolector b ásico “m arcar y lim piar” ...........................................................
7.6.2
A bstracción b á sica ..........................................................................................................
7.6.3
O ptim ización d e “m arcar y lim piar” ....................................................................
7.6.4
R ecolectores d e basura “m arcar y com pactar” .................................................
7.6.5
R ecolectores d e c o p ia ....................................................................................................
7.6.6
C om paración d e c o sto s.................................................................................................
7.6.7
Ejercicios para la sección 7 .6 .....................................................................................
R ecolección d e basura d e p ausa c o r t a .................................................................................
7.7.1
R ecolección d e basura in c r e m e n ta l.......................................................................
464
466
468
470
470
471
473
475
476
478
482
482
483
483
Tabla d e contenido
x v ii
7.7.2
A nálisis d e cap acidad alcance in c r e m e n ta l........................................................ 485
7.7.3
F undam entos d e la recolección p a rcia l................................................................. 487
7.7.4
R ecolección d e b asu ra g en er a cio n a l....................................................................... 488
7.7.5
E l algoritm o d el t r e n ................................................................................................... 490
7.7.6
Ejercicios para la sección 7 .7 ..................................................................................... 493
7.8
T em as avanzados sobre la recolección d e b a su r a ................................................................ 494
7.8.1
R ecolección d e b asu ra paralela y co n cu rren te.................................................. 495
7.8.2
R eubicación parcial d e o b j e t o s ................................................................................ 497
7.8.3
R ecolección conservadora p ara lengu ajes in s e g u r o s ........................................ 498
7.8.4
R eferencias d éb iles......................................................................................................... 498
7.8.5
Ejercicios para la sección 7 .8 ..................................................................................... 499
7.9
R esum en d el cap ítulo 7 ................................................................................................................ 500
7.10 R eferencias para e l ca p ítu lo 7 .................................................................................................... 502
8
G en eración de código
8.1
C uestiones sobre el d iseñ o d e un generador d e c ó d ig o ...................................................
8.1.1
E n trad a d el generador d e c ó d ig o ............................................................................
8.1.2
E l program a d estin o ......................................................................................................
8.1.3
Selección d e in stru ccio n es...........................................................................................
8.1.4
A signación d e registro s.................................................................................................
8.1.5
Orden d e e v a l u a c ió n ....................................................................................................
8.2
E l lenguaje d e s t i n o .........................................................................................................................
8.2.1
U n m odelo sim p le d e m áqu ina d e s tin o .................................................................
8.2.2
C ostos d el program a y las in stru cciones..............................................................
8.2.3
Ejercicios para la sección 8 .2 .....................................................................................
8.3
D irecciones en el cód ig o d e s t i n o ..............................................................................................
8.3.1
A signación e s t á t i c a .......................................................................................................
8.3.2
A signación d e p ila ..........................................................................................................
8.3.3
D irecciones para lo s nom bres en tiem p o d e e j e c u c ió n .................................
8.3.4
Ejercicios para la sección 8 .3 .....................................................................................
8.4
B loques básicos y grafos d e flu jo .............................................................................................
8.4.1
B loques b á sic o s................................................................................................................
8.4.2
Inform ación de sigu iente u s o .....................................................................................
8.4.3
G rafos d e f l u j o ...............................................................................................................
8.4.4
R epresentación d e los grafos d e f lu j o ....................................................................
8.4.5
C ic lo s....................................................................................................................................
8.4.6
Ejercicios para la sección 8 .4 .....................................................................................
8.5
O ptim ización d e los bloques b á s i c o s ......................................................................................
8.5.1
L a representación en G D A d e los bloques b á s ic o s .........................................
8.5.2
B úsqueda de subexpresiones locales c o m u n e s ..................................................
8.5.3
E lim inación d el cód igo m u e r t o ...............................................................................
8.5.4
E l uso d e identidades a lg e b r a ic a s .........................................................................
8.5.5
R epresentación d e referencias a arreglos..............................................................
8.5.6
A signaciones d e apuntadores y llam adas a p rocedim ien tos..........................
8.5.7
R eensam blado d e los bloques b ásicos a partir d e los G D A s .....................
8.5.8
E jercicios para la sección 8 .5 .....................................................................................
505
506
507
507
508
510
511
512
512
515
516
518
518
520
522
524
525
526
528
529
530
531
531
533
533
534
535
536
537
539
539
541
Tabla d e contenido
8.6
U n generador d e cód igo s im p le ...............................................................................................
8.6.1
D escriptores d e registros y d ire cc io n e s................................................................
8.6.2
E l algoritm o d e generación d e c ó d ig o ..................................................................
8.6.3
D iseño d e la función obtenR eg.................................................................................
8.6.4
Ejercicios para la sección 8 .6 ...................................................................................
O ptim ización d e m irilla (p e e p h o le )......................................................................................
8.7.1
E lim inación d e instrucciones redundantes d e carga y alm acenam iento
8.7.2
E lim inación d e cód ig o in a lc a n z a b le .....................................................................
8.7.3
O p tim izaciones d el flujo d e c o n t r o l.....................................................................
8.7.4
Sim plificación algebraica y reducción por fu e r z a ...........................................
8.7.5
U so d e características específicas d e m á q u in a .................................................
8.7.6
Ejercicios para la sección 8 .7 ...................................................................................
R epartición y asignación d e registro s...................................................................................
8.8.1
R epartición glob al d e r e g is t r o s ..............................................................................
8.8.2
C onteos d e u s o ..............................................................................................................
8.8.3
A signación d e registros para ciclos e x te r n o s ....................................................
8.8.4
A signación d e registros m ed iante la coloración d e g r a f o s ...........................
8.8.5
Ejercicios para la sección 8 .8 ...................................................................................
Selección de instrucciones m ed iante la rescritura de árboles.....................................
8.9.1
Esquem as d e traducción d e á r b o le s .....................................................................
8.9.2
G eneración d e cód igo m ed iante e l revestim iento d e un árbol
d e en tra d a ..................................................................................................................
8.9.3
C oincidencias d e los p atrones m ed iante el análisis s in t á c t ic o .................
8.9.4
R u tin as para la com probación s e m á n tic a ..........................................................
8.9.5
P roceso gen eral para igualar á r b o le s ..................................................................
8.9.6
Ejercicios p ara la sección 8 .9 ...................................................................................
G eneración d e cód igo óp tim o para las e x p r e s io n e s ......................................................
8.10.1
N úm eros d e E r s h o v .....................................................................................................
8.10.2 G eneración d e cód igo a partir de árboles d e expresión etiq u etad os . . .
8.10.3 E valuación d e expresiones co n un su m inistro insuficiente d e reg istro s.
8.10.4 Ejercicios para la sección 8 .1 0 .................................................................................
G eneración d e cód igo d e program ación d in á m ic a .........................................................
8.11.1
E valuación c o n tig u a .....................................................................................................
8.11.2 E l algoritm o d e program ación d in á m ic a ............................................................
8.11.3 Ejercicios para la sección 8 .1 1 .................................................................................
R esu m en d el ca p ítu lo 8 .............................................................................................................
R eferencias para el ca p ítu lo 8 ..................................................................................................
560
563
565
565
567
567
567
568
570
572
573
574
575
577
578
579
O p t i m iz a c i o n e s i n d e p e n d i e n t e s d e l a m á q u in a
9.1
Las fuentes principales d e o p tim iz a c ió n ..............................................................................
9.1.1
C ausas d e redu n dan cia...............................................................................................
9.1.2
U n ejem plo abierto: Q u ic k s o r t ..............................................................................
9.1.3
Transform aciones que preservan la se m á n tica .................................................
9.1.4
Subexpresiones com u nes g l o b a l e s ........................................................................
9.1.5
Propagación d e c o p ia s ................................................................................................
9 .1 .6
E lim inación d e cód ig o m u erto .................................................................................
583
584
584
585
586
588
590
591
8.7
8.8
8.9
8.10
8.11
8.12
8.13
542
543
544
547
548
549
550
550
551
552
552
553
553
553
554
556
556
557
558
558
Tabla d e contenido
9.2
9.3
9.4
x ix
9.1.7
M ovim ien to d e c ó d i g o .................................................................................................
9.1.8
V ariables d e inducción y reducción en f u e r z a ..................................................
9.1.9
E jercicios para la sección 9 .1 .....................................................................................
In trodu cción al análisis d el flujo d e d a t o s ..........................................................................
9.2.1
L a ab stracción d e l flujo d e d a to s .............................................................................
9.2.2
E l esq u em a d el análisis d e l flujo d e d a to s ...........................................................
9.2.3
E squem as d el flujo d e d a to s en bloques b á s i c o s .............................................
9.2.4
D efiniciones d e alcan ce..................................................................................................
9.2.5
A nálisis d e variables v i v a s .........................................................................................
9.2.6
E xp resion es d is p o n ib le s ..............................................................................................
9.2.7
R esu m en ..............................................................................................................................
592
592
596
597
597
599
600
601
608
610
614
9.2.8
Ejercicios para la sección 9 .2 .....................................................................................
F undam entos d el análisis d el flujo d e d a t o s ........................................................................
9.3.1
S e m i-la ttic e s ......................................................................................................................
9.3.2
Funciones d e tr a n sfe r e n c ia ........................................................................................
9.3.3
E l algoritm o iterativo para los m arcos d e trab ajo g e n e r a le s......................
9.3.4
Significado d e una solu ción d e u n flujo d e d a t o s ............................................
9.3.5
Ejercicios para la sección 9 .3 .....................................................................................
Propagación d e c o n s ta n te s ...........................................................................................................
615
618
618
623
626
628
631
632
9.4.1
9.5
9.6
V alores d el flujo d e d a to s para el m arco d e trabajo d e propagación
d e c o n s ta n te s ...........................................................................................................
9.4.2
La reunión para e l m arco d e trabajo d e propagación d e co n sta n tes . .
9.4.3
Funciones d e transferencia p ara el m arco d e tra b a jo d e propagación
d e co n sta n te s............................................................................................................
9.4.4
M on otonía e n el m arco d e trabajo d e propagación d e con stan tes . . . .
9.4.5
L a d istrib u tivid ad d el m arco d e trab ajo d e propagación d e con stantes
9.4.6
Interpretación d e los resu ltad os...............................................................................
9.4.7
Ejercicios para la sección 9 .4 .....................................................................................
E lim inación d e redundancia p a rcia l.........................................................................................
9.5.1
L os orígenes d e la re d u n d a n cia ................................................................................
9.5.2
¿P u ed e elim inarse to d a la redundancia?..............................................................
9.5.3
E l prob lem a d el m ovim ien to d e cód ig o d iferido...............................................
9.5.4
A nticipación d e las ex p re sio n es................................................................................
9.5.5
E l algoritm o d e m ovim ien to d e cód igo d ife r id o ...............................................
9.5.6
Ejercicios para la sección 9 .5 .....................................................................................
C iclos en los grafos d e f l u j o ........................................................................................................
9.6.1
D o m in a d o res.....................................................................................................................
9.6.2
O rdenam iento “primero en profundidad” ...........................................................
9.6.3
A ristas en un árbol d e exp an sión co n b ú sq u ed a en p ro fu n d id a d .............
9.6.4
A ristas p osteriores y cap a cid a d d e r e d u c c ió n ...................................................
9.6.5
P rofundidad d e un grafo d e flu jo .............................................................................
9.6.6
C iclos n a tu rales................................................................................................................
9.6.7
V elocidad de convergencia d e los algoritm os d e flujos d e d atos
iter a tiv o s....................................................................................................................
9.6.8
E jercicios para la sección 9 .6 .....................................................................................
633
633
634
635
635
637
637
639
639
642
644
645
646
655
655
656
660
661
662
665
665
667
669
XX
Tabla d e contenido
9.7
A n álisis b asado en r e g io n e s ......................................................................................................
9.7.1
R e g io n e s..............................................................................................................................
9.7.2
Jerarquías d e regiones p ara grafos d e flujo r e d u c ib le s .................................
9.7.3
G eneralidades d e un an álisis b asado en r e g io n e s.............................................
9.7.4
S up osiciones necesarias sobre las funciones tr a n sfo r m a c ió n .....................
9.7.5
U n algoritm o para el an álisis basado en r e g io n e s ..........................................
9.7.6
M anejo d e grafos d e flujo n o r e d u c ib le s..............................................................
9.7.7
Ejercicios para la sección 9 .7 .....................................................................................
A nálisis s im b ó lic o ..........................................................................................................................
9.8.1
E xpresiones afines d e las variables d e r e fere n c ia .............................................
9.8.2
Form ulación d el problem a d e flujo d e d a t o s .....................................................
9.8.3
A nálisis sim b ólico basado en r e g io n e s .................................................................
9.8.4
Ejercicios para la sección 9 .8 .....................................................................................
R esu m en d el ca p ítu lo 9 ...............................................................................................................
R eferencias para el ca p ítu lo 9 ...................................................................................................
672
672
673
676
678
680
684
686
686
687
689
694
699
700
703
P aralelism o a n ivel de in stru cción
10.1 A rquitecturas d e p r o c e sa d o r e s.................................................................................................
10.1.1 C analizaciones d e instrucciones y retrasos d e bifurcación...........................
10.1.2 E jecución c a n a liz a d a ....................................................................................................
10.1.3 E m isión d e varias in stru ccio n es...............................................................................
10.2 R estricciones d e la program ación d el c ó d ig o ......................................................................
10.2.1 D ep en dencia d e d a t o s .................................................................................................
10.2.2 B ú sq u ed a d e dependencias en tre accesos a m e m o r ia ....................................
10.2.3 C oncesiones entre el uso d e registros y el p a r a le lis m o .................................
10.2.4 O rdenam iento d e fases en tre la asignación d e registros
y la program ación d e c ó d i g o ............................................................................
10.2.5 D ep en dencia d el c o n tr o l..............................................................................................
10.2.6 Soporte d e ejecución e s p e c u la tiv a ..........................................................................
10.2.7 U n m odelo d e m áquina básico..................................................................................
10.2.8 Ejercicios para la sección 1 0 .2 ..................................................................................
10.3 P rogram ación d e bloques b á s i c o s ...........................................................................................
10.3.1 Grafos d e d ep en dencia d e d a t o s .............................................................................
10.3.2 P rogram ación por lista d e bloques b á s ic o s ........................................................
10.3.3 Ó rdenes topológicos prior i z a d o s .............................................................................
10.3.4 Ejercicios para la sección 1 0 .3 ..................................................................................
10.4 P rogram ación d e cód igo g lo b a l................................................................................................
10.4.1 M ovim iento d e cód ig o p r im it iv o .............................................................................
10.4.2 M ovim iento d e cód ig o h a cia a r r ib a .......................................................................
10.4.3 M ovim iento d e cód ig o h a cia ab ajo..........................................................................
10.4.4 A ctualización d e las d ep en dencias d e d a t o s .....................................................
10.4.5 A lgoritm os d e program ación g lo b a l.......................................................................
10.4.6 T écnicas avanzadas d e m ovim iento d e c ó d ig o ..................................................
10.4.7 Interacción co n los program adores d in á m ic o s ..................................................
10.4.8 Ejercicios para la sección 1 0 .4 ..................................................................................
707
708
708
709
710
710
711
712
713
9.8
9.9
9.10
10
716
716
717
719
720
721
722
723
725
726
727
728
730
731
732
732
736
737
737
Tabla d e contenido
11
XXI
10.5 C analización por softw are.............................................................................................................
10.5.1 I n tr o d u c c ió n .....................................................................................................................
10.5.2 C analización d e los ciclo s m ediante softw are.....................................................
10.5.3 A signación d e reclu so s y generación d e c ó d ig o ................................................
10.5.4 C iclos d e ejecu ción c r u z a d a .....................................................................................
10.5.5 O b jetivos y restricciones d e la canalización por so ftw a r e ...........................
10.5.6 U n algoritm o d e can alización por so ftw a r e.........................................................
10.5.7 P rogram ación d e grafos d e d ep en d en cia d e d a to s a cíclico s........................
10.5.8 P rogram ación d e grafos d e d ep en d en cia c í c li c o s ............................................
10.5.9 M ejoras a los algoritm os d e c a n a liz a c ió n ...........................................................
10.5.10 E xp ansión m odular d e v a r ia b le s ............................................................................
10.5.11 Instrucciones c o n d icio n a le s.......................................................................................
10.5.12 Soporte d e hardware para la canalización por s o f tw a r e .............................
10.5.13 E jercicios para la sección 1 0 .5 ..................................................................................
10.6 R esum en d el cap ítu lo 1 0 .............................................................................................................
10.7 R eferencias para e l ca p ítu lo 1 0 .................................................................................................
738
738
740
743
743
745
749
749
751
758
758
761
762
763
765
766
O p tim ización para e l p aralelism o y la localidad
11.1 C oncep tos b á s ic o s ...........................................................................................................................
11.1.1 M u ltip ro cesa d o res..........................................................................................................
11.1.2 Paralelism o en las a p lic a c io n e s ................................................................................
11.1.3 Paralelism o a nivel de c ic lo ........................................................................................
11.1.4 L ocalid ad d e los d a t o s .................................................................................................
11.1.5 In trodu cción a la teoría d e la transform ación a fín ...........................................
11.2 M u ltiplicación d e m atrices: un ejem p lo d e t a lla d o ...........................................................
11.2.1 E l algoritm o d e m ultiplicación d e m atrices........................................................
11.2.2 O p tim iz a c io n e s................................................................................................................
11.2.3 Interferencia d e la c a c h é ..............................................................................................
11.2.4 Ejercicios para la sección 1 1 .2 ..................................................................................
11.3 E spacios d e iteracion es...................................................................................................................
11.3.1 C onstrucción d e espacios d e iteraciones a partir d e anidam ientos
d e c i c l o s ....................................................................................................................
11.3.2 Orden d e ejecu ción para los anidam ientos d e c ic lo s ........................................
11.3.3 Form ulación d e m atrices d e d e sig u a ld a d e s........................................................
11.3.4 Incorporación d e co n sta n tes s im b ó lic a s ..............................................................
11.3.5 C ontrol d el ord en d e e j e c u c ió n ................................................................................
11.3.6 C am bio d e e j e s ................................................................................................................
11.3.7 E jercicios para la sección 1 1 .3 ..................................................................................
11.4 ín d ices d e arreglos a f in e s .............................................................................................................
11.4.1 A ccesos a fin e s ...................................................................................................................
11.4.2 A ccesos afines y no afines en la p r á c t i c a ...........................................................
11.4.3 Ejercicios para la sección 1 1 .4 ..................................................................................
11.5 R eutilización de d a t o s ...................................................................................................................
11.5.1 T ip o s d e reu tilización ....................................................................................................
11.5.2 R eutilización p rop ia.......................................................................................................
769
771
772
773
775
777
778
782
782
785
788
788
788
788
791
791
793
793
798
799
801
802
803
804
804
805
806
Tabla d e contenido
11.5.3
11.5.4
R eu tilización esp acial p rop ia...................................................................................
R eu tilización d e g r u p o ...............................................................................................
809
811
11.5.5
E jercicios para la sección 1 1 .5 ................................................................................
A nálisis d e dependencias d e d a to s d e a r r e g lo s ................................................................
11.6.1
D efinición d e la d ep en dencia d e d a to s d e los accesos a a r r e g lo s ...........
11.6.2
P rogram ación lineal e n t e r a ......................................................................................
11.6.3
L a p ru eb a d e l G C D .....................................................................................................
11.6.4
H eurística para resolver program as lin eales e n te r o s.....................................
11.6.5
Solución d e program as lin eales en tero s g en era les...........................................
11.6.6
R esu m en ............................................................................................................................
11.6.7
E jercicios para la sección 1 1 .6 ................................................................................
11.7 B ú sq u ed a d el paralelism o sin sin cro n iza ció n ......................................................................
11.7.1
U n ejem plo in tr o d u cto rio .........................................................................................
11.7.2
P articionam ientos d e esp acio a f í n ........................................................................
11.7.3
R estricciones d e partición d e e s p a c io ..................................................................
11.7.4
R esolución d e restricciones d e partición d e e s p a c io .....................................
11.7.5
U n algoritm o sim p le d e generación d e c ó d ig o .................................................
11.7.6
E lim inación d e iteraciones v a cía s..........................................................................
11.7.7
E lim inación d e las pruebas d e los ciclo s m ás in t e r n o s ...............................
11.7.8
Transform aciones d el cód ig o f u e n t e .....................................................................
11.7.9
Ejercicios para la sección 1 1 .7 ................................................................................
11.8 Sincronización en tre ciclos p a r a le lo s .....................................................................................
11.8.1
U n núm ero co n sta n te d e sin cronizaciones.........................................................
11.8.2
Grafos d e dependencias d el p r o g r a m a ...............................................................
11.8.3
T iem p o je r á r q u ic o ........................................................................................................
11.8.4
E l algoritm o d e p aralelización.................................................................................
11.8.5
Ejercicios para la sección 1 1 .8 ................................................................................
11.9 C analizaciones....................................................................................................................................
11.9.1
¿Q ué es la ca n alización ?............................................................................................
11.9.2
Sobrerrelajación su cesiv a (Succesive O ver-R elaxation , SOR):
un ejem plo..................................................................................................................
11.9.3
C iclos com p letam en te p e r m u ta b le s .....................................................................
11.9.4
C analización d e ciclos com p letam en te p erm u ta b les.....................................
11.9.5
Teoría g e n e r a l................................................................................................................
11.9.6
R estricciones d e partición d e t ie m p o ..................................................................
11.9.7
R esolución d e restricciones d e partición d e tiem p o m ediante
el L em a d e F a r k a s ................................................................................................
11.9.8
Transform aciones d e c ó d i g o ...................................................................................
11.9.9
P aralelism o co n sincronización m í n i m a ............................................................
11.9.10 Ejercicios para la sección 1 1 .9 ................................................................................
11.10 O p tim izaciones d e lo c a lid a d ......................................................................................................
11.10.1 Localidad tem poral d e los d a to s c a lc u la d o s ...................................................
11.10.2 C ontracción d e a r r e g lo s ............................................................................................
11.10.3 Intercalación d e p a r t ic io n e s ...................................................................................
11.10.4 R eunión d e to d o s los co n cep to s..............................................................................
11.10.5 Ejercicios para la sección 1 1 .1 0 .............................................................................
814
815
816
817
818
820
823
825
826
828
828
830
831
835
838
841
844
846
851
853
853
854
857
859
860
861
861
11.6
863
864
864
867
868
872
875
880
882
884
885
885
887
890
892
Tabla d e contenido
x x ill
11.11 O tros u sos d e las transform aciones afin es............................................................................ 893
11.11.1 M áquinas con m em oria d is t r ib u id a ..................................................................... 894
11.11.2 P rocesad ores q u e em iten m últiples in stru ccio n es........................................... 895
11.11.3 In strucciones co n vectores y S I M D ..................................................................... 895
11.11.4 P r e o b te n c ió n ................................................................................................................... 896
11.12 R esum en d el cap ítu lo 1 1 .......................................................................................................... 897
11.13 R eferencias para e l ca p ítu lo 1 1 ............................................................................................... 899
12
A nálisis in terp roced ural
12.1
12.2
12.3
12.4
12.5
12.6
C oncep tos b á s ic o s .........................................................................................................................
12.1.1
G rafos d e lla m a d a s .....................................................................................................
12.1.2
S ensibilidad al c o n t e x t o ............................................................................................
12.1.3
C adenas d e lla m a d a s ..................................................................................................
12.1.4
A nálisis sen sib le al co n tex to b asado en la c lo n a c ió n ..................................
12.1.5
A nálisis sen sib le al co n tex to b asado en el r e s u m e n .....................................
12.1.6
E jercicios para la secció n 1 2 .1 ................................................................................
¿Por q u é análisis interprocedural?.........................................................................................
12.2.1
In vocación d e m étodos v ir tu a le s ..........................................................................
12.2.2
A nálisis d e alias d e a p u n ta d o r e s...........................................................................
12.2.3
P a r a le liz a c ió n .................................................................................................................
12.2.4
D etección d e errores d e softw are y v u ln e r a b ilid a d e s..................................
12.2.5
In yección d e cód ig o S Q L .........................................................................................
12.2.6
D esb ord am ien to d e b ú f e r ..........................................................................................
U n a representación lógica d el flujo d e d a to s ......................................................................
12.3.1
Introducción a D a talo g ...............................................................................................
12.3.2
R eglas d e D a t a l o g ........................................................................................................
12.3.3
P redicad os intensionales y e x t e n s io n a le s .........................................................
12.3.4
E jecución d e program as en D a ta lo g .....................................................................
12.3.5
E valuación increm ental d e program as en D a ta lo g ........................................
12.3.6
R eglas problem áticas en D a ta lo g ...........................................................................
12.3.7
Ejercicios para la sección 1 2 .3 .................................................................................
U n algoritm o sim p le d e análisis d e a p u n ta d o re s..............................................................
12.4.1
Por qué e s d ifícil el análisis d e a p u n ta d o r e s ....................................................
12.4.2
U n m odelo para apuntadores y referencias.......................................................
12.4.3
Insensibilidad a l flu jo ..................................................................................................
12.4.4
L a form ulación en D a ta lo g ......................................................................................
12.4.5
U so d e la inform ación d e los t ip o s ........................................................................
12.4.6
Ejercicios para la sección 1 2 .4 .................................................................................
A nálisis interprocedural insensible al c o n t e x t o ................................................................
12.5.1
E fectos d e la invocación a u n m é t o d o ...............................................................
12.5.2
D escubrim iento d el grafo d e llam adas en D a ta lo g ........................................
12.5.3
C arga d in ám ica y reflex ió n .......................................................................................
12.5.4
Ejercicios para la sección 1 2 .5 .................................................................................
A nálisis d e apuntadores sensible al c o n t e x t o ...................................................................
12.6.1
C ontextos y cadenas d e lla m a d a s ........................................................................
12.6.2
Agregar co n tex to a las reglas d e D a ta lo g .........................................................
903
904
904
906
908
910
911
914
916
916
917
917
917
918
920
921
921
922
924
927
928
930
932
933
934
935
936
937
938
939
941
941
943
944
945
945
946
949
x x iv
Tabla d e contenido
12.7
12.8
12.9
A
12.6.3
O bservaciones ad icion ales acerca d e la se n sib ilid a d .....................................
12.6.4
E jercicios p ara la sección 1 2 .6 .................................................................................
Im plem en tación e n D a ta lo g m ed ian te B D D s ..................................................................
12.7.1
D iagram as d e decision es b inarios...........................................................................
12.7.2
Transform aciones en B D D s ......................................................................................
12.7.3
R ep resen tación d e las relaciones m ediante B D D s ........................................
12.7.4
O p eracion es relaciónales com o op eracion es B D D ........................................
12.7.5
U so d e B D D s p ara el análisis tip o “a p u n ta a” ..............................................
12.7.6
Ejercicios para la sección 1 2 .7 .................................................................................
R esu m en d el ca p ítu lo 1 2 ...........................................................................................................
R eferencias para el ca p ítu lo 1 2 ...............................................................................................
U n front-end com p leto
965
A .l
E l lenguaje d e cód ig o fu e n te .................................................................................... 965
A .2
M a i n .................................................................................................................................. 966
A .3
A .4
A .5
A .6
A .7
A .8
A .9
B
949
950
951
951
953
954
954
957
958
958
961
A nalizador lé x ico ...........................................................................................................
Tablas d e sím b olos y t i p o s ......................................................................................
C ódigo interm edio para las e x p r e s io n e s ............................................................
C ódigo d e sa lto para las exp resion es b o o lea n a s..............................................
C ódigo interm edio para las in stru ccio n e s..........................................................
A nalizador s in t á c t ic o ..................................................................................................
Creación d el fr o n t-e n d ...............................................................................................
967
970
971
974
978
981
986
B úsqueda de soluciones linealm ente in d ep en d ien tes
989
ín d ice
993
C a p ít u lo 1
Introducción
L os lenguajes d e program ación son n otaciones q u e d escrib en los cálcu los a la s personas y las
m áquinas. N u estra p ercep ción d e l m undo en q ue viv im o s d ep en d e d e los len g u a jes d e pro­
gram ación, y a q u e tod o e l softw are q ue se eje cu ta e n tod as las com p u tad oras se escribió en
algún lengu aje d e program ación. Pero antes d e p od er ejecu tar u n program a, prim ero d eb e tra­
d ucirse a un form ato en e l q ue u na com p u tad ora p ueda ejecutarlo.
Los sistem a s d e softw are q ue se encargan d e e s ta traducción se llam an com piladores.
E ste libro tra ta acerca d e cóm o d iseñ ar e im plem entar com p ilad ores. A q u í descubrirem os
q u e p od em os utilizar unas cu an tas ideas b ásicas para construir trad uctores para u na am plia
variedad d e lenguajes y m áquinas. A dem ás d e los com piladores, lo s principios y las técn ica s
para su d iseñ o se p ueden aplicar a ta n to s d om in ios d istin to s aparte, q ue es probable q ue un
cien tífico com p u tacion al las reutilice m uchas veces en e l transcurso d e s u carrera profesional.
E l e stu d io d e la escr itu ra d e los com p ilad ores s e rela cio n a co n los lengu ajes d e program a­
ción, la arquitectura d e las m áquinas, la teo ría d e lengu ajes, los algoritm os y la ingeniería de
softw are.
E n e s te ca p ítu lo prelim inar presentarem os las d istin ta s form as d e los traductores d e lengua­
je, proporcionarem os u n a d escrip ción gen eral d e a lto nivel so b re la estru ctu ra d e un com pilador
ordinario, y hablarem os sobre las ten dencias e n lo s lengu ajes d e program ación y la arquitectura
d e m áquinas q ue d a n form a a los com piladores. Incluirem os algunas ob servacion es sobre la
relación entre el d iseñ o d e los com piladores y la teo ría d e las cien cia s co m p u ta cio n a les, y un
esq u em a d e las ap licacion es d e tecn ología sobre los com piladores q u e van m ás allá d e la com ­
pilación. Term inarem os con u n a breve d escrip ción d e los co n cep to s cla v e d e los lenguajes de
program ación que necesitarem os para nuestro estu d io d e los com piladores.
1.1
P ro c e s a d o re s d e le n g u a je
D ich o e n form a sim p le, u n com p ilad or es un program a q ue p uede leer un program a en un len­
g u a je (el lengu aje fu en te) y traducirlo en un program a eq u ivalen te en o tro lengu aje (el lengu aje
d estin o ); v ea la figura 1.1. U n a función im p ortan te d el com pilador es reportar cualquier error
e n el program a fu en te q ue d etec te d urante el proceso d e traducción.
1
2
Capítulo 1. Introducción
programa fuente
i ______
Compilador
programa destino
F igu ra 1.1: U n com pilador
Si el program a d estin o es u n program a ejecu ta b le en len gu aje m áquina, en to n ces e l usuario
puede ejecu tarlo para procesar las entradas y producir salidas (resultados); v ea la figura 1.2.
entrada
salida
F igu ra 1.2: E jecución d el program a d e d estin o
U n in té rp re te es otro tip o com ú n d e procesador d e lenguaje. E n v e z d e producir un progra­
m a d estin o com o u n a traducción, el intérprete nos d a la apariencia d e ejecu tar d irectam ente
las op eracion es especificadas en el program a d e origen (fu en te) co n la s en trad as proporcionadas
por e l usuario, com o se m uestra e n la figura 1.3.
programa fuente
Intérprete
salida
entrada
F igu ra 1.3: U n intérprete
El p rogram a d estin o en lengu aje m áquina q ue p rod uce un com pilador es, p o r lo general, m ás
rápido q ue un intérprete al m om ento d e asignar las en trad as a las sa lid a s. N o o b sta n te, por
lo regular, e l intérprete p uede ofrecer m ejores d ia g n ó stico s d e error q u e un com pilador, y a q ue
eje cu ta e l program a fuente in stru cción p or instrucción.
E j e m p lo 1 .1 : L os procesadores d el lengu aje Java com binan la com pilación y la interpretación,
com o se m uestra en la figura 1.4. U n program a fuente en J a v a p u ed e com pilarse prim ero en un
form ato interm edio, llam ado bytecodes. D esp u és, u n a m áq u in a virtu al lo s interpreta. U n bene­
ficio d e e s te arreglo es q ue los b ytecod es q ue s e com pilan e n u na m áquina p ueden interpretarse
en o tra , tal vez a través d e u na red.
P ara p od er lograr un p rocesam ien to m ás rápido d e las entradas a las salid as, algunos com ­
piladores d e Java, con ocid os com o com piladores ju s t-in -tim e (ju sto a tie m p o ), traducen los
bytecod es en len gu aje m áquina ju sto an tes d e ejecu tar el program a interm edio p a ra procesar
la en trad a.
□
1.1
3
Procesadores d e lenguaje
programa fuente
salida
F igu ra 1.4: U n com pilador híbrido
A d em ás d e un com pilador, pueden requerirse otro s program as m ás para la creación d e un
program a d estin o ejecu tab le, com o s e m u estra e n la figura 1.5. U n program a fuente p uede di­
vidirse en m ód u los gu ard ados en archivos separados. L a tarea d e recolectar el program a d e ori­
g en se co n fía algunas veces a u n program a separado, llam ad o preprocesador. E l preprocesador
tam b ién p uede expandir algu nos fragm entos d e có d ig o ab reviados d e uso frecuente, llam ados
m acros, en in stru cciones d e l lengu aje fuente.
D esp ués, e l program a fuente m odificado se a lim en ta a u n com pilador. E l com p ilad or puede
producir u n program a d estin o en en sam blador com o su sa lid a , y a q ue es m ás fácil producir
e l lengu aje ensam blador com o salid a y e s m ás fácil s u depuración. A con tinu ación, e l lenguaje
ensam blador se p rocesa m ed ian te un program a llam ad o en sa m b la d o r, e l cu a l p rod uce cód igo
m áq u in a relocalizable com o su salida.
A m enudo, los program as e x te n so s se com p ilan e n partes, p or lo q ue ta l vez haya que
en lazar (vincular) el cód igo m áq u in a relocalizab le con otro s archivos o b je to relocalizables y
archivos d e b ib lioteca p ara producir e l cód ig o q u e se ejecu te en realidad en la m áquina. E l en la za d o r resuelve las d irecciones d e m em oria extern a s, en d ond e el có d ig o en un archivo p uede
hacer referencia a u n a ubicación e n o tro archivo. E n ton ces, e l cargador reú n e to d o s los archivos
o b je to ejecu tab les en la m em oria para s u ejecución.
1.1.1
E je r c ic io s p a r a la s e c c ió n 1.1
E j e r c ic io 1 .1 .1 : ¿C uál es la diferencia en tre u n com p ilad or y un intérprete?
E j e r c ic io 1 .1 .2 : ¿C uáles so n las ven ta ja s d e (a) u n com p ilad or so b re un intérprete, y (b) las
d e un intérprete sob re un com pilador?
E j e r c ic io 1 .1 .3 : ¿Q ué ven tajas h ay p ara u n siste m a d e p rocesam ien to d e lengu ajes en e l cual
e l com p ilad or produce lengu aje ensam blador en v e z d e len gu aje m áquina?
E j e r c ic io 1 .1 .4 : A u n com p ilad or q ue traduce un len gu aje d e a lto nivel a o tro lengu aje de
a lto nivel se le llam a traductor d e sou rce-to-sou rce. ¿Q ué v en tajas h ay en cu a n to al u so d e C
com o lengu aje d estin o para u n com pilador?
E j e r c ic io 1 .1 .5 : D escrib a algunas d e las tareas q u e n ecesita realizar un ensam blador.
4
Capítulo 1.
Introducción
programa fuente
código m áquina destino
Figura 1.5: U n siste m a d e p rocesam ien to d e lenguaje
1.2
L a e s tr u c tu r a d e u n c o m p ila d o r
H asta este punto, h em os tra ta d o al com p ilad or com o u n a c a ja sim p le q u e m a p ea un program a
fuente a u n program a d estin o con eq u ivalen cia sem án tica. Si abrim os e s ta c a ja u n p o c o , podre­
m os ver q ue hay d os procesos en e s ta asignación: an álisis y sín tesis.
La p arte del a n álisis d iv id e el program a fuente en com p o n en tes e im pon e u na estructu ra
gram atical sob re ellas. D esp u és u tiliza e s ta estru ctu ra para crear u n a representación interm edia
d el program a fuente. Si la p arte d el an álisis d e te c ta q u e e l program a fu en te e s tá m al form ado
en cu an to a la sin taxis, o q ue no tien e u n a sem á n tica co n siste n te, en ton ces d eb e proporcionar
m ensajes inform ativos para q u e e l usuario p u ed a corregirlo. L a p arte d el an álisis tam bién
reco lecta inform ación sobre e l program a fuente y la a lm a cen a en u n a estru ctu ra d e d a to s lla ­
m ad a tabla de sím b o lo s, la cual se p asa ju n to co n la representación in term ed ia a la parte d e la
síntesis.
La p arte d e la sín te sis con stru ye el program a d estin o d esea d o a p artir d e la representación
interm edia y d e la inform ación en la ta b la d e sím b olos. A la p arte d e l análisis s e le llam a co ­
m únm ente el fro n t-e n d d el com pilador; la parte d e la sín tesis (propiam ente la trad u cción ) es
e l back-end.
Si exam in am os e l proceso d e com p ilación co n m ás d eta lle, podrem os ver q u e o p era com o
u na secu en cia d e fa se s, c a d a u n a d e las cu ales transform a u na representación d el program a
fuente e n otro. E n la figura 1.6 se m uestra u na d escom p osición típ ica d e un com p ilad or en
fases. E n la p ráctica varias fases pueden agruparse, y las representaciones interm edias entre las
1.2 La estructura d e un compilador
5
flujo d e caracteres
código máquina destino
*
F igura 1.6: F ases d e un com pilador
fases agrupadas n o n ecesitan construirse d e m anera ex p lícita . L a ta b la d e sím b olos, q u e alm a­
c e n a inform ación sob re tod o e l program a fuente, s e u tiliza en tod as las fases d el com pilador.
A lgunos com piladores tien en u n a fase de op tim iza ció n d e có d ig o in depend iente d e la m áquina,
en treelfro n t-en d y e l back-end. E lp ro p ó sito d e es ta o p tim iza ció n esrea liza r transform aciones sobre
la representación interm edia, para q ue e l back-end p u ed a producir u n m ejor program a d estin o
d e lo que hubiera producido co n u na representación in term ed ia sin optim izar. C om o la op tim i­
zación es op cion al, p uede faltar u na d e las d os fases d e op tim ización d e la figura 1.6.
1 .2 .1
A n á lis is d e lé x ic o
A la prim era fase d e un com pilador se le llam a a n á lisis d e léxico o escaneo. E l analizador d e léxico
lee el flu jo d e caracteres q ue com p on en el program a fu en te y los agru p a en secu en cias signifi­
6
Capítulo 1. Introducción
ca tiv a s, con ocidas com o lexem as. P ara cad a lexem a, e l analizador léxico produce com o sa lid a
un token d e la forma:
( n om bre-token , va lo r-a trib u to )
q ue p a sa a la fase sigu ien te, e l an álisis d e la sin ta x is. E n e l token, e l prim er co m p o n en te n o m ­
bre-token es un sím b olo ab stracto q ue se u tiliza d u ran te e l an álisis sin tá ctico , y e l segundo
com p on en te va lo r-a trib u to ap u n ta a u na en trad a en la ta b la d e sím b olos para e s te token. La
inform ación d e la en trad a en la ta b la d e sím b olos se n ecesita para el an álisis sem án tico y la
generación d e cód igo.
Por ejem p lo, su p o n g a q ue un program a fuente co n tien e la instrucción d e asignación:
p o s i c i o n = i n i c i a l + v e l o c id a d * 6 0
(1.1)
Los caracteres en e s ta asignación p odrían agruparse en los sigu ientes lexem as y m apearse a los
sig u ien tes tokens q ue se p asan al analizador sintáctico:
1. p o s i c i o n e s un lexem a q ue s e asign a a un tok en (id , 1 ), en d on d e ¡ d es un sím b olo abs­
tracto q ue representa la p alabra id e n tific a d o r y 1 ap un ta a la en trad a e n la ta b la d e sím ­
bolos para p o s i c i o n . L a en trad a en la ta b la d e sím b olos para un identificador con tien e
inform ación acerca d e éste , com o su nom bre y tipo.
2. E l sím b olo d e asignación = es un lexem a q ue se asign a al token ( = ) . C om o e s te token
no n ecesita un valor-atribu to, hem os om itid o el segu n d o com p on en te. P odríam os haber
u tilizad o cualquier sím b olo ab stracto com o a s i g n a r para e l nom bre-token, pero por
con ven iencia d e n otación hem os o p ta d o por usar e l m ism o lexem a com o el nom bre para
el sím b olo abstracto.
3. i n i c i a l e s un lexem a q ue s e asign a al token (id , 2 ), en d on d e 2 a p u n ta a la en trad a en
la ta b la d e sím b olos p ara i n i c i a l .
4. + es un lexem a q ue s e asig n a al token ( + ) .
5. v e l o c i d a d es un lexem a q ue se asign a al token ( id , 3 ), e n d o n d e 3 a p u n ta a l a en trad a
en la ta b la d e sím b olos para v e lo c id a d .
6. * es un lexem a q ue s e asig n a al token (*).
7. 60 es u n lexem a q u e s e asign a al token (6 0 ).1
El analizador léxico ignora los espacios en blanco q u e separan a los lexem as.
La figura 1.7 m u estra la representación d e la in stru cción d e asignación (1.1) d esp u és d el
análisis léxico com o la secu en cia d e tokens.
( id , 1) (=> ( id , 2) ( + ) ( id , 3) (*) (60)
(1.2)
En e s ta representación, los nom bres d e lo s tok en s = , + y * son sím b olos ab stra cto s p a ra los
operadores d e asignación, su m a y m ultiplicación, resp ectivam en te.
'H a b la n d o e n se n tid o té c n ic o , p a r a e l lex em a 6 0 fo rm aríam o s u n to k en co m o ( n ú m e r o , 4 ), e n d o n d e 4 a p u n ta a la
ta b la d e sím b o lo s p a r a la re p re se n ta c ió n in te r n a d e l en te ro 6 0 , p e ro d e ja re m o s la explicación d e los to k e n s p a r a los nú­
m ero s h a s ta e l c a p ítu lo 2. E n e l c a p ítu lo 3 h ab larem o s so b re las té c n ic a s p a r a la c o n stru cció n d e an alizad o res léxicos.
La estructura d e un compilador
( id , 1)
p o s ic io n
+
( id , 2)
in ic ia l
^
*
( id , 3 )
^60
v e l o c id a d
_________ *_________
A nalizador sem án tico
T a b l a d e s ím b o l o s
~TT~
( id , 1 ) ^
( id , 2)
^
(id , 3 )
in tto flo a t
T
60
G enerador d e cód igo interm edio
+
t i = i n t t o f l o a t (6 0 )
t 2 = id 3 * t i
t 3 = id 2 + t 2
id l = t3
___________ *___________
O ptim izador d e código
t i = id 3 * 6 0 .0
i d l = id 2 + t i
♦
G enerador d e código
*
LDF
MULF
LDF
ADDF
STF
R2, id 3
R2, R 2, # 6 0 .0
R1, id 2
R l, R l, R2
i d l , Rl
Figura 1.7: T raducción d e u n a in stru cción d e asignación
8
1 .2 .2
Capítulo 1. Introducción
A n á lis is s in tá c tic o
La segu n d a fase d e l com pilador e s el an álisis sin tá c tic o o parsing. E l parser (analizador sin tác­
tico ) u tiliza los prim eros com p onentes d e los tokens producidos por el analizador d e léxico para
crear u n a representación in term ed ia en form a d e árbol que d escrib a la estru ctu ra gram atical
d el flujo d e tokens. U na representación típ ica es e l árbol sin tá c tic o , en el cu al ca d a nodo in te­
rior representa u n a operación y los h ijos d e l n od o representan los argum entos d e la operación.
En la figura 1.7 se m uestra un árbol sin táctico para el flujo d e tokens (1.2) com o sa lid a d el
analizador sin táctico.
E ste árbol m u estra e l orden en el q u e d eb en llevarse a ca b o las op eracion es e n l a sigu ien te
asignación:
p o s i c i o n = i n i c i a l + v e l o c id a d * 60
El árbol tien e u n n od o interior etiq u eta d o com o * , co n (¡d, 3) com o s u h ijo izquierdo, y el
en tero 60 com o s u hijo derecho. E l n od o (id, 3) representa e l identificador v e l o c id a d . E l nodo
etiq u etad o com o * hace exp licito q ue prim ero d eb em os m ultiplicar el valor d e v e l o c id a d por
60. E l nodo etiq u eta d o com o + in d ica q u e d eb em o s sum ar e l resultado d e e s ta m ultiplicación
al valor d e i n i c i a l . L a raíz d e l árbol, q ue se e tiq u e ta com o = , in dica q ue d eb em os alm acenar
e l resu ltad o d e e s ta su m a en la u bicación para e l identificador p o s i c i o n . E ste ord en am ien to d e
op eracion es es con sisten te co n las convenciones usuales d e la aritm ética, las cu a les n os indican
q ue la m u ltip licación tien e m ayor p reced en cia que la su m a y, p o r en d e, d eb e realizarse antes que
la sum a.
Las fases sigu ien tes d e l com pilador u tilizan la estru ctu ra gram atical para ayudar a analizar
e l program a fuente y generar el program a d estin o. E n el ca p ítu lo 4 u tilizarem os gram áticas
libres d e co n tex to para especificar la estru ctu ra gram a tica l d e los lengu ajes d e program ación,
y hablarem os sobre los algoritm os para con stru ir analizadores sin tá ctico s eficien tes d e m anera
au tom ática, a partir d e ciertas cla ses d e gram áticas. E n lo s cap ítu los 2 y 5 verem os q ue las
d efinicion es orien tad as a la sin ta x is p ueden ayudar a especificar la traducción d e la s con stru c­
cion es d e l len gu aje d e program ación.
1 .2 .3
A n á lis is s e m á n tic o
El an alizador se m á n tic o u tiliza el árbol sin tá ctico y la inform ación e n la ta b la d e sím b olos para
com probar la co n sisten cia sem á n tica d el program a fu en te con la definición d el lengu aje. T am ­
bién recop ila inform ación sobre el tip o y la guarda, y a s e a en e l árbol sin tá ctico o en la ta b la
d e sím b olos, para usarla m ás tarde d u ran te la generación d e có d ig o interm edio.
U n a p arte im portan te d e l an álisis sem án tico e s la com probación (ve rifica c ió n ) d e tip o s , en
d on d e e l com pilador verifica q ue ca d a operador ten g a operandos que coincidan . Por ejem plo,
m uchas d efinicion es d e lenguajes d e program ación requieren q u e e l ín d ice d e u n arreglo se a
entero; e l com p ilad or d eb e reportar un error si se u tiliz a un núm ero d e p u n to flo ta n te para
indexar e l arreglo.
La esp ecificación d el len gu aje p uede p erm itir cierta s conversiones d e tip o co n o cid a s com o
coerciones. P or ejem p lo, p uede aplicarse un operador binario aritm ético a un par d e en teros o
a un par d e núm eros d e punto flotan te. Si e l operador s e ap lica a u n núm ero d e punto flo ta n te
1.2 La estructura d e un compilador
9
y a u n entero, el com p ilad or p uede convertir u obligar a q u e se co n v ierta en un núm ero de
p u n to flotan te.
D ich a conversión aparece en la figura 1.7. S u p on ga q u e p o s i c i o n , i n i c i a l y v e l o c id a d se
han declarado com o núm eros d e p u n to flo ta n te, y q ue el lex em a 6 0 por s í so lo form a un en te­
ro. E l com probador d e tip o e n e l analizador sem á n tico d e la figura 1.7 d escubre q ue se aplica
e l operador * al núm ero d e p u n to flotan te v e l o c i d a d y al en tero 60. E n e s te caso, el entero
p u ed e convertirse en u n núm ero d e punto flo ta n te. O bserve e n la figura 1.7 q ue la sa lid a del
analizador sem án tico tien e un nodo adicional para e l operador i n t t o f l o a t , q u e con vierte de
m anera e x p líc ita su argum ento tip o en tero en un núm ero d e p u n to flotan te. E n el ca p ítu lo 6
hablarem os sobre la com probación d e tip os y e l an álisis sem án tico.
1 .2 .4
G e n e r a c ió n d e c ó d ig o in te r m e d io
E n el p roceso d e traducir un program a fuente a có d ig o d estin o , un com p ilad or p uede construir
u na o m ás representaciones in term ed ias, las cu a les pueden tener u n a variedad d e form as. Los
árb oles sin tá ctico s so n u n a form a d e representación interm edia; por lo general, s e u tiliza n du­
rante e l an álisis sin tá ctico y sem ántico.
D esp u és d e l análisis sin táctico y sem án tico d e l program a fu en te, m uchos com piladores ge­
neran u n nivel bajo ex p lícito , o u n a representación in term ed ia sim ilar a l có d ig o m áquina, que
p od em os considerar com o u n program a para u n a m áq u in a ab stracta. E s ta representación in­
term ed ia d e b e ten er d os propiedades im portantes: d eb e ser fácil d e producir y fácil d e traducir
e n la m áquina d estin o.
E n e l ca p ítu lo 6, consideram os u na form a in term ed ia llam ad a código d e tres direccio n es, que
co n siste en u n a secu en cia d e instrucciones sim ilares a ensam blador, co n tres op eran d os p or ins­
tru cción. C ad a op eran d o p uede actu ar com o u n registro. L a sa lid a d el generador d e có d ig o in­
term edio en la figura 1.7 co n siste en la secu en cia d e có d ig o d e tres direcciones.
ti
t2
t3
id
= i n t t o f l o a t (6 0 )
= id 3 * t i
= id 2 + t 2
l = t3
(1.3)
H ay varios p un tos q ue vale la p en a m encionar sobre la s instrucciones d e tres direcciones. En
prim er lugar, ca d a in stru cción d e asignación d e tres direcciones tiene, p or lo m enos, un operador
d e l lado derecho. P or en d e, esta s in stru cciones corrigen e l orden e n e l q ue s e v a n a realizar las
operaciones; la m u ltip licación v a an tes q ue la sin n a en e l program a fuente (1 .1 ). E n segundo
lugar, e l com pilador d eb e generar un nom bre tem poral para guardar e l valor calcu lado por
u n a instrucción d e tres direcciones. E n tercer lugar, algunas “in stru cciones d e tres d irecciones”
com o la prim era y la ú ltim a e n la secu en cia (1.3) anterior, tien en m enos d e tres operandos.
E n e l cap ítu lo 6 hablarem os sobre las represen taciones in term ed ias principales q ue se u tili­
zan e n los com piladores. E l ca p ítu lo 5 introduce la s técn ica s p a ra la traducción d irigid a p or la
sin taxis, las cu ales s e aplican en e l cap ítu lo 6 para la com probación d e tip o s y la gen eración de
cód ig o interm edio en las con stru cciones com unes d e los lengu ajes d e program ación, com o las
exp resion es, las con stru ccion es d e con trol d e flujo y las llam adas a procedim ientos.
10
1 .2 .5
Capítulo 1. Introducción
O p tim iz a c ió n d e c ó d ig o
La fase d e op tim ización d e cód igo in depend iente de la m áquina tra ta d e m ejorar el cód igo in­
term edio, d e m anera q ue se p rod uzca un mejor có d ig o d estin o . Por lo general, mejor sign ifica
m ás rápido, pero p ueden lograrse otros o b je tiv o s, co m o un có d ig o m ás corto, o u n có d ig o d e
d estin o q ue con su m a m enos poder. P or ejem p lo, un algoritm o d irecto g en era el có d ig o inter­
m edio (1.3), usando u n a instrucción para cad a operador en la representación tip o árbol q ue
produce e l analizador sem ántico.
U n algoritm o sim p le d e generación d e cód igo interm edio, seg u id o d e la op tim iza ció n d e có ­
d igo, e s u n a m anera razonable d e ob ten er un buen có d ig o d e d estin o . E l op tim izad or p uede d e­
ducir q ue la conversión d el 60, d e en tero a p u n to flotan te, p u ed e realizarse d e u n a v e z por to d a s
en tiem p o d e com p ilación, por lo q ue se p uede elim inar la operación ¡ n t t o f l o a t su stitu y en d o
e l en tero 60 por el núm ero d e p u n to flotan te 60.0. Lo que es m ás, t 3 s e u tiliz a só lo una vez
para tran sm itir su valor a i d l , para que el op tim izad or p u ed a transform ar (1.3) en la sigu ien te
secu en cia m ás corta:
t i = id 3 * 6 0 . 0
i d l = id 2 + t i
(1.4)
H ay u n a gran variación e n la can tid ad de op tim iza ció n d e có d ig o q ue realizan los d istin tos
com piladores. E n aq uellos q ue realizan la m ayor o p tim iza ció n , a lo s q ue se les d en o m in a com o
“com piladores op tim izad ores” , s e in vierte m ucho tiem p o e n e s ta fase. H ay op tim izacion es
sim p les q ue m ejoran en form a considerable e l tiem p o d e ejecución d e l p rogram a d estin o , sin
reducir d em asiad o la velocid ad d e la com p ilación. Los ca p ítu lo s 8 en ad elan te hablan con m ás
d eta lle sobre las op tim izacion es in d ep en d ien tes y d ep en d ien tes d e la m áquina.
1 .2 .6
G e n e r a c ió n d e c ó d ig o
El generador d e cód ig o recibe com o en trad a u n a representación in term ed ia d e l program a fuen­
t e y la asign a al lengu aje d estin o. Si el lengu aje d estin o es có d ig o m áquina, se seleccion an
registros o u bicacion es (localidades) d e m em oria para ca d a u n a d e las variables q ue u tiliza el
program a. D esp ués, las instrucciones in term ed ias se traducen en secu en cia s d e instrucciones
d e m áq u in a q ue realizan la m ism a tarea. U n asp ecto crucial d e la gen eración d e cód igo es la
asignación ju ic io sa d e los registros para guardar las variables.
Por ejem p lo, usando los registros R1 y R2, e l có d ig o in term ed io en (1.4) p o d ría traducirse
en e l sigu ien te cód igo d e m áquina:
IDF
MULF
LDF
ADDF
STF
R 2,
R2, R 2, # 6 0 .0
R 1,
R l,
id l,
id 3
R l,
i d 2 (1.5)
R2
Rl
El prim er op eran d o d e ca d a in stru cción esp ecifica u n d estin o . L a F e n ca d a instrucción
nos in d ica q ue tra ta con núm eros d e p u n to flotan te. E l có d ig o en (1.5) carga el co n ten id o d e
1.2 La estructura d e un compilador
11
la dirección id 3 en e l registro R2, y d esp u és lo m u ltip lica con la co n sta n te d e p u n to flo ta n te
60.0. E l # in d ica que e l núm ero 60.0 se va a tratar co m o u na co n sta n te inm ediata. L a tercera
in stru cción m ueve id 2 a l registro R1 y la c u a rta lo su m a a l valor q ue s e h ab ía calcu lado antes
e n el registro R2. Por últim o, el valor en e l registro R1 se alm acena en la dirección d e i d l , por
lo q ue e l cód igo im p lem en ta en form a correcta la in stru cción d e asign ación (1 .1 ). E l ca p ítu lo 8
tra ta acerca d e la gen eración d e código.
E n e s ta exp licación sobre la g en eración d e có d ig o h em os ignorado u n a cu estió n im portan ­
te: la asign ación d e esp acio d e alm acenam iento para los id en tificadores en e l program a fuente.
C om o verem os e n el ca p ítu lo 7, la organ ización d el esp a c io d e a lm acen am ien to en tiem p o
d e ejecu ción d ep en d e d e l len gu aje q ue s e e s té co m p ilan d o. Las d ecisio n es sob re la a sign ación de
esp a c io d e alm acen am ien to s e realizan d u ra n te la g en eración d e c ó d ig o interm edio, o durante
la gen eración d e cód igo.
1 .2 .7
A d m in is tr a c ió n d e la t a b l a d e s ím b o lo s
U n a fun ción esen cial d e un com p ilad or e s registrar lo s nom bres d e la s variables q u e se utilizan
e n e l program a fuente, y recolectar inform ación so b re varios atrib u tos d e ca d a nom bre. E stos
atrib u tos p ueden proporcionar inform ación acerca d el espacio d e alm acenam iento q u e se asigna
para u n nom bre, s u tip o , s u alcance (en q ué p arte d e l program a p u ed e usarse s u valor), y en
e l caso d e los nom bres d e p rocedim ientos, cosas com o el núm ero y los tip o s d e su s argum en­
to s, e l m étod o para pasar ca d a argum ento (por ejem p lo, p or valor o p o r referencia) y e l tipo
d evu elto.
L a ta b la de sím b olos es u n a estru ctu ra d e d a to s q ue co n tien e un registro para c a d a nombre
d e variable, co n ca m p o s p ara los atrib u tos d el nom bre. L a estru ctu ra d e d a to s d eb e diseñar­
s e d e tal form a q u e p erm ita al com p ilad or buscar e l registro para ca d a nom bre, y alm acenar
u ob ten er d a to s d e ese registro con rapidez. E n e l ca p ítu lo 2 hablarem os sobre la s tab las de
sím b olos.
1 .2 .8
E l a g r u p a m ie n t o d e fa s e s e n p a s a d a s
E l tem a sobre las fases tien e q ue ver con la organización lógica d e un com pilador. E n u na implem en tación , las activid ad es d e varias fases p ueden agruparse e n u n a p a sa d a , la cu a l lee un
archivo d e en trad a y escribe en u n archivo d e salida. Por ejem plo, las fases correspondientes
al front-end d e l análisis léxico, análisis sin tá ctico , análisis sem án tico y gen eración d e cód igo
interm edio p odrían agruparse e n u n a so la pasada. L a op tim iza ció n d e có d ig o p o d ría ser una
p asad a op cion al. E n tonces p od ría haber u n a p a sa d a d e back-end, co n sisten te e n la generación
d e cód igo para una m áquina de d estin o específica.
A lgu n as coleccion es d e com p ilad ores s e han cread o e n base a representaciones interm edias
d iseñ ad as co n cu id ado, las cu a les p erm iten q u e e l front-end para u n len gu aje esp ecífico se
in tercon ecte co n e l back-end para c ie r ta m áq u in a d estin to . C on esta s coleccio n es, p od em os
producir com p ilad ores p ara d istin to s lengu ajes fu en te para u n a m áq u in a d estin o , m ed ia n te la
com b in ación d e d istin to s front-end con su s back-end p a ra esa m á q u in a de d estin o . D e m anera
sim ilar, p od em os producir com p ilad ores para d istin ta s m áqu inas d estin o , m ed ian te la com bi­
n ación d e un front-end con back-end para d istin ta s m áquinas d estin o .
12
Capítulo 1. Introducción
1 .2 .9
H e r r a m i e n t a s d e c o n s tr u c c ió n d e c o m p ila d o r e s
A l igual q ue cualquier desarrollador d e softw are, e l desarrollador d e com piladores p uede u tili­
zar para s u beneficio los en torn os d e desarrollo d e softw are m odernos q ue con tien en herram ien­
tas com o ed itores d e lenguaje, depuradores, ad m in istrad ores d e version es, profilers, am bientes
seguros d e prueba, etcétera. A dem ás d e esta s herram ientas generales para e l desarrollo d e
softw are, se han creado otras herram ientas m ás esp ecializad as para ayudar a im plem entar las
diversas fases d e un com pilador.
E stas herram ientas u tilizan lenguajes esp ecializad os para especificar e im plem entar com ­
p on en tes específicos, y m uchas u tilizan algoritm os b a sta n te sofisticad os. Las herram ientas más
ex ito sa s son las q ue o cu lta n los d eta lles d el algoritm o d e generación y producen com p onentes
q ue pueden integrarse con facilidad al resto d el com pilador. A lgu nas herram ientas d e con stru c­
ción d e com piladores d e u so com ú n son:
1. G en eradores d e an alizadores sin tá c tic o s (p a rse rs), q ue producen d e m anera a u to m á tica
analizadores sin tá ctico s a partir d e u n a d escrip ción gram atical d e un len gu aje d e progra­
m ación.
2. G en eradores d e escán eres, q ue producen analizadores d e léxicos a partir d e u na descrip­
ción d e los tokens d e un len gu aje utilizan do exp resion es regulares.
3. M otores de tradu cción o rie n ta d o s a la sin ta x is, q ue p rod ucen coleccion es d e ru tinas para
recorrer u n árbol d e an álisis sin tá ctico y generar código interm edio.
4. G en eradores d e gen eradores d e código, q u e producen un generador d e có d ig o a partir
de u na colección de reglas para traducir ca d a operación d el len gu aje interm edio en el
lengu aje m áquina para u n a m áquina d estin o.
5. M otores de a n á k sis d e flu jo s de d a to s , q u e facilitan la recopilación d e inform ación d e
cóm o se tran sm iten los valores d e u na p arte d e un program a a ca d a u n a d e las o tra s par­
te s. E l an álisis d e los flujos de d a to s es u n a parte clave en la op tim iza ció n d e código.
6. K its ( con ju n tos) d e h erra m ien ta s para la con stru cció n de co m p ila d o res, q ue proporcionan
un con ju n to integrado d e ru tinas para construir varias fases d e un com pilador.
A lo largo d e este libro, describirem os m uchas d e e s ta s herram ientas.
1.3
L a e v o lu c ió n d e los le n g u a je s d e p ro g ra m a c ió n
Las prim eras com p utadoras electrón icas aparecieron en la d éca d a d e 1940 y se program aban
en lengu aje m áquina, m ed ian te secu en cias d e O’s y l ’s q ue indicaban d e m anera ex p líc ita a la
com p utadora las op eracion es que d eb ía ejecutar, y en q ué orden. Las o p eracion es en s í eran
d e m uy bajo nivel: m over d a to s d e u n a ubicación a otra, su m ar e l con ten ido d e d os registros,
com parar d o s valores, etcétera. E s tá d em á s d ecir, q ue e s te tip o d e program ación era lenta,
ted io sa y p rop en sa a errores. Y u n a vez escritos, lo s program as eran d ifíciles d e com prender y
m odificar.
1.3 La evolución d e los lenguajes d e programación
1 .3 .1
13
E l a v a n c e a lo s le n g u a je s d e a lto n iv e l
E l prim er p aso h acia los lengu ajes d e program ación m ás am igables para las p erson as fue el
desarrollo d e los lenguajes ensam bladores a in icios d e la d éca d a d e 1950, los cu ales usaban m nem ónicos. A l principio, las instrucciones en un len gu aje ensam blador eran sólo representaciones
m nem ón icas d e las instrucciones d e m áquina. M ás ad elan te, s e agregaron m acro instruccio­
n es a los lenguajes ensam bladores, p ara q u e un program ador p ud iera definir abreviaciones pa­
ram e trizadas para las secu en cias d e u so frecuente d e las instrucciones d e m áquina.
U n p aso im p ortan te h acia los lengu ajes d e a lto nivel se h izo en la seg u n d a m itad d e la
d éca d a d e 1950, co n e l desarrollo d e Fortran para la com p u ta ció n cien tífica, C obol p a ra e l pro­
cesam ien to de d a to s d e negocios, y Lisp para la co m p u ta ció n sim bólica. La filosofía d e esto s
lengu ajes era crear n otacion es d e a lto nivel con las q ue los program adores pudieran escribir con
m ás facilidad los cálcu los num éricos, las ap licacion es d e negocios y los program as sim bólicos.
E sto s lengu ajes tuvieron ta n to é x ito q u e sigu en en uso hoy en día.
E n las sigu ien tes décad as se crearon m uchos lengu ajes m ás con características innovadoras
para facilitar q ue la program ación fuera m ás n atu ral y m ás robusta. M ás ad elan te, en este ca­
p ítu lo, hablarem os sobre ciertas características clave q u e son com u n es para m uchos lenguajes
d e program ación m odernos.
E n la actu alid ad ex iste n m iles d e lengu ajes d e program ación. P u ed en clasificarse e n una
variedad d e form as. U n a d e ellas e s p or generación. Los lenguajes d e p rim e ra g en era ció n son
los lengu ajes d e m áquina, los d e segunda gen era ció n son lo s lenguajes en sam bladores, y los de
tercera g en era ció n so n los lengu ajes d e alto nivel, com o Fortran, C obol, L isp, C, C + + , C #
y Java. Los lenguajes de cu a rta g en era ció n son d iseñ ados para ap licacion es específicas com o
N O M A D para la generación d e reportes, SQ L para las co n su lta s en bases d e d a to s, y PostScript
para el form ato d e texto. E l térm ino lenguaje d e qu inta g en era ció n se ap lica a lo s lenguajes
basados en lógica y restricciones, com o P rolog y O PS5.
O tra d e las clasificacion es d e los lengu ajes u tiliza el térm in o im p era tivo para los lenguajes
e n los q u e un program a esp ecifica cóm o se v a a realizar u n cálcu lo, y d eclarativo para los len­
g u a jes en los q ue un program a esp ecifica qué cá lcu lo se v a a realizar. Los lengu ajes co m o C,
C + + , C # y Java son lengu ajes im perativos. E n los lenguajes im perativos h ay u n a n oción de
e sta d o d e l program a, ju n to co n instrucciones q u e m odifican e se esta d o . Los lengu ajes funcio­
nales com o ML y Haskell, y los lengu ajes d e ló g ica d e restricción com o P rolog, s e consideran a
m en u d o com o lenguajes declarativos.
E l térm in o lenguaje v o n N eu m a n n se ap lica a lo s lengu ajes d e program ación cu y o m o d elo se
b asa en la arquitectura d e com p utadoras d escrita p or von N eum ann. M uchos d e lo s lenguajes
d e la actualidad, com o Fortran y C, son lenguajes von N eum ann.
U n lenguaje o rie n ta d o a o b je to s es u no q u e so p o rta la program ación orien ta d a a o b jeto s,
u n estilo d e program ación en el q ue un program a co n siste en u n a colección d e o b je to s que
in teractú an en tre sí. Sim ula 67 y S m alltalk so n d e los prim eros lenguajes orien tad os a o b jeto s
im p ortan tes. Los lengu ajes com o C + + , C # , J a v a y R u b y so n los lenguajes orien tad os a ob je­
to s m ás recientes.
Los lenguajes d e secu en cia s de com andos (sc rip tin g ) so n lenguajes interpretados con opera­
d ores d e a lto nivel d iseñ ados para “im ir” cálcu los. E sto s cá lcu lo s s e con ocían e n un principio
com o “secuencias d e com andos (s c r ip ts ) ” . A w k, JavaS cript, P erl, P H P , P y th o n , R u b y y T cl
so n ejem plos populares d e lenguajes de secu en cias d e com andos. L os program as escritos en
14
Capítulo 1. Introducción
lenguajes d e secu en cias d e com an dos so n a m enudo m ás co rto s q ue lo s program as eq u ivalen tes
escritos en lenguajes com o C.
1 .3 .2
I m p a c to s e n e l c o m p ila d o r
D esd e s u d iseñ o , lo s lengu ajes d e p rogram ación y los co m p ilad ores está n ín tim a m en te rela­
cionados; los avan ces en los len gu ajes d e p rogram ación im pu sieron n uevas d em a n d a s sob re
los escritores d e com p ilad ores. É sto s ten ía n q u e idear algoritm os y rep resen tacion es para
traducir y d ar so p o rte a las n uevas cara cterística s d el len g u a je. D esd e la d éca d a d e 1940, la
arq u itectu ra d e com p u tad oras h a ev olu cion ad o tam b ién . Los escritores d e com p ilad ores no
só lo tu vieron q u e rastrear las n uevas cara cterística s d e u n len g u a je, sin o q u e ta m b ién tu v ie­
ron q ue idear algoritm os d e tra d u cció n p a ra aprovechar a l m á xim o las n uevas ca ra cterística s
d e l hardw are.
Los com p ilad ores p ueden ayudar a prom over e l uso d e lengu ajes d e alto n iv el, al m inim i­
zar la sob recarga d e ejecu ción de los p rogram as escr ito s en esto s len gu ajes. Los co m p ila d o ­
res tam b ién so n im prescin dib les a la hora d e h acer efectiv a s la s arq u itecturas co m p u ta cio n a les
d e a lto ren d im ien to en las ap licacion es d e usuario. D e hecho, e l rend im iento d e un siste m a
co m p u tacion al es ta n d ep en d ien te d e la tecn o lo g ía d e com p ilad ores, q ue ésto s s e u tiliza n com o
una herram ienta para evaluar los co n cep to s sob re la arq u itectu ra an tes d e crear u na co m p u ­
tadora.
Escribir com p ilad ores e s u n reto. U n com p ilad or p or s í so lo es un program a ex ten so . A de­
m ás, m uchos sistem a s m odernos d e procesam iento d e lenguajes m anejan varios lenguajes fuen­
te y m áquinas d estin o d en tro d el m ism o framework; es decir, sirven com o coleccion es d e
com piladores, y es probable q ue co n sistan en m illon es d e líneas d e código. E n con secu en cia, las
buenas técn icas d e ingeniería d e softw are son esen ciales p a ra crear y evolucionar lo s procesa­
dores m odernos d e lenguajes.
U n com pilador d eb e traducir en form a correcta e l con ju n to p o ten cia lm en te in finito d e pro­
gram as q ue p odrían escribirse en e l lengu aje fuente. E l prob lem a d e generar e l có d ig o d estin o
ó p tim o a partir d e un program a fuente es indecidible; p or en d e, los escritores d e com piladores
d eb en evaluar las con cesion es acerca d e los problem as q ue se d eb en atacar y la h eu rística q ue
se d eb e utilizar para lidiar co n e l problem a d e generar cód igo eficiente.
U n estu d io d e los com piladores e s tam b ién u n estu d io so b re cóm o la teoría se en cu en tra con
la práctica, com o verem os en la sección 1.4.
El propósito d e e s te libro es en señar la m etod o lo g ía y las ideas fun dam en tales q ue se u tili­
zan e n e l d iseñ o d e los com piladores. E ste libro no tien e la intención d e enseñar to d o s lo s algo­
ritm os y técnicas q ue p odrían usarse para construir un siste m a d e p rocesam ien to d e lenguajes
d e vanguardia. N o o b sta n te , los lectores d e e s te te x to adquirirán e l co n o cim ien to b ásico y la
com prensión para aprender a construir u n com p ilad or co n rela tiv a facilidad.
1 .3 .3
E je rc ic io s p a r a la s e c c ió n 1.3
E j e r c ic io 1 .3 .1 : Indique cu á l d e los sigu ien tes térm inos:
a) im perativo
d ) orien tad o a o b je to s
g ) d e cu a rta generación
b) d eclarativo
e) funcional
h) secu en cias d e com andos
c) v o n N eum ann
f) d e tercera generación
1.4 La ciencia d e construir un compilador
15
s e ap lican a los sigu ientes lenguajes:
1) C
6 ) L isp
1.4
2) C + +
7 ) ML
3) C obol
8) Perl
4 ) Fortran
9) P y th o n
5) Java
10) V B .
L a c ie n c ia d e c o n s tr u ir u n c o m p ila d o r
E l d iseñ o d e com piladores e s tá lleno d e b ellos ejem p los, en d o n d e se resuelven problem as com ­
p licados d el m undo real m ed ian te la abstracción d e la esen cia d el problem a en form a m atem á­
tica. É sto s sirven com o excelen tes ilustraciones d e có m o pueden usarse las abstracciones para
resolver problem as: se to m a u n problem a, se form ula u n a ab stracción m a tem á tica q ue capture
las características clave y se resuelve utilizan do técnicas m atem áticas. L a form ulación d el pro­
b lem a d eb e tener bases y u na sólid a com prensión d e las características d e los p rogram as de
com p utadora, y la solu ción d eb e validarse y refinarse en form a em pírica.
U n com p ilad or d eb e aceptar to d o s los program as fuente conform e a la especificación del
lenguaje; e l con ju n to d e program as fuente e s in finito y cualquier program a p u ed e ser m uy
largo, p osiblem en te form ado por m illon es d e líneas d e cód igo. C ualquier transform ación que
realice el com p ilad or m ientras trad u ce u n program a fu en te d eb e preservar e l sign ificad o del
program a q u e se e s tá com p ilan do. Por en d e, los escritores d e com piladores tien en in fluencia no
só lo sobre los com piladores q ue crean , sin o en to d o s lo s program as q ue com p ilan su s com pi­
ladores. E s ta cap acidad hace q ue la escritu ra d e com piladores se a en esp ecia l gratificante; no
ob sta n te, tam b ién hace q u e el desarrollo de los com p ilad ores s e a to d o un reto.
1 .4 .1
M o d e la d o e n e l d is e ñ o e im p le m e n ta c ió n d e c o m p ila d o r e s
E l estu d io d e los com piladores e s p rin cip alm en te un estu d io d e la form a en q ue d iseñ am os los m o­
d elos m atem áticos apropiados y elegim os los algoritm os correctos, a l tiem p o q ue logram os equi­
librar la necesidad d e u n a gen eralid ad y p od er co n la sim p leza y la eficiencia.
A lgu n os d e los m od elos m ás b ásicos so n la s m áquinas d e esta d o s finitos y las expresiones
regulares, q u e verem os e n el cap ítu lo 3. E sto s m odelos so n ú tiles para describir las u nidades de
léxico d e los program as (palabras clave, identificadores y d em á s) y para describir lo s algoritm os
q u e u tiliza e l com pilador para reconocer esas unidades. A dem ás, en tre lo s m odelos esen ciales se
en cu en tran las gram áticas libres d e co n tex to , q ue se u tilizan para describir la estru ctu ra sin tác­
tic a d e los lengu ajes d e program ación, com o el an idam iento d e los paréntesis o las instrucciones
d e control. E n el ca p ítu lo 4 estu diarem os las gram áticas. D e m anera sim ilar, los árboles so n un
m od elo im portan te para representar la estru ctu ra d e los program as y su trad ucción a cód igo
o b jeto , com o verem os en e l ca p ítu lo 5.
1 .4 .2
L a c ie n c ia d e la o p tim iz a c ió n d e c ó d ig o
E l térm in o “op tim ización ” e n el d iseñ o d e com piladores se refiere a lo s in ten tos q u e rea liza un
com p ilad or p or producir cód igo q u e s e a m ás eficien te q ue e l có d ig o ob v io . P or lo ta n to , “o p ti­
m ización ” es u n térm in o eq u ivocad o, y a q ue no h ay form a e n q ue s e p ueda garantizar q u e el
cód ig o producido por un com p ilad or s e a ta n rápido o m ás rápido q ue cualquier o tro cód igo que
realice la m ism a tarea.
16
Capítulo 1. Introducción
En los tiem p os m odernos, la op tim ización d e có d ig o q ue realiza u n com pilador s e h a vu elto
tan to m ás im portan te com o m ás com p leja. E s m ás com p leja d eb ido a q ue las arquitecturas d e
los procesadores se han vu elto m ás com plejas, con lo q ue ofrecen m ás op ortu n id ad es d e m ejorar
la form a en q ue se ejecu ta e l cód igo. E s m ás im p o rta n te, y a q ue la s com p u tad oras paralelas
m asivas requieren d e u n a op tim ización considerable, pues d e lo contrario s u rend im iento sufre
por grad os d e m agnitu d. Con la p osible prevalencia d e las m áquinas m ultinúcleo (com pu tad o­
ras co n chips q ue con tien en gran d es núm eros d e p rocesad ores), to d o s lo s com piladores tendrán
q ue enfrentarse a l problem a d e aprovechar las m áquinas con m últiples procesadores.
Es d ifícil, s i no es q ue im posible, construir un com p ilad or ro b u sto a partir d e “arreglos” .
Por en d e, s e h a generado u na teoría ex te n sa y ú til sobre el prob lem a d e op tim izar cód igo. El
uso d e u na base m a tem ática rigurosa nos p erm ite m ostrar q ue u n a op tim iza ció n es correcta y
q ue produce e l efecto d eseab le para to d a s las p osibles entradas. E m p eza n d o e n el ca p ítu lo 9,
verem os d e q u é m anera so n necesarios los m odelos com o grafos, m atrices y p rogram as lineales
si e l com p ilad or d eb e producir un cód ig o b ien op tim izado.
Por o tro lado, no e s su ficiente só lo co n la pura teoría. A l igual q u e m uchos p rob lem as d el
m undo real, no h ay resp uestas perfectas. D e hecho, la m ayoría d e las p regu n tas q ue hacem os
en la op tim ización d e un com p ilad or so n indecidibles U n a d e las h abilidad es m ás im p ortan tes en
e l d iseñ o d e los com piladores es la d e form ular e l problem a adecuado a resolver. P a ra em pezar,
n ecesitam os u n a b uena com prensión d el com p ortam ien to d e los program as, ju n to co n un pro­
ceso ex te n so d e exp erim en tación y evalu ación para validar nuestras intuiciones.
Las o p tim izacion es d e com piladores d eb en cum plir con los sig u ien tes o b je tiv o s d e diseño:
• L a op tim ización d eb e ser correcta; es decir, d eb e preservar el sign ificad o d el program a
com pilado.
• L a op tim ización d eb e m ejorar e l rendim iento d e m uchos program as.
• E l tiem p o d e com pilación d eb e m antenerse e n un valor razonable.
• E l esfu erzo d e ingeniería requerido d eb e ser adm inistrable.
Es im posible hacer m ucho én fasis en la im p orta n cia d e esta r en lo correcto. E s trivial escri­
bir un com p ilad or q ue genere cód igo rápido, ¡si e l có d ig o generado no n ecesita esta r correcto!
Es tan d ifícil op tim izar los com piladores en form a apropiada, q ue n os atrevem os a decir q ue
¡ningún com pilador op tim izador e s tá libre d e errores! Por en d e, e l o b jetiv o m ás im p ortan te en
la escritu ra d e un com pilador es q u e s e a correcto.
El segu n d o o b je tiv o es q u e e l com p ilad or d eb e tener efectivid ad a la h o ra d e m ejorar el
rendim iento d e m uchos program as d e entrada. P or lo general, e l rendim iento in d ica la v eloci­
dad d e ejecu ción d e l program a. E n esp ecia l en las ap licacion es incrustadas, tam bién p u ed e ser
con ven iente m inim izar el tam añ o del cód igo gen erado. Y en e l ca so d e los d isp o sitiv o s m óviles,
tam bién es con ven ien te q ue e l cód igo reduzca el con su m o d e energía. Por lo general, las m ism as
op tim izacion es q ue agilizan e l tiem p o d e ejecu ción tam bién ahorran energía. A dem ás d e l ren­
d im ien to, los asp ecto s d e cap acidad d e u so com o el reporte d e errores y la depuración tam bién
son im portantes.
En tercer lugar, d eb em os lograr q ue el tiem p o d e com p ilación se a corto para p od er sopor­
tar un ciclo rápido d e desarrollo y depuración. E ste requerim iento se h a v u elto m ás fácil de
1.5 Aplicaciones d e la tecnología d e compiladores
17
cu m plir a m ed ida q ue las m áquinas s e hacen m ás rápidas. A m enudo, un p rogram a prim ero se
desarrolla y se d ep u ra sin op tim izacion es. N o sólo se reduce e l tiem p o d e com p ilación, sin o que,
lo m ás im portan te, los program as no o p tim iza d o s so n m ás fáciles d e depurar, y a q ue las op tim i­
zacion es q ue in trod u ce un com pilador, por lo com ún, oscurecen la relación en tre e l có d ig o fuente
y e l cód igo o b jeto . A l activar las op tim iza cio n es en el com pilador, algu nas v eces s e exp on en
nuevos problem as en el program a fuente; en con secu en cia, h ay q ue probar o tra vez e l cód igo
op tim izad o. A lgu n as veces, la necesidad d e p ru eb a adicional im pide e l u so d e op tim izacion es
e n aplicaciones, en esp ecia l si su rendim iento n o e s crítico.
P or ú ltim o, un com pilador e s un siste m a com plejo; d eb em os m antener este siste m a sim ple,
para asegurar q ue los co sto s d e ingeniería y d e m anten im ien to d el com p ilad or sea n m anejables.
E x iste un núm ero in finito d e op tim izacion es d e program as q ue p odríam os im plem entar, y se
requiere d e m uy p o c o esfuerzo para crear u n a op tim iza ció n correcta y efectiv a . D eb em os dar
prioridad a las op tim izacion es, im plem en tan do só lo las q ue con lleven a lo s m ayores beneficios
e n los program as fu en te q ue en con trem os en la práctica.
P or lo tan to, al estu d iar los com piladores no só lo aprendem os a construir uno, sin o tam bién
la m etod ología gen eral p ara resolver problem as com p lejos y abiertos. E l m éto d o q u e se utilice
e n el desarrollo d e los com piladores im plica ta n to teoría com o exp erim en tación . P or lo general,
em p ezam os form ulando el problem a segú n nuestras in tu iciones acerca d e cu áles so n la s cu es­
tio n es im portantes.
1.5
A p lic a c io n e s d e la te c n o lo g ía d e c o m p ila d o re s
E l d iseñ o d e com p ilad ores no e s só lo acerca d e los com piladores; m uchas personas u tilizan
la tecn o lo g ía q ue aprenden al estu d ia r com p ilad ores en la escu ela y nunca, h ablando en sen ­
tid o estr icto , han escrito (n i siq u iera p arte d e) u n com p ilad or p a ra u n len gu aje d e progra­
m ación im p ortan te. L a tecn o lo g ía d e com p ilad ores tie n e tam b ién o tro s u sos im portan tes.
A d em ás, e l d iseñ o d e com p ilad ores im p a cta en otra s áreas d e las cien cia s co m p u ta cio n a les. En
e s ta sección verem os u n repaso acerca d e las in teraccion es y ap licacion es m á s im p ortan tes
d e e s t a tecn ología.
1 .5 .1
I m p le m e n ta c ió n d e le n g u a je s d e p r o g r a m a c ió n
d e a lto n iv e l
U n lengu aje d e program ación d e a lto nivel define u na abstracción d e program ación: el progra­
m ador exp resa un algoritm o u sand o e l lengu aje, y e l com pilador d eb e traducir el program a en
el len gu aje d e d estin o. Por lo general, es m ás fácil program ar en los lengu ajes d e program ación
d e a lto nivel, aunque so n m en os eficientes; e s decir, los p rogram as d estin o se ejecu tan con más
len titu d . Los program adores q u e u tilizan un lengu aje d e b a jo nivel tien en m ás con trol sobre
u n cálcu lo y p ueden, e n principio, producir có d ig o m ás eficien te. Por desgracia, los program as
d e m enor nivel so n m ás d ifíciles d e escribir y (peor aún) m enos p ortables, m ás propensos a
errores y m ás d ifíciles d e m antener. L a op tim iza ció n d e los com piladores in clu ye técn ica s para
m ejorar e l rendim iento d e l cód igo gen erado, con las cu ales se d esp la za la in eficien cia q u e dan
las ab stracciones d e a lto nivel.
18
Capítulo 1. Introducción
E j e m p lo 1 .2 : L a palabra clave r e g i s t r o e n el lenguaje d e program ación C es uno d e los pri­
m eros ejem plos d e la interacción entre la tecnología d e los com piladores y la evolución d e l len­
guaje. C uan do el lengu aje C se creó a m ediados d e la d éca d a d e 1970, era necesario dejar q ue un
program ador controlara q u é variables d el program a d eb ían residir en los registros. E ste control
y a no fue necesario cu an do se desarrollaron las técnicas efectivas d e asignación d e recursos, por
lo cu a l la m ayoría d e los program as m odernos y a n o u tilizan e s ta característica d el lenguaje.
D e h echo, los program as q u e u tilizan la p alab ra cla v e r e g i s t r o ( r e g i s t e r ) p u ed en p er­
der eficiencia, d eb ido a que, p or lo general, los program adores n o so n los m ejores ju eces e n las
cu estion es d e bajo n ivel, com o la asign ación d e registros. L a elecció n ó p tim a en la asignación
d e registros d ep en d e en gran p arte d e las cu estio n es esp ecífica s so b re la arquitectura d e u na
m áquina. Las decision es d e la adm inistración d e recursos com o cablear (distribuir) a bajo nivel
podrían d e hecho afectar el rendim iento, en esp ecia l s i e l program a se eje cu ta en m áquinas
d istin ta s a la m áquina para la cu a l se escribió.
□
Los d iversos cam bios en cu an to a la elección p opu lar d e lenguajes d e program ación han
sid o orien tad os al au m en to en los niveles d e abstracción. C fue e l lengu aje d e program ación
d e sistem a s predom inante en la d éca d a d e 1980; m uchos d e los nuevos proyectos q ue em p eza ­
ron e n la d éca d a d e 1990 eligieron a C + + ; Java, q ue s e introdujo en 1995, ga n ó p opularidad
con rap id ez a finales d e la d écad a d e 1990. Las ca racterísticas nuevas d e lo s lengu ajes d e pro­
gram ación q u e se introdujeron en ca d a generación incitaron a realizar nuevas investigaciones
en la op tim ización d e los com p ilad ores. A con tinu ación verem os la s generalidades acerca d e
las principales características d e los lengu ajes q ue han estim u lad o avances considerables en la
tecn ología d e los com piladores.
P rácticam en te to d o s los lengu ajes d e program ación com u nes, in clu yen d o a C, Fortran y
C obol, so p ortan los tip o s d e d a to s d e con jun tos definidos por e l usuario, com o los arreglos y las
estructuras, y el flujo d e con trol d e a lto nivel, com o los ciclos y las invocaciones a procedim ien­
to s. Si só lo tom am os ca d a in stru cción d e alto nivel u operación d e acceso a d a to s y la traduci­
m os d irectam en te a cód ig o m áquina, el resu ltad o sería m uy ineficiente. Se h a desarrollado un
cu erpo d e op tim izacion es de com pilador, con ocid o com o o p tim iza c io n e s de flu jo d e d a to s , para
analizar e l flujo d e d a to s a través d e l program a y elim inar la s redundancias en es ta s instruc­
ciones. Son efectivas p ara generar cód igo q u e se asem eje a l cód igo q u e escribe un program ador
exp erim en tad o a un n ivel m ás bajo.
La orientación a ob jetos se introdujo por prim era v ez en Sim ula en 1967, y se h a incorporado
en lenguajes com o Sm alltalk, C + + , C # y Java. Las ideas claves d e la orientación a o b jeto s son:
1. L a ab stracción d e d atos, y
2. L a h erencia d e propiedades,
d e las cu ales se ha d escu b ierto q ue facilitan el m an ten im ien to d e los program as, y lo s hacen
m ás m odulares. Los program as orien tad os a o b je to s son diferentes d e lo s program as escrito s en
m uchos otros len gu ajes, y a q ue co n siste n d e m uchos m ás p ro ced im ien to s, pero m ás pequeños
(a los cu ales se les llam a m éto d o s, en térm in os d e orien tación a o b jeto s). Por en d e, la s op tim iza ­
cion es d e los com piladores d eb en ser cap aces d e realizar bien su tra b a jo a través d e los lím ites
d e los p rocedim ien tos d el program a fuente. E l uso d e p rocedim ien tos en línea, q ue v ien e siendo
cu an do se su stitu y e la llam ad a a un procedim iento p or s u cuerpo, es m uy ú til e n este caso.
Tam bién se han desarrollado op tim izacion es para agilizar los en víos d e los m étod os virtuales.
1.5 Aplicaciones d e la tecnología d e compiladores
19
J ava tien e m uchas ca racterísticas q ue fa cilitan la program ación, m uchas d e las cu a les se
han in trodu cido an teriorm ente e n otros lengu ajes. E l lengu aje J a v a ofrece seguridad en los
tip os; es d ecir, un o b je to n o p uede usarse co m o o b je to d e u n tip o q u e no e s té relacionado.
T o d o s los accesos a los arreglos se verifican para asegurar q u e se en cu en tren d en tro d e lo s lí­
m ite s d el arreglo. Java n o tien e apuntadores y no p erm ite la a ritm ética d e apuntadores. T ien e
u n a h erram ien ta in tegrad a para la recolección d e basura, la cu a l lib era d e m a n era a u to m á tica
la m em oria d e variables q ue y a no s e en cu en tran e n uso. M ientras q u e e sta s ca racterísticas
facilitan e l p roceso d e la program ación, p rovocan u n a sob recarga e n tiem p o d e ejecu ción . Se
han d esarrollado o p tim izacion es e n e l com p ilad or p a ra reducir la sobrecarga, por ejem p lo, m e­
d ia n te la elim in ación d e las com p rob acion es d e ran go innecesarias y la asign ación d e o b jeto s
a los q u e n o s e p u ed e acceder m ás a llá d e u n p ro ced im ien to e n la p ila, en v e z d e l heap . Tam ­
bién se han desarrollado algoritm os efectiv o s para m inim izar la sob recarga d e la recolección
d e basura.
A dem ás, J a v a e s tá d iseñ ad o p ara d ar so p o rte al có d ig o p o rtab le y m óvil. Los p rogram as se
d istrib u yen com o b ytecod es d e Java, e l cu a l d eb e interpretarse o com p ilarse en có d ig o nativo
e n form a dinám ica, es decir, en tiem p o d e ejecu ción . L a com pilación d in á m ica tam bién s e ha
estu d ia d o e n o tro s co n tex to s, e n d ond e la inform ación s e ex tra e d e m anera d in á m ica e n tiem po
d e ejecu ción , y se u tiliza para producir u n có d ig o m ás op tim iza d o . E n la op tim iza ció n dinám i­
c a , es im portan te m inim izar e l tiem p o d e com p ilación, y a q ue form a p arte d e la sob recarga en
la ejecu ción . U n a téc n ic a d e uso com ú n es só lo com pilar y o p tim iza r las partes d e l program a
q u e se van a ejecu tar co n frecuencia.
1 .5 .2
O p tim iz a c io n e s p a r a la s a r q u i t e c t u r a s d e c o m p u ta d o r a s
L a rápida evolución de las arquitecturas d e com p utadoras tam b ién nos h a llevado a u na insacia­
b le d em an d a d e n u eva tecn o lo g ía d e com p ilad ores. C asi tod os los sistem a s d e a lto rendim iento
aprovechan las d os m ism as técn icas básicas: paralelism o y jera rq u ía s de m e m o ria . P odem os
encontrar el paralelism o en varios niveles: a n ivel de in stru cc ió n , en d o n d e varias operaciones
s e ejecu ta n al m ism o tiem p o y a n ivel d e p ro cesa d o r, e n d o n d e d istin to s su bp rocesos d e la
m ism a aplicación se ejecu tan e n d istin to s hilos. Las jerarquías d e m em oria son u n a resp u esta a
la lim itación b ásica d e q u e p od em os con stru ir un alm acenam iento m uy rápido o m u y extenso,
pero n o un alm acenam iento q ue s e a ta n to rápido com o extenso.
P a r a le lis m o
T o d o s los m icroprocesadores m odernos ex p lo ta n el paralelism o a nivel d e instrucción. Sin em ­
bargo, e s te paralelism o p u ed e o cu ltarse al program ador. Los program as s e escriben com o si
to d a s las instrucciones se ejecu taran en secuencia; e l hardware verifica en form a d in á m ica las
d ep en d en cias e n e l flujo secu en cial d e instrucciones y las eje cu ta e n paralelo siem p re q ue sea
posible. E n algunos casos, la m áq u in a in clu ye un program ador (scheduler) d e hardware que
p u ed e m odificar e l ord en d e las instrucciones para aum entar el paralelism o en e l program a.
Y a s e a q ue e l hardware reordene o no las in stru cciones, lo s com piladores pueden reordenar las
in stru cciones para q u e e l paralelism o a nivel de instrucción sea m ás efectivo.
E l paralelism o a nivel d e instrucción tam b ién p uede aparecer d e m anera ex p líc ita en e l con­
ju n to d e instrucciones. Las m áquinas V L IW (Very Long In struction W ord, P alabra d e instrucción
20
Capítulo 1. Introducción
m uy larga) tien en instrucciones q ue p ueden ejecu tar varias op eracion es en paralelo. E l Intel
IA 64 es un ejem p lo d e ta l arquitectura. T odos los m icroprocesadores d e a lto rend im iento y
propósito gen eral incluyen tam bién instrucciones que p ueden operar sob re un vector d e d a to s
al m ism o tiem p o . Las técn ica s d e los com p ilad ores se han desarrollado p a ra generar có d ig o d e
m anera a u tom ática para d ich as m áquinas, a partir d e program as secuenciales.
Los m ultiprocesadores tam bién s e han v u elto frecuentes; in clu so es com ún q ue h a sta las
com p utadoras p ersonales ten gan m ú ltip les procesadores. Los program adores pueden escribir
có d ig o m ultih ilo para los m ultiprocesadores, o có d ig o e n paralelo q u e u n com p ilad or p uede
generar d e m anera au tom ática, a partir d e program as secu en ciales. D ich o com p ilad or o c u lta
d e los program adores los d eta lles sobre cóm o encontrar el paralelism o en un program a, d istri­
buir los cálcu los en la m áquina y m inim izar la sincronización y los cá lcu lo s entre ca d a procesa­
dor. M uchas ap licacion es d e com p u tación cien tífica y d e ingeniería hacen u n u so intensivo d e
los cálcu los y p ueden beneficiarse m ucho con e l p rocesam ien to en paralelo. Se han desarrollado
técnicas d e paralelización para traducir d e m anera a u to m á tica los program as cien tíficos en
có d ig o p ara m ultiprocesadores.
J e r a r q u ía s d e m e m o r ia
U n a jerarquía d e m em oria co n siste en varios niveles d e alm acenam iento co n d istin ta s v elocid a­
d es y tam añ os, en d on d e e l nivel m ás cercano al procesador es el m ás rápido, pero ta m b ién el
m ás pequeño. E l tiem p o prom edio d e acceso a m em oria d e un program a se reduce si la m ayoría
d e su s accesos se satisfacen a través d e los niveles m ás rápidos d e la jerarquía. T an to e l parale­
lism o com o la ex isten cia d e u n a jerarquía d e m em oria m ejoran e l rendim iento p o te n c ia l d e u na
m áquina, pero e l com p ilad or d eb e aprovecharlos d e m anera efectiv a p a ra p od er producir un
rend im iento real en u n a aplicación.
Las jerarquías d e m em oria se en cu en tran en to d a s las m áquinas. Por lo gen eral, un proce­
sador tien e un p equeño núm ero d e registros q ue co n sisten en cien to s d e b y tes, varios niveles
d e cach é q ue con tien en d esd e k ilobytes h a sta m egab ytes, m em oria física q ue co n tien e d esd e
m egab ytes h a sta g igab ytes y, por ú ltim o, alm acenam iento secu nd ario q u e co n tien e gigab ytes
y m ucho m ás. D e m anera correspondiente, la velocid a d d e los accesos en tre lo s niveles adyacen­
te s d e la jerarq uía p uede diferir p o r d os o tres órd en es d e m agnitud. A m enudo, el rendim iento
d e un siste m a se Um ita n o só lo a la velocid ad d el procesador, sin o tam b ién p o r el rendim ien­
to d el su b siste m a d e m em oria. A unque d esd e u n principio los com piladores s e han en focad o en
op tim izar la ejecu ción d el procesador, ahora se pone m ás én fasis en lograr q u e la jerarq uía d e
m em oria s e a m ás efectiva.
El u so efectivo d e los registros es q u iz á e l p rob lem a in dividu al m ás im portan te en la o p ti­
m ización d e u n program a. A diferencia d e los registros q ue tien en q ue adm inistrarse d e m a­
nera e x p líc ita en e l softw are, las cachés y las m em orias físicas está n o cu lta s d el con ju n to de
instrucciones y e l hardware se en carga d e adm inistrarlas. L a ex p erien cia n os h a dem ostrado
q ue las directivas d e adm inistración d e cach é q u e im p lem en ta e l hardware no son efectiv a s en
algunos casos, en esp ecial co n e l cód ig o cien tífico q ue tien e estru ctu ras d e d a to s e x te n sa s (por
lo general, arreglos). E s p osib le m ejorar la efectivid ad d e la jerarquía d e m em oria, cam biando
la d istrib u ción de los d atos, o cam biando el orden d e las instrucciones q u e acceden a los d a to s.
Tam bién p od em os cam b iar la d istrib ución del cód ig o para m ejorar la efectiv id a d d e las cachés
d e instrucciones.
1.5 Aplicaciones d e la tecnología d e compiladores
1 .5 .3
21
D is e ñ o d e n u e v a s a r q u i t e c t u r a s d e c o m p u ta d o r a s
E n los prim eros d ía s d el d iseñ o d e arquitecturas d e com putadoras, los com piladores s e desarro­
llaron d esp u és d e haber cread o las m áquinas. E so h a cam biado. D esd e q ue la program ación en
lengu ajes d e alto nivel es la norm a, e l rendim iento d e un siste m a com p u tacion al se determ in a
n o só lo p or su velocidad en general, sin o tam b ién por la form a en que los com piladores pue­
d en ex p lo ta r su s características. Por en d e, en el desarrollo d e arquitecturas d e com putadoras
m odernas, los com piladores s e desarrollan en la e ta p a d e d iseñ o d el procesador, y se u tiliza el
cód ig o com p ilad o, q ue se eje cu ta e n sim uladores, para evaluar las características propuestas
sob re la arquitectura.
R IS C
U n o d e los m ejores ejem p los con ocid os sobre cóm o lo s com piladores influenciaron e l diseño
d e la arquitectura d e com p utadoras fue la invención d e la arquitectura R ISC (R educed Instru ction -S et C om puter, C om p utad ora co n con ju n to reducido d e in stru cciones). A n tes d e e s ta
invención, la ten d en cia era desarrollar con jun tos d e instrucciones c a d a v e z m ás com plejos,
d estin a d o s a facilitar la program ación en ensam blador; esta s arquitecturas se denom inaron
C ISC (C om p lex In struction-Set C om puter, C om p utad ora con con ju n to com plejo d e instruccio­
n es). P or ejem plo, los con jun tos d e instrucciones C ISC incluyen m odos d e d ireccionam iento de
m em oria com p lejos para soportar los accesos a las estru ctu ras d e d a to s, e in stru cciones para
invocar procedim ientos q ue guardan registros y pasan p arám etros e n la pila.
A m enudo, las optim izaciones d e com piladores pueden reducir e s ta s instrucciones a un peque­
ño núm ero d e operaciones m ás sim ples, elim inando las redundancias presentes en las instrucciones
com plejas. Por lo tanto, es conveniente crear conjuntos sim ples d e instrucciones; los com pilado­
res pueden utilizarlas con efectivid ad y el hardware es m ucho m ás sencillo d e optim izar.
L a m ayoría d e las arquitecturas d e procesadores d e p rop ósito general, com o Pow erPC ,
SPA R C , M IP S , A lp h a y P A -R IS C , s e basan en e l co n cep to R ISC . A un qu e la arq u itectura x86
(el m icroprocesador m ás popular) tien e u n con ju n to d e instrucciones C ISC , m uchas d e las
ideas desarrolladas para las m áquinas R IS C s e u tiliza n en la im plem en tación d e l procesador.
A d em ás, la m anera m ás efectiv a d e usar u n a m áq u in a x 8 6 d e a lto rendim iento e s u tilizar sólo
su s in stru cciones sim ples.
A r q u i t e c t u r a s e s p e c ia l iz a d a s
E n las ú ltim a s tres décad as se han propuesto m uchos co n cep to s sobre la arquitectura, en tre los
cu a les s e incluyen las m áquinas d e flujo d e d a to s, la s m áquinas V L IW (Very L ong Instruction
W ord, P alab ra d e in stru cción m uy larga), los arreglos S IM D (Single In stru ctio n , M últiple D ata,
U n a s o la instrucción, varios d a to s) d e procesad ores, lo s arreglos sistólicos, los m ultiprocesadores con m em oria com p artid a y los m ult i pro ces ado res co n m em oria d istribuida. E l desarrollo de
cad a uno d e e sto s con cep tos arq u itectónicos se acom p añó por la in vestigación y e l desarrollo
d e la tecn ología de com piladores correspondiente.
A lgu n as d e esta s ideas han incursionado e n los d iseñ o s d e las m áquinas en b eb idas. D ebido
a q ue p ueden cab er sistem a s com p letos en u n so lo ch ip , los procesadores y a n o n ecesitan ser
u nidades prim arias preem paquetadas, sin o q ue p ueden personalizarse p a ra lograr una mejor
efectivid ad en co sto para u n a aplicación esp ecífica. Por en d e, a diferencia d e los procesado­
res d e p rop ósito general, e n d on d e las eco n o m ía s d e esca la han llevado a las arquitecturas
22
Capítulo 1. Introducción
com p u tacion ales a convergir, los procesadores d e ap licacion es específicas exh ib en u n a diversi­
dad d e arquitecturas com p utacion ales. L a tecn olo g ía d e com piladores se n ecesita no só lo para
dar sop orte a la program ación para esta s arquitecturas, sin o tam bién p a ra evaluar los d iseñ os
arq u itectónicos propuestos.
1 .5 .4
T r a d u c c io n e s d e p r o g r a m a s
M ientras que, p or lo general, p en sam os en la com pilación com o u na traducción d e un lengu aje
d e a lto nivel al n ivel d e m áquina, la m ism a tecn o lo g ía p uede aplicarse para realizar trad uccio­
nes en tre d istin to s tip o s d e lenguajes. A con tinu ación se m uestran algunas d e las aplicaciones
m ás im p ortan tes d e las técn icas d e trad u cción d e program as.
T r a d u c c ió n b in a r ia
La tecn ología d e com piladores p uede utilizarse para trad ucir e l có d ig o b inario para u n a m áqui­
n a al cód igo binario para o tra m áquina d istin ta , con lo cu a l se p erm ite a u na m áquina ejecu tar
los program as q ue originalm ente eran com p ilad os para o tro con ju n to d e instrucciones. V arias
com p añías d e com p u tación han utilizado la tecn o lo g ía d e la traducción binaria p a ra increm en­
tar la d isp on ib ilid ad d e softw are en su s m áquinas. E n esp ecia l, d eb ido al d o m in io en e l m ercado
d e la com p u tad ora personal x 8 6 , la m ayoría d e los títu lo s d e softw are e s tá n d isp on ib les com o
có d ig o x86. S e han desarrollado trad u ctores binarios p a ra convertir có d ig o x 8 6 en có d ig o A l­
pha y Sparc. A dem ás, T ran sm eta Inc. u tilizó la trad ucción b inaria en su im plem en tación d el
conjunto d e instrucciones x86. E n vez d e ejecu tar el com plejo con ju n to de instrucciones x86
d irectam ente en el hardware, el procesador T ransm eta C rusoe es u n procesador V L IW q ue se
b a sa en la traducción b inaria para convertir e l cód igo x 8 6 en có d ig o V L IW n ativo.
La traducción b inaria tam b ién p uede usarse para ofrecer co m p a tib ilid a d inversa. C uando el
procesador en la A pple M acin tosh se cam b ió d el M otorola M C 68040 al P ow erPC en 1994, se
utilizó la trad ucción b inaria para perm itir q ue los procesadores P ow erPC ejecutaran el cód igo
heredado d e l M C 68040.
S ín t e s is d e h a r d w a r e
N o sólo la m ayoría d el softw are e s tá escrito en lengu ajes d e alto nivel; incluso h a sta la m ayoría
d e los d iseñ os d e hardware se describen en lenguajes d e descrip ción d e hardware d e a lto n iv el,
com o V erilog y V H D L (Very H igh-Speed In tegrated C ircuit Hardware D escription L enguaje,
Lenguaje d e d escrip ción d e hardware d e circu itos integrados d e m uy a lta velo cid a d ). Por lo
general, los d iseñ os d e hardware se d escrib en e n e l nivel d e transferencia d e registros (R T L ), en
d on d e las variables representan registros y las exp resion es representan la ló g ica com binacional.
Las herram ientas d e sín tesis d e hardware trad u cen la s descripciones RTL d e m anera au tom á­
tica en com p uertas, las cu a les a su vez se asignan a tran sistores y, en un m om ento dado, a un
esq u em a físico. A diferencia d e los com piladores para los lenguajes d e program ación, esta s he­
rram ientas a m enudo requieren horas para op tim izar e l circuito. Tam bién ex iste n técn ica s para
traducir d iseñ os a niveles m ás altos, com o a l nivel d e co m p ortam ien to o funcional.
In té r p r e te s d e c o n s u lta s d e b a se s d e d a to s
A dem ás d e especificar e l softw are y el hardware, los lenguajes so n ú tiles en m uchas o tra s apli­
cacion es. P or ejem plo, los lengu ajes d e co n su lta , en esp ecia l SQ L (Stru ctured Q uery Lenguage,
1.5 Aplicaciones d e la tecnología d e compiladores
23
L enguaje d e co n su lta estru ctu ra d o ), se u tiliza n para realizar búsquedas e n bases d e d a to s. Las
co n su lta s en las bases d e d a to s co n siste n en predicados q u e con tien en operadores relaciónales
y b oolean os. P u ed en interpretarse o com pilarse e n com an dos para buscar registros en u na base
d e d a to s q ue cu m p lan con ese predicado.
S im u la c ió n c o m p ila d a
L a sim u lación e s u na técn ica gen eral q ue se u tiliza en m uchas d isciplinas cien tíficas y d e in­
gen iería p ara com prender un fenóm eno, o para validar un d iseño. P or lo general, las entradas
d e los sim uladores incluyen la descrip ción d el diseño y los p arám etros específicos d e en trad a
para esa ejecu ción esp ecífica d e la sim ulación. Las sim u lacion es p ueden ser m uy co sto sa s. Por
lo general, n ecesitam os sim ular m uchas altern ativas d e d iseñ o p osib les en m uchos conjuntos
d istin to s d e en trad a, y cad a exp erim en to p uede tardar d ía s en com p letarse, en u na m áquina
d e a lto rendim iento. E n vez d e escribir un sim ulador para interpretar e l d iseñ o, es m ás rápido
com pilar el diseño para producir cód igo m áq u in a q ue sim u le e se d iseñ o específico en form a
n ativa. L a sim u lación com p ilad a p uede ejecu tarse m uchos grados de m agnitu d m ás rápido que
u n m étod o b asado e n un intérprete. L a sim u lación co m p ilad a se u tiliz a en m uchas herram ientas
d e a lta tecn o lo g ía q ue sim ulan d iseñ os escritos en Verilog o V H D L.
1 .5 .5
H e r r a m i e n t a s d e p r o d u c tiv id a d d e s o f tw a r e
S in d uda, los program as son los artefactos d e ingeniería m ás com p licad os q ue se hayan produ­
cid o jam ás; co n sisten en m uchos, m uchos d eta lle s, ca d a u no de los cu a les d eb e corregirse para
q u e el program a funcione por co m p leto . C om o resu ltad o, los errores proliferan e n los progra­
mas; ésto s p ueden hacer q ue un siste m a falle, producir resultados incorrectos, dejar u n sistem a
vulnerable a los ataqu es d e seguridad, o in clu so p ueden llevar a fallas ca ta stró fica s en sistem as
críticos. L a prueba es la téc n ic a principal para localizar errores en los program as.
U n en foqu e com p lem en tario interesante y p rom etedor es utilizar el análisis d e flujos de
d a to s para localizar errores d e m anera e s tá tic a (es decir, an tes d e q ue s e ejecu te el program a).
E l an álisis d e flujos d e d a to s p uede buscar errores a lo largo d e to d a s las rutas p o sib les d e eje­
cu ción , y n o só lo aquellas ejercidas p or los co n ju n to s d e d a to s d e en trad a, com o en e l ca so del
p roceso d e p ru eb a de un program a. M uchas d e la s técn ica s d e análisis d e flujos d e d a to s, q u e se
desarrollaron e n u n principio para las op tim izacion es d e los com p ilad ores, p ueden usarse para
crear herram ientas q ue ayu den a los program adores e n su s tareas d e ingeniería d e softw are.
E l problem a d e encontrar tod os los errores en los program as es indicidible. P u ed e diseñarse
u n an álisis d e flujos d e d a to s para advertir a los program adores acerca d e to d a s las posibles
in stru ccion es q ue violan u n a categoría esp ecífica d e errores. Pero s i la m ayoría d e e s ta s ad­
verten cias son falsas alarm as, los usuarios no utilizarán la herram ienta. P or en d e, los d etec­
tores p rácticos de errores e n gen eral no so n só lid o s ni está n com p letos. E s d ecir, tal v e z no
en cu en tren to d o s los errores en e l program a, y no s e garan tiza q ue to d o s los errores reportados
sean errores verdaderos. Sin em bargo, se han desarrollado diversos an álisis está tic o s q ue han
d em ostrad o ser efectiv o s para buscar errores, com o el realizar referencias a apuntadores nulos
o p reviam ente liberados, e n p rogram as reales. E l hecho d e q ue los d etecto res d e errores pue­
dan ser p oco sólid os los hace con sid erablem en te d istin to s a las op tim izacion es d e cód igo. Los
op tim izad ores d eb en ser conservadores y n o pueden alterar la sem á n tica d e l program a, bajo
n in gu n a circunstancia.
24
Capítulo 1. Introducción
P ara d ar equilibrio a e s ta sección, va m o s a m encionar varias form as en las q ue e l análisis de
los program as, b asado en técn icas q ue se desarrollaron originalm ente para o p tim iza r el cód igo
en los com piladores, h a m ejorado la p rod u ctivid ad d e l softw are. D e esp ecia l im portan cia son
las técnicas q ue d etecta n en form a e s tá tic a cu an d o un program a p o d ría tener u n a vulnerabili­
dad d e seguridad.
C o m p r o b a c ió n ( v e r if i c a c ió n ) d e t ip o s
La com probación d e tip o s e s u na técn ica efectiv a y bien esta b lec id a para ca p ta r las inconsis­
ten cias en los program as. P or ejem p lo, p uede usarse p a ra d etecta r errores e n d ond e se aplique
una operación al tip o incorrecto d e o b je to , o s i los p arám etros q u e se pasan a u n p rocedim iento
no coinciden co n su firm a. E l an álisis d e los program as p uede ir m ás allá d e só lo encontrar
los errores d e tip o , an alizan d o e l flujo d e d a to s a través d e u n program a. Por ejem p lo, si a un
apuntador s e le asign a n u i l y se desreferencia ju sto desp ués, e s evid en te q ue e l program a tien e
un error.
La m ism a tecn o lo g ía p uede utilizarse para d etecta r u n a variedad d e huecos d e seguridad,
en d on d e un ata ca n te proporciona u n a ca d en a u o tro tip o d e d a to s q ue el program a u tiliz a sin
cuidado. U n a cad en a proporcionada por e l usuario p o d ría etiq u etarse co n el tip o d e ‘‘p eligro­
sa ”. S i no se verifica e l form ato apropiado d e la cad en a, en ton ces s e d eja com o “p eligrosa” , y
si u n a cad en a d e e s te tip o p uede influenciar e l flujo d e con trol d e l cód igo en cierto p u n to d el
program a, en ton ces hay u na falla p oten cial en la seguridad.
C o m p r o b a c ió n d e lím it e s
Es m ás fácil com eter errores cu an do s e program a en un len gu aje d e b a jo nivel q ue e n uno d e
alto nivel. Por ejem p lo, m uchas brechas d e seguridad en los sistem a s se p rod ucen d eb ido a los
d esb ord am ien tos en las en trad as y salidas d e d e los program as escrito s e n C. C om o C no com ­
prueba los lím ites d e los arreglos, es resp onsab ilidad d e l usuario asegurar q ue no s e acced a a
los arreglos fuera d e los lím ites. Si n o se com p ru eb a q ue los d a to s su m in istrad os por e l usuario
pueden llegar a d esbordar u n elem en to, el program a p o d ría caer en el truco d e alm acenar los
d a to s d el usuario fuera d el esp acio asociado a este elem en to. U n a tacan te p o d r ía m anipular
los d a to s d e en trad a q u e hagan que e l program a se co m p o rte en form a errón ea y com p rom eta
la seguridad del sistem a. S e han desarrollado técn icas para encontrar lo s d esb ord am ien tos d e
búfer en los program as, pero con un é x ito lim itado.
Si el program a se h ub iera escrito en un lengu aje seguro q u e in clu y a la com probación a u to ­
m á tica d e los rangos, e s te problem a n o habría ocurrido. E l m ism o an álisis d e l flujo d e d a to s que
se u tiliza para elim inar las com probaciones d e rango redundantes p odría usarse tam b ién para
localizar los d esb ord am ien tos probables d e un elem en to. S in em bargo, la principal diferencia es
q ue a l n o p od er elim inar u na com probación d e rango só lo s e produciría un p equeño increm ento
en e l tiem po d e ejecución, m ientras q ue el no identificar un desb ord am ien to p o ten cia l d el búfer
podría com prom eter la seguridad d e l sistem a. Por en d e, aunque e s adecuado u tilizar técnicas
sim p les para o p tim izar las com p rob acion es de rangos, los an álisis sofisticad os, com o el rastreo
d e los valores d e los apuntadores entre un p rocedim ien to y otro, son necesarios para ob tener
resu ltad os d e a lta calidad en las herram ientas p ara la d etecció n d e errores.
1.6 Fundamentos d e los lenguajes d e programación
25
H e r r a m ie n t a s d e a d m in is t r a c ió n d e m e m o r ia
L a recolección d e basura es otro ex celen te ejem p lo d e la con cesión entre la eficien cia y una
com binación d e la facilidad de uso y la confiabilidad d el softw are. L a adm inistración au tom á­
tic a d e la m em oria elim in a to d o s los errores d e ad m in istración d e m em oria (por ejem p lo, las
“fu gas d e m em oria”) , q ue son u n a fuente im p ortan te d e problem as en los program as en C y
C + + . Se han desarrollado varias herram ientas para ayudar a los program adores a d etectar los
errores d e ad m in istración de m em oria. Por ejem plo, P urify es u na herram ienta q u e se em p lea
m ucho, la cual c a p ta en form a d in ám ica los errores d e ad m in istración d e m em oria, a m edida
que ocurren. Tam bién se han desarrollado herram ientas q ue ayu dan a identificar algu nos de
esto s problem as en form a estática.
1.6
F u n d a m e n to s d e los le n g u a je s d e p ro g ra m a c ió n
E n e s ta sección hablarem os sobre la term in ología m ás im p ortan te y las d istin cio n es q ue apa­
recen en e l estu d io d e los lenguajes d e program ación. N o e s nuestro o b jetiv o abarcar to d o s
los con cep tos o tod os los lengu ajes d e program ación populares. A sum im os q ue e l lector e s tá
fam iliarizado por lo m enos con u no d e los lenguajes C , C + + , C # o Java, y q ue ta l v e z con o zca
otros.
1 .6 .1
L a d is tin c ió n e n t r e e s tá tic o y d in á m ic o
U n a d e las cu estio n es m ás im p ortan tes a las q ue nos enfrentam os al d iseñ ar un com pilador
para un len gu aje es la d e q ué d ecision es p uede realizar el com p ilad or acerca d e u n programa.
Si u n lengu aje u tiliza u na d irectiva q ue p erm ite al com pilador decidir sobre u na cu estió n , en­
to n c e s d ecim os q ue el lengu aje u tiliza u n a d irectiv a e stá tic a , o q ue la cu estió n p u ed e decidirse
e n tiem po de com pilación . Por otro lad o, se d ice q ue u na d irectiv a que sólo p erm ite realizar
u na d ecisión a la hora d e ejecu tar e l program a e s u n a á r e c tiv a d in á m ic a , o q u e requiere una
d ecisión en tiem p o d e ejecución.
U n a d e las cu estion es en las q ue n os d eb em os d e concentrar e s en e l alcance d e las declara­
cion es. E l alcance d e u na d eclaración d e x e s la región d e l program a en la q u e lo s usos d e a; se
refieren a e s ta declaración. U n len gu aje u tiliza e l alcance e s tá tic o o alcance léxico s i e s posible
d eterm in ar el alcance d e u na declaración co n só lo ver e l program a. E n cualquier o tro caso, el
len gu aje u tiliza u n alcance din ám ico. C on e l alcance d in ám ico, a m ed id a q ue s e eje cu ta e l pro­
gram a, e l m ism o u so d e x p o d r ía referirse a u n a d e varias declaraciones d istin ta s d e x.
L a m ayoría d e los lenguajes, com o C y Java, u tiliza n el alcance está tic o . E n la sección 1.6.3
hablarem os sobre éste.
E j e m p lo 1 .3 : C om o otro ejem p lo de la d istin ció n entre está tico y d inám ico, con sid ere el
u so d e l térm in o “sta tic ” segú n s e ap lica a los d a to s e n la declaración d e u n a cla se en Java. En
Java, u n a variable es u n nom bre p ara u na u bicación en m em oria q ue se u tiliza para alm acenar
u n valor d e d atos. A qu í, “sta tic ” no s e refiere al alcance d e la variable, sino a la habilidad del
com p ilad or para d eterm in ar la ubicación en m em oria e n la q ue p u ed e encontrarse la variable
declarada. U n a d eclaración como:
p u b lic s t a t i c i n t x;
26
Capítulo 1. Introducción
hace d e x u n a variable d e c la se e in d ica q ue sólo h ay u na co p ia d e x, sin im portar cu á n to s
o b je to s se creen d e e s ta clase. Lo q ue es m ás, el com p ilad or p uede d eterm inar u n a ubicación
en m em oria e n la q ue se alm acene e s te en tero x. E n co n tra ste, si se hubiera o m itid o la palabra
“sta tic ” d e e s ta declaración, en to n ces ca d a o b je to d e la cla se ten d r ía s u propia u bicación en la
q ue s e guardara x , y el com pilador no p od ría d eterm inar to d o s esto s lugares an tes d e ejecu tar
e l program a.
□
1 .6 .2
E n t o r n o s y e s ta d o s
O tra d istin ción im p ortan te q ue d eb em os hacer al hablar so b re los lengu ajes d e program ación
es si lo s cam bios q u e ocurren a m ed ida q ue e l program a se eje cu ta afectan a los valores d e los
elem en tos d e d a to s, o si afectan a la interpretación d e los nom bres para eso s d a to s. Por ejem plo,
la ejecución d e u n a asignación com o x = y + 1 cam b ia e l valor d en o ta d o por el nom bre x D icho
en form a m ás específica, la asign ación cam b ia e l valor en cualquier ubicación d e n o ta d a por x
Tal vez se a m enos claro q ue la ubicación d en ota d a p or x p uede cam biar en tiem po d e ejecu­
ción. Por ejem plo, com o vim os en e l ejem plo 1.3, si a: no es u n a variable está tica (o d e “cla se”),
entonces ca d a ob jeto d e la clase tiene su p rop ia ubicación para u na instancia d e la variable x. En
este caso, la asignación para x puede cam biar cualquiera d e esas variables d e “instancia” , d ep en ­
diendo del ob jeto en el q ue se aplique un m étodo q ue con ten ga e s a asignación.
estado
entorno
nombres
ubicaciones
(variables)
valores
F igura 1.8: A sign ación d e d o s eta p a s, d e nom bres a valores
La asociación d e nom bres co n u bicacion es en m em oria (el alm acén) y d esp u és co n valores
p uede describirse m ediante d o s asignaciones q ue cam b ian a m ed ida q ue se eje cu ta e l program a
(vea la figura 1.8):
1. E l e n to rn o es u na asignación d e nom bres a ubicaciones d e m em oria. C om o la s variables
se refieren a ubicaciones ( “1-va lú es” en la term in ología d e C ), p odríam os definir d e m a­
nera a ltern ativa u n en torn o com o u n a asign ación d e nom bres a variables.
2. E l esta d o es u n a asign ación d e las u bicacion es en m em oria a su s valores. E s d ecir, el
estad o asign a 1-values a su s correspondientes r-values, en la term in o lo g ía d e C.
Los entornos cam bian d e acuerdo a las reglas d e alcance d e un lenguaje.
E j e m p lo 1 .4 : C on sid ere e l fragm ento d e un program a en C en la figura 1.9. E l en tero i se
d eclara com o u na variable global, y tam bién se d eclara com o u na variable local para la función /.
C uando / se ejecu ta, el en torn o s e a ju sta d e m anera q ue el nom bre i s e refiera a la ubica­
ción reservada p ara la i q ue es local para f y cualquier u so d e i, com o la asignación i = 3 q ue
1.6 Fundamentos d e los lenguajes d e programación
27
in t i ;
/ * i g lo b a l
*/
v o id f ( . . . ) {
in t i ;
/* i lo c a l
*/
i =
3;
/* u so de l a
i
lo c a l * /
x =
i + 1;
/* u so de l a
¿ g lo b a l * /
}
F igu ra 1.9: D o s d eclaraciones d e l nom bre i
s e m uestra en form a ex p líc ita , se refiere a e s a ubicación. Por lo general, a la i local s e le otorga
u n lugar en la p ila e n tiem p o d e ejecución.
C ad a vez q ue se eje cu ta u na función g d istin ta d e f lo s u sos d e i n o p ueden referirse a la i
q u e es local para /. L os u sos d el nom bre i en g d eb en esta r dentro d e l alcance d e algu na o tra
declaración d e i. U n ejem p lo es la in stru cción x = i+ 1 m ostrada e n form a ex p lícita , la cu a l se
en cu en tra d en tro d e un procedim iento cu y a definición n o se m uestra. L a i en i + 1 se refiere
su p u estam en te a la i global. A l igual que en la m ayoría d e lo s lenguajes, las declaraciones en C
d eb en an tepon er s u u so, por lo q ue u n a fu n ció n q u e e s té antes d e la i g lo b a l n o p u e d e hacer
referencia a ella.
□
Las asignaciones d e en torn o y de e sta d o en la figura 1.8 so n d inám icas, pero h ay unas
c u a n ta s excepciones:
1. C om paración en tre enlace está tic o y d in á m ic o d e los nom bres co n la s ubicaciones. La
m ayoría d e la vin cu lación d e los nom bres con las u bicacion es es d inám ica, y verem os
varios m éto d o s p ara e s ta v in cu lación a lo largo d e e s ta sección . A lgu n as declaraciones,
com o la i g lo b a l en la figura 1.9, p ueden recibir u n a ubicación e n m em oria u n a so la vez,
a m ed id a q ue el com p ilad or g en era e l có d ig o o b jeto .2
2. C om paración en tre enlace está tic o y d in á m ic o d e las ubicaciones con los valores. Por lo
general, e l en lace d e las ubicaciones con lo s valores (la seg u n d a e ta p a en la figura 1.8) es
d in ám ica tam bién, y a q ue n o p od em os con ocer e l valor e n u na ubicación sin o h a sta ejecu­
tar e l program a. Las co n sta n tes d eclarad as so n u n a excep ción . P or ejem p lo, la siguiente
definición en C:
# d e f in e ARRAYSIZE 1000
2T écn icam ente, e l co m p ilad o r d e C a s ig n a rá u n a ubicación e n m e m o ria v ir tu a l p a r a la i global, d eja n d o la re sp o n ­
sa b ilid a d a l c a rg a d o r y a l s is te m a o p e ra tiv o d e d e te r m in a r e n q u é p a r te d e la m em o ria física d e la m á q u in a s e u b ic a rá i
Sin em b arg o , no deb em o s p reo cu p arn o s p o r las c u e stio n e s d e “reu b icació n ” ta le s com o é s ta s, q u e no tie n e n im pacto
so b re la co m p ilación. E n vez d e ello, tra ta m o s e l espacio d e direcciones q u e u tiliz a e l co m p ilad o r p a r a s u código d e
s a lid a co m o s i o to r g a ra las ubicaciones d e m em o ria física.
28
Capítulo 1. Introducción
N o m b r e s , id e n tif ic a d o r e s y v a r ia b le s
A un qu e los térm inos “nom bre” y ‘V ariable” a m enudo se refieren a lo m ism o, lo s uti­
lizam os co n cu id ad o para diferenciar en tre los nom bres e n tiem p o d e com p ilación y las
ubicaciones en tiem p o d e ejecución d en otad as p or los nom bres.
U n id e n tific a d o r es u na cad en a d e caracteres, p or lo gen eral letras o d íg ito s, q ue se
refiere a (identifica) u n a en tidad , com o un o b je to d e d a to s, u n p rocedim iento, u na clase
o un tip o. T o d o s los identificadores son nom bres, p ero n o to d o s los nom bres son identifi­
cadores. Los nom bres tam bién pueden ser expresiones. P or ejem plo, e l nom bre x .y podría
d en otar e l cam p o y d e u n a estru ctu ra d en o ta d a por x. A quí, x y y so n identificadores,
m ientras q ue x .y es u n nom bre, p ero n o u n identificador. A los nom bres co m p u esto s com o
x .y s e les llam a nom bres calificados.
U n a variable se refiere a una ubicación esp ecífica en m em oria. E s com ú n q u e e l m ism o
identificador se d eclare m ás d e u n a vez; cad a u n a d e esa s declaraciones in trodu ce una
nu eva variable. A u n cu an do ca d a identificador se d ecla ra só lo u n a vez, un identificador
q ue se a local para un procedim iento recursivo hará referencia a la s d istin ta s ubicaciones
d e m em oria, e n d istin ta s ocasiones.
en laza el nom bre ARRAYSIZE con e l valor 1000 en form a está tic a . P od em os determ inar
e s te en la ce an alizan d o la instrucción, y sab em o s q u e e s im posible q u e e s ta vin cu lación
cam b ie cu an d o s e ejecu te el program a.
1 .6 .3
A lc a n c e e s tá tic o y e s t r u c t u r a d e b lo q u e s
La m ayoría d e los lengu ajes, in clu yen d o a C y su fam ilia, u tiliza n e l alcance está tic o . L as reglas
d e alcance p ara C s e basan e n la estru ctu ra d e l programa; e l alcance d e u na declaración s e d e­
term in a en form a im plícita, m ed ian te e l lugar en e l q ue aparece la d eclaración en e l program a.
Los lenguajes posteriores, com o C + + , J ava y C # , tam bién proporcionan un con trol ex p lícito
sobre los alcances, a través d el uso d e palabras cla v e com o p u b l i c , p r í v a t e y p r o t e c t e d .
En e s ta sección con sid eram os las reglas d e alcance está tic o p a ra un len gu aje con bloques,
en d ond e u n bloque es u n a agrupación d e declaraciones e in stru cciones. C u tiliza las llaves { y
} para delim itar un bloque; e l u so alternativo d e b e g i n y e n d para e l m ism o fin se rem on ta
h a sta A lgol.
E j e m p lo 1 .5 : P ara u na prim era aproxim ación, la d irectiv a d e alcance e stá tic o d e C es la
siguiente:
1. U n program a en C co n siste en u na secu en cia d e declaraciones d e nivel su perior d e varia­
b les y funciones.
2. L as funciones p ueden contener declaraciones d e variables, e n d on d e la s variables incluyen
variables locales y parám etros. E l alcance d e u na d eclaración d e e s te tip o se restringe a
la fun ción en la q u e aparece.
1.6 Fundamentos d e los lenguajes d e programación
29
P r o c e d im ie n to s , fu n c io n e s y m é to d o s
P ara evitar d ecir “p rocedim ien tos, funciones o m éto d o s” c a d a vez q ue querem os hablar
sobre un subprogram a q ue p ueda llam arse, nos referiremos, por lo general, a to d o s ellos
com o “p roced im ien tos” . L a excep ción es q ue al hablar en form a e x p líc ita d e los progra­
m as en lenguajes com o C, q u e só lo tien en funciones, n os referirem os a ellos com o “fun cio­
nes” . O , s i h ablam os sob re u n len gu aje co m o Java, q u e só lo tien e m étodos, utilizarem os
ese térm ino.
P or lo general, u n a función devu elve u n valor d e algún tip o (el “tip o d e r e to m o ”),
m ientras q ue un procedim iento no d evu elv e ningún valor. C y los lenguajes sim ilares, que
sólo tien en funciones, tratan a los procedim ientos com o funciones con un tip o d e retorno
esp ecial “v oid ” , para indicar q ue n o h ay valor d e reto m o . L os lengu ajes orien tad os a o b ­
jeto s com o Java y C + + u tilizan el térm in o “m éto d o s”. É sto s pueden com p ortarse com o
funciones o p rocedim ientos, pero s e asocian con u na cla se específica.
3. E l alcance d e u n a d eclaración d e n iv el su perior d e u n nom bre x c o n siste en to d o e l pro­
gram a q ue le sigu e, con la excep ción d e las in stru cciones q ue s e en cu en tran dentro d e u na
función q ue tam b ién tien e u n a d eclaración d e x.
Los d etalles adicionales en relación co n la d irectiva d e alcance e s tá tic o d e C tratan con las
declaraciones d e variables d en tro d e instrucciones. E xam in arem os d ich as d eclaraciones a con ­
tin u ación y e n e l ejem p lo 1.6.
□
E n C , la sin ta x is d e los b loqu es se d a en base a lo siguiente:
1. U n tip o d e in stru cción e s un bloque. Los bloqu es p u ed en aparecer en cualquier p arte en
la q ue puedan aparecer otros tip o s d e instrucciones, com o las in stru cciones d e asigna­
ción.
2. U n b loqu e es u na secu en cia d e declaraciones q ue v a seg u id a d e u na secu en cia d e instruc­
ciones, tod as rodeadas por llaves.
O bserve q ue e s ta sin ta x is p erm ite anidar b lo q u es, u no d en tro d e otro. E s ta propiedad de
an idam iento se co n o ce com o estru ctu ra de bloques. L a fam ilia C d e lengu ajes tien e estructu ra
d e bloques, con la excep ción d e q ue u n a función tal vez no se d efin a dentro d e otra.
D ecim os q ue u na declaración D “p erten ece” a un bloque B, s i B es e l bloque an idad o m ás
cercano q u e con tien e a D\ es d ecir, D s e en cu en tra d en tro d e 2?, pero no d en tro d e cualquier
b loqu e q ue e s té an idad o d en tro d e B.
L a regla d e alcance e stá tic o para las d eclaraciones d e variables e n un len gu aje estructurado
por bloques es la siguiente: Si la declaración D d el nom bre x p ertenece al b loqu e B , entonces
el alcance d e D es tod o B , ex cep to para cualquier bloque B ' anidado a cualquier profundidad
den tro d e B , en donde x se vu elve a declarar. A quí, x s e vu elve a declarar e n B ' s i alguna
o tr a declaración D r d el m ism o nom bre x p erten ece a B '.
30
Capítulo 1. Introducción
U na form a eq u ivalen te d e exp resar e s ta regla e s en focán dose e n un uso d e un nom bre x.
D igam os q ue B u B ¿ ,..., B k sean to d o s los bloqu es q ue rodean e s te u so d e x, en d ond e B k e s el
m ás peq ueño, an idad o d en tro de
q ue a s u vez se a n id a dentro d e ¿ V 2, y a sí en lo su cesivo.
H ay q ue buscar la i m ás grande d e t a l form a q ue h aya u n a d eclaración d e arque p erten ezca a B¡.
E ste u so d e a; se refiere a la d eclaración en B {. D e m anera alternativa, e s te u so d e a; se en cu en tra
d en tro d e l alcance d e la d eclaración en B¡.
main() {
int a = 1;
int b = 1;
{
int b = 2;
B '2
{
int a = 3;
cout « a «
b;
^int b = 4;
cout « a «
b;
B3
>
{
b4
}
cou t «
}
^ cou t «
a «
b;
a <<^b;
}
F igu ra 1.10: B loq u es en un program a en C + +
E j e m p lo 1 .6 : E l program a en C + + d e la figura 1.10 tien e cu a tro bloques, co n varias defini­
cion es d e las variables a y b. C om o ay u d a d e m em oria, ca d a d eclaración inicializa s u variable
con el núm ero d e l bloque al q u e p ertenece.
Por ejem p lo, con sid ere la declaración i n t a = 1 e n e l bloque B\. Su alcance es to d o 2?i,
ex cep to los b loqu es an idados (ta l vez co n m ás profundidad) d en tro d e B i q ue ten g a n su propia
declaración d e a. B¿, q ue e s tá an idad o ju sto d en tro d e B h no tien e u n a d eclaración d e a, pero
Bz sí. B \ no tien e u n a declaración d e a, por lo q u e e l b lo q u e £3 es e l único lugar e n to d o el
program a q u e se en cu en tra fuera d e l alcance d e la d eclaración d el nom bre a q ue p erten ece a B \.
E sto es, el alcance incluye a f í 4 y a to d o B¿, e x c e p to la parte d e B¿ q u e se en cu en tra d en tro d e
£ 3. L os alcances d e las cin co declaraciones s e sin tetiza n e n la figura 1.11.
D esd e o tro p u n to d e v ista , vam os a considerar la instrucción d e sa lid a en el bloque B4 y
a en lazar las variables a y b q ue s e u tilizan a h í co n las declaraciones apropiadas. L a lista d e
b loques circun dan tes, en orden d e m enor a m ayor tam añ o, es B \, B¿, B \. O bserve q ue £ 3 no
rodea al p u n to en cu estión . B4 tien e u na declaración d e 6, p or lo q ue e s a e s ta d eclaración a la
q ue e s te uso d e b hace referencia, y el valor d e b q u e se im prim e es 4. Sin em bargo, B4 n o tien e
u na declaración d e a, por lo que ahora analizam os B¿. E se bloque n o tien e u n a d eclaración d e
1.6 Fundamentos d e los lenguajes d e programación
31
DECLARACIÓN
ALCANCE
in
in
in
in
in
B \ — B3
— B2
B 2 — B,\
Bs
b4
t
t
t
t
t
a
b
b
a
b
=
=
=
=
=
1;
1;
2;
3;
4;
F igu ra 1.11: A lcan ces d e la s d eclaraciones en el ejem p lo 1.6
a tam p oco, p or lo q ue con tinu am os con B i. Por fortuna, hay u n a declaración i n t a = 1 que
p ertenece a e se bloque, p or lo que el valor d e a q ue s e im prim e es 1. S i no hubiera d ich a decla­
ración, e l program a tendría error.
□
1 .6 .4
C o n t r o l d e a c c e s o e x p líc ito
Las clases y las estru ctu ras introducen un nuevo alcance para su s m iem bros. Si p es un o b jeto
d e u na clase con u n cam p o (m iem bro) x , en ton ces e l uso d e x e n p . x se refiere al ca m p o x en
la definición d e la clase. E n an alogía con la estru ctu ra d e b loqu es, el alcance d e la declaración
d e u n m iem bro x e n u n a clase C se e x tie n d e a cualquier su b cla se C \ ex cep to si O tien e u na d e ­
claración local d el m ism o nom bre x.
M ediante e l u so d e palabras clave com o p u b l i c , p r í v a t e y p r o t e c t e d , los lenguajes
orien tad os a o b je to s com o C + + o J ava proporcionan u n con trol ex p lícito so b re el acceso a los
nom bres d e los m iem bros en u na supérelase. E sta s palabras cla v e so p o rta n el encapsulam ien to
m ed ian te la restricción d e l acceso. Por en d e, los nom bres privados reciben d e m anera in tencio­
n al u n alcance q ue incluye só lo las declaraciones d e los m étod os y las d efinicion es asociadas con
e s a clase, y con cualquier clase “am iga” (friend: e l térm in o d e C + + ) . Los nom bres protegidos
so n accesibles para las su b clases. L os nom bres p ú b licos son accesibles d esd e e l ex terio r d e la
clase.
E n C + + , la definición d e u n a clase p uede esta r separada d e las d efinicion es d e algunos o de
to d o s su s m étod os. Por lo tan to, u n nom bre x asociado con la cla se C p u ed e tener u n a región
d e l cód igo q ue se en cu en tra fuera d e s u alcance, se g u id a d e o tra región (la definición d e u n mé­
to d o ) q u e se en cu en tra d en tro d e su alcance. D e hecho, las regiones d en tro y fuera d el alcance
p ueden alternar, h a sta q u e se hayan d efinido tod os los m étodos.
1 .6 .5
A lc a n c e d in á m ic o
T écn icam ente, cualquier d irectiva d e alcance es d in á m ica s i se b a sa en u n factor o factores que
puedan con ocerse só lo cu an do se ejecu te e l program a. S in em bargo, e l térm in o alcance d in á m i­
co s e refiere, p or lo general, a la sigu ien te directiva: e l u so de u n nom bre x s e refiere a la decla­
ración d e x e n el p rocedim ien to q ue se haya llam ad o m ás recientem ente con d ich a declaración.
E l alcance d in ám ico d e e s te tip o aparece sólo en situ a cio n es esp eciales. V am os a considerar
d o s ejem plos d e d irectivas dinám icas: la exp a n sió n d e m acros e n el preprocesador d e C y la
resolución d e m étod os en la program ación orien ta d a a ob jetos.
32
Capítulo 1. Introducción
D e c la r a c io n e s y d e fin ic io n e s
Los térm inos aparentem ente sim ilares “declaración” y “definición” para los con ceptos de
los lenguajes d e program ación, son en realidad b astan te d istin tos. Las declaraciones nos
hablan acerca d e los tip os d e cosas, m ientras q ue las definiciones n os hablan sobre su s va­
lores. Por en d e, i n t i es u n a declaración d e ¿, m ientras q ue i = 1 es u na definición d e i
La diferencia es m ás considerable cu an d o tratam os con m éto d o s u o tro s procedim ien­
to s. E n C + + , u n m étod o se d eclara en la definición d e u na clase, prop orcionan do los
tip os d e los argu m en tos y el resultado d el m éto d o (que a m enudo s e le co n o ce com o la
firm a d e l m étod o). D esp u és el m étod o se d efin e (es decir, se prop orciona e l cód igo para
ejecu tar e l m étod o) e n o tro lugar. D e m anera sim ilar, es com ú n definir u na función d e C
en un archivo y d eclararla en otros archivos, e n d ond e se u tiliza e s ta función.
E j e m p lo 1 .7 : E n el program a en C d e la figura 1.12, el identificador a es u n a m acro q ue
representa la exp resión (x + 1). Pero, ¿qué es x l N o p od em os resolver x d e m anera está tic a , es
decir, e n térm in os d el tex to d el program a.
# d e f i n e a (x + 1 )
i n t x = 2;
v o id b O
{ i n t x = 1 ; p r i n t f ( " ‘/ ¿Tui", a ) ; >
v o id c ( ) { p r i n t f a ) ;
>
v o i d m a in ( ) { b ( ) ; c ( ) ; }
F igu ra 1.12: U na m acro p ara la cual se d eb e calcu lar el alcance d e su s nom bres en form a
dinám ica
D e hecho, para poder interpretar a s , d eb em os usar la regla d e alcance d in ám ico ordinaria.
E xam in am os tod as las llam adas a funciones q u e se en cu en tran activas, y to m a m o s la función
q ue s e h aya llam ado m ás recien tem ente y q u e te n g a u n a declaración d e x. A e s ta d eclaración es
a la q ue s e refiere x
En e l ejem p lo de la figura 1.12, la función m a in prim ero llam a a la fun ción b. A m ed ida
q ue b se ejecu ta, im prim e e l valor d e la m acro a. C om o d eb em o s su stitu ir ( x + 1 ) p or a, resol­
vem os e s te uso d e x co n la d eclaración i n t x = 1 en la función 6. L a razón es q u e b tien e u na
declaración d e x, p or lo q ue el térm in o ( x + 1) e n p r i n t f en 6 se refiere a e s ta x Por en d e, el
valor q ue se im prim e es 1.
U n a vez q ue b term in a y q ue s e hace la llam ad a a c, d eb em os im prim ir d e nuevo el valor d e
la m acro a. N o o b sta n te , la ú n ica x accesible p ara c e s la x g lob al. Por lo ta n to , la instrucción
p r i n t f e n c se refiere a e s ta declaración d e x, y se im prim e e l valor d e 2.
□
La resolución d in ám ica d e l alcance tam bién es esen cia l para los p rocedim ien tos polim órfico s, aquellos q ue tien en d o s o m ás d efinicion es para el m ism o nom bre, d ep en d ien d o só lo d e los
1.6 Fundamentos d e los lenguajes d e programación
33
A n a lo g ía e n t r e e l a lc a n c e e s tá tic o y d in á m ic o
A unque p od ría haber cualquier núm ero d e d irectivas está tic a s o d in á m ica s para e l alcan­
ce, h ay u n a in teresan te relación entre la regla d e alcance e stá tic o norm al (estructurado
por b loques) y la d irectiva d inám ica norm al. E n cierto se n tid o , la regla d inám ica es para
el tiem p o lo q ue la regla e s tá tic a es para e l espacio. M ientras q u e la regla e s tá tic a nos
pide buscar la declaración cu ya unidad (bloque) s e a la m ás cercana en rodear la ubica­
ción física d el uso, la regla d inám ica nos pide que busquem os la d eclaración cu y a unidad
(invocación a un p rocedim ien to) s e a la m ás cerca n a en rodear e l m om ento d e l uso.
tip o s d e los argum entos. E n algu nos lengu ajes co m o ML (v ea la secció n 7 .3 .3 ), e s p osible deter­
m inar los tip os e n form a e s tá tic a para to d o s lo s u sos d e los nom bres, e n cu y o ca so e l com pilador
p uede su stitu ir ca d a u so d el nom bre d e un procedim iento p por u n a referencia al cód igo para
el procedim iento apropiado. N o o b sta n te , en o tro s lenguajes com o J a v a y C + + , hay m om entos
e n los q ue el com p ilad or n o p uede realizar e s a d eterm inación.
E j e m p lo 1 .8 : U n a ca racterística d istin tiv a d e la program ación orien ta d a a o b je to s es la habi­
lidad d e ca d a o b je to d e invocar el m étod o apropiado, e n resp uesta a un m ensaje. E n o tra s pa­
labras, el p rocedim ien to al que se llam a cu a n d o se eje cu ta x .m () d ep en d e d e la cla se d el o b jeto
d en otad o por x e n e se m om ento. A con tinu ación se m uestra un ejem p lo típico:
1. H ay u n a clase C co n u n m étod o llam ad o ra().
2. D e s u na su b clase d e C, y D tien e su propio m éto d o llam ado ra().
3. H ay u n u so d e m d e la form a x .m () , e n d on d e a; es un o b je to d e l a cla se C.
P or lo general, es im posible saber e n tiem po d e com pilación si x será d e la cla se C o d e la
su b cla se D . S i la aplicación d e l m éto d o ocurre varias v eces, es m uy probable q u e algu nas se
realicen co n o b je to s d en o ta d o s p or x , q ue e s té n en la cla se C pero no en D, m ientras q ue otras
estarán e n la clase D . N o e s sin o h a sta e l tiem p o d e ejecución q u e se p u ed e decidir cu á l defi­
n ición d e m es la correcta. Por en d e, el cód ig o generado por e l com pilador d eb e d eterm in ar la
clase d el o b je to x , y llam ar a u no d e los d o s m éto d o s llam ados m .
□
1 .6 .6
M e c a n is m o s p a r a e l p a s o d e p a r á m e t r o s
T od os los len gu ajes d e program ación tien en u na n oción d e u n procedim ien to, pero p ueden di­
ferir en cu an to a la form a e n q u e e s to s p roced im ien tos reciben su s argu m en tos. E n e s ta sección
vam os a considerar cóm o s e asocian los p arám etros a ctu a le s (los p arám etros q ue se u tilizan
e n la llam ad a a un p rocedim ien to) co n los p a rá m e tro s fo rm a le s (los q ue se u tiliza n en la d efi­
n ición d e l p roced im ien to). E l m ecanism o q ue s e u tilice será el q u e d eterm in e la form a en que
e l cód igo d e secu en cia d e llam ad as tratará a los parám etros. L a gran m ayoría d e los lengu ajes
u tiliza n la “lla m a d a p or valor” , la “llam ad a por referencia” , o am bas. V am os a exp lica r esto s
térm in os, ju n to co n o tro m éto d o co n ocid o com o “llam ad a por nom bre” , q ue es principalm ente
d e in terés histórico.
34
Capítulo 1. Introducción
L la m a d a p o r v a lo r
En la llam ada p o r v a lo r, e l parám etro actu al s e e v a lú a (si es u n a exp resión ) o se co p ia (si es una
variable). E l valor se co lo ca en la ubicación que p ertenece al correspondiente parám etro form al
d el p rocedim ien to al q ue se llam ó. E ste m étod o se u tiliz a en C y en Java, ad em ás d e ser u na
op ción com ú n en C + + , así com o en la m ayoría d e los d em á s lenguajes. L a llam ada p o r valor
tien e e l efecto d e q ue tod o el cálcu lo q ue involucra a los p arám etros form ales, y q u e realiza e l
procedim iento a l q ue se llam ó, es local para ese procedim ien to, y los parám etros a ctu ales en s í
no p ueden m odificarse.
Sin em bargo, observe q ue en C p o d e m o s pasar un apuntador a u n a variable p a ra p erm itir
q ue e l p rocedim ien to al q u e se llam ó m odifique la variable. D e igual form a, los nom bres d e
arreglos q u e se p asan com o p arám etros en C , C + + o Java, ofrecen al p rocedim ien to q ue se
llam ó lo q ue es en efecto un apuntador, o u na referencia a l m ism o arreglo. P or en d e, si a es el
nom bre d e u n arreglo d el p rocedim ien to q ue hace la llam ada, y se p a sa p o r valor al correspon­
d ien te parám etro form al x , en ton ces u n a asign ación ta l com o x [ i ] = 2 en realidad m od ifica e l
elem en to d e l arreglo a[2]. L a razón es que, aunque x o b tien e u n a c o p ia d e l valor d e a, ese valor
es en realidad u n apuntador al inicio d el área d e m em oria en d on d e s e en cu en tra el arreglo
llam ado a.
D e m anera sim ilar, en Java m uchas variables son en realidad referencias, o apuntadores, a
las cosas q ue representan. E sta ob servación s e ap lica a los arreglos, la s cad en as y los o b je to s d e
tod as las clases. A ún y cu an do Java u tiliza la llam ad a p or valor en form a exclu siva, ca d a vez
q ue pasam os e l nom bre d e un o b je to a un procedim iento al q ue se lla m ó , e l valor q ue recibe ese
procedim iento es, en efecto, un apuntador al o b jeto . E n con secu en cia, e l procedim iento al q ue
se llam ó p uede afectar al valor d e l o b je to en sí.
L la m a d a p o r r e f e r e n c ia
En la llam ada p o r re fe ren cia , la dirección del parám etro actu al se p a sa al procedim iento al q ue
se llam ó com o e l valor d el corresp ond ien te p arám etro form al. Los u sos d e l parám etro form al en
e l có d ig o d e l procedim iento al que se llam ó se im plem en tan sigu iend o e s te apuntador h a sta la
ubicación in d icad a p or e l procedim iento q u e h izo la llam ada. Por lo ta n to , la s m odificaciones
al parám etro form al aparecen com o cam b ios para el parám etro actual.
N o o b sta n te , s i e l parám etro a ctu a l es u n a expresión, en ton ces é s ta s e e v a lú a an tes d e la
llam ad a y s u valor s e alm acena en su p rop ia ubicación. Los cam bios a l parám etro form al cam ­
bian e s ta u bicación, pero no p u ed en tener efecto sobre los d a to s d e l procedim iento q ue hizo la
llam ada.
La llam ad a por referencia s e u tiliza para los p arám etros “r e í” en C + + , y es u n a o p ció n en
m uchos otros lengu ajes. E s casi esen cial cu an do el parám etro form al es un o b jeto , arreglo o
estru ctu ra grande. L a razón es q u e la llam ada estr icta p or valor requiere q ue e l p rocedim ien to
q ue hace la llam ad a cop ie tod o el p arám etro actu a l en el esp a cio q ue p erten ece al correspon­
d ien te p arám etro form al. E ste proceso de cop iad o se vu elve ex te n so cu a n d o el parám etro es
grande. C om o d ijim os a l hablar sob re la llam ad a por valor, lo s lenguajes com o J a v a resuelven e l
problem a d e pasar arreglos, cad en as u otros o b je to s cop ian d o só lo u na referencia a eso s o b jeto s.
El efecto es q ue J ava s e co m p o rta com o si usara la llam ad a p or referencia para cualquier co sa
q ue n o s e a un tip o básico com o en tero o real.
1.6 Fundamentos d e los lenguajes d e programación
35
L la m a d a p o r n o m b r e
H ay un tercer m ecanism o (la llam ad a p or nom bre) q ue s e u tilizó en uno d e los prim eros lengua­
je s d e program ación: A lgol 60. E ste m ecanism o requiere q ue e l p rocedim ien to al q ue se llam ó
s e ejecu te com o si el p arám etro actu al se su stitu y er a literalm en te p or e l p arám etro form al en
su cód igo, com o si e l procedim iento form al fuera u na m acro q ue represen ta al parám etro actual
(cam biando los nom bres locales en el procedim iento al q ue se llam ó, para q u e sean d istin to s).
C uan do el parám etro actu a l es u n a exp resión en vez d e u n a variable, s e producen ciertos com ­
p ortam ien tos no in tu itivos, razón por la cu a l e s te m ecanism o no es p opu lar hoy en día.
1 .6 .7
U s o d e a lia s
H ay u n a con secu en cia in teresante d e l paso p or parám etros tip o llam ad a por referencia o d e su
sim u lación , com o en Jav a , en d o n d e las referencias a lo s o b je to s s e pasan por valor. E s posible
q u e d os p arám etros form ales puedan referirse a la m ism a ubicación; se d ice q u e d ich as variables
so n alias u na d e la otra. C om o resultado, d os variables cualesquiera, q ue d a n la im presión de
recibir su s valores d e d o s parám etros form ales d istin to s, pueden convertirse en alias una d e la
otra, tam bién.
E j e m p lo 1 .9 : S u p on ga q ue a e s un arreglo q ue p erten ece a u n procedim iento p, y q ue p llam a
a otro p rocedim ien to q(x,y) con u na llam ad a q(a ,a ). S u p o n g a ta m b ién q ue los parám etros se
pasan p o r valor, pero q ue los nom bres d e los arreglos so n en realidad referencias a la ubicación
e n la q ue se alm acena e l arreglo, com o e n C o los lengu ajes sim ilares. A hora, las variables x y
y s e han con vertido en alias u n a d e la otra. E l p u n to im p ortan te es q u e si d en tro d e q h ay una
asign ación x [1 0 ] = 2, en ton ces e l valor d e y[10] tam b ién s e con vierte en 2.
□
R esu lta q ue es esen cial com prender el u so d e los alias y los m ecanism os q ue lo s crean s i un
com p ilad or va a op tim izar un program a. C om o verem os al inicio d e l ca p ítu lo 9, h ay m uchas
situ acion es en las q ue sólo p od em os op tim izar cód igo si p o d em o s esta r seguros d e q ue ciertas
variables no so n alias. Por ejem p lo, p odríam os d eterm inar q ue x = 2 es e l único lugar e n el
q u e s e asig n a la variable x. D e ser así, en ton ces p od em os su stitu ir el u so d e x por el uso d e 2;
por ejem plo, su stitu im o s a = x+ 3 por el térm in o m ás sim p le a = 5. P ero su p o n g a q ue h ay o tra
variable y q u e sirve com o alias para x E n tonces u na asign ación y = 4 p o d r ía ten er e l efecto
inesperado d e cam biar a x. E sto tam b ién p o d ría significar q ue sería un error su stitu ir a = x+3
por a = 5, y a q ue el valor correcto d e a p o d ría ser 7.
1 .6 .8
E je r c ic io s p a r a la s e c c ió n 1 .6
E j e r c ic io 1 .6 .1 : P ara el cód ig o e n C estructu rad o p o r bloqu es d e la figura 1 .1 3 (a ), indique
los valores asign ados a w , x, y y ¿
E j e r c ic io 1 .6 .2 : R ep ita e l ejercicio 1.6.1 para e l có d ig o d e la figura 1.13(b ).
E j e r c ic io 1 .6 .3 : P ara el cód ig o estru ctu ra d o p or b loqu es d e la figura 1.14, su p o n ien d o el
alcan ce e stá tic o u su al d e las d eclaraciones, d é el alcance para ca d a u n a d e las d o ce declara­
cion es.
36
Capítulo 1. Introducción
i n t w, x , y , z ;
i n t i = 4 ; i n t j = 5;
{
i n t j = 7;
i
=
6;
w = i + j;
i n t w, x , y , z;
i n t i = 3; i n t j = 4 ;
{
i n t i = 5;
w = i + j;
>
x = i + j;
{
i n t j = 6;
i = 7;
x = i + j;
{
in t i =
}
8;
y = i + j;
y =i + j;
}
}
z = i + j;
z = i + j;
(a) C ódigo para el ejercicio 1.6.1
(b ) C ódigo para e l ejercicio 1.6.2
F igu ra 1.13: C ódigo estructu rad o p or bloques
{
in t w, x , y , z ;
{
in t x , z;
{
in t w, x;
}
{
i n t w, x ;
{
in t y ,
z;
/*
/*
/*
B lo c k B1 * /
B lo c k B2 * /
B lo c k B3 * / }
/*
/*
B lo c k B4 * /
B lo c k B5 * / }
>
>
F igu ra 1.14: C ódigo estru ctu rad o por bloques para e l ejercicio 1.6.3
E jercicio 1.6.4: ¿Q ué im prim e el sigu ien te cód ig o en C?
# d e f in e a (x+1)
i n t x = 2;
v o i d b O { x = a ; p r i n t f ("üdX n", x ) ; >
v o i d c O { i n t x = 1 ; p r i n t f C '/d X n 11) , a ; >
v o i d m a in O { b ( ) ; c ( ) ; }
1.7
R e s u m e n d e l c a p ítu lo 1
♦ P rocesadores de lenguaje. U n en torn o d e desarrollo integrado d e softw are in clu ye m uchos
tip os d istin to s d e procesadores d e lenguaje, com o com piladores, intérpretes, ensam bla­
dores, enlazadores, cargadores, depuradores, profilers.
♦ Fases del com pilador. U n com pilador o p era com o u na secu en cia d e fases, ca d a u na d e las
cu ales transform a e l program a fu en te d e u n a representación in term ed ia a otra.
1 .7 Resumen d el capítulo 1
37
♦ L enguajes m á qu in a y en sam blador. Los lenguajes m áquina fueron los lenguajes d e pro­
gram ación d e la prim era generación, segu id os d e lo s lengu ajes ensam bladores. L a progra­
m ación en esto s lengu ajes requería d e m ucho tiem p o y esta b a p ro p en sa a errores.
♦ M odelado en el diseñ o d e com piladores. E l d iseñ o d e com piladores es u n a d e las fases en
las q u e la teoría ha ten ido e l m ayor im pacto sobre la p ráctica. E n tre los m od elos q ue se
han en con trad o d e u tilid ad se encuentran: au tó m a ta s, gra m á tica s, exp resion es regulares,
árboles y m uchos otros.
♦ O ptim iza ció n d e código. A un qu e e l cód igo no p u ed e verdaderam ente “op tim izarse” , e s ta
cien cia d e m ejorar la eficien cia d el cód ig o e s ta n to com p leja com o m uy im portan te. C ons­
titu y e u n a gran parte d e l estu d io d e la com pilación.
♦ L enguajes de a lto n iv e l A m edida q ue transcurre el tiem p o , los lengu ajes d e program a­
ción se encargan ca d a vez m ás d e las tareas q u e se dejaban antes al program ador, com o
la adm inistración d e m em oria, la com probación d e co n sisten cia en los tip o s, o l a ejecu­
ción d el cód igo en paralelo.
♦ C om piladores y arqu itectu ra de com pu tadoras. L a tecn o lo g ía d e com p ilad ores ejerce una
influencia sobre la arquitectura d e com p utadoras, así com o tam b ién se ve in fluenciada por
los avances en la arquitectura. M uchas innovaciones m odernas e n la arquitectura d ep en ­
d en d e la cap acid ad d e los com piladores para extraer d e los program as fuente las opor­
tun idad es d e usar con efectivid ad las cap acid ad es d el hardware.
♦ P ro d u ctivid a d y segu ridad del softw are. L a m ism a tecn o lo g ía q u e p erm ite a los com ­
piladores op tim izar e l cód igo p uede usarse para u na variedad d e tareas d e an álisis de
program as, q u e van d esd e la d etecció n d e errores com unes en los program as, h a sta el
d escub rim iento d e q ue u n program a es vulnerable a u no d e los m uchos tip o s d e intrusio­
nes q u e han d escu b ierto los “hackers” .
♦ Reglas d e alcance. E l alcance d e u n a d eclaración d e x es e l co n tex to en e l cu a l lo s usos
d e £ s e refieren a e s ta declaración. U n lengu aje u tiliza e l alcance e s tá tic o o alcance léxico
si e s p osible d eterm inar el alcance d e u n a d eclaración co n só lo analizar e l program a. En
cualquier otro caso, e l lengu aje u tiliza un alcance din ám ico.
♦ E n torn os. L a asociación d e nom bres co n u bicacion es en m em oria y d esp u és co n los v a lo ­
res puede describirse en térm inos d e en to rn o s, los cu ales asign an los nom bres a la s ubi­
cacion es en m em oria, y los e sta d o s, q ue asignan las u bicacion es a su s valores.
♦ E stru ctu ra d e bloques. S e d ice q ue los lenguajes q ue p erm iten anidar bloques tien en es­
tru ctu ra de bloques. U n nom bre x en u n bloque anidado B se en cu en tra en e l alcance
d e u n a declaración D de x en un b loqu e circundante, s i no e x iste o tr a d eclaración d e x
en u n b loqu e interm edio.
♦ P aso d e pará m etro s. Los parám etros se p asan d e un procedim iento q ue hace la llam ada
al procedim iento q u e es llam ado, y a s e a por valor o p or referencia. C uando se pasan ob ­
jeto s gran d es p or valor, los valores q ue s e pasan so n en realidad referencias a los m ism os
ob jetos, lo cu a l resu lta e n u n a llam ad a p or referencia efectiva.
38
Capítulo 1. Introducción
♦ Uso de alias. C uan do los p arám etros se p a sa n (d e m anera efectiv a ) por referencia, d os
parám etros form ales pueden referirse al m ism o o b jeto . E s ta p osibilid ad p erm ite q ue un
cam b io e n u n a variable cam b ie a la otra.
1.8 R e fe re n c ia s p a r a el c a p ítu lo 1
P ara el desarrollo d e los lenguajes d e program ación q ue se crearon y han esta d o en uso d esd e
1967, incluyendo Fortran, A lgol, Lisp y Sim ula, vea [7]. P a ra lo s lenguajes q ue se crearon para
1982, in clu yen d o C , C + + , P ascal y S m alltalk, vea [1].
La C olección d e com p ilad ores d e G N U , gcc, es u n a fuente popular d e com piladores d e
có d ig o fuente ab ierto para C, C + + , Fortran, J a v a y o tro s lenguajes [2]. P h o en ix es un k it
d e herram ientas para con stru ir com piladores q ue proporciona un fram ew ork integrado para
construir las fases d e an álisis d e l program a, gen eración de có d ig o y op tim iza ció n d e có d ig o d e
los com piladores q ue verem os e n e s te libro [3].
P ara ob ten er m ás inform ación acerca d e los co n cep to s d e los lengu ajes d e program ación,
recom endam os [5,6]. P ara ob tener m ás inform ación sobre la arq u itectura d e com putadoras y el
im pacto q ue tiene en la com p ilación, sugerim os [4].
1. Bergin, T . J. y R . G . G ib son , H isto ry o f P ro g ra m m in g L angu ages, A C M P ress, N ueva
Y ork, 1996.
2. h t t p : / / g c c . g n u . o r g / .
3. h t t p : / / r e s e a r c h . m i c r o s o f t . c o m /p h o e n i x /d e f a u lt . a s p x .
4. Hennessy, J. L. y D . A . P atterson , C om pu ter O rg a n iza tio n a n d D esig n : The H a r d w a r e /
S oftw are In terfa c e , M organ-K aufm ann, San Francisco, C A , 2004.
5. S co tt M. L ., P rogram m in g Language P ra g m a tics, segunda ed ició n , M organ-K aufm ann,
San Francisco, C A , 2006.
6. S ethi, R ., P rogram m ing L anguages: C oncepts a n d C o n stru c ts, A ddison-W esley, 1996.
7. W exelb lat, R . L ., H isto ry o f P rogram m in g L angu ages, A cad em ic P ress, N u ev a York,
1981.
C a p ít u lo 2
U n traductor simple orientado
a la sintaxis
E ste ca p ítu lo e s u n a introducción a las técn ica s d e com p ilación q u e verem os e n los cap ítu los
3 a 6 d e e s te libro. P re sen ta las técn icas m ediante e l desarrollo d e un program a funcional en
Java q u e traduce instrucciones represen tativas d e un len gu aje d e program ación en un cód igo
d e tres direcciones, una representación interm edia. E n e s te ca p ítu lo harem os én fasis en e l fronten d d e un com p ilad or, en esp ecia l en e l an álisis d e léxico, e l an álisis sin tá ctico (parsing), y la
gen eración d e cód igo interm edio. E n los cap ítu lo s 7 y 8 verem os cóm o generar instrucciones de
m áq u in a a partir d el cód igo d e tres direcciones.
E m pezarem os co n algo peq ueño, creando un trad uctor orientado a la sin ta x is q ue asigna
exp resion es aritm éticas infijo a exp resion es p ostfijo. D esp ués exten d erem os e s te trad uctor para
q u e asign e fragm entos d e cód ig o (com o s e m u estra e n la figura 2 . 1 ) a un có d ig o d e tres direc­
cio n es d e la form a q ue s e p resen ta en la figura 2.2.
E l trad u ctor fu n cion al en J a v a aparece en e l ap én d ice A . E l u so d e J a v a es co n ven ien te,
pero n o esen cia l. D e h ech o, las ideas en e s te ca p ítu lo so n anteriores a la creación d e J a v a y
d e C.
int i; int j; float[100] a; float v; float x;
while ( true ) {
do i = i+1; while ( a[i] < v );
do j = j-1; while ( a[j] > v );
if ( i>= j ) break;
x = a[i]; a [i] = a[j]; a[j] = x;
}
>
F igu ra 2.1: U n fragm ento d e có d ig o q u e s e v a a traducir
39
40
Capítulo 2.
1
2
3
4
5
G
7
8
9
10
11
12
13
14
Un traductor sim ple orientado a la sintaxis
i = i + 1
ti = a C i ]
if ti < v goto
j = j - 1
t2 = a [ j ]
if t2 > v goto
ifFalse i >= j
goto 14
x = a [ i ]
t3 = a [ j ]
a [ i ] = t3
a [ j ] = x
goto 1
F igu ra 2.2: C ódigo interm edio sim plificado para e l fragm ento d el program a d e la figura 2.1
2.1
In tro d u c c ió n
La fase d e análisis d e un com pilador d escom p on e un program a fuente e n p iezas com p o n en tes y
produce u na representación interna, a la cu a l se le co n o ce co m o có d ig o interm edio. L a fa se d e
sín tesis trad uce el cód ig o interm edio en e l program a destino.
El an álisis s e organ iza d e acuerdo co n la “sin ta x is” d e l lengu aje q u e se v a a com pilar. La
sin ta xis d e un lengu aje d e program ación describe e l form ato apropiado d e su s program as, m ien­
tras q ue la se m á n tica d e l lengu aje d efine lo q ue su s program as significan; es d ecir, lo q ue hace
ca d a program a cu an d o se ejecu ta. P ara especificar la sin ta x is, en la secció n 2.2 presentam os
una notación d e u so popular, llam ad a gram áticas sin c o n tex to o B N F (Form a d e B ackus-N aur).
Con las n otacion es q ue se tien en disponibles, e s m ucho m ás d ifícil describir la sem á n tica d e un
lengu aje q ue la sin taxis. P ara especificar la sem án tica, deb erem os, p o r lo ta n to , usar descripcio­
nes inform ales y ejem p los sugerentes.
A dem ás d e especificar la sin ta x is d e un len gu a je, se puede u tilizar u n a gra m á tica libre d e
co n tex to para ayudar a guiar la trad ucción d e los program as. E n la secció n 2.3 presentam os
una técn ica d e com p ilación orien tad a a la gram ática, co n o cid a com o tradu cción o rien ta d a a la
sin ta xis. E n la sección 2 .4 presentam os e l an álisis sin tá ctico (parsing).
El resto d e e s te ca p ítu lo es u na g u ía rápida a través d e l m odelo d e un front-end d e u n com ­
pilador en la figura 2.3. E m p ezam os co n e l analizador sin tá ctico . Por cu estió n d e sim plicidad,
consideram os la traducción orien tad a a la sin ta x is d e las exp resion es infijas al form ato p ostfijo,
una n otación e n la cu a l los operadores aparecen d esp u és d e su s op erandos. P or ejem p lo , el
form ato p ostfijo d e la exp resión 9 — 5 + 2 e s 95 - 2 + . L a trad ucción al form ato p o stfijo es lo
b astan te co m p leta com o para ilustrar e l an álisis sin tá ctico , y a la v e z lo b astan te sim p le com o
para q ue se p ueda m ostrar el traductor p or com p leto e n la secció n 2.5. E l traductor sim p le
m aneja exp resion es com o 9 - 5 + 2, q u e co n sisten en d íg ito s separados p or sign os p o sitiv o s
y negativos. U n a razón para em pezar con dichas exp resion es sim p les es q ue el analizador sin ­
tá ctico p uede trab ajar d irectam en te co n los caracteres in dividu ales p a ra lo s op erad ores y los
operandos.
2.1
In trod ucción
41
F igu ra 2.3: U n m odelo d e u na front-end d e un com pilador
U n analizador léxico p erm ite q ue un trad u ctor m aneje instrucciones d e varios caracteres
com o identificadores, q ue se escriben com o secu en cias d e caracteres, pero se tratan co m o uni­
d a d es con ocid as com o tokens durante e l análisis sin táctico; p or ejem p lo , en la exp resión c u e n t a + 1 , e l identificador c u e n t a se tra ta com o u n a unidad. E l analizador léxico en la sección 2.6
p erm ite q ue aparezcan núm eros, identificadores y “espacio e n blanco” (esp acios, tabu ladores y
caracteres d e n u eva línea) d en tro d e las expresiones.
A con tinu ación, consideram os la gen eración d e có d ig o interm edio. E n la figura 2.4 se ilus­
tran d os form as d e cód ig o interm edio. U n a form a, co n o cid a com o árboles sin tá c tic o s a b stra cto s
o sim p lem en te árboles sin tá c tic o s, representa la estru ctu ra sin tá ctica jerárq uica d e l program a
fuente. E n el m odelo d e la figura 2 .3 , el analizador sin tá ctico p roduce un árbol sin tá ctico , que
s e trad uce p osteriorm en te en cód igo d e tres direcciones. A lgunos com piladores com binan el
an álisis sin táctico y la generación d e cód ig o interm edio en un solo com p onente.
d o - w h ile
i = i + 1
ti - a [ i ]
if ti < v goto 1
c u erp o
(b)
a s i g n a c ió n
/
\
\
/
i
+
/ \
i
1
(a)
F igu ra 2.4: C ódigo interm edio para “do i = i + l ; w h i le ( a [ i ] < v ) ; ”
L a raíz d e l árbol sin tá ctico ab stracto en la figura 2 .4 (a ) representa un ciclo d o-w hile com ­
p leto. E l hijo izquierdo d e la raíz represen ta e l cu erpo d e l ciclo, q ue co n siste só lo d e la asig­
n ación i = i + l ; . E l hijo d erech o d e la raíz representa la con d ición a [ i ] <v. E n la sección 2.8(a)
aparece u na im plem en tación d e los árboles sin tácticos.
42
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
La o tr a representación in term ed ia com ún, q ue se m uestra en la figura 2 .4 (b), es u na secu en ­
c ia d e instrucciones d e “tres d irecciones” ; e n la figura 2.2 aparece un ejem p lo m ás co m p leto.
E sta form a d e cód ig o interm edio recib e su nom bre d e las in stru cciones d e la form a x = y o p 2 ,
en d ond e o p es un operador binario, y y z son las d irecciones para los op erandos, y x es la
dirección d el resultado d e la operación. U n a in stru cción d e tres d irecciones llev a a ca b o cuando
m enos u na operación, p or lo general, un cálcu lo, u n a com paración o u na bifurcación.
En e l ap én d ice A reunim os las técn icas d escritas en e s te ca p ítu lo para crear un front-end
d e un com pilador en Java. L a interfaz trad u ce las instrucciones e n in stru cciones e n lengu aje
ensam blador.
2.2
D efin ició n d e s in ta x is
En e s ta sección presentam os u na n otación (la “gra m á tica libre d e co n tex to ” , o sim p lem en te
“gra m ática”) q ue se u tiliza para especificar la sin ta x is d e un lengu aje. U tilizarem os las gram á­
tica s a lo largo d e este libro para organizar los front-ends d e los com piladores.
U n a g ra m á tica d escrib e en form a n atu ral la estru ctu ra jerárquica d e la m ayoría d e las ins­
trucciones d e un len gu aje d e program ación. P or ejem plo, u n a in stru cción if-else en J a v a p uede
ten er la sigu ien te forma:
i f ( expr ) in str e l s e instr
E sto e s , u na in stru cción if-else es la con caten a ció n d e la p a lab ra clave ¡f, un paréntesis
abierto, u n a expresión, u n paréntesis cerrado, u n a in stru cció n , la p alabra cla v e e l s e y o tra
instrucción. M ediante e l u so de la variable ex p r para d en otar u n a exp resión y la variable in s tr
para d en otar u na instrucción, e s ta regla d e estru ctu ración p u ed e expresarse d e la sigu ien te
manera:
in s tr
-►
i f ( expr ) in s tr e l s e in s tr
en d o n d e la flech a s e lee com o “p uede tener la form a” . A d ich a regla se le llam a producción.
En u n a producción, los elem en tos léxicos com o la palabra clave i f y los paréntesis s e llam an
term in ales. Las variables com o ex p r e in s tr representan secu en cia s d e term in ales, y se lla ­
m an no term in ales.
2 .2 .1
D e fin ic ió n d e g r a m á tic a s
U n a gram ática libre de co n tex to tien e cu a tro com ponentes:
1. U n con ju n to d e sím b olos term in a le s, a los q ue algu nas veces se les co n o ce com o “tokens” .
Los term in ales so n los sím b olos elem en tales d el lengu aje d efin id o por la gram ática.
2. U n con ju n to d e no te rm in a le s, a las q u e algu nas v eces s e les co n o ce com o ‘V ariables
sin tá ctica s” . C ad a no term inal represen ta un con ju n to d e cad en as o term inales, d e una
form a q ue describirem os m ás adelante.
3. U n con ju n to d e produ ccion es, e n d ond e ca d a producción co n siste en un no term in al,
llam ad a encabezado o lado izq u ie rd o d e la producción, u na flecha y u n a se cu en cia d e
2.2 DeGnición d e sintaxis
43
C o m p a r a c ió n e n t r e t o k e n s y te r m in a l e s
En un com p ilad or, e l analizador léxico lee lo s caracteres d el program a fuente, los agrupa
en u nidades con sign ificad o léxico llam adas lexem as, y p rod uce com o sa lid a tokens que
representan esto s lexem as. U n tok en co n siste en d os com p on en tes, e l nom bre d e l token
y un valor d e atrib uto. L os nom bres d e los tokens so n sím b olos ab stractos q ue u tiliza el
analizador sin tá ctico para su análisis. A m enudo, a e sto s to k en s les llam am os te rm in a le s,
y a q ue aparecen com o sím b olos term inales en la gra m á tica para un lengu aje d e progra­
m ación. E l valor d e atrib uto, si e s tá p resen te, es u n apuntador a la ta b la d e sím bolos
q ue con tien e inform ación adicional acerca d e l token. E s ta inform ación adicional n o forma
p arte d e la gram ática, por lo q ue e n n uestra exp licación sobre e l an álisis sin tá ctico , a
m enudo n os referim os a los tokens y los term in ales com o sinónim os.
term inales y no term in ales, llam ad a cuerpo o lado derecho d e la producción. L a intención
in tu itiv a d e u n a producción es especificar u na d e las form as escrita s d e u n a instrucción;
si e l n o term inal d e l en cab ezad o representa a u n a instrucción, en to n ces e l cu erpo repre­
se n ta u na form a e scr ita d e la instrucción.
4 . U n a d esign ación d e u n a d e los no term inales com o e l sím b olo in ic ia l
P ara especificar las gram áticas presentam os su s producciones, e n d on d e prim ero s e listan
las producciones para el sím b olo inicial. Sup onem os que los d ígitos, lo s sign os com o < y <=,
y las cad en as en n egritas com o w h i l e son term inales. U n nom bre en cu rsiva e s un n o term i­
nal, y se p uede asum ir q ue cualquier nom bre o sím b olo q ue n o e s té en cursiva es un term in al.1
P or con ven iencia d e n otación, las producciones con el m ism o n o term inal q ue el en cab ezado
p ueden agrupar su s cu erpos, co n los cu erpos altern ativos separados p or e l sím b olo |, q ue leem os
com o “o ” .
E j e m p lo 2 .1 : Varios ejem p los en este cap ítu lo u tilizan exp resion es q ue co n sisten en d íg ito s y
sig n o s p ositivos y negativos; por ejem p lo, las ca d en a s com o 9 -5 + 2 , 3 - 1 o 7. D eb id o a q ue debe
aparecer un sign o p ositivo o n egativo en tre d o s d íg ito s, n os referim os a ta le s exp resion es com o
“listas d e d íg itos separados por sig n o s p ositiv o s o n egativos” . L a sig u ien te gra m á tica describe
la sin ta x is d e esta s expresiones. L as producciones son:
Usta
Usta + d íg ito
(2.1)
Usta
Usta - d íg ito
(2.2)
Usta
-*■
d íg ito - *
d íg ito
(2.3)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
(2.4)
1 U tilizarem os le tra s individuales e n c u rsiv a p a r a fines adicionales, e n esp ecial c u a n d o estu d ie m o s las g ra m á tic a s
co n d e ta lle e n e l c a p ítu lo 4. P o r eje m p lo , vam os a u sa r X , Y y Z p a r a h a b la r so b re u n sím bolo q u e p u ed e s e r o no
te rm in a l. No o b s ta n te , cu a lq u ie r nom bre e n c u rsiv a q u e c o n te n g a d o s o m ás c a ra c te re s se g u irá re p re se n ta n d o un
no te rm in a l.
44
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
Los cu erpos d e las tres producciones con la lis ta n o term in al com o en cab ezad o pueden agru­
parse d e la sigu ien te m anera equivalente:
lista
-►
Usta + díg ito | Usta - d íg ito \ dígito
D e acuerdo con n uestras con ven ciones, los term in ales d e la g ra m á tica so n los siguientes
sím bolos:
+ - 0 1 2 3 4 5 6 7 8 9
Los no term in ales so n los nom bres en cu rsiva Usta y d íg ito , en d ond e lista e s e l sím b olo inicial,
y a q u e su s prod uccion es s e d a n prim ero.
□
D ecim os q ue u n a producción es para un no term in al, si e l no term inal es e l en ca b eza d o d e
la producción. U n a cad en a d e term inales es u n a secu en cia d e cero o m ás term inales. L a ca d en a
d e cero term inales, escrita com o e, s e llam a cad en a v a c ía .2
2 .2 .2
D e riv a c io n e s
U n a gram ática deriva cad en as em p ezan d o co n el sím b olo inicial y su stitu y en d o en form a repe­
tid a un no term inal, m ediante el cuerpo d e u n a producción para e s e no term in al. Las cadenas
d e term in ales q ue pueden derivarse d el sím b olo inicial d el lenguaje d efinido p or la gram ática.
E j e m p lo 2 .2 : El lengu aje d efinido p or la g ra m á tica d e l ejem p lo 2.1 co n siste en lista s d e d ígi­
tos separadas por sign os p ositivos y negativos. Las d iez producciones para e l d íg ito no term inal
le perm iten representar a cu alq uiera d e los term inales 0, 1 , . . . , 9. D e la producción (2.3), un
d íg ito p or s í so lo e s u n a lista . Las producciones (2.1) y (2.2) exp resan la regla q ue estab lece
q ue cualquier lista segu id a de u n signo p o sitiv o o n egativo, y desp ués d e otro d ígito, form a u na
nueva lista.
Las p roducciones (2.1) a (2.4) son tod o lo q ue n ecesitam os para definir e l len gu aje deseado.
Por ejem plo, p od em os deducir q ue 9 -5 + 2 es u n a lis ta d e la sigu ien te manera:
a) 9 es u n a Usta p o r la producción (2 .3 ), y a q u e 9 es
un dígito.
b) 9 - 5 es u n a Usta p or la producción (2 .2 ), y a q ue 9 es u n a Usta y 5 es un dígito.
c) 9 -5 + 2 es una Usta por la producción (2 .1 ), y a q ue
9 - 5 es u na Usta y 2 es un dígito. □
E j e m p lo 2 .3 : U n tip o d e lista algo d istin to es la lis ta d e p arám etros en la llam ad a a u na
función. E n Java, los p arám etros se encierran entre p aréntesis, com o e n la llam ad a max(x,y)
d e la fu n ción max co n los p arám etros x y y. U n m atiz d e d ich as lista s es q u e u n a lista v a cía d e
parám etros p u ed e en con trarse en tre los term inales ( y ). P od em os em pezar a desarrollar u na
gra m ática para d ich as secu en cias co n las sigu ien tes producciones:
t é c n i c a m e n t e , e p u ed e s e r u n a c a d e n a d e c e ro sím bolos d e cu a lq u ie r a lfa b e to (colección d e sím bolos).
2.2 Definición d e sintaxis
45
la m a d a
param sopc
p a ra m s
-►
-►
-►
¡d ( p a ra m so p c )
p a ra m s \ e
param s , pa ra m | pa ra m
O bserve q ue e l segu n d o cu erpo p osible para param sopc ( “lista d e parám etros o p cio n a les”) es €,
q ue representa la cad en a vacía d e sím b olos. E s decir, p aram sopc p uede su stitu irse p or la cad en a
vacía, por lo q u e u n a llam ada p uede con sistir e n un nom bre d e función, seg u id o d e la ca d en a de
d os term in ales ( ) . O bserve q ue las producciones p a ra p a ra m s so n análogas para las d e Usta en
e l ejem p lo 2 .1 , co n una co m a en lugar
d el operador
aritm ético
+ o - , y param e n vez d e dígito.
N o hem os m ostrado las producciones para pa ra m , y a q u e los
p arám etros son en realidad ex ­
presiones arbitrarias. E n breve hablarem os sobre las producciones apropiadas para las diversas
con stru ccion es d e los lengu ajes, com o exp resion es, in stru cciones, etcétera .
□
E l an álisis sin tá c tic o (parsin g) es e l p rob lem a de tom ar u na ca d en a d e term inales y averi­
guar cóm o derivarla a partir d el sím b olo inicial de la g ra m á tica , y si no p u ed e derivarse a partir
d e este sím b olo, en ton ces h ay q u e reportar lo s errores d en tro d e la cadena. E l an álisis sin tác­
tico e s u no de los problem as m ás fundam entales en to d o lo relacionado co n la com pilación; los
principales m éto d o s para e l an álisis sin tá ctico se describen e n el ca p ítu lo 4. E n e s te ca p ítu lo ,
por cu estió n d e sim plicidad, em p ezam os con program as fuente com o 9 -5 + 2 e n lo s q ue ca d a ca­
rácter es un term inal; e n general, un program a fuente tien e lex em a s d e varios caracteres q ue el
analizador léxico agrupa e n tokens, cu y o s prim eros co m p o n en tes so n los term inales procesados
por e l analizador sin táctico.
2 .2 .3
Á r b o le s d e a n á lis is s in tá c tic o
U n árbol d e análisis sin táctico m uestra, en form a gráfica, la m anera en q u e el sím b olo inicial
d e u na g ra m á tica deriva a u n a cad en a en e l lengu aje. Si e l no term inal A tien e u na producción
A - + X Y Z , en to n ces u n árbol d e an álisis sin tá ctico p o d ría tener un nodo interior etiq u etad o
com o A , co n tres hijos llam ados X , Y y Z, d e izquierda a derecha:
A
/
X
I\
Y
Z
D e m anera form al, d a d a u n a gram ática libre d e co n tex to , un árbol d e an á h sis sin tá c tic o de
acuerdo con la g ra m á tica es un árbol con las sig u ien tes propiedades:
1. L a raíz se etiq u e ta co n e l sím b olo inicial.
2.
C ad a h oja se etiq u e ta co n un term in al, o co n e.
3.
C ad a n od o interior se etiq u e ta co n u n no term inal.
4.
S i A es e l no term inal q ue etiq u eta a cierto nodo interior, y X h X 2, . .
X n son las etique­
tas d e los hijos d e e se nodo d e izquierda a derecha, en ton ces d eb e haber u n a producción
A -► X 1X 2 • • • X n. A quí, ca d a u n a d e las etiq u etas X \, X 2, . . . , X n representa a un sím bolo
46
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
T e r m in o lo g ía d e á r b o le s
Las estru ctu ras d e d a to s tip o árbol figuran d e m anera p rom inente en la com pilación.
•
U n árbol con siste e n uno o m ás nodos. Los nodos p ueden tener etiq u eta s, q ue en
este libro, por lo general, serán sím b olos d e la gram ática. A l dibujar un árbol, con
frecuencia representam os los n od os m ediante esta s etiq u e ta s solam en te.
•
Sólo uno d e los nodos e s la raíz. T o d o s los nodos, ex cep to la raíz, tien en un padre
único; la raíz n o tien e padre. A l dibujar árboles, colo ca m o s e l padre d e u n nodo
en cim a d e ese nodo y dibujam os u na lín ea en tre ellos. E n ton ces, la raíz e s e l nodo
m ás a lto (superior).
•
Si el nodo iV es e l padre d el nodo M, en ton ces M e s h ijo d e N. L os h ijos d e nuestro
nodo se llam an h erm an os. T ien en un orden, p a rtien d o desde la izq u ie rd a , por lo que
al dibujar árboles, ordenam os los hijos d e u n n o d o d a d o en e s ta form a.
•
U n nodo sin hijos se llam a h oja. L os otro s n od os (los q ue tien en uno o m ás hijos)
son nodos in teriores.
•
U n descen dien te d e u n nodo N e s y a s e a el m ism o N , u n hijo d e JV, un hijo d e un
hijo d e N , y a sí en lo su cesivo, p ara cualquier núm ero d e niveles. D ecim os q ue el
nodo N e s u n an cestro d el n od o M, s i M es d escen diente d e N.
q ue p u ed e ser o n o un term inal. C om o un ca so esp ecia l, si A
e es u n a producción,
en ton ces un nodo etiq u etad o com o A p uede tener un solo hijo, etiq u eta d o com o e.
E j e m p lo 2 .4 : L a d erivación d e 9 -5 + 2 en el ejem p lo 2 .2 s e ilu stra m ed ian te el árbol e n la
figura 2.5. C ad a nodo en e l árbol se etiq u e ta m ediante u n sím b olo d e la gram ática. U n nodo
interior y su h ijo corresponden a u n a producción; e l nodo interior corresponde al en cab eza­
d o d e la producción, el hijo corresponde al cuerpo.
En la figura 2 .5 , la raíz se etiq u e ta com o lista, e l sím b olo inicial d e la g ra m á tica en e l ejem ­
plo 2.1. Los h ijos d e la raíz s e etiq u etan , d e izquierda a derecha, com o lista , + y dígito. O bserve
que
h sta
h sta + dígito
es u n a producción en la gram ática del ejem p lo 2.1. E l h ijo izquierdo d e la raíz e s sim ilar a la
raíz, con u n hijo etiq u eta d o com o - en vez d e +. L os tres nodos etiq u eta d o s com o d íg ito tien en
ca d a u no un hijo q ue s e etiq u e ta m ediante un d ígito.
□
D e izquierda a derecha, las hojas d e u n árbol d e an álisis sin tá ctico form an la d eriva ció n d el
árbol: la cad en a q ue se gen era o d eriva d el n o term inal en la raíz d el árbol d e an álisis sin tác­
tico. E n la figura 2 .5 , la d erivación es 9 -5 + 2 ; por con ven iencia, tod as las h ojas se m uestran en
e l nivel inferior. Por lo tan to, no es necesario alinear las h ojas d e esta form a. C ualquier árbol
2.2 Definición d e sintaxis
47
lista
lista
dígito
\
lista
dígito
dígito
9
F igu ra 2.5: Á rb ol d e an álisis sin tá ctico para 9 -5 + 2 , d e acuerdo con la gram ática
e n el ejem p lo 2.1
im p arte u n orden n atu ral d e izquierda a d erech a a su s hojas, con base en la id ea d e q u e si X y Y
so n dos hijos con e l m ism o padre, y X e s tá a la izquierda d e Y, en to n ces to d o s lo s descendientes
d e X está n a la izquierda d e los d escen d ien tes d e Y.
O tra definición d e l len gu aje generado por u na gra m á tica es com o e l con ju n to d e cad en as
q ue p uede generar cierto árbol d e an álisis sin tá ctico . A l p roceso d e encontrar u n árbol d e aná­
lisis sin táctico p ara u na cad en a d ad a d e term in ales s e le llam a a n a liza r sin tá c tic a m e n te esa
cadena.
2 .2 .4
A m b ig ü e d a d
Tenem os q ue ser cu id adosos al hablar sobre la estru ctu ra d e u na cad en a, d e acuerdo a u n a gra­
m ática. U n a gram ática p uede tener m ás d e un árbol d e análisis sin tá ctico q ue genere u na cad en a
d ad a d e term inales. S e d ice q ue d ich a gram ática es am bigua. P a ra m ostrar q ue u n a gra m á tica es
am bigua, tod o lo q ue d eb em os hacer es buscar u na ca d en a d e term inales q ue se a la derivación
d e m ás d e u n árbol d e análisis sin táctico. C om o u n a ca d en a con m ás d e u n árbol d e análisis
sin táctico tien e, por lo general, m ás d e un significado, d eb em os diseñar gram áticas no am biguas
para las aplicaciones d e com p ilación, o utilizar gram áticas am biguas con reglas adicionales para
resolver las am bigüedades.
E j e m p l o 2 .5 : S u p on ga q ue u tilizam os u n a so la cadena no term inal y q u e no diferenciam os
en tre los d ígitos y las listas, com o en e l ejem p lo 2.1. P odríam os haber escrito la sig u ien te gra­
m ática:
cadena
-►
cadena + cadena \ cadena - cadena | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
M ezclar la n oción d e d íg ito y k sta en la cadena n o term in al tien e sen tid o superficial, y a q ue un
d íg ito in dividu al es un caso esp ecial d e u n a ksta.
N o ob sta n te, la figura 2 .6 m u estra q ue u n a exp resión com o 9 -5 + 2 tien e m ás d e un árbol
d e an álisis sin tá ctico con e s ta gram ática. Los d os árboles p a ra 9 -5 + 2 corresponden a las dos
form as d e aplicar paréntesis a la expresión: ( 9 - 5 ) + 2 y 9 - ( 5 + 2 ) . E ste segu n d o u so d e los par
rén tesis proporciona a la expresión e l valor inesperado d e 2, e n vez d e l valor ordinario d e 6. La
g ra m á tica d e l ejem p lo 2.1 no p erm ite e s ta interpretación.
□
48
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
cadena
/
cadena
/
cadena
9
i
i
/
+
cadena
i
i
cadena
2
9
\
~
cadena
\
l
cadena
5
\
-
/
cadena
cadena
i
\
+
cadena
5
2
F igu ra 2.6: D o s árboles d e an álisis sin tá ctico para 9 -5 + 2
2 .2 .5
A s o c ia tiv id a d d e lo s o p e r a d o r e s
Por convención, 9+5+2 es eq u ivalen te
a (9 + 5 )+ 2 y 9 - 5 - 2 es eq u ivalen te a ( 9 - 5 ) - 2 . C uando
un op eran d o com o 5 tien e operadores a su izquierda y a su derecha, s e requieren convenciones
para decidir q ué operador se ap lica a e se operando. D ecim os q ue el operador + se a socia por la
izquierda, porque un op eran d o con sign os p ositivo s e n am bos lados d e él p ertenece al operador
q ue e s tá a s u izquierda. E n la m ayoría de los lengu ajes d e program ación, los cu atro operadores
aritm éticos (sum a, resta, m ultiplicación y d ivisión ) so n a sociativos por la izquierda.
A lgunos operadores com u nes, com o la exp on en cia ció n , son a sociativos p or la derecha. C om o
otro ejem p lo, el operador d e asign ación = e n C y su s descen dientes es a so cia tiv o p or la derecha;
es d ecir, la expresión a=b=c se tra ta d e la m ism a form a q ue la exp resión a = (b = c ).
Las cad en as com o a=b=c con un operador asocia tiv o p or la d erech a se generan m ediante la
sigu ien te gram ática:
derecha - +
letra - *
letra = derecha | letra
a | b | • •• | z
El con traste en tre u n árbol d e análisis sin tá ctico para un operador aso cia tiv o por la izquier­
d a com o - , y un árbol d e an álisis sin tá ctico para un operador a so cia tiv o p or la d erech a com o =,
se m uestra en la figura 2.7. O bserve q u e e l árbol d e análisis sin tá ctico p a ra 9 - 5 - 2 crece hacia
abajo y a la izquierda, m ientras que el árbol d e an álisis sin tá ctico para a=b=c crece h acia abajo
y a la derecha.
2 .2 .6
P re c e d e n c ia d e o p e ra d o re s
C onsidere la expresión 9+ 5*2. H ay d os p osib les interpretaciones d e e s ta expresión: (9 + 5 ) * 2 o
9 + -(5*2). Las reglas d e asociativid ad para + y * se aplican a las ocurrencias d el m ism o opera­
dor, p or lo que no resuelven e s ta am bigüedad. Las reglas q ue d efinen la p reced en cia relativa d e
los operadores so n necesarias cu an do hay m ás d e un tip o d e operador presente.
D ecim os q ue * tien e m a y o r p receden cia q ue +, s i * recibe su s op eran d os antes q u e +. E n la
aritm ética ordinaria, la m ultiplicación y la d iv isió n tien en mayor p reced en cia q ue la su m a y
la resta. Por lo ta n to , * recibe e l 5 tan to e n 9+ 5*2 co m o en 9*5+2; es decir, las exp resion es son
eq u ivalen tes a 9 + (5 * 2 ) y ( 9 * 5 )+ 2 , respectivam ente.
2.2 Definición d e sintaxis
49
lista
/
lista
/
hsta
i
i
\
dígito
/
letra
i
\
“
dígito
i
i
/
dígito
2
a
letra
\
-
derecha
=
5
derecha
i
\
=
derecha
b
9
letra
c
F igu ra 2.7: Á rboles d e análisis sin tá ctico para las g ra m áticas a sociativas p or la izquierda y
por la derecha
E j e m p lo 2 .6 : P od em os construir u na gram á tica para exp resion es aritm éticas a partir d e una
ta b la q ue m uestre la asociatividad y la p reced en cia d e los operadores. E m p ezam os co n los
cu a tro operadores aritm éticos com unes y u n a ta b la d e precedencia, m ostrand o los operadores
e n orden de m enor a mayor precedencia. Los operadores e n la m ism a lín ea tie n e n la m ism a
asociativid ad y precedencia:
asociativo por la izquierda:
asociativo por la derecha:
+ * /
C ream os d o s n o term in ales llam adas e x p r y te r m para los d os niveles d e precedencia, y un
n o term inal adicional llam ado fa c to r para generar u nidades básicas e n las expresiones. Las
u nidades b ásicas en las exp resion es son d íg ito s y exp resion es entre paréntesis.
fa c to r
-►
d íg ito | ( ex p r)
A hora considerem os los operadores binarios, * y / , q ue tien en la m ayor precedencia. C om o
esto s operadores asocian por la izquierda, la s p roducciones so n sim ilares a la s d e las lista s que
asocian por la izquierda.
te r m
|
|
te r m * fa c to r
te r m / fa c to r
fa c to r
D e m anera sim ilar, ex p r g en era listas d e térm inos separados por los operadores aditivos:
ex p r
—>
e x p r + te r m
e x p r - te rm
te rm
P or lo tan to, la gram ática resu ltan te es:
expr
te r m
fa c to r
—»■ ex p r + te r m \ e x p r - te r m \ te rm
—> te r m * f a c to r \ te r m / f a c to r \ fa c to r
—>
d ig it o I ( e x p r )
50
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
G e n e r a liz a c ió n d e la g r a m á t i c a d e e x p r e s io n e s d e l e je m p lo 2 .6
P od em os considerar un factor com o u n a expresión q u e no p uede “separarse” m ediante
ningún operador. A l usar el térm in o “separar” , querem os indicar q u e al colocar un opera­
dor en seg u id a d e cualquier factor, e n cualquier lado, n in gu n a p iez a d el factor, ex cep to en
su totalid ad , se con vertirá en un operando d e e se operador. Si el factor es u na expresión
con paréntesis, ésto s la p rotegen con tra d ich a “separación” , m ientras q ue s i el factor es
un so lo op eran d o, n o puede separarse.
U n térm ino (que no s e a tam b ién u n factor) es u n a expresión q ue p u ed e separarse
m ediante los operadores d e la m ayor precedencia: * y / , pero no m ed ian te los operadores
d e m enor precedencia. U n a expresión (que no se a u n térm in o o factor) p u ed e separarse
m ediante cualquier operador.
P od em os generalizar e s ta id ea con cualquier núm ero n d e niveles d e precedencia. N e­
cesitam os n + 1 no term inales. E l prim ero, com o f a c to r e n el ejem p lo 2 .6 , n u n ca podrá
separarse. Por lo general, los cu erpos d e producciones para e s ta no term inal so n sólo
o p eran d os individuales y exp resion es con paréntesis. E n ton ces, para ca d a nivel d e pre­
cedencia h ay un n o term inal q ue represen ta a las exp resion es q ue pueden separarse sólo
m ediante operadores en e se n ivel, o e n u no superior. Por lo general, la s p rod uccion es para
e s ta no term inal tien en cu erpos q ue representan los u sos d e los operadores e n ese nivel,
m ás u n cu erpo q u e só lo e s la no term inal para e l sig u ien te nivel superior.
Con e s ta gram ática, u na expresión es u n a lista d e térm inos separados por los sign os + o - ,
y un térm in o es u na lista d e factores separados p or los sign os * o / . O bserve q ue cualquier
expresión con paréntesis es u n factor, a sí q ue co n los paréntesis p od em os desarrollar expre­
sion es q ue ten gan un anidam iento co n profundidad arbitraria (y árboles co n u na profundidad
arb itraria).
□
E j e m p lo 2 .7 : L as palabras clave nos p erm iten reconocer instrucciones, y a q ue la m ayoría
d e ésta s em p iezan co n u n a p alabra clave o un carácter especial. Las ex cep cio n es a e s ta regla
incluyen las asignaciones y las llam adas a procedim ientos. Las instrucciones definidas p or
la g ra m á tica (am bigua) e n la figura 2 .8 so n legales en Java.
En la prim era p rod ucción para in s tr , e l term inal ¡d representa a cualquier id en tific a d o s Las
producciones para expresión n o se m uestran. L as in stru cciones d e asign ación especificadas por
la prim era producción son legales en Java, aunque J a v a tr a ta a = co m o un operador d e asigna­
ción q ue p uede aparecer d en tro d e u na expresión. P or ejem plo, J a v a p erm ite a=b=c, m ientras
q ue e s ta gram ática no.
El no term inal in s tr s g en era u na lista p osib lem en te v a cía d e instrucciones. L a seg u n d a pro­
d ucción para in s tr s gen era la lista v a cía e. L a prim era p roducción gen era u n a lista p osib lem en te
v a cía d e instrucciones segu id as por u na instrucción.
La colocación d e los sign os d e p u n to y co m a e s su til; aparecen al final d e ca d a cu erpo q ue
no term in a en in str. E ste en foqu e e v ita la acum ulación d e p un tos y com as d esp u és d e instruc­
cion es com o if y w hile, q ue term inan con su b in stru ccion es anidadas. C uan do la subinstrucción
an idad a se a u n a in stru cción o un d o-w h ile, se generará u n p u n to y co m a com o parte d e la
su bin stru cción.
□
2.2 Definición d e sintaxis
51
in s tr
in strs
—>■
|
[
[
j
|
i d = expresión ;
¡ f ( ex p resió n ) in s tr
i f = ex p resió n ; in s tr e l s e in s tr
w h i l e ( ex p resió n ) in s tr
d o in s tr w h i l e ( ex p resió n )
{ in s tr s }
->
;
in s tr s in s tr
I
e
F igu ra 2.8: U n a g ra m á tica para u n su b co n ju n to d e instrucciones d e Java
2 .2 .7
E je r c ic io s p a r a la s e c c ió n 2 .2
E j e r c ic io 2 .2 .1 : C onsidere la sigu ien te g ra m á tica libre d e contexto:
5
-¥
5 5 + |
a) M uestre cóm o p uede generarse
5 5 *
| a
la ca d en a aa+ a* m ed ian te e s ta gram ática.
b) C onstruya un árbol d e an álisis sin táctico para e s ta cadena.
c) ¿Q ué lengu aje gen era e s ta gram ática? J u stifiq ue s u resp uesta.
E j e r c ic io 2 .2 .2 : ¿Q ué len gu aje se g en era m ediante las sig u ien tes gram áticas? E n ca d a caso,
justifiq ue su respuesta.
a) 5
-> 0 5 1 1 0 1
b) 5
+5 5
| -5 5
c) S
->
d) 5
—> a 5 b 5
e) 5
-¥
| a
S ( 5 ) 5 | e
| b 5 a 5 | e
a | S+S | 55
|5 * |(5)
E j e r c ic io 2 .2 .3 : ¿C uáles d e las gram áticas e n el ejercicio 2 .2 .2 so n am biguas?
E j e r c ic io 2 .2 .4 : C on stru ya gram áticas libres d e co n tex to n o am biguas para ca d a u no d e los
sigu ien tes lengu ajes. E n cad a caso m uestre q ue su gra m á tica e s correcta.
a) E xp resion es aritm éticas en notación prefija.
b ) L istas asociativas por la izquierda d e identificadores separados por com as.
c) L istas asocia tiv a s p or la d erech a d e identificadores separados por com as.
d) E xp resion es aritm éticas d e en teros e identificadores co n lo s cu a tro operadores binarios
+> ", *, /-
52
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
! e) A gregue e l operador unario d e su m a y d e resta a los operadores aritm éticos d e (d).
E j e r c i c i o 2 .2 .5 :
a) M uestre q ue tod as las cad en as binarias generadas por la sigu ien te gra m á tica tien en v a ­
lores q u e pueden d ividirse en tre 3. S ugeren cia: U se la inducción en el núm ero d e nodos
en u n árbol d e an álisis sin táctico.
num
-*
11
|
1001
|
num 0
|
num num
b) ¿L a gram ática g en era to d a s las cad en as binarias co n valores d iv isib les entre 3?
E j e r c i c i o 2 . 2 .6 : C onstruya u na gram ática libre d e co n tex to para los núm eros rom anos.
2.3
T ra d u c c ió n o r ie n ta d a a la s in ta x is
La traducción orien tad a a la sin ta x is s e realiza u niend o reglas o fragm entos d e u n program a
a la s producciones en u na gram ática. P or ejem p lo, con sid ere u n a expresión e x p r gen erad a por
la sigu ien te producción:
ex p r
-+
e x p r i + term
A quí, e x p r es la su m a d e las d o s su b exp resion es expri y term . E l su b ín d ice en ex p ri se u tiliza
só lo p ara diferenciar la in sta n c ia de ex p r en el cu erpo d e la producción, d e l en ca b eza d o d e la
producción. P od em os trad ucir e x p r exp lotan d o su estru ctu ra , com o en e l sig u ie n te seu d o có digo:
trad ucir expr\\
trad ucir term;
m anejar +;
M ediante u na variante d e e s te seu d ocód igo, vam os a construir un árbol sin tá ctico para ex p r
en la sección 2.8, creando árboles sin tá ctico s para expri y te r m , y desp ués m anejarem os e l +
con stru yén dole un nodo. P or con ven iencia, e l ejem p lo en e s ta secció n e s la trad ucción d e las
exp resion es infijas a la n otación postfijo.
E sta sección in trod u ce d os co n cep to s relacionados con la trad ucción orien ta d a a la sin ­
taxis:
• A trib u to s. U n a trib u to es cualquier can tid ad asociad a con u n a con stru cción d e program a­
ción. A lgu nos ejem p los d e atrib u tos son los tip o s d e d a to s d e las expresiones, el núm ero
d e instrucciones en e l cód ig o generado, o la ubicación d e la prim era in stru cción en e l có ­
d igo generado para u na con stru cción, en tre m uchas o tra s p osibilid ades. C om o utilizam os
sím b olos d e la gram ática (no term in ales y term inales) p a ra representar las con stru cciones
d e program ación, exten d em os la n oción d e los atrib u tos, d e las con stru cciones a los sím ­
b olos q u e las representan.
2.3
Traducción orientada a la sintaxis
•
53
E squem as d e tradu cción (o rien ta d a a la sin ta x is). U n esquem a d e tradu cción e s u na nota­
ción para unir los fragm entos d e un program a a las producciones d e u na gram ática. Los
fragm entos d el program a se ejecu tan cu a n d o se u tiliz a la producción d urante e l análisis
sin táctico. E l resultado com binado d e to d a s es ta s ejecu cion es d e los fragm entos, e n el
orden inducido p or el an álisis sin táctico , produce la trad ucción d e l program a al cu a l se
ap lica e s te proceso d e an álisis/sín tesis.
U tilizarem os las trad uccion es orien tad as a la sin ta x is a lo largo d e e s te ca p ítu lo para tradu­
cir las exp resion es infijas en n otación postfija, para evaluar exp resion es y para construir árboles
sin tá ctico s para las con stru cciones d e program ación. E n el ca p ítu lo 5 aparece u n a discusión
m ás d eta lla d a sobre los form alism os orien tad os a la sin taxis.
2 .3 .1
N o ta c ió n p o s tf ija
Los ejem p los en e s ta sección m anejan la traducción a la n otación p ostfija. L a n o ta ció n p o stfija
para u na exp resión E p uede definirse d e m anera in d u ctiva, com o se m u estra a continuación:
1. Si E es una variable o co n sta n te, en to n ces la n otación p o stfija para E es la m ism a E.
2. Si E es u n a exp resión d e la form a E x o p E¿, en d ond e o p es cualquier operador binario,
en ton ces la n otación p ostfija p ara E es E [ E'2 o p , en d on d e E [ y
son las notaciones
p ostfija para E \ y 2%, resp ectivam en te.
3. Si i? e s u na expresión con paréntesis d e la form a ( £ i ) , en ton ces la n otación p o stfija para
E e s la m ism a q ue la n otación p o stfija para E i.
E j e m p lo 2 .8 : L a notación p o stfija para ( 9 - 5 ) + 2 es 9 5 -2 + . E s decir, la s traducciones d e 9,
5 y 2 son las m ism as co n sta n tes, e n base a la regla (1). E n ton ces, la traducción d e 9 - 5 es 9 5 e n base a la regla (2 ). L a trad u cción d e ( 9 - 5 ) e s la m ism a en base a la reg la (3 ), H abiendo
trad ucido la su bexpresión co n paréntesis, p od em os aplicar la reg la (2) a to d a la exp resión , con
( 9 - 5 ) e n el papel d e E \ y 2 en el p ap el d e Eh, p a ra ob ten er e l resultado 9 5 -2 + .
C om o o tro ejem plo, la n otación p ostfija para 9 - ( 5 + 2 ) es 9 5 2 + -. E s d ecir, prim ero se tradu­
c e 5+2 a 52+, y e s ta exp resión s e con vierte en e l segu n d o argum ento d el sign o n egativo.
□
N o se n ecesitan paréntesis en la n otación p o stfija , d eb ido a q u e la p o sició n y la a rid a d
(núm ero d e argum entos) d e los operadores só lo p erm iten u na d ecod ificación d e u n a expresión
p ostfija. E l ‘‘tru co ” es explorar varias veces la ca d en a p o stfija p artien do d e la izquierda, h asta
encontrar un operador. D esp ués, se b u sca a la izquierda el núm ero apropiado d e operandos,
y se agrupa e s te operador co n su s op erandos. S e ev a lú a e l operador co n los op eran d os y se
su stitu y en por el resu ltad o. D espués se rep ite e l proceso, con tinu and o a la d erech a y buscando
otro operador.
E j e m p lo 2 .9 : C onsidere la exp resión p o stfija 9 5 2 + -3 * . Si exp loram os partiendo d e la iz­
quierda, prim ero en con tram os el sign o p ositiv o . Si b uscam os a s u izquierda en con tram os los
op eran d os 5 y 2. Su sum a, 7, su stitu y e a 52+ y ten em o s la ca d en a 9 7 - 3 * . A hora, e l operador
54
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
d e m ás a la izquierda es e l sign o n egativo, y su s op eran d os son 9 y 7. Si los su stitu im o s por el
resultado d e la r e sta nos q u ed a 23*. P or ú ltim o, e l sig n o d e m u ltip licación se a sig n a a 2 y 3, lo
cu a l produce e l resultado d e 6.
□
2 .3 .2
A t r i b u t o s s in te tiz a d o s
La id ea d e asociar can tid ad es co n con stru ccion es d e program ación (por ejem plo, valores y tip o s
con exp resion es) p uede expresarse e n térm inos d e gram áticas. A sociam os los atrib utos co n los
no term in ales y term inales. D esp ués, u nim os reglas a las p roducciones d e la gram ática; e sta s
reglas d escrib en la form a en q ue se calculan los atrib utos en eso s n od os d e l árbol d e análisis
sin tá ctico en d ond e la producción en cu estió n se u tiliz a p a ra relacionar u n n o d o co n su s hijos.
U na defin ición o rie n ta d a a la sin ta x is se asocia:
1. C on ca d a sím b olo d e gram ática, u n con ju n to d e atrib utos.
2. C on ca d a producción, u n con ju n to d e reglas se m á n tica s para calcu lar los valores d e los
atrib u tos asociados con los sím b olos q u e aparecen e n la producción.
Los atrib u tos p ueden evaluarse d e la sigu ien te form a. Para u n a ca d en a d e en trad a x d ada,
se con stru ye un árbol de an álisis sin tá ctico p ara x. D esp ués, se aplican la s reglas sem án ticas
para evaluar los atrib u tos en ca d a n od o d el árbol de an álisis sin tá ctico , com o se in dica a con ­
tinuación.
S u p on ga q ue un n od o N en un árbol d e an álisis sin tá ctico se e tiq u e ta m ed ian te e l sím b olo de
gra m ática X . E scribim os X . a para d en otar el valor d el a trib u to a d e X en e se nodo. A un árbol
d e análisis sin tá ctico q ue m uestra los valores d e los atrib u tos en ca d a nodo se le co n o ce com o
árbol d e an álisis sin tá ctico an otado. P or ejem p lo, la figura 2 .9 m uestra un árbol d e análisis
sin tá ctico an otad o para 9 -5 + 2 co n un atrib u to t asociad o con los n o term inales ex p r y t e r m El
valor 9 5 -2 + d e l atrib u to e n la raíz es la n otación p o stfija p a ra 9 -5 + 2 . E n breve verem os cóm o
se calcu lan esta s expresiones.
expr.t = 95-2+
expr.t = 9
term .t = 9
cxpr.t = 9 5 -
+
te rra l = 2
-
term.1 = 5
2
5
9
F igu ra 2.9: Valores d e los atrib utos en los n od os de un árbol d e análisis sin tá ctico
Se d ice q ue u n atributo e s tá sin te tiza d o si s u valor en e l nodo JV d e un árbol d e análisis
sin tá ctico se d eterm in a m ediante los valores d e los atrib u tos d e l hijo d e N y d el m ism o N.
Los atrib u tos sin tetizad os tien en la a tractiva propiedad d e q u e p u ed en evaluarse d u ra n te un
2.3
Traducción orientada a la sintaxis
55
recorrido d e abajo h acia arriba transversal d e un árbol d e an álisis sin tá ctico . E n la sección
5.1.1 hablarem os sobre otro tip o im p ortan te d e atributo: el a trib u to “heredado” . D e m anera
inform al, los atrib u tos heredados tien en su valor en un nodo d e un árbol d e an álisis sin táctico
q u e se d eterm in a m ed ian te los valores d e los atrib utos en el m ism o nodo, e n su padre y en sus
herm anos d e l árbol.
E j e m p lo 2 .1 0 : E l árbol d e análisis sin táctico a n otad o e n la figu ra 2.9 s e b a sa en la definición
orien tad a a la sin ta x is d e la figu ra 2.10 para traducir exp resion es q u e co n sisten en d íg ito s s e ­
parados por los sig n o s p o sitiv o o n egativo, a la n otación p ostfija. C ad a n o term inal tien e un
atrib u to t co n valor d e cad en a, e l cu a l representa a la n otación p o stfija para la exp resión gene­
rada por e s a n o term inal e n un árbol d e análisis sin tá ctico . E l sím b olo || en la reg la sem á n tica
e s e l operador para la con caten ación d e cadenas.
P
r o d u c c ió n
Reg
la s
s e m á n t ic a s
expr —>expr1 + term
expr —>exjyrj - term
expr—>term
expr.t
exffr.t
expr.t
term
term
-* 0
term .t =
tenrut =
'0 '
—» 1
teim
—^ 9
term ,t =
'9 '
=
=
=
expr^.t
expr^.t
term .t
||
||
term .t
term .t
|| 'V
'1 '
F igu ra 2.10: D efinición orien tad a a la sin ta x is para la trad ucción d e infija a p ostfija
L a form a p o stfija d e un d íg ito es el m ism o dígito; p or ejem p lo, la regla sem á n tica asociada
co n la producción te rm -► 9 d efin e a te r m .t com o e l m ism o 9, ca d a vez q ue se u tiliza e s ta pro­
d u cción en un n od o d e u n árbol d e an álisis sin tá ctico . Los o tro s d íg ito s se traducen d e m anera
sim ilar. C om o otro ejem plo, cu an do s e aplica la producción e x p r -► te r m , el v a lo r d e te r m .t se
con vierte en e l valor d e e x p r .t
L a producción ex p r -► e x p n + te r m deriva a u na exp resión q ue co n tien e un operador de
siu n a.3 E l op eran d o izquierdo d el operador d e su m a se prop orciona m ed ian te exp n , y el op e­
rando derecho m ediante term . L a regla sem án tica
pjyr.t = expr^t || term .t || V
aso cia d a co n e s ta producción con stru ye e l valor d e l a trib u to ex p r.t m ed ian te u n a con catenación
d e las form as postfijas e x p n .t y te r m .t d e los op eran d os izquierdo y derecho, respectivam ente,
y d esp u és ad ju nta el sig n o d e sum a. E sta regla e s u na form alización d e la d efinición d e “expre­
sió n p o stfija ”.
□
3 E n é s t a y e n m uchas o tr a s re g la s, e l m ism o n o te rm in a l (e n e s te caso , expr) a p arece v arias veces. E l p ro p ó sito del
su b ín d ic e 1 e n expr¡ e s d ife re n c ia r la s d o s o c u rre n c ia s d e expren la p ro d u c c ió n ; e l “ 1” no fo rm a p a r te d e l n o te rm in a l.
P a r a o b te n e r m ás d e ta lle s c o n su lte e l c u a d ro titu la d o “U sos d e u n no te rm in a l p a r a d iferen c ia r convenciones”.
56
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
U s o s d e u n n o t e r m i n a l p a r a d if e r e n c ia r c o n v e n c io n e s
A m enudo, en las reglas ten em os la necesidad d e diferenciar en tre varios u sos d e l m ism o
no term inal e n e l en cab ezad o y cu erpo d e u n a producción; para ilustrar e sto , v ea e l ejem ­
plo 2.10. La razón es q ue en e l árbol d e an álisis sin tá ctico , d istin to s n od os etiq u etad os
p or e l m ism o n o term in al, p or lo general, tien en d istin to s valores para su s traducciones.
N osotros vam os a adoptar la sigu ien te convención: e l no term in al aparece sin subíndice
en el en cab ezad o y co n d istin to s su b ín d ices e n e l cuerpo. Todas son ocurrencias d el m is­
m o no term inal, y e l su bín d ice n o form a p arte d e su nom bre. N o o b sta n te, h ay q ue alertar
al lector sobre la diferencia en tre los ejem p los d e traducciones específicas, en d ond e se
utiliza e s ta convención, y las producciones genéricas com o A -> X \
... , X „, en donde
las X con su bín d ices representan u n a lista arbitraria d e sím b olos d e gram ática, y n o son
in stancias d e un n o term inal específico llam ado X .
2 .3 .3
D e fin ic io n e s s im p le s o r i e n t a d a s a la s in ta x is
La definición orien tad a a la sin ta x is e n e l ejem p lo 2.10 tien e la sig u ien te propiedad im portante:
la ca d en a que representa la trad u cción d el no term inal e n e l en cab ezad o d e ca d a producción
es la con caten ación d e las trad uccion es d e los no term inales en el cu erpo d e la producción, en
e l m ism o orden q u e en la producción, co n algu nas cad en as ad icion ales op cio n a les entrelazadas.
U n a definición orien tad a a la sin ta x is co n e s ta propiedad s e d en o m in a com o sim ple.
E j e m p lo 2 .1 1 : C onsidere la prim era p rod ucción y reg la sem á n tica d e la figura 2.10:
P ro d u c c ió n
e x p r -► ex p n + te r m
r e g la
s e m á n tic a
^
^
e x p r .t = e x p n .t || te r m .t || V
A quí, la trad ucción ex p r.t es la con caten ación d e las trad uccion es d e ex p r i y te r m , seguid a por
e l sím b olo +. O bserve q u e expr\ y te r m aparecen en e l m ism o o rd en , tan to e n e l cu erpo d e la
producción com o en la regla sem án tica. N o h ay sím b olos ad icion ales an tes o en tre su s trad uc­
ciones. E n e s te ejem p lo, e l único sím b olo adicional ocurre al final.
□
C uando h ablem os sobre los esqu em as d e traducción, verem os q u e p u ed e im plem entarse u na
definición sim p le orien tad a a la sin taxis con só lo im prim ir las ca d en a s adicionales, en el orden
en e l q ue aparezcan e n la definición.
2 .3 .4
R e c o r r id o s d e lo s á r b o le s
U tilizarem os los recorridos d e los árboles para describir la ev alu ación d e los atrib u tos y esp e­
cificar la ejecución d e los fragm entos d e cód igo e n u n esq u em a d e trad ucción . U n recorrido d e
un árbol em p ieza en la raíz y v is ita cada n odo d el árbol en cierto orden.
2.3
Traducción orientada a la sintaxis
57
U n recorrido d e l tip o p rim e ro en p ro fu n d id a d em p ieza en la raíz y v is ita en form a recursiva
los h ijos d e c a d a n od o e n cualquier orden, no necesariam ente d e izquierda a derecha. S e llam a
“prim ero en profundidad1' d eb ido a q ue v isita cu a n d o p u ed a a u n hijo d e u n nodo q ue n o haya
sid o visitad o, d e m anera q ue v is ita a los nodos q u e esté n a cier ta d ista n c ia ( “profundidad”) de
la raíz lo m ás rápido q ue pueda.
E l procedim iento v isita r(N ) e n la figura 2.11 es u n recorrido prim ero en profundidad, e l cual
v isita a los hijos d e u n nodo en e l orden d e izquierda a derecha, com o se m uestra en la figura
2.12. E n e s te recorrido hem os in clu id o la acción d e evaluar las trad uccion es e n c a d a nodo, ju sto
an tes d e term inar con e l n od o (es decir, d esp u és d e q ue se hayan calcu lado las traducciones
e n e l hijo). E n general, las acciones asociadas co n un recorrido p ueden ser cualquier c o sa que
elijam os, o n in gu n a acción en sí.
p r o c e d u r e v is ita r (nodo N ) {
f o r ( ca d a h ijo (C d e N , d e izquierda a d erech a ) {
v is ita r (C);
}
evaluar las reglas sem án ticas en e l nodo N;
}
F igu ra 2.11: U n recorrido tip o “prim ero en profundidad” d e un árbol
F igu ra 2.12: E jem plo d e u n recorrido tip o “prim ero en profundidad” d e un árbol
U n a definición orien tad a a la sin taxis no im pon e u n ord en específico p a ra la evaluación
d e los atrib utos e n u n árbol d e análisis sin táctico; cualquier orden d e evaluación q ue calcule
u n atrib u to a d esp u és d e tod os los d em á s atrib u tos d e los q ue a d ep en d a e s aceptable. Los
atrib u tos sin tetiza d o s p ueden evaluarse d urante cualquier recorrido d e abajo-arriba; es decir,
u n recorrido q u e evalúe los atrib u tos en un n o d o d esp u és d e haber evalu ad o lo s atrib u tos de
su s hijos. E n general, ta n to con los atrib utos sin tetiza d o s com o co n los heredados, la cu estión
acerca d e l orden d e evaluación e s b asta n te com pleja; vea la secció n 5.2.
2 .3 .5
E s q u e m a s d e tr a d u c c i ó n
L a definición orien tad a a la sin ta x is en la figura 2.10 gen era u n a traducción uniendo cad en as
com o atrib u tos para los nodos en el árbol d e análisis sin tá ctico . A hora considerarem os un mé­
to d o alternativo q u e no n ecesita m anipular cadenas; p roduce la m ism a traducción en form a
increm ental, m ed ian te la ejecución d e fragm entos d el program a.
58
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
R e c o r r id o s p r e o r d e n y p o s to r d e n
Los recorridos e n preorden y p ostorden so n d os ca so s especiales d e recorridos tip o “pri­
m ero en profundidad” , en los cu ales se v isita n los hijos d e ca d a n o d o d e izquierda a
derecha.
A m enudo, recorrem os u n árbol para realizar cierta acción esp ecífica e n ca d a nodo.
Si la acción se realiza cu an do v isita m o s a u n n o d o p or prim era vez, en to n ces p od em os
referim os al recorrido com o u n recorrido en preorden . D e m anera sim ilar, si la acción se
realiza ju sto antes d e dejar u n n odo por ú ltim a v ez , en ton ces d ecim os q ue es u n recorrido
en p o sto rd en d el árbol. E l procedim iento m sita r{N ) en la figura 2.11 e s un ejem p lo d e un
recorrido postorden.
Los recorridos en preorden y p ostorden d efinen los ord en am ien tos corresp ond ien tes en
los nodos, co n base en el m om ento en e l q ue s e v a a realizar u na acción en un nodo. El
recorrido en preorden d e un (sub )árbol con raíz en el n o d o N co n siste e n N , seguid o por
los recorridos preorden d e los su bárboles d e cad a uno d e su s hijos, si ex isten , em p ezand o
d esd e la izquierda. E l recorrido en p o sto r d e n d e un (sub )árbol con raíz en N co n siste en
los recorridos en p ostorden d e cad a uno d e los su bárboles d e los h ijo s d e N , s i ex isten ,
em p ezan d o d esd e la izquierda, segu id os d el m ism o N.
U n esq u em a d e trad ucción orien tad o a la sin ta x is es u n a n otación para especificar u na
traducción, u niend o los fragm en tos d e u n program a a las producciones en u na gram ática. Un
esq u em a d e trad ucción es com o u n a definición orien tad a a la sin ta x is, só lo q u e e l orden d e
evaluación d e las reglas sem án ticas se esp ecifica en form a ex p lícita .
Los fragm entos d e u n program a in crustad os d en tro d e lo s cu erpos d e las producciones se
llam an accion es sem á n tica s. L a p osición e n la q ue d eb e ejecu tarse u na acción se m uestra en ce­
rrada en tre llaves y se escrib e d en tro d e l cu erpo d e producción, com o en e l sig u ien te ejem plo:
r e sto
-►
+ te rm { p r in t(V )} re sto i
V erem os esa s reglas a la hora d e considerar u n a form a a ltern a tiv a d e gra m á tica para las e x ­
presiones, en d o n d e el no term inal llam ad a re sto representa “to d o ex c ep to e l prim er térm in o
d e u n a exp resión ”. E n la sección 2.4.5 hablarem os so b re e s ta form a d e gram ática. D e n uevo, el
su bín d ice e n re sto i diferencia e s ta in stan cia del no term inal re sto en e l cu erpo d e la producción,
d e la in stan cia d e r e sto e n el en cab ezad o d e la producción.
A l dibujar un árbol d e an álisis sin tá ctico para un esq u em a d e trad ucción , para indicar u na
acción le con stru im os un hijo ad icion al, con ectad o m ediante u n a línea p un teada al n o d o que
corresponde a la c a b ez a d e la producción. Por ejem p lo, la p orción d e l árbol d e an álisis sin tác­
tico para la producción y acción anteriores se m uestra en la figura 2.13. E l n o d o para u n a ac­
ción sem á n tica n o tien e hijos, p o r lo que la acción se realiza la prim era vez q u e se ve el nodo.
E j e m p lo 2 .1 2 : E l árbol d e an álisis sin táctico en la figura 2 .14 tiene instrucciones “print” en
h ojas adicionales, las cu ales se adjuntan m ed ian te líneas p un teadas a los n od os interiores d el
árbol d e an álisis sin táctico. E l esq u em a d e traducción aparece en la figura 2.15. L a gra m á tica
su byacen te genera exp resion es q ue co n sisten en d íg ito s separados p or los sign os p o sitivo y ne-
2.3
Traducción orientada a la sintaxis
59
resto
+
tcrm
{p r in t(V )}
restoi
F igu ra 2.13: Se con stru ye u n a h o ja adicional para u n a acción sem á n tica
g a tiv o . Las accion es in crustad as en los cu erpos d e producción traducen d ich as exp resion es a la
n otación postfija, siem p re y cu an do realicem os un recorrido d el tip o “prim ero e n profundidad”
d e izquierda a d erech a d e l árb ol, y ejecu tem os ca d a in stru cción “p rin t” a m ed id a q u e v isitem o s
su s hojas.
expr .
'
s .
expr
expr
-
term
I
/
term
/
9
+
5
{printC'-')}
tcrm
2
{print('+/)}
{printf7^ ) }
\
{print(/5/)}
\
{print (79 0 }
F igu ra 2.14: A ccion es p a ra traducir 9 -5 + 2 a 9 5 -2 +
expr
—>
cxpr± + te rm
{p rin t (/+/) }
exjjr
expr
->
exp ri - te r m
te rm
{p rin t ( '- ') }
tcrm —► 0
term -> 1
ta in
9
{print('O')}
{print ('l')}
{p rin t('9 ')}
F igu ra 2.15: A cciones para traducir a la notación p o stfija
L a raíz d e la figura 2.14 representa la prim era producción e n la figura 2.15. E n un recorrido
en p ostord en , prim ero realizam os to d a s las accion es en el su b á rb o l d e m ás a la izquierda d e
la raíz, para el operando izquierdo, tam bién etiq u eta d o ex p r com o la raíz. D esp ués v isita m o s la
h o ja + en la cu al no hay acción. D esp u és realizam os la s accion es en el subárbol p a ra e l operan­
d o derecho te rm y, p or ú ltim o, la acción sem á n tica {p rin t('+')} en el n o d o adicional.
C om o las producciones para te rm só lo tien en un d ígito en el lado derecho, la s acciones para
las producciones im prim en e se d ígito. N o es necesario n ingú n tip o d e sa lid a p a ra la producción
e x p r -► te r m , y sólo se n ecesita im prim ir e l operador e n la acción para ca d a u n a d e las pri-
60
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
m eras d os producciones. A l ejecu tarse d u ran te u n recorrido en p ostorden d el árbol d e análisis
sin tá ctico, las accion es e n la figura 2.14 im prim en 9 5 -2 + .
□
O bserve que, aunque los esquem as en las figuras 2.10 y 2.15 p rod ucen la m ism a traducción,
la con stru yen en form a distinta; la figu ra 2.10 ad ju n ta ca d en a s com o atrib utos a los nodos en
e l árbol d e an álisis sin tá ctico , m ientras q ue e l esq u em a en la figura 2 .15 im prim e la traducción
en form a increm ental, a través d e accion es sem ánticas.
Las accion es sem án ticas en el árbol de an álisis sin tá ctico en la figura 2.14 traducen la expre­
sión infija 9 -5 + 2 a 9 5 -2 + , im prim iendo ca d a carácter e n 9 -5 + 2 só lo u n a vez, sin u tilizar espacio
d e alm acenam iento para la traducción d e las subexpresiones. C uando se crea la sa lid a en form a
increm ental d e e s te m odo, el orden en e l que se im prim en los caracteres e s im portante.
La im plem en tación d e un esq u em a d e trad ucción d eb e asegurar q ue las accion es sem án ticas
se realicen en e l orden en el q ue aparecerían d urante un recorrido p ostorden d e un árbol d e
análisis sin táctico. L a im plem en tación en realidad n o n ecesita construir un árbol d e análisis
sin tá ctico (a m enudo n o lo hace), siem p re y cu a n d o asegure q u e las accion es sem án ticas se
realizan com o si con stru yéram os un árbol d e an álisis sin tá ctico y desp ués ejecu táram os las
accion es d urante un recorrido postorden.
2 .3 .6
E je rc ic io s p a r a la s e c c ió n 2 .3
E j e r c i c i o 2 . 3 .1 : C on stru ya un esq u em a d e traducción orien tad o a la sin ta x is, q u e traduzca
exp resion es aritm éticas d e la n otación infija a la n otación prefija, en la cu a l un operador apare­
ce antes d e su s operandos; p or ejem p lo, - x y e s la n otación prefija para x - y. P rop orcion e los
árboles d e an álisis sin tá ctico an otad os para las entradas 9 -5 + 2 y 9 -5 * 2 .
E j e r c i c i o 2 . 3 .2 : C on stru ya un esq u em a d e trad ucción orien tad o a la sin taxis, q u e traduzca
exp resion es aritm éticas d e la n otación p ostfija a la notación infija. P rop orcion e los árboles de
análisis sin tá ctico an otad os para las en trad as 9 5 - 2 * y 9 5 2 * -.
E j e r c i c i o 2 . 3 .3 : C on stru ya un esq u em a d e trad ucción orien tad o a la sin taxis, q u e traduzca
en teros a núm eros rom anos.
E j e r c i c i o 2 . 3 .4 : C on stru ya un esq u em a d e traducción orien tad o a la sin taxis, q u e traduzca
núm eros rom anos a enteros.
E j e r c i c i o 2 . 3 .5 : C on stru ya un esq u em a d e traducción orien tad o a la sin taxis, q u e traduzca
exp resion es aritm éticas p ostfijo a su s exp resion es aritm éticas infijas equivalentes.
2.4
A n álisis s in tá c tic o
El an álisis sin tá ctico (parsing) e s el proceso d e d eterm inar cóm o p uede generarse u n a ca d en a
d e term in ales m ed ian te u n a gram ática. A l hablar so b re e s te problem a, es m ás ú til pensar en
q ue se v a a construir un árbol d e an álisis sin táctico , aun cu a n d o un com pilador ta l v e z no lo
co n stru ya en la práctica. N o ob sta n te, un analizador sin tá ctico d eb e ser ca p az d e construir el
árbol en prin cip io, o d e lo contrario n o se p uede garantizar q ue la trad ucción s e a correcta.
2.4 A nálisis sin táctico
61
E s ta sección in trodu ce un m éto d o d e an álisis sin tá ctico co n o cid o com o “d escen so rectu­
siv o ” , e l cu a l p uede usarse ta n to para e l an álisis sin tá ctico , com o p a ra la im p lem en tación de
trad u ctores orien tad os a la sin taxis. E n la sig u ien te secció n aparece u n program a co m p leto en
Java, q ue im p lem en ta e l esq u em a de trad u cción de la figura 2.15. U n a a ltern a tiv a v ia b le es
usar una herram ien ta d e softw are para generar u n trad uctor d irecta m en te d e u n esq u em a de
trad ucción . L a sección 4 .9 d escrib e d ich a herram ienta: Yacc; p uede im plem en tar el esq u em a
d e trad ucción d e la figu ra 2.15 sin n ecesid ad d e m odificarlo.
P ara cualquier gram ática libre d e co n tex to , hay u n analizador sin tá ctico q u e s e tarda, com o
m áxim o, u n tiem p o 0 ( n 3) en analizar u n a ca d en a d e n term in ales. Pero, por lo general, el
tiem p o cú b ico e s d em asiad o costoso. Por fortuna, para los lengu ajes d e p rogram ación reales p o ­
d em o s d iseñ ar u n a gram ática q ue p u ed a analizarse co n rapidez. Los algoritm os d e tiem p o lineal
b a stan para analizar en esen cia to d o s los lenguajes q u e surgen e n la práctica. Los analizadores
sin tá ctico s d e los lengu ajes d e program ación ca si siem p re realizan u n esca n eo d e izquierda a
derech a sobre la en trad a, buscando por ad elan tad o un term inal a la vez, y con stru yen do las
p iezas d e l árbol de an álisis sin tá ctico a m ed ida q ue avanzan.
L a m ayoría d e los m étod os d e an álisis sin tá ctico se adaptan a u n a d e d o s clases, llam adas
m éto d o s d escen den te y ascen den te. E sto s térm inos se refieren a l orden e n el q u e se construyen
los n od os e n el árbol d e an álisis sin táctico . E n los analizadores tip o descen dente, la cons­
trucción em p ieza en la raíz y p rocede h acia las hojas, m ientras q ue e n los analizadores tipo
ascen dente, la construcción em p ieza en las h ojas y p rocede hacia la raíz. L a popularidad de
los analizadores tip o arriba-abajo s e d eb e a q ue pueden construirse analizadores eficien tes con
m ás facilidad a m ano, m ediante m éto d o s d escen d en tes. N o ob sta n te, el análisis sin tá ctico tipo
ascen dente p u ed e m anejar u na clase m ás e x te n sa d e gram áticas y esquem as d e traducción, por
lo q u e las herram ientas d e softw are para generar analizadores sin tá ctico s d irecta m en te a partir
d e las gram áticas u tilizan co n frecu en cia é s te m étodo.
2 .4 .1
A n á lis is s in tá c tic o tip o a r r ib a - a b a j o
P ara introducir e l an álisis sin tá ctico tip o arriba-abajo, considerem os u n a gram ática q u e se
a d a p ta bien a e s ta clase d e m étodos. M ás ad elan te e n e s ta sección, considerarem os la cons­
trucción d e los analizadores sin tá ctico s d escen dentes e n general. L a gra m á tica en la figura 2.16
gen era un su b con jim to d e las instrucciones d e C o Java. U tilizam os los term in ales en n egrita i f
y f o r para las palabras clave “i f ” y “f o r ” , resp ectivam en te, p a ra enfatizar q ue e sta s secuen­
cia s d e caracteres se tratan co m o unidades, es decir, com o sím b olos term in ales individuales.
A dem ás, e l term inal e x p r represen ta expresiones; u na gra m á tica m ás co m p leta u tilizaría un
n o term inal ex p r y ten d ría producciones p a ra e l no term inal expr. D e m anera sim ilar, o t r a s es
u n term inal q u e represen ta a otras con stru cciones d e instrucciones.
L a con stru cción d escen d en te d e un árbol d e an álisis sin tá ctico com o e l d e la figura 2.17 se
realiza em p ezan d o co n la raíz, etiq u eta d a c o n e l no term inal in icial in s tr , y realizando en form a
rep etid a los sigu ien tes d os pasos:
1. E n e l n od o N , etiq u eta d o co n el no term inal A , se seleccio n a u n a d e las producciones
para A y se con stru yen hijos en N para los sím b olos en e l cu erpo d e la producción.
2. Se en cu en tra e l sigu ien te n od o en el q ue se v a a construir un su bárbol, p or lo gen eral, el
no term inal no exp an did o d e m ás a la izquierda d e l árbol.
62
Capítulo 2.
in s tr
-►
|
Un traductor sim ple orientado a la sintaxis
exp r ;
i f ( e x p r ) in s tr
f o r ( expropc ; expropc ; e x p r o p c ) in s tr
o tra s
expropc
-*
e
expr
F igu ra 2.16: U n a gram ática para algu nas in stru cciones en C y Java
e
exp r
exp r
o tra s
F igu ra 2.17: U n árbol d e análisis sin táctico, d e acuerdo co n la gra m á tica en la figura 2.16
P ara algu nas gram áticas, los pasos anteriores pueden im plem entarse d urante un so lo esca ­
neo d e izquierda a d erech a d e la ca d en a d e entrada. E l term in al actu al esca n eo en la en trad a
se co n o ce con frecuencia com o el sím b olo d e prea n á lisis. E n un principio, el sím b olo preanálisis
es e l prim er (es d ecir, el d e m ás a la izquierda) term inal d e la ca d en a d e en trad a. L a figura
2.18 ilu stra la con stru cción d e l árbol d e an álisis sin tá ctico en la figura 2 .17 para la siguiente
ca d en a d e entrada:
fo r ( ; e x p r ; e x p r ) o tr a s
En u n principio, el term inal f o r es e l sím b olo d e preanálisis, y la p arte co n o cid a d e l árbol d e
análisis sin tá ctico co n siste en la raíz, etiq u eta d a co n e l n o term inal inicial in s tr en la figura
2.1 8 (a). E l o b je tiv o es con stru ir el resto d el árbol d e análisis sin tá ctico d e ta l form a q ue la
ca d en a gen erad a por e l árbol d e an álisis sin tá ctico coin cid a con la ca d en a d e entrada.
P ara q ue ocu rra u n a coincidencia, e l n o term inal in s tr en la figura 2 .1 8 (a) d eb e derivar una
ca d en a q ue em p iece co n el sím b olo de preanálisis f o r . E n la g ra m á tica d e la figura 2.16, sólo
hay u na producción para in s tr q ue p u ed e derivar dicha cadena, por lo q u e la seleccion am os y
con stru im os los hijos d e la raíz, etiq u etad os co n los sím b olos en el cu erpo d e la producción.
E s ta exp an sión del árbol d e an álisis sin táctico se m uestra en la figura 2 .1 8 (b ).
C ada u n a d e las tres in stantáneas en la figura 2.18 tien e flechas q ue m arcan el sím b olo d e
preanálisis en la en trad a y el n od o en el árbol d e análisis sin tá ctico q ue se e s tá considerando.
U n a v ez q ue se con stru yen los hijos en un nodo, a con tinu ación con sid eram os e l hijo d e m ás a la
izquierda. E n la figura 2 .1 8 (b ), los hijos acab an d e con stru irse e n la raíz, y s e e s tá considerando
e l hijo d e m ás a la izquierda, etiq u eta d o con fo r .
C uando e l nodo q ue s e e s tá con sid erand o en e l árbol d e an álisis sin tá ctico es para u n ter­
m inal, y é s te coin cid e co n el sím b olo d e p reanálisis, en ton ces avan zam os ta n to en el árbol d e
análisis sin tá ctico com o en la entrada. E l sigu ien te term in al en la en trad a se con vierte e n el
2.4 A nálisis sintáctico
, ,
(a)
63
ÁRBOL DE
in str
ANÁLISIS
|
SINTÁCTICO
------------------------------------------------------------------------------------------------ENTRADA
fo r
(
;
ÁRBOL DE
exp r
;
exp r
)
o tr a s
;
exp r
)
o tr a s
instr
(b)
ENTRADA
ÁRBOL DE
for
i
(
;
exp r
instr
F igu ra 2.18: A nálisis sin táctico tip o d escen d en te m ientras s e ex p lo ra la e n tra d a d e izquierda
a derecha
nuevo sím b olo d e preanálisis, y s e con sid era e l sig u ien te hijo e n e l árbol d e an álisis sin táctico.
E n la figura 2 .1 8 (c ), la flech a e n e l árbol d e análisis sin tá ctico h a avanzado al sigu ien te hijo
d e la raíz y la flech a en la en trad a h a avanzado al sig u ien te term inal, q ue es ( . U n avance m ás
llevará la flech a en el árbol d e análisis sin tá ctico al h ijo etiq u eta d o co n el n o term in al expropc,
y llevará la flecha en la en trad a al term inal ;.
E n e l nodo n o term inal etiq u eta d o com o expropc, repetim os e l p roceso d e seleccionar una
producción para u n no term inal. Las producciones co n e com o el cu erpo ( “producciones e”)
requieren un tratam ien to especial. Por e l m om ento, las u tilizarem os co m o u n a o p ció n predeter­
m in ad a cu an do no puedan usarse otras producciones; regresarem os a ella s en la sección 2.4.3.
C on el n o term inal expropc y e l sím b olo d e preanálisis;, s e u tiliz a la producción 6, y a q u e ; no
coin cid e con la o tr a ú n ica producción para expropc, q u e tien e la term inal e x p r com o cuerpo.
E n general, la selección de u n a producción para u n no term inal p u ed e requerir d e l proceso
d e p ru eb a y error; es d ecir, tal vez ten gam os q ue probar u na producción y retroceder para
probar otra, si la prim era no es adecuada. U n a producción es in adecu ada si, desp ués d e usarla,
64
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
no p od em os com p letar el árbol para q ue coin cid a c o n la ca d en a d e entrada. S in em bargo, no es
necesario retroceder en un caso esp ecia l im p ortan te con ocid o com o análisis sin tá ctico predictivo, el cu a l verem os a con tinu ación.
2 .4 .2
A n á lis is s in tá c tic o p r e d ic tiv o
El a n álisis sin tá c tic o d e descen so re cu rsiv o es un m éto d o d e análisis sin tá ctico d escen dente, en
e l cu a l se u tiliza u n con ju n to d e procedim ientos recursivos para procesar la entrada. U n pro­
ced im ien to se asocia co n ca d a no term in al d e u na gram ática. A q u í considerarem os u na form a
sim p le d e análisis sin tá ctico d e d escen so recursivo, con ocid o com o an álisis sin tá c tic o p re d ic tiv o ,
en e l cu a l e l sím b olo d e preanálisis d eterm in a sin am bigüedad e l flujo d e con trol a través d el
cu erpo d e l p rocedim ien to para ca d a n o term in al. L a secu en cia d e llam adas a procedim ientos
d urante el an álisis d e u na en trad a d efin e e n form a im p lícita u n árbol d e análisis sin tá ctico para
la en trad a, y p uede usarse para crear un árbol d e an álisis sin tá ctico ex p líc ito , si se d esea.
El analizador sin tá ctico predictivo en la figura 2.19 co n siste en procedim ientos p a ra las
no term in ales i n s tr y expropc d e la gram ática en la figura 2.16, ju n to co n un procedim iento
adicional llam ad o coin cid ir, el cu a l s e u tiliza para sim plificar e l có d ig o p a ra in s tr y expropc.
El p rocedim ien to c o in c id ir(t) com para su argum ento t co n el sím b olo d e preanálisis y avan za
al sig u ien te term inal d e en trad a s i coinciden. P or en d e, c o in c id ir ca m b ia el valor d e la variable
p rea n á lisis, u na variable glo b a l q ue con tien e e l term inal d e en trad a q ue s e acab a d e explorar.
El an álisis sin táctico em p ieza con una llam ad a d el procedim iento para e l n o term in al inicial,
in str. C on la m ism a en trad a q ue en la figura 2.18 preanálisis es e n un principio el prim er fo r
term inal. E l p rocedim ien to in s tr eje cu ta el cód ig o corresp ond ien te a la sig u ien te producción:
in s tr
f o r ( expropc ; expropc ; expropc ) in s tr
En el cód ig o para e l cu erpo d e la producción (es decir, el ca so f o r d el p rocedim ien to in str),
ca d a term inal s e relaciona con e l sím b olo d e preanáilisis, y ca d a no term inal con d u ce a u na
llam ad a d e su procedim iento, en la sigu ien te secu en cia d e llam adas:
co in c id ir (fo r ); c o in c id ir ('(');
expropc(); c o in c id ir ^ ;r)\ expro p c(); c o in c id ir ('j 7); exp ro p c();
c o in c id ir(O'); in s tr ()\
El an álisis sin tá ctico predictivo se b asa e n inform ación acerca d e los prim eros sím b olos q ue
pueden generarse m ediante e l cu erpo d e u na producción. D icho en form a m ás precisa, vam os
a su p on er q u e a es u na cad en a d e sím b olos d e la gra m á tica (term in ales y no term in ales). D e­
finim os PRJMERO(a) com o e l con ju n to d e term in ales q ue aparecen com o los prim eros sím bolos
d e u na o m ás cad en as d e term inales generadas a partir d e a . S i a e s e o p uede generar a e,
en ton ces a tam b ién e s tá en PRIMERO ( a ).
Los d etalles d e cóm o se ca lcu la PRIMERO ( a ) se en cu en tran en la sección 4 .4 .2 . A q u í vam os
a usar el razonam iento “ad h oc” para d ed ucir los sím b olos en PRIMERO (a ); por lo general, a
em p ieza co n un term inal, q u e p or en d e e s e l único sím b olo en PRíM ERO(a), o em p ieza c o n un
no term in al cu yos cu erp os d e producciones em p iezan co n term in ales, en cu y o ca so esto s term i­
nales so n los ú nicos m iem bros d e PRIMERO(a).
Por ejem p lo, co n resp ecto a la gram ática d e la figura 2.16, lo s sig u ien tes son cá lcu lo s co ­
rrectos d e PRIMERO.
2.4 A nálisis sin táctico
65
void in s tr Q {
sw itch ( p re a n o lisis ) {
ca se e x p r :
co in c id ir ( e x p r ) ; co in c id ir
break;
ca se if:
co in c id ir ( if ) ; co in c id ir ('('); co in c id ir ( e x p r ) ; co in c id ir (0 '); m s ír ();
break;
ca se f o r ;
c o in c id ir ( f o r ) ; c o in c id ir('(r);
e x p ro p cQ ; c o in c id ir(';'); erpropc(); c o in c id ir(';'); erpropcQ;
c o in c id ir(')'); tns¿r(); break;
ca se o t r a s ;
co in c id ir ( o t r a s ) ; break;
default:
r e p o r ta r (" e r r o r d e s i n t a x i s " ) ;
}
}
v oid expropcQ {
if ( p re a n á lisis = = e x p r ) co in c id ir ( e x p r ) ;
}
v oid c o in c id ir( term inal ¿) {
if ( p rea n á lisis = = ¿ ) p re a n o lisis = siguienteT erm inal;
else r e p o r ta r (" e r r o r d e s i n t a x i s " ) ;
}
F igu ra 2.19: S eu docódigo para un analizador sin tá ctico predictivo
P R IM E R O (in str)
P R IM E R O (e x p r ; )
=
=
{ e x p r , if , f o r , o t r a s }
{ e x p r}
Los PRIMEROS con jun tos d eb en con sid erarse si hay d o s prod uccion es A
a y A
¡3.
S i ignoram os las producciones e p o r el m om ento, e l an álisis sin tá ctico p red ictivo requiere que
PRIMERO(a) y PRIMERO((3) esté n separados. A sí, p uede usarse e l sím b olo d e preanálisis para
d ecidir qué producción utilizar; si e l sím b olo d e preanálisis e s tá en PRIMERO(a), se u tiliza a .
E n caso con trario, s i e l sím b olo de preanálisis e s tá en PRIMERO( 0 ),se u tiliza ¡3.
2 .4 .3
C u á n d o u s a r la s p r o d u c c io n e s
e
N u estro analizador sin táctico predictivo u tiliza u na p rod ucción e com o valor predeterm inado si
n o s e p u ed e u tilizar otra producción. C on la en tra d a d e la figura 2.18, d esp u és d e relacionar los
term in ales f o r y ( , el sím b olo de preanálisis es ; . E n e s te p u n to s e hace u na llam ad a a expropc,
y s e eje cu ta e l cód igo
66
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
if ( prea n á h sis = = e x p r ) co in cid ir ( e x p r ) ;
en s u cuerpo. E l no term inal expropc tien e d os prod uccion es, con los cu erpos e x p r y e. El
sím b olo d e preanálisis “;” no coin cid e con e l term inal e x p r , por lo q ue no se p uede aplicar la
producción co n e l cu erpo e x p r . D e hecho, el p rocedim ien to regresa sin cam biar el sím b olo d e
preanálisis o hacer cualquier o tr a cosa. H acer n ad a corresp ond e a aplicar u na producción e.
En form a m ás general, considere u na variante d e las producciones en la figura 2.16, en don ­
d e expropc gen era un no term inal d e u na expresión en v ez d el term in al e x p r :
expropc
—y
ex p r
e
Por en d e, expropc gen era u na expresión usando e l no term inal ex p r o g en era e. M ientras se
a n aliza expropc, si el sím b olo de preanáhsis no se en cu en tra en PRJMERO(expr), en ton ces
se u tiliza la producción e.
P ara ob ten er m ás inform ación sobre cu án do usar las producciones e, vea la exp licación d e
las gram áticas L L (1) en la sección 4.4 .3 .
2 .4 .4
D is e ñ o d e u n a n a liz a d o r s in tá c tic o p r e d ic tiv o
P od em os generalizar la téc n ic a in trod u cid a d e m anera inform al en la secció n 2 .4 .2 para apli­
ca rla a cualquier g ra m á tica q ue ten g a un con ju n to PRIMERO separado para los cu erpos d e las
producciones q ue p ertenezcan a cualquier no term inal. T am bién verem os q u e a l ten er un es­
q u em a d e traducción (es decir, u n a gram ática con acciones em b eb id as) es p osible ejecu ta r esas
accion es com o parte d e los p rocedim ien tos d iseñ ados p a ra e l analizador sin táctico.
R ecuerde q ue un an alizador sin tá c tic o p re d ic tiv o e s un program a q u e co n siste e n un proce­
d im ien to para ca d a n o term inal. E l procedim iento para el no term inal A realiza d os cosas:
1. D ecide q ué producción A d eb e utilizar, ex a m in a n d o e l sím b olo d e preanáhsis. L a pro­
ducción co n el cu erpo a (en donde a no es e, la ca d en a vacía) se u tiliz a si e l sím b olo
d e preanálisis e s tá en PRIMERO(a). Si hay un co n flicto en tre d o s cu erpos n o vacíos
p or cualquier sím b olo d e p reanálisis, en ton ces no p od em os usar e s te m éto d o d e análisis
sin tá ctico en e s ta gram ática. A d em ás, la producción e p a ra A , si ex iste , se u tiliza si el
sím b olo d e preanáhsis no se en cu en tra en el con ju n to PRIMERO para cualquier o tro cuer­
p o d e producción para A .
2. D esp ués, e l procedim iento im ita e l cu erpo d e la producción elegid a. E s decir, lo s sím ­
bolos d e l cu erpo se “ejecu ta n ” en turno, em p ezan d o d esd e la izquierda. U n n o term inal
se “ejecu ta” m ediante u na llam ada al p rocedim ien to para e se n o term inal, y un term i­
nal q u e coin cid e con e l sím b olo d e preanálisis s e “eje cu ta ” leyendo el sig u ien te sím b olo
d e entrada. Si en cualquier p u n to e l term in al e n el cu erpo n o coin cid e co n e l sím b olo d e
p reanálisis, se rep orta un error d e sin taxis.
La figura 2.19 es el resultado d e aplicar esta s reglas a la gra m á tica d e figura 2.16.
2.4 A nálisis sin táctico
67
A s í com o un esq u em a d e traducción se form a ex ten d ien d o u na g ra m á tica , un traductor
orien tad o a la sin ta x is p uede form arse m ed ian te la ex ten sió n d e u n analizador sin tá ctico pred ictiv o . E n la sección 5.4 se proporciona un algoritm o p a ra este fin. L a sig u ien te construcción
lim ita d a es su ficien te por ahora:
1. Se con stru ye un analizador sin tá ctico predictivo, ignorando las accion es en las produc­
ciones.
2. Se cop ian las accion es d el esq u em a d e traducción al analizador sin tá ctico . Si u na acción
aparece desp ués d e l sím b olo d e la g ra m á tica X en la p rod ucción p, en ton ces se cop ia
desp ués d e la im plem en tación d e X e n e l có d ig o p a ra p . E n ca so con trario, si aparece al
principio d e la producción, en to n ces se co p ia ju sto an tes d e l có d ig o para e l cu erpo d e la
producción.
E n la sección 2 .5 con stru irem os un traductor d e e s te tipo.
2 .4 .5
R e c u rs iv id a d a la iz q u ie rd a
E s p osible que u n analizador sin tá ctico d e d escen so recursivo entre en un ciclo in finito. Se pro­
d u ce un problem a co n las prod uccion es “recursivas p or la izquierda” com o
ex p r
->
e x p r + te rm
e n d ond e el sím b olo m ás a la izquierda del cu erpo es e l m ism o q ue el n o term in al en e l en cab e­
zado d e la producción. S u p on ga que el procedim iento para e x p r d ecid e aplicar e s ta producción.
E l cu erpo em p ieza con expr, d e m anera q ue e l p rocedim ien to para e x p r se llam a en form a re­
cursiva. C om o e l sím b olo d e preanálisis cam b ia só lo cu a n d o coin cid e u n term inal en el cuerpo,
n o s e realizan cam b ios en la en trad a en tre la s llam adas recursivas d e expr. C om o resu ltad o, la
seg u n d a llam ad a a expr hace exa cta m en te lo q ue h izo la prim era llam ada, lo cu a l sig n ifica que
s e realiza u n a tercera llam ad a a e x p r y así su cesivam en te, por siem pre.
S e p u ed e elim inar u na producción re cursiva por la izquierda, reescribiendo la producción
prob lem ática. C onsidere un term inal A co n d o s producciones:
A
-►
Aa | 0
e n d on d e a y 0 so n secu en cias d e term in ales y n o term in ales q ue no em p iezan co n A . Por
ejem p lo, en
ex p r
-*•
ex p r + te r m \ term
d e l n o term inal A — ex p r, la cad en a a = + te r m , y la c a d en a 0 = term .
S e d ice q ue el no term inal A y su p rod ucción so n recu rsivas p o r la izq u ie rd a , y a q u e la
producción A
A ol tien e a la m ism a A com o e l sím b olo d e m ás a la izquierda e n e l lado d e ­
recho .4 L a aplicación rep etid a d e e s ta producción g en era u n a secu en cia d e a ’s a la d erech a de
A , co m o en la figura 2 .2 0 (a). C uando p or fin A s e su stitu y e p o r 0 , ten em os u n a 0 se g u id a por
u n a secu en cia de cero o m ás a ’s.
4En una g ram ática recursiva a la izquierda general, en vez d e la producción A-+ A a , el no term inal A puede
derivar en A a a través d e producciones interm edias.
68
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
A
A
(a)
A
-4
&
R
a
...
a
a
F igu ra 2.20: Form as recursivas por la izquierda y p or la d erech a para generar u na cad en a
P od em os lograr el m ism o efecto q ue en la figura 2 .2 0 (b ) si reescribim os las producciones
para A d e la sigu ien te m anera, usando un nuevo no term inal R:
A
R
—>
¡3R
(xR | e
El n o term inal R y su producción R -+ a R so n recu rsivos p o r la derecha, y a q ue e s ta pro­
d ucción para R tien e a l m ism o R com o e l ú ltim o sím b olo d e l lado derecho. L as producciones
recursivas por la d erech a con d ucen a árboles q ue crecen h acia abajo y a la derecha, co m o en la
figura 2.20(b ). L os árboles q ue crecen h acia ab ajo y a la d erech a d ificu lta n m ás la traducción d e
exp resion es q ue con tien en operadores asociativos p or la izquierda, com o e l sig n o m enos resta.
N o o b sta n te, en la sección 2.5.2 verem os q ue de to d a s form as p u ed e ob ten erse la traducción
apropiada d e exp resion es a la notación p ostfijo m ed ian te u n d iseñ o cu id adoso d el esq u em a d e
traducción.
En la sección 4.3.3 considerarem os form as m ás generales d e recursividad p or la izquierda, y
m ostrarem os cóm o p uede elim inarse to d a la recursividad p or la izquierda d e u n a gram ática.
2 .4 .6
E je rc ic io s p a r a la s e c c ió n 2 .4
E j e r c ic io 2 .4 .1 : C onstruya analizadores sin tá ctico s d e d escen so recursivo, em p ezan d o con las
sig u ien tes gram áticas:
a) 5
-¥
b) 5
c) 5
2.5
+55
| -5 5
5 ( 5 ) 5
->
| a
| 6
05 1 | 0 1
U n t r a d u c to r p a r a las e x p re s io n e s sim p le s
A hora vam os a construir un traductor orientado a la sin ta x is usando las técn ica s d e la s últim as
tres seccio n es, en form a d e un program a funcional en Java, q ue traduce exp resion es aritm éticas
a la form a p ostfija. P ara m antener e l program a inicial lo b astan te p eq u eñ o com o p a ra poder
2.5
Un traductor para la s expresiones sim ples
69
ad m inistrarlo, em p ezarem os co n ex p resion es q ue co n siste n en d íg ito s sep a ra d o s por lo s sign os
b inarios d e sim ia y resta. E n la sección 2 .6 ex ten d erem o s el p rogram a para trad ucir expre­
sio n es q u e incluyan núm eros y o tro s operadores. E s co n v en ien te estu d iar la trad ucción de
ex p resion es con d eta lle , y a q u e aparecen com o un co n stru cto r en m uchos lengu ajes.
A m enudo, u n esq u em a d e trad ucción orien ta d o a la sin ta x is sirv e com o la especificación
p ara u n traductor. E l esq u em a en la figu ra 2.21 (rep etid o d e la figu ra 2.15) d efin e la trad uc­
ción q ue se v a a realizar aquí.
ex p r - ¥
|
|
ex p r + te r m
ex p r - te r m
te r m
{ p rin t('+ ') }
{ p r in t('-') }
te rm
->
|
0
1
{ print('O') }
{ p r in t('l') }
|
9
{ p rin t('9') }
F igu ra 2.21: A ccion es para traducir a la n otación postfija
A m enudo, la gram ática su byacen te d e u n esq u em a dado tiene q ue m odificarse antes d e p o ­
der analizarlo co n un analizador sin tá ctico predictivo. E n especial, la gra m á tica su b yacen te del
esq u em a d e la figu ra 2.21 e s recursiva por la izquierda, y com o v im o s e n la ú ltim a sección, un
analizador sin tá ctico predictivo n o p uede m anejar u na g ra m á tica recursiva por la izquierda.
Parece q ue ten em os un conflicto: por u n a parte, n ecesitam os u na gra m á tica q ue facilite la
traducción, p or o tr a p arte n ecesitam os u n a gra m á tica con sid erablem en te d istin ta q ue facilite
e l análisis sin táctico. L a solu ción es em p ezar con la g ra m á tica para facilitar la trad ucción y
transform arla con cu id ad o p ara facilitar el an álisis sin tá ctico . A l elim inar la recursividad por
la izquierda en la figura 2 . 2 1 , p od em os ob ten er u n a g ra m á tica ad ecu ad a para u sarla en un
trad uctor predictivo d e d escen so recursivo.
2 .5 .1
S in ta x is a b s tr a c ta y c o n c r e ta
U n p u n to inicial ú til para diseñar un trad u ctor es u na estru ctu ra d e d a to s llam ad a árbol sin ­
tá ctico abstracto. E n u n árbol sin tá ctico ab stracto para u n a exp resión , ca d a n o d o interior re­
p resen ta a un operador; los hijos d e l nodo representan a los op eran d os d e l operador. D e m anera
m ás general, cualquier con stru cción d e program ación p uede m anejarse al form ar u n operador
para la con stru cción y tratar com o op eran d os a los com p o n en tes con sign ificad o sem á n tico de
e s a con stru cción.
E n el árbol sin tá ctico ab stracto para 9 -5 + 2 en la figura 2 .2 2 , la raíz represen ta al operador +.
Los su bárboles d e la raíz representan a las subexpresiones 9 - 5 y 2. E l agrupam iento d e 9 - 5
com o un operando refleja la evaluación de izquierda a derecha d e los operadores en el m ism o ni­
vel d e precedencia. C om o - y + tienen la m ism a precedencia, 9 -5 + 2 es eq u ivalen te a ( 9 - 5 ) + 2 .
Los árboles sin tá ctico s abstractos, con ocidos sim p lem en te com o árboles sin tá c tic o s, s e pa­
recen e n cierto grado a los árboles d e an álisis sin tá ctico . N o o b stan te, e n e l árbol sin tá ctico
los n od os interiores representan con stru ccion es d e program ación m ientras q u e, en e l árbol de
70
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
+
9
5
F igu ra 2.22: Á rb ol sin tá ctico para 9 -5 + 2
análisis sin táctico, los n od os interiores representan no term in ales. M uchos n o term inales d e una
gra m ática representan con stru cciones d e program ación, p ero o tro s so n “ayu dan tes” d e un tip o
d istin to, com o los q ue representan térm in os, factores o d em á s variaciones d e exp resion es. En
e l árbol sin táctico, e sto s ayu dan tes, por lo general, no so n necesarios y por ende se descartan.
P ara enfatizar el con traste, a un árbol d e an álisis sin tá ctico se le co n o ce algunas v eces com o
árbol sin tá c tic o co n creto , y a la gram ática su byacen te se le llam a sin ta x is co m p leta p a ra el
lenguaje.
En e l árbol sin tá ctico d e la figura 2.22, ca d a nodo interior s e a so cia co n un op erad or, sin
n od os “ayu d an tes” para produ ccion es in d iv id u a le s (u n a p rod ucción cu y o cu erp o co n siste en
un no term in al in dividu al, y n ad a m ás) com o e x p r -► te rm o para p roducciones e com o resto
€.
Es con ven iente q ue u n esq u em a d e traducción s e base e n u n a g ra m á tica cu yos árboles de
análisis sin tá ctico esté n lo m ás cerca d e los árboles sin tá ctico s q ue s e a p osible. E l agrupam iento
d e su bexpresiones m ed ian te la gram ática en la figura 2.21 es sim ilar a su agrupam iento en los
árboles sin tá ctico s. Por ejem plo, las su bexpresiones para e l operador d e srnna se proporcionan
m ediante ex p r y te r m e n e l cu erpo d e la producción e x p r + term .
2 .5 .2
A d a p ta c ió n d e l e s q u e m a d e t r a d u c c ió n
La técn ica d e elim in ación d e recursividad p or la izquierda tra za d a en la figura 2 .20 tam bién
se p uede aplicar a las p roducciones q ue con ten gan acciones sem án ticas. E n prim er lugar, la
técn ica se ex tien d e a varias producciones para A . E n n uestro ejem plo, A es e x p r y hay d o s pro­
d uccion es recursivas a la izquierda para ex p r, y u n a q ue no e s recursiva. L a técn ica transform a
las producciones A
A a \ A ¡5 | 7 e n lo siguiente:
.4
R
—>
—>
yR
O-R | 0 R | e
En segu n d o lugar, d eb em os transform ar producciones q ue hayan in crustad o acciones, no
sólo term in ales y no term inales. Las accion es sem án ticas in crustad as en la s p roducciones sim ­
plem ente se tran sp ortan e n la transform ación, com o s i fueran term inales.
E j e m p lo 2 .1 3 : C onsidere el esq u em a d e traducción d e la figura 2 .2 1 . S u p on ga que:
.4
=
expr
q
0
=
=
+ term { pi'int('+/ ) }
- term { p r in t('- ') }
7
=
te rm
2.5
Un traductor para la s expresiones sim ples
71
E n ton ces, la transform ación con elim in ación d e recursividad p or la izquierda produce el esque­
m a d e trad ucción d e la figura 2.23. L as p roducciones ex p r en la figura 2.21 se han transform ado
e n las producciones para expr, y u n nuevo no term inal re sto d esem p eñ a e l p ap el d e R . Las
producciones para te r m s e repiten d e la figura 2.21. L a figura 2.24 m uestra cóm o se traduce
9 -5 + 2 , m ediante la g ra m á tica d e la figura 2.23.
□
exj)r
—>
te rm r e s to
re sto
—>
+ te r m { print('+') } resto
- te r m { p r in t('-') } resto
I
te rm
e
-¥
0 { print('0')
}
|
1 { print('l')
}
|
9
{ print('9 ')
}
F igu ra 2.23: E squ em a d e trad ucción , d esp u és elim inar la recursividad por la izquierda
expr
term
9
{prm t('9')}
re sto
- / / ^ tcn n
/
5
{prm t('—') }
\
{print^'S')}
rest
/
!
+
term
/
2
{pririt(/+/)}
rest
\
{print(' 2')}
F igu ra 2.24: T raducción d e 9 -5 + 2 a 9 5 -2 +
L a elim in ación d e la recursividad p or la izquierda d eb e realizarse co n cu id ado, para asegu­
rar q ue se preserve el ord en d e las acciones sem án ticas. Por ejem p lo , e l esq u em a transform ado
e n la figura 2.23 tien e las accion es { print('+') } y { p rin t('-') } en m edio d el cu erpo d e una
producción, en ca d a caso entre los no term in ales te r m y resto . Si las accion es se desplazaran
a l final, d esp u és d e r e sto , en to n ces las trad uccion es serían incorrectas. D ejam os co m o ejercicio
a l lector dem ostrar q ue 9 -5 + 2 se traduciría en ton ces en form a in correcta a 9 5 2 + -, la notación
p o stfija para 9 - ( 5 + 2 ) , en vez d el térm in o 9 5 -2 + d eseado, la n otación p o stfija para ( 9 -5 ) + 2 .
72
2 .5 .3
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
P r o c e d im ie n to s p a r a lo s n o t e r m in a le s
Las funciones expr, r e sto y ¿erra en la figura 2.25 im plem entan e l esq u em a d e traducción orien­
ta d a a la sin ta x is d e la figura 2.23. E stas funciones im itan lo s cu erpos d e la s producciones d e
los n o term inales correspondientes. L a función ex p r im p lem en ta la p rod ucción ex p r -► te rm
re sto , m ediante la llam ad a a term Q seguid a d e restoQ .
v o id
exp r () {
term Q ] re sto Q ;
}
v o i d re sto {) {
i f ( prea n á h sis —— V ) {
coincidili?+0; term Q ] print^+O; re sto Q ;
}
e l s e i f ( p re a n á lisis ——
) {
coin cidir('-'); te rm Q ; p r in t('-/) ; re sto Q ;
}
e ls e { } /*
n o hace n ad a con la e n tra d a * / ;
}
v o id
te rm () {
i f ( prea n á lisis es u n d íg ito ) {
t = pre a n á lisis; coin cidir(prean álisis)\ print(í);
}
e l s e reportar^ “error d e sin ta x is”);
}
F igu ra 2.25: S eu docódigo para los no term in ales expr, re sto y te rm
La función re sto im p lem en ta las tres producciones para e l no term inal resto en la figura
2.23. A p lica la prim era p rod ucción si e l sím b olo d e preanálisis es un sign o p o sitiv o , la segu n d a
producción si e l sím b olo d e preanálisis es n egativo, y la producción re sto -► e e n to d o s los
d em ás casos. Las prim eras d os producciones para re sto s e im plem en tan m ed ian te la s prim eras
d os bifurcaciones d e la in stru cción i f e n el procedim iento resto . S i e l sím b olo d e p rean álisis es +,
e l sig n o p o sitiv o se relaciona m ed ian te la llam ad a co in cid ir^ +')• D esp u és d e la llam ad a te r m Q ,
la acción sem á n tica se im p lem en ta escribiendo un carácter d e sig n o p ositivo. L a seg u n d a pro­
d ucción es sim ilar, co n - en vez d e +. C om o la tercera producción para re sto tien e a e d e l lado
derecho, la ú ltim a clá u su la else en la función re sto n o hace nada.
Las d iez producciones para te rm generan los d iez d íg ito s. C om o ca d a u n a d e es ta s p rod uc­
cion es gen era un d íg ito y lo im prim e, el m ism o cód igo en la figura 2 .25 las im p lem en ta todas.
Si la prueba tien e é x ito , la variable t gu ard a el d ígito representado p or p re a n á h sis, para poder
2.5
Un traductor para la s expresiones sim ples
73
escribirlo d esp u és d e la llam ad a a coincidir. O bserve q u e co in c id ir c a m b ia e l sím b olo d e prea­
nálisis, p or lo q ue e l d íg ito n ecesita guardarse para im prim irlo d esp u és .5
2 .5 .4
S im p lific a c ió n d e l t r a d u c t o r
A n tes d e m ostrar un program a co m p leto , harem os d os transform aciones d e sim p lificación al
cód ig o d e la figura 2.25. Las sim p lificacion es incorporarán e l p rocedim ien to re sto al procedi­
m ien to expr. C uan do s e traducen exp resion es con varios niveles d e p reced en cia, d ich as sim pli­
ficaciones reducen e l núm ero d e procedim ientos necesarios.
E n prim er lugar, ciertas llam adas recursivas pueden su stitu irse p or iteraciones. C uando la
ú ltim a instrucción q ue se e je c u ta en el cu erpo d e un p rocedim ien to es u na llam ad a recursiva al
m ism o procedim ien to, s e d ice q u e la llam ad a es recu rsiva p o r la cola. Por ejem plo, en la función
r e sto , las llam adas d e re sto {) con los sím b olos d e preanálisis + y - so n recursivas p or la cola,
y a q ue en ca d a u n a d e e s ta s bifurcaciones, la llam ad a recursiva a re sto es la ú ltim a instrucción
ejecu ta d a p or e s a llam ad a d e resto.
P ara u n procedim iento sin parám etros, u na llam ad a recursiva por la c o la p uede su stitu irse
sim p lem en te p or un sa lto al inicio d e l p rocedim iento. E l có d ig o para re sto p u ed e reescribirse
com o el seu d ocód igo d e la figu ra 2.26. Siem pre y cu a n d o e l sím b olo d e preanálisis s e a un signo
p o sitiv o o n egativo, el procedim iento re sto relaciona el sig n o , llam a a terra para relacionar un
d íg ito y con tin ú a e l proceso. E n caso contrario, sa le d e l ciclo w hile y regresa d e resto.
v o i d re sto {) {
w h ile ( t r u e ) {
i f ( prea n á lisis = = V ) {
coincidir^ + r) ; ¿erm(); p rin t(V ); c o n t i n u e ;
}
e l s e i f preanálisis = =
) {
c o in c id ili'-^ ; ¿erm(); p rin t('-'); c o n t i n u e ;
}
b reak ;
}
}
F igu ra 2.26: E lim inación de la recursividad por la c o la en e l procedim iento re sto de
la figura 2.25
E n segu n d o lugar, e l program a J ava co m p leto in clu irá un cam b io m ás. U n a v e z q ue las
llam adas recursivas por la co la a r e sto en la figura 2.25 se su stitu y a n por iteracion es, la úni­
c a llam ad a restante a re sto es d esd e e l interior d e l p rocedim ien to expr. Por lo ta n to , lo s dos
p rocedim ien tos p ueden integrarse e n uno, su stitu y en d o la llam ad a resto Q p o r e l cu erpo d el pro­
ced im ien to resto.
5Como optim ización m enor, podríam os imprimir an te s d e llam ar a coincidir p a ra e v ita r la necesidad d e guardar
el dígito. En general, es riesgoso cam biar el orden d e las acciones y los símbolos d e la gram ática, y a que podríam os
m odificar lo que hace la traducción.
74
2 .5 .5
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
E l p r o g r a m a c o m p le to
En la figura 2.27 aparece e l program a Java com p leto para nuestro traductor. L a prim era línea
d e la figura 2.27, em p ezan d o con im p o r t, proporciona acceso a l p aqu ete j a v a , i o para la entra­
d a y sa lid a d e l sistem a. E l resto d e l cód ig o co n siste en las d os clases A n a liz a d o r y P o s t f i j o .
La clase A n a liz a d o r con tien e la variable p r e a n á l i s i s y la s funciones A n a liz a d o r , e x p r , term
y c o in c id ir .
La ejecu ción em p ieza co n la función m ain, q u e se d efin e e n la cla se P o s t f i j o . L a función
m ain crea u na in stan cia a n a l i z a r d e la clase A n a liz a d o r y llam a a s u fun ción e x p r para
analizar u n a expresión.
La función A n a liz a d o r , q u e tien e el m ism o nom bre q ue s u clase, es un con stru ctor, se
llam a d e m anera a u to m á tica cu an do se crea un o b je to d e la clase. D e la definición al princi­
pio d e la clase A n a liz a d o r , p od em os ver q ue el con stru ctor A n a liz a d o r in icializa la variable
p r e a n á l i s i s leyendo un token. L os tokens, q ue co n sisten e n caracteres in dividu ales, los su ­
m in istra la ru tina d e e n ta d a d e l siste m a r e a d , la cu a l lee el sig u ien te carácter d e l archivo d e
entrada. O bserve q ue p r e a n á l i s i s se d eclara com o en tero, en v e z d e carácter, para anticipar
e l hecho d e q u e en seccion es p osteriores introducirem os tokens adicionales ad em ás d e los ca ­
racteres individuales.
La fun ción e x p r e s el resultado d e la sim plificación q ue v im o s e n la sección 2.5.4; im plem enta a los no term inales e x p r y r e st d e la figura 2.23. E l cód igo para e x p r en la figura 2.27 llam a
a term y d esp u és tien e un ciclo w h ile q ue ev alú a in finitam en te si p r e a n á l i s i s coincide con
’
o co n } - } . E l con trol sa le d e e s te ciclo w h ile al llegar a la in stru cción return. D en tro d el ciclo ,
se u tilizan las herram ientas d e en tra d a /sa lid a d e la cla se S y ste m para escribir u n carácter.
La función term u tiliza la ru tina i s D i g i t d e la cla se C h a r a c te r d e J a v a para probar si el
sím b olo d e preanálisis es un d ígito. L a ru tina i s D i g i t esp era ser a p licad a sobre un carácter;
no o b sta n te, p r e a n á l i s i s s e d eclara com o entero, an ticip and o las ex ten sio n es a futuro. La
con stru cción (c h a r ) p r e a n á l i s i s con vierte u ob lig a a p r e a n á l i s i s a ser un carácter. E n u na
pequeña m odificación d e la figura 2.25, la acción sem á n tica d e escribir e l carácter p r e a n á l i s i s
ocurre an tes d e la llam ada a c o i n c i d i r .
La función c o i n c i d i r com p ru eb a los term inales; lee e l sig u ien te term inal d e la en trad a si
hay u na coin cid en cia co n e l sím b olo p r e a n á l i s i s , e in d ica un error e n cualquier otro caso,
m ediante la ejecu ción d e la sigu ien te instrucción:
th row new E r r o r (" e r r o r d e s i n t a x i s " ) ;
E ste cód igo crea u n a n u eva excep ción d e la cla se E r r o r y proporciona la ca d en a e r r o r d e
s i n t a x i s com o m en saje d e error. Java n o requiere q ue las ex cep cio n es E r r o r s e declaren en
una clá u su la th r o w s, y a q ue su u so e s tá d estin ad o só lo p a ra los ev en to s anorm ales q ue nunca
deberían ocu rrir .6
6E1 m an ejo d e e rro re s p u ed e sim plificarse co n las h e rra m ie n ta s p a r a m an ejo d e ex cep cio n es d e J a v a . U n m étodo
s e ría d e fin ir u n a n u ev a ex cep ció n , p o r d e c ir E r r o r S i n t a x i s , q u e e x tie n d e a la clase E x c e p tio n del s i s t e m a D espués, se
la n z a E r r o r S i n t a x i s e n vez d e E r r o r a l d e te c ta r u n e r ro r , y a s e a e n t e r m o e n c o i n c i d i r . M ás a d e la n te , s e m a n e ja la
ex cep ció n e n m a in , e n c e rra n d o la lla m a d a » a l i z a r . e x p r ( ) d e n tr o d e u n a in stru c c ió n t r y q u e a t r a p e a la ex cep ció n
E r r o r S i n t a x i s , s e e s c rib e u n m e n sa je y te r m in a e l p ro g ram a. T e n d ría m o s q u e ag reg ar u n a clase E r r o r S i n t a x i s a l
p ro g ra m a e n la fig u ra 2.27. P a r a c o m p le ta r la e x te n s ió n , a d e m á s d e I O E x c e p tio n , las funciones c o i n c i d i r y te r m
a h o ra d e b e n d e c la ra r q u e p u e d e n la n z a r a E r r o r S i n t a x i s . L a función e x p r , q u e llam a a e s ta s d o s funciones, ta m b ié n
d eb e d e c la ra r q u e p u ed e la n z a r a E r r o r S i n t a x i s .
Un traductor para la s expresiones sim ples
import java.io.*;
class Analizador {
static int preanálisis;
public Analizador() throws IOException {
preanálisis = System.in.read();
>
void expr() throws IOException {
term();
while(true) {
if( preanálisis »
*+* ) {
coincidir('+’); term(); System.out.write(*+*);
>
else if( preanálisis ==
) {
coincidir(*- *); term(); System.out.write(*-*);
>
else return;
>
>
void t e r m O
throws IOException {
if( Character.isDigit((char) preanálisis)
) {
System.out.write((char) preanálisis); coincidir(preanálisis);
>
else throw n e w Error("error de sintaxis");
>
void coincidir(int t) throws IOException {
if (preanálisis ==* t ) preanálisis * System, i n .read0 ;
else throw n e w Error("error de sintaxis");
>
>
public class Postfijo {
public static void main(String[] args) throws IOException {
Analizador analizar = new AnalizadorO ;
analizar.expr(); System.out.write(*\n*);
>
>
F igu ra 2.27: P rogram a en Java para traducir exp resion es infijas al form a to p ostfijo
76
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
U n a s c u a n t a s c a r a c te r ís tic a s i m p o r t a n t e s s o b r e J a v a
Las sigu ien tes n o ta s p ueden ser d e u tilidad para aquellos q ue n o esté n fam iliarizados con
Java, a la hora d e leer el cód ig o d e la figura 2.27:
• U n a c la se en J a v a co n siste en u n a se cu en cia d e d efin icio n es d e variables y fun ­
ciones.
• Es necesario utilizar paréntesis para encerrar la s lista s d e p arám etros d e las fun­
ciones, aun cu an d o n o h aya parám etros; por en d e, escribim os e x p r ( ) y t e r m ( ).
E stas funciones so n en realidad p rocedim ientos, y a q u e no d evu elv en valores; esto
se in d ica m ed ian te la palabra clave v o id an tes d e l nom bre d e la función.
• Las funciones s e com u nican en vian do parám etros ‘"por va lo r” o accediendo a los da­
tos com p artidos. Por ejem plo, las funciones e x p r ( ) y t e r m ( ) ex a m in a n el sím bolo
de preanálisis usando la variable p r e a n á l i s i s d e la clase, a la q u e to d o s pueden
acceder, y a q u e to d o s p ertenecen a la m ism a cla se A n a liz a d o r .
• A l igual q ue C , J ava u sa = para la asignación, =
desigualdad.
para la igualdad y != para la
• La c lá u su la “th r o w s IO E x c e p tio n ” en la definición d e t e r m ( ) d ecla ra q u e se p ue­
d e producir u n a excep ción llam ad a IO E x ce p tio n . D ich a ex cep ció n ocurre si n o hay
en trad a q u e leer cu an d o la función c o i n c i d i r u sa la ru tina r e a d . C ualquier fun­
ción q ue llam e a c o i n c i d i r d eb e tam b ién declarar q ue p u ed e ocurrir u n a excep ción
IO E x ce p tio n d urante su p rop ia ejecución.
2.6
A n á lisis léxico
Un analizador léxico lee los caracteres d e la en trad a y los agrupa en “o b je to s token”. Ju n to
con u n sím b olo d e term inal q ue se u tiliza para las d ecisio n es d e an álisis sin tá ctico , u n ob jeto
token lleva inform ación adicional en form a d e valores d e atrib u tos. H a sta ahora, n o h em os t e ­
nido la necesidad d e diferenciar en tre los térm inos “token” y “term in al” , y a q ue el analizador
sin tá ctico ignora los valores d e los atrib u tos q u e llev a un token. E n e s ta sección, u n token es
un term inal ju n to co n inform ación adicional.
A u n a secu en cia d e caracteres d e en trad a q ue conform an u n so lo token se le con oce com o
k x em a . P or en d e, p od em os d ecir q ue e l analizador léxico aísla a un analizador sin tá ctico d e la
representación tip o lexem a d e los tokens.
El analizador léxico en e s ta sección p erm ite q ue aparezcan núm eros, identificadores y “es­
pacio e n blanco” (espacios, tabu ladores y nuevas líneas) d en tro d e las expresiones. P u ed e
usarse p ara ex te n d er e l tra d u cto r d e ex p resion es d e la se cc ió n anterior. C om o la g ra m á tica
d e exp resion es d e la figu ra 2.21 d eb e exten d erse para perm itir núm eros e identificadores, apro-
2.6 A nálisis léxico
77
vecharem os e s ta o p ortun idad para p erm itir tam b ién la m u ltip licación y la d ivisión . E l esquem a
d e trad u cción ex ten d id o aparece e n la figu ra 2.28.
expr
ex p r + te r m
cx p r - te r m
te rm
{ print('+') }
{ print('-') }
term
te r m * fa c to r
te r m / fa c to r
fa c to r
{ print('*') }
f a c to r
{ printf7/ ) }
( exj)r )
num
id
{ print ( n u m . valor) }
{ p rin t(id .k r e m a ) }
F igu ra 2.28: A ccion es para traducir a la n otación p ostfijo
E n la figura 2.28, se asu m e q ue el term inal n u m tien e un atrib uto n u m . valor, el cu a l nos
d a e l valor en tero correspondiente a e s ta ocu rren cia d e n u m . E l term inal i d tien e un atributo
co n valor d e cad en a escrito com o i d . lexem a; asu m im os q u e e s ta ca d en a e s e l lex em a actu al que
com p rend e e s ta in stan cia d e l i d d e l token.
A l final d e e s ta sección, ensam blarem os e n có d ig o J a v a lo s fragm entos d e seud ocód igo que
s e u tilizan para ilustrar e l fun cion am ien to d e u n analizador léxico. E l m éto d o en e s ta sección es
adecuado para los analizadores léxicos escrito s a m ano. L a sección 3.5 d escrib e u n a herram ienta
llam ad a L ex q u e gen era u n analizador léxico a partir d e u na especificación. E n la secció n 2.7
considerarem os las tab las d e sím b olos o las estru ctu ras d e d a to s para guardar inform ación
acerca d e los identificadores.
2 .6 .1
E lim in a c ió n d e e s p a c io e n b la n c o y c o m e n ta r io s
E l traductor d e exp resion es en la sección 2.5 p u ed e ver ca d a carácter en la en trad a, p o r lo que
los caracteres extrañ os, com o los esp acios en blanco, harán q ue falle. L a m ayoría d e los lengua­
je s perm iten q ue aparezcan can tid ad es arbitrarias d e espacio en blanco entre los tokens. Los
com en tarios s e ignoran d e igual form a d urante el an álisis sin tá ctico , p o r lo q ue tam b ién pueden
tratarse com o esp acio e n blanco.
S i e l analizador léxico elim in a e l espacio en blanco, e l analizador sin tá ctico n u n ca tendrá
q ue considerarlo. L a altern ativa de m odificar la gra m á tica p a ra incorporar e l esp a cio en blanco
e n la sin ta x is no es tan fácil d e im plem entar.
E l seu d ocód igo en la figura 2.29 o m ite e l esp a cio e n blanco, leyen do lo s caracteres d e en­
tra d a h a sta llegar a un esp acio en blanco, un tabulador o u n a n ueva línea. L a variable v ista zo
co n tien e e l sigu ien te carácter d e entrada. L os núm eros d e lín ea y el co n tex to so n ú tiles dentro
d e los m en sajes d e error para ayudar a señalar los errores; e l có d ig o u sa la variable línea para
con tar los caracteres d e n u eva lín ea en la entrada.
78
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
f o r ( ; ; v ista zo = sigu ien te carácter d e en tra d a ) {
i f ( v ista zo es un espacio en blanco o un tabulador ) no hacer nada;
e l s e i f ( v is ta z o e s u n a n u eva lín ea ) Unea = U n ea + 1;
e ls e b re a k ;
}
F igu ra 2.29: O m isión d el esp a cio e n blanco
2 .6 .2
L e c tu ra a d e la n ta d a
Tal vez un analizador léxico ten g a q ue leer algunos caracteres d e p reanálisis, antes d e que
pu ed a decidir sobre e l tok en q ue v a a devolver a l analizador sin tá ctico . Por ejem p lo, u n anali­
zador léxico para C o J a v a d eb e leer p or ad elan tad o d esp u és d e ver e l carácter >. S i e l sigu ien te
carácter es =, en ton ces > form a parte d e la secu en cia d e caracteres >=, e l lex em a para el token
d el operador “m ayor o igual q ue”. E n caso contrario, > p or s í so lo form a e l operador “mayor
q ue” , y el analizador léxico h a leído un carácter d e m ás.
U n m étod o general p ara leer p or ad elan tad o en la en trad a e s m antener u n búfer d e entrada,
a partir d e l cu a l el analizador léxico p uede leer y devolver caracteres. Los búferes d e en trad a
pueden ju stificarse ta n só lo p or cu estió n d e eficien cia, y a q ue por lo gen eral e s m ás eficien te
ob tener un b loqu e d e caracteres q u e ob tener un carácter a la v ez. U n apuntador lle v a el registro
d e la porción d e la en trad a q ue se h a analizado; para regresar u n carácter s e m ueve e l ap un ta­
dor hacia atrás. E n la sección 3.2 verem os las técn ica s para e l uso d e búfer en la entrada.
Por lo general, b a sta co n leer u n carácter d e p reanálisis, así q ue u n a solución sim p le es u tili­
zar u n a variable, por decir vista zo , para guardar e l sig u ien te carácter d e entrada. E l analizador
léxico en e s ta sección lee un carácter d e preanálisis m ientras recolecta d íg ito s para núm eros, o
caracteres para identificadores; p or ejem p lo, lee m ás a llá d e l 1 para diferenciar entre 1 y 1 0 , y
lee m ás allá d e t para diferenciar entre t y t r u e .
El analizador léxico lee d e preanálisis sólo cu an d o d eb e hacerlo. U n operador com o * puede
identificarse sin necesidad de leer por adelantado. E n tales casos, v ista zo se estab lece a un espa­
cio e n blanco, q ue s e o m itirá cu an do s e llam e a l analizador léxico p a ra buscar el sigu ien te token.
La aserción invariante en e s ta sección es q ue, cu an do e l analizador léxico d evu elve un token, la
variable v ista zo con tien e el carácter q ue e s tá m ás allá d el lex em a para el token actual, o contiene
un espacio en blanco.
2 .6 .3
C o n s ta n te s
C ad a v e z que aparece u n so lo d íg ito en u n a g ra m á tica para exp resion es, parece razonable p er­
m itir u n a co n stan te en tera arbitraria en su lugar. L as co n sta n tes en teras pueden perm itirse al
crear un sím b olo term inal, p or decir n u m , para ésta s, o a l incorporar la sin ta x is d e co n sta n tes
en teras en la gram ática. E l trab ajo d e recolectar caracteres en en teros y calcular s u valor nu­
m érico colectiv o se asign a por lo gen eral a u n analizador léxico, p a ra q ue los núm eros puedan
tratarse com o u nidades in dividu ales durante e l an álisis sin tá ctico y la traducción.
C uando aparece u n a secu en cia d e d ígitos en el flujo d e entrada, e l analizador léxico p asa
al analizador sin táctico u n token q ue co n siste en la term inal n u m , ju n to co n u n a trib u to con
2.6 A nálisis léxico
79
valor d e entero, el cu a l se ca lcu la a partir d e los d íg ito s. Si escribim os tokens com o n-uplas
encerradas en tre los sign os ( y ) , la en trad a 31 + 2 8 + 5 9 se transform a e n la sigu ien te se­
cuencia:
( n u m , 31) (+) ( n u m , 28) (+) ( n u m , 59)
A q u í, el sím b olo term in al + no tien e atrib utos, p or lo q ue s u n -u pla es sim p lem en te {+). El
seu d ocód igo e n la figura 2.30 lee los d ígitos en un entero y acum ula el valor d e l entero, usando
la variable v.
¡ f ( v ista zo con tien e un d íg ito ) {
v = 0 ;
do
{
v = v * 10 + valor en tero d e l d íg ito v is ta z o ;
v ista zo = sigu ien te carácter d e entrada;
} w h i l e ( v ista zo co n tien e u n d íg ito );
r e t u r n tok en ( n u m , v );
}
F igu ra 2.30: A grupam iento d e d íg ito s e n enteros
2 .6 .4
R e c o n o c im ie n to d e p a l a b r a s c la v e e id e n tif ic a d o r e s
L a m ayoría d e los lenguajes u tilizan cad en a s d e caracteres fijas ta les co m o f o r , d o e i f , com o
sig n o s d e pun tu ación o para identificar las con stru cciones. A d ich as ca d en as d e caracteres se
les co n o ce com o palabras clave.
Las cad en as d e caracteres tam b ién se u tiliza n com o identificadores para nom brar variables,
arreglos, funciones y dem ás. Las gram áticas tratan d e m anera rutinaria a los identificadores
com o term inales para sim plificar e l analizador sin tá ctico , el cu al p or con sigu ien te p u ed e esperar
e l m ism o term inal, p or decir i d , ca d a v e z q ue aparece algún identificador en la en trad a. Por
ejem p lo, en la sigu ien te entrada:
cu en ta
= c u e n t a + in c r e m e n to ;
(2.6)
e l analizador trab aja co n e l flujo d e term in ales i d = i d + i d . E l tok en para i d tien e un atributo
q ue con tien e el lexem a. Si escribim os los tokens com o n-uplas, p o d em o s ver q u e las n-uplas
para e l flujo d e en tra d a (2.6) son:
( i d , " c u e n ta " ) (=) ( i d , " c u e n ta " ) (+) ( i d , " in c r e m e n to " ) ( ; )
P or lo general, las palabras clave cu m p len co n las reglas para form ar identificadores, por lo
q ue se requiere un m ecanism o para decidir cu án do u n lex em a form a u n a p a lab ra cla v e y cuándo
u n identificador. E l problem a e s m ás fácil d e resolver s i las palabras cla v e so n re serv a d a s; es
d ecir, si no p ueden utilizarse com o identificadores. E n tonces, u n a ca d en a d e caracteres form a
a un identificador só lo s i no es u na p alabra clave.
80
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
El analizador léxico en e s ta sección resuelve d o s problem as, utilizan do u n a ta b la p ara guar­
dar cad en as d e caracteres:
• R e p resen ta ció n sim ple. U n a ta b la d e cad en a s p uede aislar al resto d el com pilador d e la
representación d e las cad en as, y a q ue las fases d el com p ilad or pueden trab ajar con refe­
rencias o apuntadores a la cad en a e n la tab la . Las referencias tam bién pueden m anipular­
s e co n m ás eficien cia q u e las m ism as cadenas.
• P alabras reserva d a s. Las palabras reservadas pueden im plem entarse m ediante la inicialización d e la ta b la d e cad en as co n las cad en a s reservadas y su s tokens. C uan do e l analiza­
d or léxico lee u na ca d en a o lexem a q ue p od ría form ar u n identificador, prim ero verifica
si e l lexem a se en cu en tra en la ta b la d e cad en as. D e ser así, d ev u elv e el token d e l a tabla;
e n caso con trario, d evu elve un to k en co n el term in al i d .
En Java, u n a ta b la d e cadenas p uede im plem entarse com o u n a h ash ta b le, usand o u n a clase
llam ad a H ashtable. L a sigu ien te declaración:
H ashtable palabras = n e w
H ashtable()\
estab lece a palabras com o u n a hash table predeterm inada, q ue asign a claves a valores. L a utiliza­
rem os para asignar los lexem as a los tokens. E l seud ocód igo en la figura 2.31 u tiliza la operación
g e t para buscar palabras reservadas.
i f ( vista zo con tien e una le tr a ) {
recolectar letras o d ígitos en un búfer 6;
5 = ca d en a form ada a partir d e lo s caracteres en 6;
w = tok en d ev u elto p or palabras. g et(s)\
i f ( w no es n u i l ) r e t u r n w\
e ls e {
Introducir el par clave-valor ( 5, ( i d , 5)) en palabras
token ( i d , s);
re tu rn
}
}
F igu ra 2.31: D istin ción en tre palabras clave e identificadores
E ste seu d ocód igo recolecta d e la en tra d a u na ca d en a s , la cu a l co n siste en letras y d ígitos,
em p ezan d o con u na letra. Sup onem os q u e s se hace lo m ás larga posible; es d ecir, e l analizador
léxico con tinu ará leyen do d e la en trad a m ientras sig a en con tran do letras y d ígitos. C uando
en cu en tra algo d istin to a u na letra o d ígito, por ejem p lo, espacio en blanco, e l lex em a se cop ia
a un búfer b. S i la tab la tien e u n a en trad a para 5, en ton ces se d ev u elv e el token ob ten id o por
palabras.get. A q u í, 5 p odría ser u n a palabra clave, co n la q u e s e sem b ró in icializado la ta b la p a ­
labras, o p od ría ser un identificador q ue se introdujo antes en la tabla. E n ca so contrario, el
token i d y e l atrib u to s s e in stalan e n la ta b la y s e devuelven.
2.6 A nálisis léxico
2 .6 .5
81
U n a n a liz a d o r lé x ic o
H a sta ah ora en e s ta sección, los fragm entos d e seud ocód igo se ju n ta n para form ar u n a función
llam ad a escan ear q u e d evu elve o b je to s token, d e la sigu ien te manera:
Token esca n ea r () {
om itir esp acio e n b lan co, com o en la secció n 2.6.1;
m anejar los núm eros, com o en la secció n 2.6.3;
m anejar las palabras reservadas e identificadores, com o en la secció n 2.6.4;
/ ♦ S i llegam os aquí, tratar e l carácter d e le ctu r a d e p rean álisis v ista zo com o tok en * /
Token t = n e w T b k en (ú sta zó )\
v ista zo = espacio en blanco / * inicialización, com o v im o s en la sección 2 .6 .2 * /;
r e t u r n £;
}
E l re sto d e e s ta sección im p lem en ta la función explorar com o p arte d e un p aqu ete d e Java
para e l análisis léxico. E l p aqu ete, llam ado a n a liz a d o r l é x i c o tien e clases para tokens y una
clase A n a liz a d o r L e x ic o q ue con tien e la función e s c a n e a r .
Las cla ses para los tokens y su s cam p o s se ilu stran e n la figu ra 2.32; su s m étod os no se
m uestran. L a clase T oken tien e u n cam p o llam ado e t i q u e t a , e l cu a l se u sa para la s decisiones
sob re e l an álisis sin táctico. L a su b cla se Num agrega un ca m p o v a lo r p a ra un valor d e entero.
L a su b cla se P a la b r a agrega u n cam p o lex em a , el cu a l s e u tiliza p a ra las palabras reservadas
y los identificadores.
c la s e Tbken
in t etiqueta
c la s e Num
c la s e Palabra
in t valor
s t r in g lexema
F igu ra 2.32: L a clase Token y la s su b cla ses N u m y Palabra
C ada clase se en cu en tra en un archivo p o r s í sola. A con tinu ación se m uestra e l archivo
para la clase Token:
1) p a ck a g e a n a liz a d o r l é x i c o ;
/ / A rch ivo T o k en .ja va
2) p u b lic c l a s s T ok en {
3)
p u b lic f i n a l i n t e t iq u e t a ;
4 ) p u b l i c T o k e n ( in t t ) { e t i q u e t a = t ; }
5) >
L a línea 1 id en tifica el p aqu ete a n a liz a d o r l é x i c o . E l ca m p o e t i q u e t a s e d eclara en la
línea 3 com o f i n a l , d e form a que no p uede m odificarse u n a vez estab lecid o. E l con stru ctor
Token e n la línea 4 se u tiliza para crear o b je to s token, com o en
new T o k en ( *+* )
lo cu a l crea un nuevo o b je to d e la clase T oken y esta b lece s u ca m p o e t i q u e t a a u n a represen­
ta ció n en tera d e }+ y. Por cu estió n d e brevedad, o m itim o s e l h ab itu al m éto d o t o S t r i n g , que
d evolvería u na ca d en a ad ecu ad a para s u im presión.
82
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
En d ond e e l seu d ocód igo ten g a term inales com o n u m e id , e l có d ig o d e J a v a u tiliza co n s­
ta n tes enteras. L a clase E t i q u e t a im p lem en ta a d ich as con stantes:
1) p a ck a g e a n a liz a d o r l é x i c o ;
/ / A rch ivo E tiq u e ta .ja v a
2) p u b l i c c l a s s E t i q u e t a {
3)
p u b lic f i n a l s t a t i c i n t
4) NUM = 2 5 6 , ID = 2 5 7 , TRUE = 2 5 8 , FALSE = 2 5 9 ;
5) >
A dem ás d e los cam p os co n valor d e en tero NUM e ID, e s ta cla se d efine d os cam p o s adicionales,
TRUE y FALSE, para un uso futuro; se utilizarán para ilustrar el tra ta m ien to d e las palabras
clave reservadas.7
Los cam p os en la clase E t iq u e t a so n p u b lic , p or lo q u e p ueden usarse fuera d e l paquete.
Son s t a t i c , por lo q ue só lo h ay u n a in stan cia o co p ia d e es to s cam p os. L os c a m p o s so n f i n a l ,
por lo q u e pueden estab lecerse só lo u n a vez. E n efecto , esto s cam p o s representan co n sta n tes.
En C s e logra un efecto sim ilar m ediante e l u so d e instrucciones d e d efinición, p a ra perm itir
q ue nom bres com o NUM s e u tilicen com o con sta n tes sim b ólicas, por ejemplo:
« d e f in e NUM 256
El cód igo en Java se refiere a E tiq ueta.N U M y E t iq u e t a . ID en lugares en d on d e e l seu d o­
có d ig o s e refiere a los term inales n u m e id . E l único requerim iento es q ue E tiq ueta.N U M y
E t i q u e t a . ID d eb en inicializarse co n valores d istin to s, q ue d ifieran u no d e l o tro y d e las co n s­
ta n tes q ue representan tok en s d e un so lo carácter, co m o
*+ * o }* } .
1) p a ck a g e a n a l i z a d o r l e x i c o ;
/ / A rch ivo
2) p u b l i c c l a s s Num e x t e n d s T oken {
3)
p u b l i c f i n a l i n t v a lo r ;
4)
p u b l i c N u m (in t v ) { su p e r (E tiq u e ta .N U M ); v a lo r = v ; }
N u m .ja v a
5) >
1) p a ck a g e a n a l i z a d o r l e x i c o ;
/ / A rch ivo
2) p u b l i c c l a s s P a la b r a e x t e n d s T ok en {
3)
p u b l i c f i n a l S t r i n g lex em a ;
4)
p u b lic P a la b r a (in t t , S tr in g s )
5)
s u p e r ( t ) ; le x e m a = new S t r i n g ( s ) ;
6)
P a la b ra .ja va
{
}
7) >
F igu ra 2.33: Las su bclases Num y P a la b r a d e Token
Las cla ses Num y P a la b r a aparecen en la figura 2.33. L a cla se Num ex tie n d e a T oken m e­
d ia n te la d eclaración d e un cam p o en tero v a lo r en la lín ea 3. E l con stru ctor Num en la lín ea 4
llam a a su p e r ( E t iq u e t a . NUM), q ue estab lece el ca m p o e t i q u e t a en la su perclase T oken a
E tiqueta.N U M .
7P o r lo g e n e ra l, los c a ra c te re s A S C II s e co n v ie rte n e n e n te ro s e n tr e 0 y 255. P o r lo ta n to , u tilizarem o s e n te ro s
m ayores d e 255 p a r a los term in a le s.
2.6 A nálisis léxico
83
// Archivo AnalizadorLexico.,java
1) package analizadorlexico;
2) import java.io.*; import java.util.*;
3) public class AnalizadorLexico {
4)
public int linea = 1;
5)
private char vistazo ■ * *;
6)
private Hashtable palabras » n e w H a s h t a b l e O ;
7)
void reservar(Palabra t) { p alabras.put(t.lexema, t ) ; }
8)
public Analizad o r L e x i c o O
{
9)
reservar( n e w Palabra(Etiqueta.TRUE, "true") );
10)
reservar( n e w Palabra(Etiqueta.FALSE, "false") );
11)
>
12)
public Token explorar() throws IOException {
13)
for( ; ; vistazo = (char)System.in.read() ) {
14)
i f ( vistazo =
15)
else if( vistazo
16)
else break;
17)
* * || vistazo == *\t* ) continue;
=
*\n* ) linea - linea + 1;
>
/ * con tin ú a en la figura 2.35 * /
F igu ra 2.34: C ódigo para un analizador léxico, p arte 1 d e 2
L a clase P a la b r a se u tiliza para palabras reservadas e identificadores, por lo q ue el cons­
tru ctor P a la b r a en la lín ea 4 esp era d o s parám etros: un lex em a y un valor en tero correspon­
d ien te para e t i q u e t a . P od em os crear u n o b je to para la p alabra reservad a t r u e ejecu tan do lo
siguiente:
new P a la b r a (E tiq u e ta .T R U E , " tr u e " )
lo cu a l crea u n N uevo ob jeto con el cam p o e t i q u e t a esta b lecid o en e t i q u e t a . TRUE y e l cam p o
le x e m a estab lecid o a la ca d en a " tru e" .
L a clase A n a liz a d o r L é x ic o para e l an álisis léxico aparece e n las figuras 2.34 y 2.35. La
variable en tera l i n e a en la línea 4 c u en ta las lín eas d e entrada, y la variable carácter v i s t a z o
e n la lín ea 5 con tien e e l sigu ien te carácter d e entrada.
Las palabras reservadas se m anejan en la s líneas 6 a 11. La ta b la p a la b r a s se d ecla ra en
la línea 6. L a función auxiliar r e s e r v a r en la línea 7 co lo c a u n par cad en a-palab ra en la tabla.
Las líneas 9 y 10 en e l con stru ctor A n a liz a d o r L e x ic o inicializan la tabla. U tilizan el construc­
tor P a la b r a para crear o b je to s tip o palabra, los cu a les s e pasan a la función au xiliar r e s e r v a r .
P or lo tan to, la ta b la se inicializa co n las palabras reservadas " tru e" y " f a ls e " an tes d e la
prim era llam ada d e e x p lo r a r .
E l cód ig o para e s c a n e a r en las figuras 2.34-2.35 im p lem en ta los fragm entos d e seud ocód igo
e n e s ta sección . L a in stru cción f o r en las líneas 13 a 17 o m ite lo s caracteres d e esp a cio e n blan­
c o , tabu ladores y d e n u eva lín ea. C uando e l con trol sa le d e la in stru cción f o r , v i s t a z o con tien e
u n carácter q u e no es espacio en blanco.
E l cód igo para leer u n a secu en cia d e d íg ito s e s tá en las líneas 18 a 25. L a fun ción i s D i g i t
e s d e la clase C h a r a c te r integrada en Java. Se u tiliza e n la lín ea 18 para com probar si v i s t a z o
84
Capítulo 2.
18)
ií( Character.isDigit(vistazo)
19)
int v - 0;
20)
do {
21)
Un traductor sim ple orientado a la sintaxis
) {
v - 10*v + Character .digit (vistazo, 10);
22)
vistazo * (char)System.in.readO ;
23)
} w h i l e ( Character.isDigit(vistazo) );
24)
return new N u m ( v ) ;
25)
>
26)
i f ( Character.isLetter(vistazo) ) {
27)
StringBuffer b = new StringBuffer();
28)
do {
29)
b .append(vistazo);
30)
peek = (char)System, i n .read();
31)
} w h i l e ( Character.isLetterOrDigit(vistazo) );
32)
String s - b . t o S t r i n g O ;
33)
Palabra w =
34)
if (w !* null ) return w;
35)
w = new Palabra(Etiqueta.ID, s) ;
36)
palabras.put(s, w) ;
37)
return w ;
(Palabra)palabras.get(s);
38)
>
39)
Token t
= n e w Token(vistazo) ;
40)
vistazo
■ * *;
41)
return t ;
42)
43)
}
>
F igu ra 2.35: C ódigo para u n analizador léxico, parte 2 d e 2
es un d íg ito . D e ser así, el cód ig o en las líneas 19 a 24 acum ula e l valor en tero d e la secu en cia
d e d íg ito s e n la en trad a y d evu elve u n nuevo o b je to Num.
Las lín eas 26 a 38 analizan palabras reservadas e identificadores. L as palabras clave t r u e y
f a l s e y a se han reservado en las líneas 9 y 10. A sí, s i llegam os a la lín ea 35 en ton ces la cad en a
s no e s tá reservada, por lo cu a l d eb e ser e l lexem a p a ra un identificador. L a lín ea 3 5 , por lo
ta n to, d evu elv e un nuevo o b je to p alabra co n le x e m a esta b lecid o a s y e t i q u e t a estab lecid a
a E t i q u e t a . ID. P or ú ltim o, las lín eas 39 a 41 d evu elv en el carácter actu al com o u n token y
esta b lecen v i s t a z o a un esp acio en blanco, q ue se elim inará la próxim a v ez q u e se llam e a
escan ear.
2.6.6
E je rcicio s p a ra la sección 2.6
E j e r c ic io 2 .6 .1 : E x tie n d a el analizador léxico d e la secció n 2 .6 .5 para elim inar lo s com en ta­
rios, q ue se d efinen d e la sigu ien te manera:
a)
U n com entario em p ieza co n / / e in clu ye a to d o s los caracteres h a sta e l fin d e e s a línea.
2 .7
Tablas d e símbolos
85
b ) U n com entario em p ieza co n / * e in clu ye a to d o s lo s caracteres h a sta la sig u ien te ocurren­
c ia d e la secu en cia d e caracteres * / .
E j e r c ic io 2 .6 .2 : E x tie n d a e l analizador léxico en la secció n 2 .6 .5 para q ue reco n o zca los op e­
radores relaciónales <, <=, ==, !=, >=, >.
E j e r c ic io 2 .6 .3 : E x tie n d a el analizador léxico en la sección 2 .6 .5 para q ue recon ozca los v a lo ­
res d e p u n to flotan te com o 2 . , 3 . 1 4 y . 5.
2 .7
T a b la s d e sím b o lo s
Las tablas d e sím bolos son estru ctu ras d e d a to s q u e u tiliza n los com piladores p a ra guardar
inform ación acerca d e las con stru cciones d e u n program a fuente. L a inform ación se recolecta
e n form a in crem en tal m ed ian te las fases d e análisis de un com p ilad or, y las fases d e sín tesis la
u tilizan para generar e l cód ig o d estin o. L as en trad as en la ta b la d e sím b olos con tien en informa­
ción acerca d e un identificador, com o s u ca d en a d e caracteres (o lexem a), su tip o, su posición
e n e l esp acio d e alm acenam iento, y cualquier o tr a inform ación relevante. P or lo general, las
ta b la s d e sím b olos necesitan sop ortar varias d eclaraciones d el m ism o identificador d en tro de
u n program a.
E n la sección 1.6.1 vim os q ue e l alcance d e u n a d eclaración e s la parte d e u n program a a la
cu a l s e ap lica e s a declaración. V am os a im plem entar los alcances m ed ian te el estab lecim ien to
d e u n a ta b la d e sím b olos separada para ca d a alcance. U n bloque d e program a con d eclaracio­
nes8 ten drá su p rop ia ta b la d e sím b olos, co n u n a en tra d a para ca d a declaración e n el bloque.
E ste m étod o tam b ién funciona para o tras con stru cciones q ue esta b lecen alcances; p or ejem plo,
u na clase ten d ría su prop ia tabla, co n u na en trad a p a ra ca d a ca m p o y ca d a m étodo.
E sta sección con tien e un m ód u lo d e ta b la d e sím b olos, adecuado p a ra usarlo con los frag­
m en tos d e l trad u ctor en J ava d e e s te ca p ítu lo . E l m ó d u lo s e u tiliza rá com o está , cuando
en sam blem os e l trad uctor com p leto en e l apéndice A . M ientras ta n to , p o r cu estió n d e sim pli­
cid ad , el ejem p lo principal d e e s ta sección es u n len gu aje sim p lificad o, q u e sólo co n tien e las
con stru ccion es clave q ue to ca n las ta b la s d e sím bolos; en esp ecia l, los b lo q u es, las declaraciones
y los factores. O m itirem os to d a s las d em ás con stru ccion es d e instrucciones y exp resion es, para
p od er en fo ca m o s en las op eracion es co n la ta b la d e sím b olos. U n program a c o n siste e n bloques
c o n declaraciones op cion ales e “in stru cciones” q u e co n siste n en identificadores individuales.
C a d a in stru cción d e e s te tip o rep resen ta un uso d e l identificador. H e a q u í un program a de
ejem p lo e n e s te lenguaje:
{ int x; char y; { bool y; x; y; } x; y; >
(2.7)
Los ejem plos d e la estru ctu ra d e bloqu es en la sección 1.6.3 m anejaron la s definiciones y usos
d e nombres; la en trad a (2.7) co n siste ú n icam en te d e d efinicion es y usos d e nom bres.
L a tarea q u e vam os a realizar es im prim ir un program a revisado, en e l cual se han elim inado
las declaraciones y cad a “in stru cción ” tien e su identificador, seguid o d e un sig n o d e p u n to y
co m a y d e su tip o.
8 En C , por ejem plo, los bloques d e program as son funciones o secciones d e funciones q u e s e separan m ediante
llaves, y q u e tien en una o m ás declaraciones en su interior.
86
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
¿Q u ién c re a las e n tra d a s en la ta b la de sím bolos?
E l analizador léxico, el analizador sin táctico y e l analizador sem á n tico so n lo s q u e crean
y u tilizan las en trad as en la ta b la d e sím b olos durante la fase d e análisis. E n e s te cap í­
tu lo, harem os q u e e l analizador sin táctico cree las en trad as. C on s u co n o cim ien to d e la
estru ctu ra sin tá ctica d e u n program a, por lo general, un analizador sin tá ctico e s tá en una
m ejor posición q ue e l analizador léxico para diferenciar en tre las d istin ta s declaraciones
d e un identificador.
En algunos casos, u n analizador léxico p uede crear u n a en trad a en la ta b la d e sím b o­
los, ta n pronto com o v e los caracteres q u e conform an u n lexem a. M ás a m enudo, e l anali­
zador léxico só lo p u ed e devolver un token al analizador sin tá ctico , p or decir i d , ju n to con
un apuntador al lexem a. S in em bargo, sólo el analizador sin tá ctico p uede decidir s i debe
utilizar u n a en trad a en la ta b la d e sím b olos q ue se h a y a creado antes, o s i d eb e crear una
en trad a n u eva para el identificador.
E j e m p lo 2 .1 4 : En la en trad a anterior (2 .7 ), e l o b je tiv o es producir lo siguiente:
{
{
x:int; yrbool; } x:int; y:char; }
Las prim eras x y y son d e l b loqu e interno d e la en trad a (2.7). C om o e s te uso d e x s e refiere a la
declaración d e x e n e l b loqu e extern o, v a segu id o d e i n t , el tip o d e esa declaración. E l uso d e y
en e l b loqu e in tern o s e refiere a la d eclaración d e y en ese m ism o bloque y, p or lo ta n to , tien e e l
tip o b oolean o. Tam bién vem os los u sos d e x y y en e l b lo q u e ex tern o , co n su s tip o s, segú n los
proporcionan las declaraciones d e l b loqu e externo: en tero y carácter, resp ectivam en te.
□
2 .7 .1
T a b la d e s ím b o lo s p o r a lc a n c e
El térm in o “alcance d e l identificador x” en realidad s e refiere al alcance d e u n a declaración
esp ecífica d e x. E l térm in o alcance por s í so lo se refiere a u n a p arte d e l program a q ue es el
alcance d e u n a o m ás d eclaraciones.
Los alcances son im portan tes, y a q ue e l m ism o identificador p u ed e declararse p a ra d istin to s
fines en d istin ta s partes d e un program a. A m enudo, los nom bres com unes com o i y x tien en
varios usos. C om o o tro ejem p lo, las su b clases pueden volver a declarar e l nom bre d e un m étodo
para redefinirlo d e u n a superclase.
Si los bloqu es pueden anidarse, varias declaraciones d el m ism o identificador p ueden apa­
recer d en tro d e un so lo bloque. L a sigu ien te sin ta x is produce b loqu es an idados cu an do in strs
p uede generar un bloque:
bloque
'{' decís in s tr s T
C olocam os las llaves entre com illas sim p les en la sin ta x is para diferenciarlas d e la s llaves para
las accion es sem án ticas. C on la gram ática en la figura 2.38, decís g en era u n a secu en cia op cion al
d e d eclaraciones e in strs g en era u n a secu en cia op cion al d e instrucciones.
2 .7
Tablas d e símbolos
87
O p tim iza ció n de las ta b la s de sím bolos p a ra los b loqu es
Las im plem en tacion es d e las ta b la s d e sím b olos para los bloqu es p ueden aprovechar la
regla d el b loqu e anidado m ás cercano. E l an idam iento asegura q u e la ca d en a d e tablas
d e sím b olos aplicables form e u na pila. E n la parte su perior d e la p ila se en cu en tra la
ta b la para el bloque actu al. D eb ajo d e ella en la p ila está n la s ta b la s para los bloques
circundantes. Por en d e, las ta b la s d e sím b olos pueden asignarse y d esasignarse e n form a
parecida a u n a pila.
A lgunos com piladores m antienen u na so la hash ta b le d e entradas accesibles; es decir,
d e en trad as q ue no se o cu lta n m ed ian te u n a d eclaración en u n bloque anidado. D ich a
hash tab le so p o rta b úsq uedas esen ciales en tiem p o s co n sta n tes, a ex p en sa s d e insertar y
elim inar en trad as al entrar y salir d e los bloques. A l salir d e un b loqu e B , el com pilador
d eb e deshacer cualquier m odificación a la hash ta b le d eb ido a las declaraciones en el
bloque B . P ara ello p uede u tilizar u n a p ila auxiliar, para llevar e l rastro d e las m odifica­
ciones a la ta b la hash m ientras se p rocesa e l bloque B.
Inclusive, u na in stru cción puede ser un bloque, p or lo q ue nuestro lengu aje p erm ite bloques
an idad os, en d ond e p uede volver a declararse u n identificador.
L a regla d e l bloque an idado m á s cercano n os in d ica q ue un identificador x se encuentra
e n e l alcance d e la declaración an id ad a m ás cerca n a d e x\ es decir, la d eclaración d e x q ue se
en cu en tra al exam in ar los bloques d esd e adentro h acia fuera, em p ezan d o con el b lo q u e e n el
q u e aparece x.
E j e m p lo 2 .1 5 : E l sigu ien te seu d ocód igo u tiliza su bín d ices para diferenciar en tre las d istin tas
declaraciones d e l m ism o identificador:
1)
{
i n t » i;
2)
3)
{
4)
5)
}
6)
¡n t
y x\
¡ n t w 2] b o o l
y 2; i n t z 2\
••• W2 •••; ••• x i •••; ••• y<¿
••• w 0 •••;
••• z 2 •••;
x i •••; ••• y i •••;
}
E l su bín d ice no form a parte d e un identificador; es, d e hecho, el núm ero d e lín ea d e la declara­
ción q ue se ap lica a l identificador. Por en d e, to d a s las ocu rren cias d e x está n d en tro d el alcance
d e la d eclaración en la lín ea 1. L a ocu rren cia d e y en la lín ea 3 e s tá en el alcance d e la declara­
ción d e y en la lín ea 2, y a q ue y s e volvió a declarar d en tro d e l bloque interno. Sin em bargo, la
ocu rren cia d e y en la línea 5 e s tá den tro d el alcance d e la d eclaración d e y e n la lín ea 1.
L a ocu rren cia d e w en la lín ea 5 s e en cu en tra su p u esta m en te d en tro d e l alcance d e una
d eclaración d e w fuera d e e s te fragm ento d e l program a; su su bín d ice 0 d en o ta u na declaración
q ue es glob al o ex tern a p ara e s te bloque.
P or ú ltim o , 2 se d eclara y se u tiliza d en tro d e l bloque anidado, pero n o p uede usarse e n la
línea 5, y a q ue la d eclaración an idad a se ap lica só lo al b loqu e anidado.
□
88
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
La regla d el bloque anidado m ás cercano p u ed e im plem entarse m ed ian te e l en cad en am ien to
d e las tab las d e sím b olos. E s decir, la ta b la para un bloque anidado a p u n ta a la ta b la para el
bloque circundante.
E j e m p lo 2 .1 6 : La figura 2.36 m uestra tab las de sím b olos para el seu d o có d ig o d el ejem p lo
2.15. B i es para el bloque q ue em p ieza en la línea 1 y B¿ es para el bloque q u e em p ieza en la
lín ea 2. E n la p arte su perior d e la figura hay u n a ta b la d e sím b olos adicional B q para cualquier
declaración glo b a l o predeterm inada que proporcione e l lenguaje. D urante e l tiem p o q ue anali­
zam os las lín eas 2 a 4 , el en torn o s e represen ta m ediante u na referencia a la ta b la d e sím bolos
inferior (la d e B¿). C uando avanzam os a la lín ea 5, la ta b la d e sím b olos para B¿ se v u elv e in­
accesible, y e l en torn o se refiere en su lugar a la ta b la d e sím b olos para B \ , a p artir d e la cual
p od em os llegar a la ta b la d e sím b olos global, pero no a la ta b la para B 2.
□
w
X
y
w in t
...
in t
in t
x
y ïooJ
z in t
F igu ra 2.36: Tablas d e sím b olos en cad en ad as para el ejem p lo 2.15
La im plem en tación en J ava d e las tab las d e sím b olos en cad en ad as en la figura 2.37 d efin e a
u n a clase E n t, abreviación d e en torn o .9 L a clase E n t so p o rta tres operaciones:
• O rear u na n u eva tabla d e sím bolos. E l con stru ctor E nt (p ) en las líneas 6 a 8 d e la figura
2.37 crea un o b je to E n t co n u n a hash ta b le llam ad a t a b l a . E l o b je to se en ca d en a al
parám etro co n valor d e en torn o p, estab lecien d o e l cam p o s i g u i e n t e a p. A un qu e los
o b je to s E n t son los q ue form an u n a cadena, es con ven iente hablar d e las ta b la s q u e s e van
a encadenar.
• p u t u n a n ueva en trad a en la ta b la actual. L a hash ta b le co n tien e pares clave-valor, en
donde:
- La clave e s u na cadena, o m ás bien u n a referencia a u n a cad en a. P odríam os usar d e
m anera altern ativa referencias a o b je to s tok en para identificadores com o las claves.
- E l va lo r e s u n a en trad a d e la c la se S im b o lo . E l có d ig o en las líneas 9 a 11 n o nece­
sita con ocer la estru ctu ra d e u n a entrada; es decir, e l có d ig o es in depend iente d e los
cam p os y los m éto d o s en la clase S im b o lo .
9“Entorno” e s otro térm ino para la colección d e tablas d e sím b olos q u e son relevantes en un punto dado en el
programa.
2 .7
Tablas d e símbolos
89
/ / Archivo Ent.java
1) package símbolos;
2) import java.util.*;
3) public class Ent {
4)
private Hashtable tabla;
5)
protected Ent ant;
6)
public Ent(Ent p) {
7)
tabla * n e w Hashtable(); ant = p;
8)
>
12)
public Simbolo get(String s) {
for( Ent e - this; e
13)
!■ nuil; e = e.ant ) {
14)
Simbolo encontro = (Simbolo)(e.tabla.g e t (s));
15)
ií( encontro !- null ) return encontro;
16)
>
17)
return null;
>
18)
19) >
F igu ra 2.37: L a clase E n t im p lem en ta a las ta b la s d e sím b olos encadenadas
• g e t u na en trad a para un identificador buscando en la ca d en a d e tablas, em p ezan d o con la
tab la para el bloque actu al. E l cód igo para e s ta operación en la s líneas 12 a 18 devuelve
una en trad a en la ta b la d e sím b olos o n u i l .
E l encad en am ien to d e las tab las d e sím bolos produce u na estru ctu ra tip o árbol, y a q ue p u e­
d e anidarse m ás d e u n bloque dentro d e un bloque circundante. Las líneas p un teadas en la figura
2.36 so n un recordatorio d e q ue las tab las d e sím bolos encadenadas pueden form ar un árbol.
2.7.2
E l uso de las ta b la s de sím bolos
E n efecto, la fun ción d e una tab la de sím b olos es pasar inform ación d e las declaraciones a los
usos. U n a acción sem á n tica “co lo ca ” (p u t) inform ación acerca d e u n identificador s e n la ta b la
d e sím b olos, cu an d o s e a n aliza la d eclaración de x. P osteriorm ente, una acción sem á n tica aso­
cia d a con u na producción com o f a c to r -► id “o b tie n e” (g et) inform ación acerca d e l identifica­
dor, d e la tab la d e sím b olos. C om o la trad ucción d e u na exp resión Ey o p E¿, para u n operador
o p ordinario, d ep en d e só lo d e las trad uccion es d e E i y
y no d irectam ente d e la ta b la de
sím b olos, p od em os agregar cualquier núm ero d e operadores sin necesidad d e cam b iar e l flujo
b ásico d e inform ación d e las d eclaraciones a los usos, a través d e la ta b la d e sím bolos.
E j e m p lo 2 .1 7 : E l esq u em a d e trad ucción e n la figura 2 .38 ilu stra cóm o p uede usarse la clase
E n t. E l esq u em a d e traducción se con cen tra en los alcances, las declaraciones y lo s usos. Im plem en ta la trad ucción d escrita en e l ejem p lo 2.14. C om o d ijim os an tes, en la en trad a
90
Capítulo 2.
program a
-*
Un traductor sim ple orientado a la sintaxis
{ sup = n u il; }
bloque
bloque
-*■ '{ '
{ gu ardado = sup;
su p = n e w E n t(su p )\
print("{ "); }
decís in s tr s
{ su p = gu ardado ,
print("} ■); }
decís
-►
i
decís deci
«
deci
-►
t ip o id ;
in s tr s
-*•
I
in s tr s in s tr
c
in s tr
-*■
|
bloque
f a c to r ;
-►
id
f a c to r
{ s = n e w Sím b o lo ;
s.ty p e — t i p o , k x em a
su p .p u t(iá . k x em a , s); }
{ p r in t(" ; "); }
{ 5 = 5up.pe¿(id.fea:ema);
p rin t(id .k re m a );
p rin t(" :"); }
print (s.tipo)]
F igu ra 2.38: E l u so d e las tab las de sím b olos para trad ucir un lengu aje con bloques
{ in t x;
char y ;
{ b ool y; x; y; > x; y; }
e l esq u em a d e traducción elim in a las declaraciones y produce
{
{
x:int;
y:bool;
}
x:int;
y:char; }
O bserve q ue los cu erp os d e las producciones se alinearon en la figura 2.38, para q ue todos
los sím b olos d e g ra m á tica aparezcan en u n a colu m n a y to d a s las accion es en u n a segu n d a
colum na. C om o resu ltad o, por lo general, los com p o n en tes d el cu erpo se esparcen a través d e
varias líneas.
A hora, considerem os las accion es sem án ticas. E l esq u em a de trad ucción crea y d esca rta las
tab las d e sím b olos al m om ento d e entrar y salir d e los bloques, resp ectivam en te. L a variable
sup d en o ta la ta b la superior, e n e l en cab ezad o d e u n a ca d en a d e tab las. L a prim era producción
d e la gram ática su b yacen te es program a -► bloque. L a acción sem á n tica an tes d e bloque inicializa sup a n u il , sin entradas.
2.8
Generación d e código interm edio
91
L a seg u n d a producción, bloque
decís i n s t r s tien e accion es a l m om ento en q u e se
en tra y se sa le d e l bloque. A l entrar al bloque, an tes d e decís, u n a acción sem á n tica g u a rd a una
referencia a la ta b la actual, usando u na variable local llam ad a guardado. C ada u so d e e s ta pro­
d u cción tien e su propia variable local gu ardado, d istin ta d e la variable local para cualquier otro
u so d e e s ta producción. E n un analizador sin tá ctico d e d escen so recursivo, gu ardado sería local
para e l bloque for d el procedim iento. E n la secció n 7 .2 verem os el tratam ien to d e las variables
locales d e u na fun ción recursiva. E l sigu ien te código:
sup = n e w E n t(sup);
estab lece la variable sup a u n a ta b la recién crea d a q ue e s tá en cad en ad a al valor anterior d e su p,
ju sto antes d e entrar a l bloque. L a variable su p es un o b jeto d e la cla se Ent; e l có d ig o p a ra e l
con stru ctor E n t aparece en la figura 2.37.
A l salir del bloque, d esp u és d e T , u n a acción sem á n tica restaura su p al valor q ue ten ía
guardado a l m om ento d e entrar al bloque. E n realidad, las tab las form an u na pila; al restaurar
su p a su valor guardado, s e sa c a el efecto d e las declaraciones en e l b loq u e.10 Por en d e, las
d eclaraciones en el b loq u e n o so n visib les fuera d e l m ism o.
U n a declaración, decís -> t i p o id produce u n a n ueva en trad a para e l identificador de­
clarado. A su m im os q ue los tokens t i p o e id tien en ca d a u no u n a trib u to asociado, q ue es el
tip o y el lexem a, resp ectivam en te, d el identificador declarado. E n vez d e pasar p or tod os los
c a m p o s d e un o b je to d e sím b olo s, asum irem os q ue h ay un cam p o tipo q ue prop orciona e l tip o
d e l sím b olo. C ream os u n nuevo o b je to d e sím b olo 5 y asignam os s u tip o d e m anera apropiada,
m ed ian te s .tip o = t i p o .lexem a. L a en trad a co m p leta se co lo ca e n la ta b la d e sím b olos superior
m ed ian te su p .p u t(iá . lexem a, s).
L a acción sem á n tica en la producción f a c to r ->■ id u tiliz a la ta b la d e sím b olos p a ra obtener
la en tra d a p ara el id en tificad or. L a o p era ció n g e t b u sca la p rim era en trad a en la ca d en a d e
tab las, em p ezan d o co n sup. L a en trad a q u e se o b tie n e co n tien e to d a la inform ación necesaria
acerca d e l identificador, com o s u tip o.
□
2.8
G e n e ra c ió n d e código in te rm e d io
E l front-end d e un com pilador con stru ye u n a representación in term ed ia d el program a fuente,
a partir d e la cu a l e l back-end g en era e l program a d estin o. E n e s ta secció n considerarem os
representaciones interm edias para exp resion es e in stru cciones, y verem os ejem p los d e cóm o
producir d ich as representaciones.
2.8.1
D o s tip o s de rep re sen ta cio n es in term ed ia s
C om o sugerim os en la sección 2.1 y esp ecia lm en te en la figura 2.4, las d os representaciones
in term ed ias m ás im p ortan tes son:
i0En vez d e guardar y restaurar tablas en form a exp lícita, u n a alternativa p odría ser agregar las operaciones
está tica s p u sh y pop a la clase Ent.
92
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
• Los árboles, in clu yen d o los d e an álisis sin tá ctico y los sin tá ctico s (abstractos).
• Las representaciones lineales, en esp ecial el “cód igo d e tres d irecciones”.
Los árboles sin tá ctico s ab stractos, o sim p lem en te sin tá ctico s, se presentaron en la sección
2.5.1, y en la sección 5.3.1 volverem os a exam in arlos d e u n a m anera m ás form al. D urante el
análisis sin táctico, se crean los n od os d el árbol sin tá ctico para representar con stru cciones d e
program ación im portan tes. A m ed ida q ue avan za e l análisis, se agrega inform ación a lo s nodos
en form a d e atrib u tos asociados co n ésto s. L a elecció n d e a trib u to s d ep en d e d e la trad ucción
a realizar.
Por o tro lado, el cód igo d e tres d irecciones es u na secu en cia d e pasos d e program a elem en ­
tales, com o la su m a d e d o s valores. A diferencia d e l árb ol, n o h ay u n a estru ctu ra jerárquica.
C om o verem os en e l ca p ítu lo 9, n ecesitam os e s ta representación si v a m o s a realizar algún tip o
d e op tim ización im p ortan te d e cód igo. E n ese caso, d iv id im o s la e x te n sa secu en cia d e instruc­
cion es d e tres direcciones q ue form an un program a e n “bloqu es b á sico s” , q ue so n secu en cias d e
instrucciones q u e siem p re s e ejecu tan u na d esp u és d e la otra, sin bifurcaciones.
A dem ás d e crear u n a rep resen tación interm edia, el front-end d e u n com p ilad or com p ru eb a
q ue el program a fuente sig a las reglas sin tá ctica s y sem á n tica s d e l len gu aje fu en te. A e s ta
com p rob ación s e le c o n o ce com o com probación e s tá tic a ; e n general, “e s tá tic o ” sig n ifica “rea­
lizado p or e l com p ilad or” .11 L a com p rob ación e s tá tic a asegura q ue s e d e te c te n cierto s tip o s
d e errores d e program ación, in clu yen d o los co n flicto s d e tip o s , y q u e s e reporten d u ra n te la
com p ilación.
Es p osib le q ue u n com p ilad or con stru ya un árbol sin tá ctico al m ism o tiem p o q ue em ite los
p asos d e l cód ig o d e tres direcciones. N o o b sta n te , es com ú n q ue lo s com piladores em ita n el
cód igo d e tres direcciones m ientras e l analizador sin tá ctico “avan za en e l proceso” d e construir
un árbol sin táctico, sin construir en realidad la estru ctu ra d e d a to s tip o árbol com p leta. En
v ez d e ello, el com p ilad or a lm acen a los n od os y su s atrib utos necesarios para la com probación
sem á n tica o para otros fines, ju n to con la estru ctu ra d e d a to s u tiliza d a para e l an álisis sin tác­
tico . A l hacer e s to , las p artes d e l árbol sin táctico q u e so n necesarias p a ra construir e l cód igo
d e tres direcciones está n d isp on ib les cu an do se n ecesitan , pero d esaparecen cu an do y a no son
necesarias. E n el cap ítu lo 5 verem os los d etalles relacionados co n e s te proceso.
2.8.2
C o n stru cc ió n de á rb o les sin tá ctico s
Prim ero vam os a proporcionar un esq u em a d e trad ucción para construir árboles sin tá ctico s,
y desp ués, en la sección 2.8.4, m ostrarem os cóm o p u ed e m odificarse e s te esq u em a para em itir
có d ig o d e tres direcciones, ju n to con , o en v e z d e , e l árbol sin táctico.
En la sección 2.5.1 v im o s q ue el árbol sin táctico
u Su contraparte, “dinám ico”, sign ifica “m ientras e l programa s e ejecu ta”. Muchos lenguajes tam bién realizan
ciertas com probaciones dinám icas. Por ejem plo, un lenguaje orientado a ob jeto s com o Java algunas veces d eb e com ­
probar los tip o s durante la ejecución d e un program a, y a q u e e l m étodo q u e s e aplique a un ob jeto puede depender de
la su b clase específica d e e s e objeto.
2.8
Generación d e código interm edio
93
op
Ei
representa u n a expresión q ue se form a al aplicar el operador o p a las su bexpresiones repre­
sen ta d a s por E i y E¿. P u ed en crearse árboles sin tá ctico s p a ra cualquier con stru cción , no solo
exp resion es. C ad a con stru cción s e represen ta m ed ian te u n nodo, co n hijos para lo s com p onen ­
te s co n sign ificad o sem án tico d e la con stru cción. Por ejem p lo, lo s co m p o n en tes co n significado
sem án tico d e u n a instrucción w hile e n C:
w h i l e ( e x p r ) in s tr
so n la exp resión ex p r y la instrucción in str.12 E l nodo del árbol sin tá ctico para u n a instrucción
w h ile d e e s te tip o tien e u n op erad or, al cual llam am os w h i l e , y d o s hijos: los árboles sin tá cti­
co s para e x p r y para in str.
E l esq u em a d e traducción e n la figura 2.39 con stru ye árboles sin tá ctico s para un lenguaje
representativo, pero b astan te lim itado, d e exp resion es e instrucciones. T od os los n o term inales
e n e l esq u em a d e trad ucción tien en un atrib u to n, q ue es un n o d o d el árbol sin tá ctico . Los
n od os se im plem en tan com o o b je to s d e la cla se N odo.
L a clase N odo tien e d os su b clases interm edias: E x p r para to d o tip o d e exp resion es, e I n s tr
para tod o tip o de instrucciones. C ad a tip o d e in stru cción tien e u na su b clase corresp ond ien te de
I n s tr ; por ejem p lo, el operador w h i l e corresponde a la su b cla se W hile. U n n o d o d e l árbol sin­
tá ctico para el operador w h i l e , con los hijos x y y se crea m ed ian te e l sigu ien te seudocódigo:
n ew
W hile(x,y)
e l cu a l crea u n o b je to d e la clase W hile m ed ian te u na llam ad a al con stru ctor con stru ctora
W hile, co n el m ism o nom bre q ue la clase. A l igual q ue los con stru ctores corresponden a los
operadores, los parám etros d e los con stru ctores corresponden a lo s op eran d os e n la sin ta x is
ab stracta.
C uan do estu d iem os e l cód igo d etallad o en e l ap én d ice A , verem os cóm o se co lo ca n los
m éto d o s en d o n d e p erten ecen en e s ta jerarquía d e clases. E n e s ta secció n hablarem os só lo de
algu nos m éto d os, d e m anera informal.
V am os a considerar ca d a u n a d e las producciones y reglas d e la figura 2.39, u n a a la vez.
Prim ero exp licarem os las p roducciones q ue definen d istin to s tip o s d e instrucciones, y desp ués
las producciones q u e d efinen n uestros tip os lim itad os d e expresiones.
Á rboles sin tácticos para las instrucciones
P ara ca d a construcción d e u na instrucción, definim os un operador en la sin ta x is abstracta. Para
las construcciones q u e em piezan co n u n a palabra clave, vam os a usar la palabra clave para el
operador. Por en d e, h ay u n operador w h i l e para las instrucciones w hile y un operador d o para
12El paréntesis derecho sólo sirve para separar la expresión d e la instrucción. E l paréntesis izquierdo en realidad no
tien e significado; e s tá a h í sólo para facilitar la legibilidad, y a qu e sin é l, C perm itiría paréntesis desbalanceados.
94
Capítulo 2.
p ro gram a
->
bloque
-*
in s tr s
-►
i
i n s tr
-►
bloque
¿ns£r$ O*'
m sír si
€
Un traductor sim ple orientado a la sintaxis
{ return bloque.n\ }
{ bloque.n = in strs.n \ }
{ in str s .n = n e w S e c (in s tr s \.n , in str.n ); }
{ in str s .n = n u il; }
expr ;
{ in s tr .n — n e w E u al(expr.n)\ }
i f ( e x p r ) in s tn
{ i n s t r . n = n e w Ij( expr.n, in s tn . n); }
w h i l e ( e x p r ) in s tn
{ in s tr .n = n e w W h ile(ex p r.n , tn sfri.n ); }
d o in s tn w h i l e ( e x p r ) ;
{ i n s t r . n = n e w D o (in s tn .n , ex p r.n ); }
bloque
{ in s tr .n = bloque.n] }
expr
-►
rel = e x p n
rel
{ expr.n = n e w A s i g n a ( ' = re/.n, eæ pn.n); }
{ expr.n = rel.n\ }
i
i
rel\ < ad ic
re/i <= adic
a d ic
{ r e i n = n e w R e l ( ' < re^ .n , ad ic.n); }
{ r e i n = n e w R e l ( ' < r e t .n , adic.n ); }
{ r e i n = adic.n; }
a dici + te rm
te r m
{ a d ic .n = n e w O p ( ' + a d i & .n , term .n );
{ a d ic .n = te r m .n ; }
}
i
¿ermi * f a c to r
/acior
{ te rm .n = n e w 0p(V, te r m \.n , fa c to r .n);
{ te rm .n = fa c to r .n] }
}
( expr )
num
{ fa c to r .n = ex p r.n ; }
{ f a c to r.n = n e w
i
reí
te r m
-►
-►
i
ja c fo r
-►
i
n u m . valor); }
Figura 2.39: Construcción de árboles sintácticos para expresiones e instrucciones
2.8
Generación d e código interm edio
95
las instrucciones do-w hile. Las instrucciones condicionales pueden m anejarse m ediante la defini­
ción d e d os operadores i f e l s e e i f para las instrucciones i f con y sin u n a p arte e l s e , respectiva­
m ente. E n nuestro lenguaje d e ejem p lo sim ple, no utilizam os e l s e , por lo cual só lo ten em os una
instrucción if. A gregar e l s e im plicaría ciertos problem as d e análisis sin táctico, lo cu a l verem os
e n la sección 4.8.2.
C ada operador d e instrucción tiene u na clase correspondiente con el m ism o nom bre, con
la prim era letra en m ayúscula; por ejem plo, la clase //c o r r e sp o n d e a if. A dem ás, definim os la
su b clase 5ee, q ue representa a u na secu en cia d e instrucciones. E sta su b clase corresponde a la no
term inal in strs d e la gram ática. C ad a una d e esta s clases es su bclase d e In str, q ue a su vez es
u n a su bclase d e Nodo.
E l esq u em a d e traducción en la figura 2 .39 ilu stra la con stru cción d e los n od os d e árboles
sin tá ctico s. U n a regla típ ica es la d e las instrucciones if:
in s tr
-*
i f ( ex p r ) in s tn
{ in str.n = n e w If(e x p r.n , in a tri.n ); }
Los com p on en tes im p ortan tes d e la in stru cción i f son ex p r e in s tn . L a acción sem á n tica define
e l nodo m s¿r.n com o u n nuevo o b je to d e la su b clase I f . E l có d ig o para el con stru ctor d e I f n o se
m uestra. C rea un nuevo nodo etiq u eta d o com o if, co n los n od os ex p r.n e in s tr i.n com o hijos.
Las instrucciones d e exp resion es no em p iezan co n u n a palabra clave, p or lo q ue definim os
u n nuevo operador e v a l y la clase Eval, q u e es u na su b clase d e I n s tr , para representar las
exp resion es que son instrucciones. L a regla relevante es:
in s tr
-►
ex p r ;
{ in s tr .n — n e w E v a l (expr.n)] }
R e p r e s e n t a c ió n d e lo s b lo q u e s e n lo s á r b o le s s in t á c t ic o s
L a con stru cción d e la in stru cción restante en la figura 2 .39 es e l b loq u e, el cu a l co n siste e n una
secu en cia d e instrucciones. C onsidere las sig u ien tes reglas:
in s tr
-►
bloque
->■
bloque
in s tr s ' } '
{ in s tr .n = bloque.n; }
{ bloque.n = in s tr s .n; }
L a prim era d ice q ue cu an d o u n a in stru cción e s un bloque, tien e e l m ism o árbol sin tá ctico q u e el
bloque. L a seg u n d a regla d ice q ue e l árbol sin tá ctico para e l no term inal bloque es sim p lem en te
e l árbol sin tá ctico para la secu en cia d e instrucciones e n e l bloque.
P or cu estió n d e sim p licidad , e l lengu aje en la figura 2 .39 no incluye d eclaraciones. Aun
cu an d o las declaraciones s e incluyen en e l apéndice A , verem os q ue el árbol sin tá ctico para
u n b loqu e sigu e sien d o e l árbol sin tá ctico p a ra las in stru cciones en e l bloque. C om o la infor­
m ación de las declaraciones e s tá in corporada en la ta b la d e sím b olos, n o se n ecesita e n e l árbol
sin táctico. Por lo tan to, los b loqu es (con o sin d eclaraciones) parecen ser só lo o tra construcción
d e in stru cción e n e l cód igo interm edio.
U n a secu en cia d e instrucciones se represen ta m ed ian te el u so d e u n a h o ja n u i l para una
in stru cción vacía, y un operador s e c para u n a secu en cia d e instrucciones, com o s e m uestra a
continuación:
in strs -► in strsi in s tr
{ in str s .n — n e w S e c ( in s tr s \.n , in str.n ); }
96
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
E j e m p l o 2 .1 8 : E n la figura 2.40, vem os p arte d e un árbol sin tá ctico q ue representa a un b lo­
q u e, o lista d e in stru cciones. H ay d os instrucciones en la lista, siend o la prim era u n a instrucción
i f y la segu n d a u n a instrucción w h i l e . N o m ostram os la parte d e l árbol q ue e s tá p or en cim a
d e e s ta lista d e instrucciones, y só lo m ostram os co m o triángulo a c a d a u no d e lo s subárboles
necesarios: d os árboles d e exp resion es para las con d icion es d e las instrucciones i f y w h i l e , y
d os árboles d e instrucciones para su s su bin stru cciones.
□
se e
sec
w h ile
sec
n u il
F igu ra 2.40: P arte d e un árbol sin tá ctico para u na lista d e in stru cciones q u e co n siste en u na
instrucción i f y u n a in stru cción w h i l e
Á r b o le s s in tá c tic o s p a r a la s e x p r e s io n e s
A nteriorm ente m anejam os la precedencia m ás a lta d e * so b re + m ed ian te e l uso d e los tres n o
term inales ex p r, te r m y fa cto r. E l núm ero d e no term inales e s precisam ente u no m ás el núm ero
d e niveles d e p reced en cia en las exp resion es, com o sugerim os e n la sección 2.2.6. E n la figura
2.39, ten em os d o s operadores d e com p aración , < y <= en un nivel d e precedencia, a sí com o
los operadores + y * com u nes, p or lo q ue hem os agregado un no term inal adicional, llam ado
adic.
La sin ta x is a b stra cta n os p erm ite agrupar operadores “sim ilares” para reducir e l núm ero d e
ca so s y su b clases d e nodos en u n a im plem en tación d e expresiones. E n e s te ca p ítu lo , “sim ilar”
sign ifica q u e las reglas d e com probación d e tip o s y gen eración d e có d ig o para los operadores
son sim ilares. P or ejem plo, com ú nm en te los operadores + y * p ueden agruparse, y a q ue pueden
m anejarse d e la m ism a forma; su s requerim ientos e n relación con los tip o s d e op eran d os son los
m ism os, y cad a u no produce u n a instrucción in dividu al d e tres d irecciones q u e ap lica u n o p e­
rador a d os valores. E n general, el agrupam iento de operadores en la sin ta x is a b stra cta s e b asa
en la s n ecesid ades d e las fases p osteriores d el com pilador. L a ta b la en la figura 2.41 esp ecifica la
corresp ond en cia entre la sin ta x is con creta y a b stra cta para varios d e los operadores d e Java.
En la sin taxis con creta, tod os los operadores so n a sociativos p or la izquierda, ex c ep to el
operador d e asign ación =, e l cu a l es asociativo por la derecha. L os operadores en u n a línea
2.8
Generación d e código interm edio
Si n t a x i s
97
concreta
=
Sintaxis
abstracta
a s ig n a
I |
&&
== !=
<<=>=>
+ -
con d
con d
reí
reí
op
* / /
!
op
not
- unario
[]
m en os
acceso
F igu ra 2.41: S in taxis con creta y a b stra cta para varios operadores d e Java
tien en la m ism a precedencia; e s decir, = y ! = tien en la m ism a precedencia. Las líneas está n en
ord en de m enor a m ayor precedencia; p or ejem p lo, == tien e m ayor p reced en cia q u e los operado­
res && y =. E l su bín d ice u n a rio en - unario e s só lo para d istingu ir u n sign o d e m enos unario a la
izquierda, com o en - 2 , d e un sign o d e m enos binario, com o en 2 - a . E l operador [ ] representa
e l acceso a los arreglos, com o e n a [ i ] .
L a co lu m n a d e sin ta x is a b stracta esp ecifica e l agrupam iento d e los operadores. E l operador
d e asignación = e s tá en u n grupo p or s í solo. E l gru p o c o n d co n tien e los operadores booleanos
con d icion ales && y I I. E l gru p o r e í con tien e los operadores d e com paración relaciónales e n las
lín eas para == y <. E l gru p o o p con tien e los operadores aritm éticos co m o + y *. E l sign o m enos
unario, la negación b o olean a y e l acceso a los arreglos s e en cu en tran en gru p os por s í solos.
L a asignación entre la sin ta x is con creta y a b str a cta e n la figura 2.41 p uede im plem entarse
escribien do u n esq u em a d e traducción. Las p roducciones para lo s no term in ales ex p r, reí, a d ic,
te r m y ¡a c to r en la figura 2.39 especifican la sin ta x is co n creta para un su b co n ju n to represen­
ta tiv o d e los operadores en la figura 2.41. Las accion es sem án ticas e n esta s prod uccion es crean
n od os d e árboles sin tácticos. Por ejem plo, la regla
te rm
-*
te rm i * ¡a c to r
{ te rm .n — n e w O p (V ,te rm \.n , fa c to r.n ) ; }
crea un nodo d e la clase Op, q ue im p lem en ta a los operadores agrupados bajo o p en la figura
2.41. E l con stru ctor Op tien e un parám etro V para identificar al operador actual, ad em ás de
lo s n od os te r m i.n y fa c to r.n para las subexpresiones.
2 .8 .3
C o m p r o b a c ió n e s t á t i c a
Las com p rob acion es está tic a s so n com p rob acion es d e co n sisten cia q ue se realizan d urante la
com p ilación. N o so lo aseguran q ue u n program a p u ed a com p ilarse con éx ito , sin o q u e tam bién
tien en e l p oten cial para atrapar los errores d e program ación e n form a anticipada, antes de
ejecu tar un program a. L a com probación e s tá tic a in clu ye lo siguiente:
• C om probación sin tá c tic a . H ay m ás en la sin ta x is q ue las gram áticas. Por ejem p lo, las res­
tricciones com o la d e q ue un identificador se declare cu an do m en os u na vez en u n alcance
98
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
o q u e u na instrucción break d eb e ir d en tro d e un ciclo o d e u n a in stru cción sw itch , son
sin tácticas, aunque n o está n cod ificadas en, o im plem en tad as por, u na g ra m á tica q ue se
u tiliz a p ara e l an álisis sin táctico.
• C om probación d e tip o s. L as reglas sob re los tip o s d e u n lengu aje aseguran q u e un o p e­
rador o función s e aplique al núm ero y tip o d e op eran d os correctos. Si es necesaria la
conversión en tre tip os, p or ejem plo, cu an do s e su m a un en tero a un núm ero d e punto flo ­
ta n te, en ton ces el com probador d e tip o s p uede insertar un operador en el árbol sin tá ctico
para representar e s a conversión. A con tinu ación hablarem os sobre la conversión d e tipos,
usand o e l térm in o com ú n “coerción ”.
L - v a l u e
y
R - v a l u e
A hora considerarem os algu nas com p rob acion es está tic a s sim p les q ue p ueden realizarse d urante
la con stru cción d e u n árbol sin tá ctico para un program a fuente. E n general, ta l vez haya q ue
realizar com p rob acion es está tic a s com plejas, para lo cu a l prim ero hay q u e construir u na repre­
sentación in term ed ia y d esp u és analizarla.
H ay u na diferencia entre el sign ificad o d e los identificadores a la izquierda y el lado derecho
d e u n a asignación. E n ca d a u na d e las sigu ien tes asignaciones:
i = 5;
i = i + 1;
e l lado d erech o esp ecifica u n valor entero, m ientras q ue e l lado izquierdo esp ecifica en d ónd e
se v a a alm acenar el valor. Los térm inos Vvalue y r-va lu e se refieren a lo s valores q ue son
apropiados en los lados izquierdo y derecho d e u na asign ación, resp ectivam en te. E s decir, los
r-va lu e so n lo q u e g en eralm en te con sid eram os co m o “valores” , m ien tras q u e lo s U value so n
las ubicaciones.
La com p rob ación e s tá tic a d eb e asegurar q u e el lado izquierdo d e u n a asign ación d en o te a
un l-value. U n identificador com o i tien e un U value, al igual q ue u n acceso a u n arreglo com o
a [ 2 ] . Pero una co n sta n te com o 2 no e s apropiada e n e l lado izquierdo d e la asignación, y a q ue
tien e un r-va lu e, pero no un l-value.
C o m p r o b a c ió n d e t ip o s
La com probación d e tip os asegura q u e el tip o d e u n a construcción co in cid a con lo q u e espera
su co n tex to . P or ejem plo, en la sigu ien te in stru cción if:
¡ f ( e x p r ) in s tr
se esp era q ue la exp resión e x p r te n g a e l tip o b o o l e a n .
Las reglas d e com p rob ación d e tip os sigu en la estru ctu ra op era d o r/o p era n d o d e la sin ta x is
ab stracta. S u p on ga q ue e l operador r e í representa a los operadores relaciónales com o <=. La
regla d e tip os para e l grupo d e op erad ores r e í e s q ue su s d os op eran d os d eb en tener el m ism o
tip o, y el resu ltad o tien e e l tip o b oolean o. U tiliza n d o el a trib u to Upo para e l tip o d e u na ex ­
presión, dejem os q ue E c o n sista d e r e í aplicado a E i y E¿. E l tip o d e E p uede com probarse al
m om ento d e con stru ir s u nodo, m ed ian te la ejecución d e cód igo com o e l siguiente:
2.8
Generación d e código interm edio
99
i f ( E i.tip o = = E ¿.tipo ) E .tip o = boolean;
e ls e error;
L a id ea d e relacionar los tip o s actu ales con los esperad os se sig u e aplicando, aún en las
sigu ien tes situaciones:
• C oerciones. U n a coerción ocurre cu a n d o el tip o d e un operando s e con vierte en form a
a u to m á tica al tip o esperado p or e l operador. E n u n a exp resión com o 2 * 3 .1 4 , l a trans­
form ación usual es convertir el en tero 2 en un núm ero d e p u n to flo ta n te equivalente, 2 . 0 ,
y d esp u és realizar una operación d e p u n to flo ta n te con e l p ar resu ltan te d e operandos
d e p u n to flotan te. L a definición d el lengu aje esp ecifica las coercion es dispon ib les. Por
ejem plo, la regla actu al para r e í q ue vim os antes p o d ría ser q ue E i.tip o y E ¿.tipo puedan
convertirse al m ism o tip o. E n ta l ca so , sería legal com parar, p o r d ecir, un en tero con un
valor d e p u n to flotante.
• Sobrecarga. E l operador + en J a v a representa la su m a cu an do se ap lica a enteros; sign ifica
con caten ación cu an d o se ap lica a cad en as. Se d ice q ue u n sím b olo e s tá sobrecargado si
tien e d istin to s significados, d ep en diend o de su co n tex to . Por en d e, + e s tá sobrecargado en
Java. P ara d eterm in ar e l sign ificad o de u n operador sobrecargado, h ay q ue considerar los
tip o s con ocidos d e su s operandos y resultados. P or ejem plo, sa b em o s q ue e l + en z = x + y
es con caten ación si sab em os q ue cu alq uiera d e las variables x, y o z es d e tip o cad en a. N o
o b sta n te, si tam b ién sab em os que a lg u n a d e é s ta s es d e tip o entero, en to n ces ten em o s un
error en los tip o s y n o h ay sign ificad o para e s te u so d e +.
2 .8 .4
C ó d ig o d e t r e s d ir e c c io n e s
U n a vez q ue se con stru yen los árb oles d e sin ta x is, s e p u ed e realizar un p roceso m ás d etallad o
d e análisis y sín tesis m ed ian te la evalu ación d e los atrib u tos, y la ejecu ción d e fragm entos de
cód ig o en los nodos d e l árbol. P ara ilustrar las p osibilid ades, vam os a recorrer árboles sin ­
tá c tic o s p ara generar cód ig o d e tres direcciones. E n específico, le m ostrarem os cóm o escribir
funciones para procesar e l árbol sin tá ctico y, com o efecto colateral, em itir e l có d ig o d e tres
d irecciones necesario.
I n s t r u c c i o n e s d e t r e s d ir e c c io n e s
E l cód igo d e tres direcciones es u na secu en cia d e instrucciones d e la form a
x= y op z
e n d ond e x, y y z son nom bres, con sta n tes o valores tem porales generados por el com pilador; y
o p representa a un operador.
M anejarem os los arreglos u sand o las sig u ien tes dos varian tes d e instrucciones:
x [ y ] = 2
x= y [ z]
100
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
La prim era co lo ca e l valor d e 2 en la ubicación x[y] , y la seg u n d a co lo c a e l valor d e y[z] en la
ubicación x.
Las instrucciones d e tres direcciones se ejecu ta n en secu en cia num érica, a m enos q ue s e les
ob ligu e a hacer lo contrario m ediante un sa lto con d icion al o incondicional. E legim os las sigu ien ­
te s instrucciones para el flujo d e control:
if F a ls e x g o to L
ifT r u e x g o to L
g o to L
s i a; es falsa, ejecu tar a con tinu ación la in stru cción etiq u e ta d a com o L
s i a; es verdadera, ejecu tar a con tinu ación la in stru cción etiq u eta d a
com o L
ejecu tar a con tinu ación la instrucción etiq u e ta d a com o L
Para unir u na etiq u e ta L a cualquier instrucción, se le an tepon e el prefijo L :. U n a instrucción
p uede tener m ás d e u n a etiq u eta.
Por ú ltim o, n ecesitam os instrucciones para copiar u n valor. L a sig u ien te in stru cción d e tres
direcciones co p ia e l valor d e y a x:
x= y
T r a d u c c ió n d e in s t r u c c io n e s
Las instrucciones se trad u cen en cód ig o d e tres d irecciones m ediante e l uso d e instrucciones
d e sa lto , para im plem entar el flujo d e con trol a través d e la instrucción. L a d istrib ución d e la
figura 2.42 ilu stra la traducción d e i f ex p r t h e n in s tr 1. L a in stru cción d e sa lto en la sigu ien te
distribución:
i f F a l s e x g o t o después
sa lta sobre la trad ucción d e i n s tn si ex p r se ev a lú a com o f a l s e . Las d em á s con stru cciones d e
instrucciones se traducen d e m anera sim ilar, usand o sa lto s apropiados alrededor d el cód igo
para su s com p on en tes.
c ó d ig o p a r a c a lc u la r
expr en x
i f F a l s e x g o t o d esp u é s
c ó d ig o p a r a i n s t ^
d e s p u é s —►
F igu ra 2.42: D istribución d e cód ig o para la s in stru cciones if
P ara fines con cretos, m ostram os el seu d ocód ig o para la cla se / / e n la figura 2.43. L a cla se I f
es u n a su b clase d e I n str, a l igual q u e las clases para las dem ás con stru ccion es d e instrucciones.
C ad a su b cla se d e I n s tr tien e un con stru ctor (en e s te ca so , If) y u na función gen, a la cu a l lla ­
m am os para generar e l cód igo d e tres d irecciones para e s te tip o d e instrucción.
2.8
Generación d e código interm edio
101
c l a s s I f e x t e n d s I n s tr {
E xpr E\ I n s tr 5;
p u b l i c If(E x p r x , I n s tr y) { E = x, S = y; desp u es = n u e va etiq u eta Q ; }
p u b l i c v o i d gen () {
E xpr n — E .r - v a lu e Q ;
e m itir{ “i f F a l s e ” + n .to S trin g Q + “ g o t o ” + despues);
S .gen ()\
e m itir (d esp u es +
}
}
F igu ra 2.43: L a función gen en la cla se I f gen era cód igo d e tres direcciones
E l con stru ctor d e / / e n la figura 2.43 crea n od os d e árbol sin tá ctico para las instrucciones
if. S e llam a co n d o s parám etros, u n n od o d e exp resión x y un nodo d e in stru cción y , los cuales
gu ard a com o atrib utos E y S. E l con stru ctor tam bién asign a a l a trib u to despues u na nueva
e tiq u e ta ú nica, llam ando a la función n u eva etiq u eta Q . L a e tiq u e ta se utilizará d e acuerdo con
la d istrib ución e n la figu ra 2.42.
U n a vez q ue se construye e l árbol sin táctico com p leto para un program a fuente, se h a ce una
llam ad a a la función gen en la raíz d el árbol sin táctico. C om o un program a es un b loqu e en
nuestro lenguaje sim ple, la raíz d el árbol sin táctico representa la secuencia d e instrucciones en el
bloque. T od as las clases d e instrucciones con tien en u na función gen.
E l seu d ocód igo para la fun ción gen d e la cla se / / e n la figura 2 .43 e s represen tativo. L lam a a
E . r _ valueQ para traducir la exp resión E (la exp resión co n valor b oolean o q ue form a p arte de
las instrucciones if) y gu ard a e l nodo d e resu ltad o d ev u elto por E . E n b rev e hablarem os sobre
la trad ucción d e las expresiones. D esp ués, la función gen em ite un sa lto con d icion al y llam a a
S .gen Q para traducir la su b in stru cción S.
T r a d u c c ió n d e e x p r e s io n e s
A hora ilustrarem os la traducción d e las exp resion es, para lo cu a l considerarem os expresiones
q ue con ten gan operadores binarios o p , accesos a arreglos y asignaciones, adem ás d e co n sta n tes
e identificadores. Por cu estió n d e sim p licidad , en un acceso a un arreglo y[¿\, requerim os q ue y
se a un identificador .13 P ara u n a exp licación d eta lla d a sobre la generación d e có d ig o interm edio
para las exp resion es, vea la sección 6.4.
V am os a usar e l en foqu e sen cillo d e generar u n a in stru cción d e tres direcciones para ca d a
n od o d e operador en e l árbol sin táctico para u na expresión. N o se gen era có d ig o para los iden­
tificadores y las con stan tes, y a q ue ésto s p ueden aparecer com o d irecciones en las instrucciones.
S i u n n od o x d e la clase E xpr tien e u n operador o p , en ton ces se em ite u na in stru cción para
calcu lar e l valor e n e l nodo x y convertirlo e n un nom bre “tem poral” generado p or e l com p ila­
dor, p o r d ecir, t. P or en d e, i - j + k se traduce en dos instrucciones:
13Efite lenguaje sim ple s o p o r ta a[a[n]], p e ro no a[m] [n]. O bserve q u e a [ a [ n ] ] tien e la fo rm a a[£], e n donde
E es a [n ].
102
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
ti = i - j
t2 = ti + k
Con los accesos a arreglos y las asignaciones surge la necesidad d e diferenciar entre los
I-valúes y los r-valu es. Por ejem plo, 2 * a [ i ] p u ed e traducirse con virtien do e l r-va lu e d e a [ i ]
en u n nom bre tem poral, com o en:
ti = a [ i ]
t2 = 2 * ti
Pero no p od em os sim p lem en te usar un nom bre tem poral e n lugar d e a [ i ] , si a [ i ] aparece en
e l lado izquierdo d e u na asignación.
El m étod o sim p le u tiliza las d os funciones Uvalue y r-va lu e, q ue aparecen en las figuras
2.44 y 2.45, resp ectivam en te. C uan do la función r-va lu e s e ap lica a un nodo x q ue no es hoja,
gen era instrucciones para convertir a i en un nom bre tem poral, y d evu elve un nuevo nodo
q ue represen ta a este tem poral. C uan do se ap lica la función Irvalue a un n o d o q u e n o es hoja,
tam bién gen era in stru cciones para calcular los su bárboles d eb a jo d e x, y d ev u elv e un nodo q ue
represen ta la “dirección” para x.
D escribirem os prim ero la función Irvalué, y a q ue tien e m en os casos. A l aplicarse a u n nodo x,
la función l-value sim p lem en te d evu elv e x s i e s el n odo para u n identificador (es d ecir, si x e s
d e la clase Id). E n n uestro lengu aje sim p le, e l único otro caso en d ond e u n a exp resión tien e un
I-valué ocurre cu an d o x representa u n acceso a u n arreglo, com o a [ i ] . E n e s te caso, x ten d r á la
form a A cce so {y , z ) , en d ond e la clase A cceso es u n a su b cla se d e E x p r, y represen ta e l nom bre d el
arreglo al q u e se v a a acceder y 2 represen ta e l d esp lazam iento (índ ice) d el elem en to elegid o en
ese arreglo. D el seu d ocód igo en la figura 2.44, la fun ción IrvalueWama. a r-va lu e(z) p a ra generar
instrucciones, si es necesario, para calcu lar el r-va lu e d e 2 . D esp u és con stru ye y d evu elve un
nuevo nodo A cceso, con hijos p ara e l nom bre del arreglo y y el r-va lu e d e 2.
E xpr lrva lu e(x : E xpr) {
i f ( x es u n n od o I d ) r e t u r n x;
e l s e i f ( x es un n od o A c ce so (y, 2) y y es un nodo I d ) {
r e t u r n n e w A c ce so (y, r-valu e(z))\
}
e ls e error;
}
F igu ra 2.44: S eu docódigo para la función Uvalue
E j e m p lo 2 .1 9 : Cuando e l n od o x representa el acceso al arreglo a [ 2 * k ] , la llam ada a lrvalue(x)
gen era u na instrucción
t = 2 * k
y d evu elve u n nuevo n od o x ' q ue representa e l l-value a [ t ] , en d o n d e t es un nuevo nom bre
tem poral.
En detalle, se llega al fragm ento d e cód igo
2.8
Generación d e código interm edio
103
r e t u r n n e w A c ce so (y, r-va lu e(z))\
e n d on d e y e s el nodo para a y 2 es el n o d o para la expresión 2*k . La llam ad a a r-valu e(z)
gen era cód ig o p ara la expresión 2 *k (es decir, la in stru cción d e tres direcciones t = 2 * k ) y
d evu elv e el nuevo n od o / , q ue representa a l nom bre tem p oral t . E se nodo z ' se co n v ierte en el
valor d e l segu n d o cam p o en e l nuevo n od o A cceso llam ad o x ' q u e se crea.
□
E xpr r-v a lu e (x : E xpr) {
i f ( x es u n n od o I d o C o n sta n te ) r e t u r n x,
e ls e
i f ( x es u n n o d o Op ( o p , y , z) o R e í ( o p , y , z) ) {
t = nuevo tem poral;
em itir ca d en a para t = r-va lu e(y) o p r-valu e(z);
r e t u r n u n nuevo n o d o para í;
}
e l s e i f ( x es u n n o d o A cceso (y , z) ) {
t = nuevo tem poral;
llam ar a lrvalue(x), q ue d ev u elv e A cceso (y ,zf)\
em itir cad en a para t = A cceso (y , z*);
r e t u r n un nuevo nodo para
}
e l s e i f ( x es u n n o d o A sig n a (y , z) ) {
z ' = r-va lu e(z);
em itir ca d en a para lrvalue(y) = zf\
r e t u r n z'\
}
}
F igu ra 2.45: S eu docódigo para la fun ción r-valu e
L a función r-valu e en la figura 2.45 gen era instrucciones y d ev u elv e un n odo q u e p o sib le­
m en te e s nuevo. C uan do x representa a un identificador o a u n a co n sta n te, r-va lu e d ev u elv e la
m ism a x. E n tod os los d em ás casos, d evu elve un nodo I d para un nuevo nom bre tem poral t.
Los casos son los siguientes:
• C uan do £ representa a t / o p 2 , e l cód ig o prim ero ca lcu la y ' = r-va lu e(y) y z! = r-va lu e(z).
C rea u n nuevo nom bre tem poral t y g en era u n a in stru cción t = y ' o p z ' (dicho en form a
m ás precisa, u na instrucción q ue se form a a partir d e las represen taciones d e ca d en a de
í / , o p y zf). D evu elve un n odo para e l identificador t.
• C uan do x representa un acceso a un arreglo y[¿\, p od em os reutilizar la función Uvalue. La
llam ad a a Irvalue(x) d evu elve un acceso i/[¿/], en d ond e z ' represen ta a u n identificador
que con tien e e l d esp lazam iento para e l acceso al arreglo. E l có d ig o crea un nuevo nombre
tem p oral t, gen era u n a instrucción b asada en t — y[zf] y d ev u elv e un nodo para t.
104
Capítulo 2.
Un traductor sim ple orientado a la sintaxis
• C uan do x represen ta a y = z , en to n ces e l có d ig o prim ero ca lcu la z' = r-va lu e(z). G enera
u n a in stru cción con b ase en lrvalue(y) — zf y d ev u elv e el nodo z ’.
Ejemplo 2.20:
C uando se ap lica a l árbol sin tá ctico para
a[i] = 2*a[j-k]
la función r-valu e genera
t3 = J
t2 = a
ti = 2
a [ i ]
- k
[ t3 ]
* t2
= ti
Es decir, la raíz es un n odo A sig n a co n el prim er argum ento a [ i ] y e l segu n d o argum ento
2 * a [ j - k ] . P or en d e, se ap lica el tercer caso y la fun ción r-va lu e e v a lú a e n form a recursiva
a 2 * a [ j - k ] . L a raíz d e e s te subárbol es e l nodo O p para *, q ue produce la creación d e un nuevo
nom bre tem poral t i , an tes d e q ue se evalúe el op eran d o izquierdo 2 , y d esp u és el operando
derecho. L a co n sta n te 2 no g en era un cód ig o d e tres direcciones, y su r-va lu e se d evu elve co ­
m o nodo C o n sta n te co n el valor 2.
El operando derecho a [ j - k ] e s u n n od o A cceso, el cu a l provoca la creación d e un nuevo
nom bre tem p oral t 2 , antes d e q ue se h aga u n a llam ad a a la fun ción l-value en e s te nodo.
D espués se hace u n a llam ad a recursiva a r-valu e sobre la exp resión j - k . C om o efecto colateral
d e e s ta llam ad a se gen era la instrucción d e tres d irecciones t3 = j - k, u n a vez q ue s e crea
e l nuevo nom bre tem poral t 3 . D esp ués, al regresar a la llam ad a d e ¡rvalue sobre a [ j - k ] , al
nom bre tem p oral 1 2 s e le asigna e l r-valu e d e la expresión d e acceso com p leta, es decir, t 2 =
a [ t 3 ].
A hora regresam os a la llam ada d e r-va lu e sobre el nodo O p 2* a [ j - k ] , q ue anteriorm ente
creó el nom bre tem poral t i . U n a instrucción d e tres d irecciones t i = 2 * t 2 se g en era com o un
efecto colateral, para evaluar e s ta expresión d e m ultiplicación. Por ú ltim o, la llam ada a r-valu e
en to d a la exp resión se co m p leta llam ando a Uvalue sobre e l lado izquierdo a [ i ] y después
generando u n a in stru cción d e tres d irecciones a [ i ] = t i , en d on d e e l lado derecho d e la
asignación se asig n a a l lado izquierdo.
□
Mejor código para las expresiones
P od em os m ejorar n uestra función r-valu e en la figura 2.45 y generar m enos instrucciones d e
tres direcciones, d e varias formas:
• R educir el núm ero d e instrucciones d e co p ia en u n a fase d e op tim iza ció n subsiguiente.
P or ejem p lo, e l par d e in stru cciones t = i +1 y i = t p ueden com b inarse en i = i + 1 , si
n o h ay u sos su bsiguientes de t .
• G enerar m enos instrucciones en prim er lu gar, tom an d o en c u en ta e l co n tex to . Por ejem ­
plo, s i el lado izquierdo d e una asignación d e tres d irecciones es u n acceso a u n arreglo
a [ t ] , en ton ces el lado derecho d eb e ser un nom bre, u na c o n sta n te o un nom bre tem poral,
ca d a u no d e los cu a les só lo u tiliza u n a dirección. P ero si e l lado izquierdo es un nom bre x,
en to n ces e l lado derecho p uede ser u na operación y op z que u tilice d o s direcciones.
2 .9 Resumen d el capítulo 2
105
P od em os evitar ciertas instrucciones d e co p ia m odificando las funciones d e traducción para
generar u n a in stru cción parcial q ue calcu le, p or ejem p lo j+ k , pero q ue n o se com p ro m eta a
indicar en d ón d e se v a a colocar el resu ltad o, lo cu al s e in d ica m ediante u n a dirección n u i l
para e l resultado:
n u il = j + k
( 2 . 8)
L a dirección d e resu ltad o n u la s e su stitu y e d esp u és p or u n identificador o un nom bre tem poral,
seg ú n s e a apropiado. Se su stitu y e p or un identificador si j+ k e s tá en e l lado derecho d e una
asignación, co m o en i = j + k ; , en cu yo caso la exp resión ( 2 . 8) se con vierte en
i = j + k
P ero, si j+ k e s u na su bexpresión, com o en j+ k + 1 , en ton ces la dirección d e resultado nula en
( 2 . 8) se su stitu ye por un nuevo nom bre tem poral t , y se gen era u na n u eva instrucción parcial:
t = j + k
n u il = t + 1
M uchos com p ilad ores realizan to d o el esfu erzo p osible p or generar có d ig o q u e s e a ta n bueno
o m ejor q u e e l cód ig o ensam blador escrito a m ano q ue producen lo s exp erto s. Si se u tiliza n las
técn icas d e op tim ización d e cód ig o com o las d el ca p ítu lo 9, en to n ces u na estra teg ia efectiv a
p od ría ser u tilizar un m étod o sim p le p ara la generación d e có d ig o interm edio, y d ep en der del
op tim izad or d e cód igo para elim inar las in stru cciones innecesarias.
2 .8 .5
E je r c ic io s p a r a la s e c c ió n 2 .8
Ejercicio 2.8.1:
Las instrucciones for en C y J a v a tien en la forma:
for ( e x p n ; expr¿ ; expr$ ) in s tr
L a prim era expresión se eje cu ta an tes d e l ciclo; p or lo gen eral se u tiliza para inicializar e l índice
d e l ciclo . L a seg u n d a expresión es u n a p ru eb a q u e se realiza an tes d e c a d a iteración d e l ciclo; se
sa le d el ciclo si la expresión s e convierte en 0. E l ciclo en s í p u ed e considerarse com o la instruc­
ción { in s tr ex p rs; } . L a tercera exp resión se eje cu ta al final d e c a d a iteración; p or lo general se
u tiliz a para increm entar e l índice d el ciclo. E l sign ificad o de la in stru cción for es sim ilar a:
e x p n ; while ( expr¿ ) { in s tr expr 3 ; }
D efin a u n a clase F or para las instrucciones for, d e m anera sim ilar a la cla se / / e n la figura
2.43.
Ejercicio 2.8.2: E l lengu aje d e program ación C no tien e un tip o b oolean o. M u estre có m o un
com p ilad or d e C p od ría traducir u n a in stru cción if e n có d ig o d e tres direcciones.
2.9
R e su m e n d e l c a p ítu lo 2
Las técnicas orien tad as a la sin ta x is q u e vim os en e s te ca p ítu lo p ueden usarse para construir
interfaces d e usuario (front-end) d e com piladores, com o las q ue se m uestran en la figura 2.46.
106
C a p ítu lo 2 .
if
( v is ta z o =
U n tr a d u c to r s i m p l e o r ie n ta d o a la s i n t a x i s
*\ n ’ ) l i n e a = l i n e a + 1 ;
Analizador léxico
(if) ((> (id , " v is ta z o " ) (eq ) ( c o n s t , > \n ’ ) ())
( i d , " lin e a " ) ( a s ig n a ) (id , " lin e a " ) (+) ( n u m , 1 ) (;
______________________________* ______________________________
Traductor orientado a la sintaxis
I
1 : t i = ( in t )
-e\
vistazo
2: i f F a l s e v i s t a z o == t i g o to 4
asigna
(in t)
i
3\ n 3
/
linea
/
3: l i n e a = l i n e a + 1
\
4:
+
\
linea
1
F igura 2.46: D os p osibles traducciones d e u n a instrucción
♦ E l pun to inicial para un traductor orientado a la sin ta x is es u n a gram ática para el
lengu aje fuente. U n a g ra m á tica d escrib e la estru ctu ra jerárquica d e los program as. Se
d efine e n térm inos d e sím b olos elem entales, conocidos com o te rm in a le s, y d e sím bolos
variables llam ados no term in a les. E sto s sím b olos representan con stru cciones d el lenguaje.
Las reglas o produ cciones d e una gram ática con sisten en un n o term inal con ocido com o
e l encabezado o lado izqu ierdo d e una producción, y d e u n a secu en cia d e term inales y no
term inales, co n ocid a com o e l cuerpo o lado derecho d e la producción. U n no term inal se
d esig n a co m o el sím bolo inicial.
♦ A l especificar u n traductor, es conveniente adjuntar atrib utos a la construcción d e pro­
gram ación, en dond e un a tribu to es cualquier can tid ad asociada con una construcción.
C om o las construcciones se representan m ed iante sím b olos d e la gram ática, el con cepto
d e los atrib u tos s e ex tien d e a los sím b olos d e la gram ática. A lgunos ejem p los d e atrib utos
incluyen un valor en tero asociado con u n term in al n u m q u e representa números, y una
ca d en a aso cia d a co n u n term inal i d que representa identificadores.
♦ U n an a liza d o r léxico lee la en trad a un carácter a la vez, y produce com o sa lid a u n flujo
d e to k en s, en dond e u n token con siste e n un sím bolo term inal, ju n to co n inform ación adi­
cio n a l en la form a d e valores d e atributos. E n la figura 2.46, los tokens se escriben com o
n-uplas encerradas en tre ( ). E l token (id , " v is t a z o " ) co n siste en la term inal id y en
un apuntador a la en trad a en la ta b la de sím b olos que con tien e la cad en a " v i s t a z o " . El
2 .9 Resumen d el capítulo 2
107
traductor u tiliza la ta b la para llevar la c u en ta d e las palabras reservadas e identificadores
que y a s e han analizado.
♦ E l a n álisis sin tá c tic o es e l problem a d e averiguar cóm o p uede derivarse u n a ca d en a de
term inales d e l sím b olo d e in icio d e la gram ática, su stitu y en d o en form a rep etid a un no
term inal por el cu erpo d e u n a d e su s producciones. E n general, un analizador sin táctico
con stru ye un árbol d e an álisis sin táctico , en el cu a l la raíz s e etiq u e ta con e l sím b olo ini­
cial, ca d a nodo q u e no es h oja corresponde a u na p rod ucción y ca d a h o ja se etiq u e ta con
un term inal o co n la ca d en a vacía, e. E l árbol d e an álisis sin tá ctico d eriv a la ca d en a de
term inales en las hojas, y se lee d e izquierda a derecha.
♦ Los analizadores sin tá ctico s eficien tes p ueden crearse a m ano, m ediante u n m éto d o tipo
d escen d en te (d e la raíz h a sta las hojas d e u n árbol d e an álisis sin tá ctico ) llam ado análisis
sin tá ctico p redictivo. U n a n a liza d o r sin tá c tic o p re d ictivo tien e un p rocedim ien to para
c a d a no term inal; los cu erpos d e los procedim ientos im ita n las p rod uccion es p a ra los no
term inales; y, e l flujo d e con trol a través d e lo s cu erpos d e los p rocedim ien tos p uede de­
term inarse sin am bigüedades, analizando un sím b olo d e preanálisis en e l flujo d e entrada.
E n e l ca p ítu lo 4 p o d rá ver otros m étod os para e l an álisis sin táctico.
♦ L a trad ucción orien tad a a la sin ta x is s e realiza adju ntand o reglas o fragm entos d e pro­
gram a a las p roducciones en u na gram ática. E n e s te ca p ítu lo hem os considerado sólo
los atrib utos sin te tiza d o s, e l valor d e un a trib u to sin tetiza d o e n cualquier nodo x puede
d ep en der só lo d e los atrib utos en los hijos d e x, si los hay. U na d efin ició n o rie n ta d a a la
sin ta x is ad ju n ta reglas a las producciones; las reglas calcu lan los valores d e los atributos.
U n esquem a d e tra d u cció n in crusta fragm entos de program a llam ados acciones se m á n ti­
cas en los cu erpos d e las producciones. Las accion es se ejecu tan en el orden en el q ue se
u tilizan las p roducciones d urante el análisis sin táctico.
♦ E l resultado d el análisis sin tá ctico es u na representación d e l program a fuente, conocido
com o código in term ed io . E n la figura 2.46 se ilu stran d o s form as principales d e có d ig o in­
term edio. U n árbol sin tá c tic o a b stra cto tien e n od os para las con stru ccion es d e program a­
ción; los hijos d e u n nodo proporcionan las su b con stru ccion es sign ificativas. D e m anera
alternativa, e l código d e tre s direccion es es u na secu en cia d e instrucciones, en la cu a l ca d a
in stru cción lleva a cab o u n a so la operación.
♦ Las tablas de sím bolos so n estru ctu ras d e d a to s q u e con tien en inform ación acerca d e los
identificadores. L a inform ación se co lo c a en la ta b la d e sím b olos cu an do se a n a liza la
d eclaración d e u n identificador. U n a acción sem á n tica o b tie n e inform ación d e la ta b la de
sím b olos cu an do e l identificador s e vu elve a utilizar, por ejem p lo , com o factor en una
expresión.
C a p ít u lo 3
Análisis léxico
E n e s te cap ítu lo le m ostrarem os cóm o con stru ir un analizador léxico. P a ra im plem entar un
analizador léxico a m ano, es ú til em pezar con un d iagram a o cualquier o tr a d escrip ción d e los
lexem as d e c a d a token. D e e s ta m anera, p o d em o s escribir có d ig o para identificar c a d a ocurren­
c ia d e ca d a lexem a en la en trad a, y devolver inform ación acerca d e l token identificado.
P od em os producir tam b ién un analizador léxico en form a au to m á tica , esp ecifican d o los
patrones d e los lexem as a un gen erador de a n a liza d o res léxicos, y com p ilan d o eso s patrones en
cód ig o q ue funcione com o un analizador léxico. E ste m éto d o fa cilita la m odificación d e u n ana­
lizador léxico, y a q u e só lo ten em os q u e reescribir los patrones afectad os, y no to d o e l program a.
A giliza tam bién el p roceso d e im plem entar el analizador, y a q u e el program ador esp ecifica el
softw are e n e l nivel m ás a lto d e los patrones y se b a sa en e l generador para p roducir e l código
d eta lla d o . E n la sección 3.5 p resen tarem os u n gen erador d e analizadores léx ico s llam ad o L ex
(o F lex, en u na p resen tación m ás reciente).
E m pezarem os el estu d io d e los generadores d e analizadores léxicos m ed ian te la presentación
d e las exp resion es regulares, u n a n otación con ven iente para especificar lo s p atron es d e lexem as.
M ostrarem os cóm o e s ta n otación p uede transform arse, prim ero en a u tó m a ta s no determ in istas
y d esp u és en au tóm atas d eterm in ista. E sta s ú ltim a s d os n ota cio n es pueden usarse com o en­
tra d a para un “con trolad or” , es decir, cód ig o q ue sim u la a esto s a u tó m a ta s y los u tiliz a com o
g u ía para d eterm in ar e l sigu ien te token. E ste control y la esp ecificación d el a u tó m a ta form an
e l núcleo d e l analizador léxico.
3.1
L a fu n c ió n d e l a n a liz a d o r léxico
C om o la prim era fase de un com p ilad or, la principal tarea d e l analizador léxico es leer lo s ca­
racteres d e la en trad a d el program a fuente, agruparlos en lexem as y producir com o sa lid a una
secu en cia d e tokens para ca d a lexem a e n e l program a fuente. E l flujo d e to k en s se en v ía a l ana­
lizador sin tá ctico para su análisis. C on frecuencia e l analizador léxico in tera ctú a ta m b ién con
la ta b la d e sím b olos. C uando e l analizador léxico d escubre un lex em a que c o n stitu y e a u n iden-
109
110
Capítulo 3. Análisis léxico
tificador, d eb e introducir ese lexem a en la ta b la d e sím b olos. E n algu nos ca so s, el analizador
léxico p uede leer la inform ación relacionad a con el tip o d e inform ación d e la ta b la d e sím b olos,
com o ayu da para d eterm in ar e l token apropiado q u e d eb e pasar al analizador sin táctico.
En la figura 3.1 se sugieren esta s interacciones. Por lo regular, la interacción se im p lem en ta
haciendo q u e el analizador sin tá ctico llam e al analizador léxico. L a llam ad a, sugerida p or el
com an d o obten erS igu ien teT oken , hace q ue el analizador léxico le a lo s caracteres d e su en trad a
h a sta q ue p ueda identificar el sigu ien te lexem a y producirlo para e l sig u ien te token, e l cual
d evu elve al analizador sin táctico.
token
pro g ram a
fu en te
A n a liz a d o r
A n a liz a d o r
léx ico
sin tác tico
a l an álisis
sem án tico
o b ten erS ig u ie n te T o k en
T a b la d e
sím b o lo s
F igu ra 3.1: Interacciones entre el analizador léxico y e l analizador sin táctico
C om o e l analizador léxico es la p arte d e l com p ilad or q ue lee e l te x to d e origen, d eb e realizar
o tra s tareas aparte d e identificar lexem as. U n a d e esa s tareas es elim inar los com entarios y el
espacio en blanco (caracteres de espacio, nueva lín ea, tabulador y ta l vez otro s caracteres q ue
se u tilicen para separar tok en s en la en trad a). O tra d e las tareas es correlacionar los m ensajes
d e error gen erados por e l com pilador con e l program a fuente. Por ejem p lo , el analizador léxico
p uede llevar el registro d el núm ero d e caracteres d e nueva lín ea v isto s, para poder asociar un
núm ero d e lín ea con ca d a m en saje d e error. E n algunos com p ilad ores, el analizador léxico crea
u na co p ia d e l program a fuente con los m ensajes d e error in sertad os en las p osiciones apro­
piadas. S i e l program a fuente u tiliza un preprocesador d e m acros, la exp a n sió n d e las m acros
tam bién p ueden form ar parte d e las tareas d e l analizador léxico.
A lgunas veces, los analizadores léxicos se d ivid en e n u n a c a sca d a d e d o s procesos:
a) E l escaneo co n siste en los procesos sim p les q ue no requieren la d eterm in ación d e tokens
d e la en trad a, com o la elim inación de com entarios y la co m p actación d e los caracteres d e
espacio en blanco con secu tivos en uno solo.
b) E l propio an álisis léxico es la porción m ás com p leja, en d o n d e el escanear produce la
secu en cia d e tokens com o salida.
3 .1 .1
C o m p a r a c ió n e n t r e a n á lis is lé x ic o y a n á lis is s in tá c tic o
E x isten varias razones p or las cu a les la p arte corresp ond ien te a l análisis d e un com p ilad or se
separa en fases d e an álisis léxico y análisis sin tá ctico (p a rsin g ).
3.1
La función d el analizador léxico
111
1. L a sen cillez e n e l d iseñ o es la consideración m ás im portan te. L a separación d el análisis
léxico y e l an álisis sin táctico a m enudo nos p erm ite sim plificar por lo m enos u na d e esta s
tareas. Por ejem p lo, u n analizador sin tá ctico q ue tu v iera q u e m anejar los com entarios y
el esp acio en blanco com o u nidades sin tá ctica s sería m ucho m ás com plejo q u e u no que
asum iera que el analizador léxico y a h a elim inad o lo s com entarios y el esp a cio en blanco.
Si vam os a d iseñ ar u n nuevo lengu aje, la separación d e las cu estio n es léxicas y sin tá ctica s
p uede llevar a u n d iseñ o m ás lim p io d e l lengu aje en general.
2. Se m ejora la eficien cia d el com pilador. U n analizador léxico separado nos p erm ite aplicar
técnicas esp ecializad as q ue sirven sólo para la ta rea léxica, no para e l trab ajo d e l análisis
sin táctico. A dem ás, las técnicas d e búfer esp ecializad as para leer caracteres d e en trad a
pueden agilizar la velocid ad d e l com p ilad or e n form a considerable.
3. Se m ejora la p ortabilidad d el com pilador. Las peculiaridades esp ecíficas d e los d isp ositi­
vos d e en tra d a p ueden restringirse al analizador léxico.
3 .1 .2
T o k e n s , p a tr o n e s y le x e m a s
A l hablar sobre el an álisis léxico, u tilizam o s tres térm inos d istin to s, p ero relacionados:
• U n token es un par q ue co n siste en un nom bre d e token y un valor d e a trib u to opcional.
E l nom bre d e l token es u n sím b olo ab stracto q ue representa u n tip o d e unid ad léxica; por
ejem plo, u na palabra clave esp ecífica o u n a secu en cia d e caracteres d e en trad a q ue d en o ­
ta n u n identificador. Los nom bres d e lo s to k en s son los sím b olos d e en trad a q ue procesa
el analizador sin táctico. A partir d e e s te m om ento, en general escribirem os el nom bre de
un tok en e n negrita. C on frecuencia n os referirem os a u n token por s u nom bre.
• U n p atró n e s u n a d escrip ción d e la form a q u e pueden tom ar los lexem as d e u n token. E n
e l caso d e u na p alab ra clave com o token, e l p atrón es só lo la secu en cia d e caracteres que
form an la palabra clave. P ara los identificadores y algu nos o tro s tokens, e l p a tró n es una
estru ctu ra m ás com p leja q ue se relacio n a m ed ian te m uchas cadenas.
• U n lexem a e s u na secu en cia d e caracteres en el program a fuente, q ue coinciden co n e l
p atrón para u n token y q ue e l analizador léxico id en tifica com o u na in sta n cia d e ese
token.
E j e m p lo 3 .1 : La figura 3 .2 proporciona algu nos tokens com u nes, su s patrones d escritos de
m anera inform al y algu nos lexem as d e ejem plo. L a sigu ien te in stru cción en C nos servirá para
ver cóm o se u tilizan esto s co n cep to s en la práctica:
p r i n t f ( " T o t a l = 70d \n " , p u n tu a c ió n ) ;
ta n to p r i n t f com o p u n tu a c ió n so n lexem as q u e coinciden co n e l patrón para el token id , y
" T o ta l = °/od\n" es un lexem a q ue coin cid e co n l i t e r a l .
□
E n m uchos lengu ajes d e program ación, las sig u ien tes clases cubren la m ayoría, si n o es que
tod os, los tokens:
112
Capítulo 3. Análisis léxico
TOKEN
if
else
comparación
id
numero
literal
D escripción
informal
Le x e m a s
caracteres i, f
if
e, 1, s, e
<o>o<=o>=o =
Else
caracteres
o !=
de ejemplo
<=, !=
letra seguida por letras y dígitos
pi, puntuación, D2
cualquier constante numérica
3.14159, 0,6.02e23
cualquier cosa excepto ", rodeada por "’
s "core dumped"
Figura 3.2: Ejemplos de tokens
1. U n token para cada palabra clave. El patrón para una palabra clave es el m i s m o que para
la palabra clave en sí.
2. Los tokens para los operadores, ya sea en forma individual o en clases c o m o el token
comparación, mencionado en la figura 3.2.
3. U n token que representa a todos los identificadores.
4. U n o o m á s tokens que representan a las constantes, c o m o los números y las cadenas de
literales.
5. Tokens para cada signo de puntuación, c o m o los paréntesis izquierdo y derecho, la c o m a
y el signo de punto y coma.
3 .1 .3
A t r i b u t o s p a r a lo s to k e n s
Cuando má s de un lexema puede coincidir con un patrón, el analizador léxico debe proporcio­
nar a las subsiguientes fases del compilador información adicional sobre el lexema específico
que coincidió. Por ejemplo, el patrón para el token numero coincide con 0 y con 1, pero es en
extremo importante para el generador de código saber qué lexema se encontró en el programa
fuente. Por ende, en muchos casos el analizador léxico devuelve al analizador sintáctico no sólo
el nombre de un token, sino un valor de atributo que describe al lexema que representa ese
token; el nombre del token influye en las decisiones del análisis sintáctico, mientras que el valor
del atributo influye en la traducción de los tokens después del análisis sintáctico.
Va m os a suponer que los tokens tienen cuando menos un atributo asociado, aunque este
atributo tal vez tenga una estructura que combine varias piezas de información. El ejemplo
más importante es el token id, en donde debemos asociar con el token una gran cantidad de
información. Por lo general, la información sobre un identificador (por ejemplo, su lexema, su
tipo y la ubicación en la que se encontró por primera vez, en caso de que haya que emitir un
mensaje de error sobre ese identificador) se mantiene en la tabla de símbolos. Por lo tanto, el
valor de atributo apropiado para un identificador es un apuntador a la entrada en la tabla de
símbolos para ese identificador.
3.1
La función d el analizador léxico
113
P r o b le m a s d ifíc ile s d u r a n t e e l r e c o n o c im ie n to d e to k e n s
Por lo general, d ad o el patrón q ue d escrib e a los lexem as d e u n token, es m uy sencillo re­
con ocer los lexem as q ue coinciden cu an do ocurren en la entrada. N o o b sta n te, en algunos
lenguajes no e s ta n ev id en te cu an d o h em os v isto u n a in sta n cia d e un lex em a q ue corres­
ponde a un token. E l sigu ien te ejem p lo se tom ó de Fortran, en el form ato fijo to d a v ía
perm itido en Fortran 90. E n la sigu ien te instrucción:
DO 5 I = 1 .2 5
no es evid en te q ue el prim er lexem a e s D 05I, u n a in sta n cia d e l token identificador, h asta
q ue vem os e l p u n to q ue v a d esp u és d el 1. O bserve q ue los esp acios e n blanco en e l len­
gu aje Fortran d e form ato fijo se ignoran (una con ven ción arcaica). Si hubiéram os v isto
una co m a en v e z d e l punto, ten dríam os u n a instrucción do:
DO 5 I = 1 ,2 5
en d on d e el prim er lexem a es la palabra clave DO.
E j e m p lo 3 .2 : L os nom bres d e los tokens y los valores d e a trib u to asociados para la siguiente
in stru cción en Fortran:
E = M * C ** 2
s e escrib en a continuación com o u n a secu en cia d e pares.
C id , apuntador a la en trad a e n la ta b la d e sím b olos para E >
< a s ig n a _ o p >
< i d , apuntador a la en trad a en la ta b la d e sím b olos p a ra M>
< m u lt_ o p >
C i d , apuntador a la en trad a en la ta b la d e sím b olos p a ra C>
C exp_op>
e n u m e r o , valor en tero 2 >
O bserve q ue en ciertos pares en esp ecial en lo s operadores, sig n o s d e pun tu ación y palabras
clave, n o hay necesidad d e un valor d e atrib u to . E n e s te ejem p lo, el tok en n u m e r o h a reci­
bido un atrib u to co n valor d e entero. E n la p ráctica, u n com pilador ordinario alm acenaría en
su lugar u na cad en a d e caracteres q ue represente a la co n sta n te, y q ue u tilice com o va lo r de
atrib u to para n u m e r o un apuntador a e s a cadena.
□
3 .1 .4
E r r o r e s lé x ic o s
S in la ay u d a d e los d em ás com p on en tes es d ifícil para u n analizador léxico saber q u e h ay un
error en e l cód ig o fuente. Por ejem plo, s i la ca d en a f i se en cu en tra por prim era v e z en un pro­
gra m a en C en e l sigu ien te contexto:
114
Capítulo 3. Análisis léxico
fi
( a =
f(x )) ...
un analizador léxico no puede sab er si f i es una p alabra cla v e i f m al escrita, o un identificador d e u na función no declarada. C om o f i es u n lex em a válid o para e l token id , e l analizador
léxico d eb e regresar el token i d al analizador sin tá ctico y dejar q ue a lg u n a o tra fase d e l com ­
pilador (qu izá el analizador sin táctico e n este caso) m and e un error d eb id o a la transposición
d e las letras.
Sin em bargo, su p o n g a q u e surge u n a situ ación en la cu al e l analizador léxico no p u ed e pro­
ceder, y a q ue ninguno d e los patrones para los tokens coin cid e co n algú n prefijo d el resto d e
la en trad a. L a e str a te g ia d e recuperación m ás sim p le e s la recuperación en “m odo d e pánico” .
E lim inam os caracteres su cesivos d e l resto d e la entrada, h a sta q u e e l analizador léxico p ueda
encontrar un tok en b ien form ado al principio d e lo q u e haya quedado d e entrada. E s ta técn ica
d e recuperación p u ed e confundir al analizador sin táctico, pero en un en torn o d e com p utación
interactivo, p u ed e ser b a sta n te adecuado.
O tras d e las p osibles accion es d e recuperación d e errores son:
1. Elim inar un carácter d el resto d e la entrada.
2. Insertar un carácter faltan te en e l resto d e la entrada.
3. S u stitu ir u n carácter p or otro.
4. T ransponer d o s caracteres adyacentes.
Las transform aciones com o é sta s pueden probarse en un in tento por reparar la entrada. La
estra tegia m ás sen cilla es ver si un prefijo d el resto d e la en trad a p uede transform arse en un
lexem a válid o m ediante u na transform ación sim ple. E sta estra teg ia tien e sentido, y a q ue e n la
práctica la m ayoría d e los errores léxicos involucran a u n so lo carácter. U n a estra teg ia d e correc­
ción m ás general es encontrar el m enor núm ero d e transform aciones necesarias para convertir
e l program a fuente en uno q ue co n sista sólo d e lexem as válidos, pero este m étodo se considera
dem asiado costoso en la práctica com o para q ue valga la p en a realizarlo.
3 .1 .5
E je rc ic io s p a r a la s e c c ió n 3.1
E j e r c ic io 3 .1 .1 : D ivid a el sigu ien te program a e n C + + :
f l o a t c u a d r a d o L im ita d o (x ) f l o a t x {
/ * d e v u e lv e x a l c u a d r a d o , p e r o n u n ca más d e 100 * /
re tu r n
( x < = - 1 0 . 0 ||x > = 1 0 . 0 ) ? 1 0 0 :x * x ;
}
en lexem as apropiados, usando la exp licación d e la secció n 3 .1 .2 co m o gu ía. ¿Q ué lexem as d e­
berían ob ten er valores léxicos asociados? ¿C uáles deberían ser esos valores?
Ejercicio 3.1.2: Los lenguajes In decid ib les com o H TM L o X M L son d istin to s d e lo s d e pro­
gram ación con ven cionales, en q ue la pun tu ación (etiq u eta s) e s m uy num erosa (com o en H TM L)
o es un con ju n to d efin ib le p or e l usuario (com o en X M L ). A dem ás, a m enudo la s etiq u eta s
pueden tener parám etros. Sugiera cóm o divid ir el sig u ien te d o cu m en to d e HTML:
3 .2
Uso d e búfer en la entrada
115
He a q u í u na f o t o d e <B>mi c a s a < /B > :
<PXIMG SRC = " c a s a . g i f "><BR>
Vea <A HREF = "m aslm gs .htm l">M ás Im ágenes< /A > s i
l e g u s t ó ó sa .< P >
e n los lexem as apropiados. ¿Q ué lexem as deberían ob ten er valores léxicos asociad os, y cuáles
deb erían ser eso s valores?
3.2
U so d e b ú fe r en la e n tr a d a
A n tes d e hablar sobre el problem a d e reconocer lex em a s en la en trad a, vam os a exam in ar al­
gu n as form as en las q u e p uede agilizarse la sim p le pero im p ortan te ta rea d e leer el program a
fu en te. E s ta tarea se d ificu lta d eb ido a q ue a m enudo ten em os q u e b uscar u no o m ás caracteres
m ás a llá d el sigu ien te lexem a para p od er esta r seguros d e q ue ten em os e l lex em a correcto. El
recuadro titu la d o “P rob lem as d ifíciles d urante el recon ocim iento d e tokens” en la secció n 3.1
n os d io un ejem p lo extrem o, pero h ay m uchas situ a cio n es en las q ue d eb em os analizar por
lo m enos u n carácter m ás p or ad elantado. P or ejem plo, no p o d em o s esta r seguros d e haber
v isto el fin al d e u n identificador sin o h a sta ver un carácter q ue n o es letra n i d íg ito , y q ue, por
lo ta n to , n o form a parte d el lexem a para id. E n C, los operadores d e u n so lo carácter com o
- , = o < p od rían ser tam b ién e l principio d e un operador d e d os caracteres, com o - > , == o <=.
P or en d e, vam os a presentar un esq u em a d e d os búferes q ue se en ca rg a d e la s lee tin a s por
ad elan tad o exten sa s sin problem as. D espués considerarem os u n a m ejora e n la q u e se utilizan
“cen tin elas” para ahorrar tiem p o a l verificar el final d e los búferes.
3 .2 .1
P a re s d e b ú fe re s
D eb id o al tiem p o requerido para procesar caracteres y al ex te n so núm ero d e caracteres que
s e d eb en procesar d urante la com p ilación d e un program a fu en te ex ten so , se han desarrollado
técn icas esp ecializad as d e u so d e búferes para reducir la can tid ad d e sob recarga requerida en
e l p rocesam ien to d e un so lo carácter d e entrada. U n esq u em a im p ortan te im plica e l uso d e dos
búferes que se recargan en form a alterna, com o se su giere e n la figura 3.3.
M
*
C
*
*
~
2 eof
r
av an ce
in icio L ex e m a
F igu ra 3.3: U so d e un par d e búferes d e en trad a
C ada búfer e s del m ism o ta m a ñ o N , y p or lo gen eral N es d el tam a ñ o d e un bloque d e disco
(es d ecir, 4 096 b y tes). M ediante el uso d e un com an d o d e lectu ra d el siste m a p o d em o s leer N
caracteres y colocarlos en un búfer, en v e z d e utilizar u n a llam ad a al siste m a por ca d a carác­
ter. Si quedan m en os d e N caracteres en e l archivo d e entrada, en to n ces un carácter especial,
116
Capítulo 3. Análisis léxico
representado por eof, m arca el final d el archivo fuente y es d istin to a cu alq uiera d e los posibles
caracteres d el program a fuente.
Se m antien en d os apuntadores a la entrada:
1. E l apuntador in ic io L e x e m a m arca e l inicio d el lex em a actual, cu y a ex ten sió n estam os
tratan d o d e determ inar.
2. E l apuntador avance ex p lo r a por ad elan tad o h a sta encontrar u n a co in cid en cia en el
patrón; d urante el resto d el cap ítu lo cubrirem os la e str a te g ia e x a c ta m ediante la cu a l se
realiza e s ta d eterm inación.
U n a vez q ue se d eterm in a e l sigu ien te lexem a, a v a n c e se co lo c a en e l carácter q ue se en cu en tra
en su extrem o derecho. D espués, u n a vez q ue el lex em a s e registra com o u n valor d e atributo
d e un token d ev u elto al analizador sin tá ctico , in ic io L e x e m a s e co lo c a en el carácter q u e v a
ju sto d esp u és d el lexem a q ue acabam os de encontrar. E n la figura 3 .3 vem os q u e a v a n c e ha
pasado d el final d e l sigu ien te lexem a, ** (el operador d e exp on en ciación en Fortran), y d eb e
retractarse u n a p osición a s u izquierda.
P ara d esplazar a a v a n c e h acia d elan te prim ero ten em o s q u e probar si hem os llegado al final
d e uno d e los búferes, y d e ser así, d eb em os recargar e l otro búfer d e la en tra d a , y m over av a n ­
c e al principio d e l búfer recién cargado. Siem pre y cu an do no ten g a m o s q ue alejarnos ta n to d el
lex em a com o para q ue la su m a d e s u lon gitu d m ás la d ista n c ia q u e n os alejam os s e a m ayor q u e N,
nunca habrá p eligro d e sobrescribir e l lexem a e n su búfer an tes d e poder determ inarlo.
3 .2 .2
C e n t in e la s
Si u tilizam os el esq u em a d e la sección 3.2.1 en la form a descrita, d eb em os verificar, ca d a vez
q ue m ovem os e l apuntador avance, que no n os hayam os sa lid o de uno d e lo s búferes; si esto
pasa, en to n ces tam b ién d eb em os recargar el o tro búfer. A sí, por c a d a lectu ra d e caracteres
hacem os d o s pruebas: u n a para el final d el búfer y la o tr a para d eterm in ar q ué carácter s e lee
(esta ú ltim a p uede ser u n a bifurcación de varias v ía s). P od em os com binar la p ru eb a d el final
d el búfer co n la p ru eb a d el carecer actu al si exten d em o s ca d a búfer para q u e co n ten g a u n valor
cen tin ela a l final. E l ce n tin ela e s un carácter esp ecia l q ue no p uede form ar p arte d e l program a
fuente, para lo cual u na o p ción n atu ral e s el carácter eof.
La figura 3 .4 m u estra e l m ism o arreglo q ue la figu ra 3.3, pero co n lo s cen tin ela s agregados.
O bserve q ue eof retien e su u so com o m arcador d e l final d e to d a la en trad a. C ualquier eof
q ue aparezca en o tr a ubicación d istin ta al final d e un búfer sign ifica q ue llegam os al final d e la
entrada. L a figura 3.5 sin tetiza e l algoritm o para m over a v a n c e h a cia d elan te. O bserve cóm o
la prim era prueba, q ue p uede form ar parte d e u n a bifurcación d e varias v ía s con base en el
carácter al q ue a p u n ta a v a n ce, es la ú n ica p ru eb a q ue h acem os, ex c ep to en e l ca so en el q ue
en realidad nos encontram os al final d e un búfer o d e la entrada.
3.3
E sp e c ifica c ió n d e los to k e n s
Las exp resion es regulares son u na n otación im p ortan te p a ra especificar p atron es d e lexem as.
A unque no p ueden exp resar tod os los patrones posibles, so n m uy efectiv a s para especificar
los tip os d e patrones q ue en realidad n ecesitam os para los tokens. E n e s ta secció n estu diarem os
3.3 Especificación d e los tokens
117
¿S e n o s p u e d e a c a b a r e l e s p a c io d e lo s b ú f e r e s ?
En la m ayoría d e los lengu ajes m odernos, los lex em a s son co rto s y b a sta con u no o d os
caracteres d e lectu ra adelantada. Por en d e, un tam a ñ o d e búfer N alrededor d e lo s m iles
es m ás q ue su ficiente, y e l esq u em a d e d o b le búfer d e la secció n 3.2.1 fu n cion a sin p ro­
blem as. N o ob sta n te, ex iste n ciertos riesgos. P or ejem p lo , si las cad en as d e caracteres
pueden ser m uy ex ten sa s, q ue p ueden exten d erse en varias líneas, en ton ces p odríam os
en fren tam os a la p osibilid ad d e q u e u n lex em a se a m ás grande q u e N . P ara e v ita r proble­
m as co n las cad en as d e caracteres exten sa s, p o d em o s tratarlas co m o u n a con catenación
d e com p on en tes, u no d e c a d a línea sob re la cu al s e escribe la cadena. Por ejem p lo, en
Java es convencional representar las cad en as ex ten sa s escribien do u n a parte en ca d a línea
y con caten an d o las p artes co n u n operador + al final d e ca d a parte.
U n problem a m ás d ifícil ocurre cu an do p u ed a ser necesario un p roceso d e lectura
ad elan tad a arbitrariam ente exten so. Por ejem plo, algunos lenguajes com o P L /I no tratan
a las palabras clave com o re serv a d a s; e s decir, p od em os usar id en tificadores co n el m is­
m o nom bre q ue u na p alabra clave com o DECLARE. Si presentam os al analizador léxico el
tex to d e un program a en P L /I q ue em p iece com o DECLARE ( ARG1, ARG2,. . . n o p uede
estar seguro si EECLARE e s u n a palabra cla v e y ARG1 , etc é te r a son variables q ue se están
declarando, o si DECLARE es e l nom bre d e un procedim iento co n su s argum entos. Por e s ta
razón, los lengu ajes m odernos tien den a reservar su s palabras clave. P ero si n o lo hacen,
p od em os tratar a u n a p alabra clave com o DECLARE com o un identificador am biguo, y de­
jar que el analizador sin tá ctico resu elva e s ta c u estió n , tal v ez e n con ju n to c o n la b úsqueda
en la tab la d e sím b olos.
la n otación form al para las exp resion es regulares, y en la sección 3.5 verem os cóm o se utilizan
e sta s exp resion es en u n generador d e analizadores léxicos. D esp ués, en la secció n 3.7 verem os
cóm o construir el analizador léxico, convirtiendo las ex p resion es regulares en u n a u tó m a ta que
realice e l recon ocim iento d e los tokens especificados.
3 .3 .1
C a d e n a s y le n g u a je s
U n alfabeto es u n con ju n to fin ito d e sím b olos. A lgu nos ejem plos típ ico s d e sím b olos so n las
letras, los d ígitos y los sign os d e p untuación. E l con ju n to {0 , 1 } es e l alfabeto bin ario. A SC II
e s un ejem p lo im portan te d e u n alfabeto; s e u tiliza en m uchos sistem a s d e softw are. U nicode,
E
*
M
*
eof
C
*
t
*
2
eof
♦
av an ce
in icio L ex e m a
F igu ra 3.4: C en tinelas a l final d e ca d a búfer
eof
118
Capítulo 3. Análisis léxico
s w it c h ( *au ance+ + ) {
c a s e eo f:
i f ( avan ce e s tá al final d e l prim er búfer ) {
recargar e l segu n d o búfer;
avan ce = inicio d el segu n d o búfer;
}
e l s e i f ( avance e s tá al final d e l segu n d o búfer ) {
recargar e l prim er búfer;
avance = inicio del prim er búfer;
}
e l s e / * e o f d en tro d e un búfer m arca el final d e la e n tra d a * /
term inar e l an álisis léxico;
b reak ;
C asos para los d em ás caracteres
}
F igu ra 3.5: C ódigo d e lectu ra por ad elan tad o con centin elas
I m p le m e n ta c ió n d e b ifu r c a c io n e s d e v a r ia s v ía s
P odríam os im aginar q ue la in stru cción sw itch en la figura 3 .5 requiere m uchos p asos para
ejecutarse, y q u e colocar el caso e o f prim ero no es u na elección in teligente. E n realidad,
no im p o rta en q u é orden presen tem os los caso s para ca d a carácter. E n la p rá ctica , una
bifurcación d e varias vías, d ep en d ien d o d el carácter d e en tra d a , se realiza e n un paso,
sa lta n d o a u na dirección en con trad a en u n arreglo d e direcciones, in d ex a d o m ediante
caracteres.
q ue incluye aproxim adam ente 10 000 caracteres d e los alfab etos alrededor d el m undo, e s otro
ejem p lo im p ortan te d e un alfabeto.
U n a cadena sob re un alfabeto es u na secu en cia fin ita d e sím b olos q ue se extra en d e ese
alfabeto. E n la teoría d el lenguaje, los térm in os “oración” y “p alabra” a m enudo se u tilizan
com o sin ónim os d e “cad en a”. L a lon gitu d d e u n a c a d en a s , q ue por lo gen eral s e escribe com o
|$ |, es e l núm ero d e ocurrencias d e sím b olos en s. Por ejem p lo, b a n a n a es u na ca d en a con u na
longitud d e seis. L a cadena v a c ía , representada p or e, e s la ca d en a d e longitud cero.
U n lenguaje e s cualquier conjunto con tab le d e ca d en as sobre algú n alfabeto fijo. E sta
definición es d em asiad o am plia. Los lenguajes ab stractos com o 0, el conjunto v a c ío , o { e } , el
con ju n to q ue con tien e só lo la ca d en a vacía, so n lengu ajes b a jo e s ta definición. Tam bién lo son
e l conjunto d e to d o s los program as en C q ue está n bien form ados en sen tid o sin tá c tic o , y el
con ju n to d e tod as las oraciones e n inglés gram áticalm ente correctas, aunque e sto s ú ltim os d os
lenguajes son difíciles d e especificar co n ex a c titu d . O bserve q ue la d efinición d e “len g u a je” n o
requiere q u e se atrib u ya algún sign ificad o a las cad en as en el lengu aje. E n e l ca p ítu lo 5 verem os
los m étod os para definir e l “sign ificad o” d e las cadenas.
3.3 Especificación d e los tokens
119
T érm in o s p a ra p a rte s de caden as
Los sigu ien tes térm inos relacionados co n ca d en a s son d e uso com ún:
1. U n p re fijo d e la ca d en a s es cualquier ca d en a q u e se o b tien e al elim inar cero o m ás
sím b olos del final d e s. P or ejem p lo, ban, banan a y e so n prefijos d e banana.
2. U n su fijo d e la cad en a s e s cualquier ca d en a q ue se o b tie n e al elim inar cero o m ás
sím b olos d el principio d e s. Por ejem plo, nana, b an a n a y e son sufijos d e banana.
3. U na subcadena d e 5 se o b tie n e al elim inar cualquier prefijo y cualquier sufijo d e s.
P or ejem p lo, banana, nan y e so n su b cad en as d e banana.
4. Los prefijos, sufijos y su b cad en as p ro p io s d e u n a c a d en a 5 son eso s prefijos, sufijos
y su b cad en as, resp ectivam en te, d e s q ue no son e ni so n igu ales a la m ism a s.
5. U na subsecuencia de s es cualquier ca d en a q u e se form a m ed ian te la elim inación de
cero o m ás p osiciones no necesariam ente co n secu tiv a s d e s. P or ejem plo, b a a n es
u n a su b secu en cia de banana.
S i £ y y so n cad en as, en ton ces la con caten ación de x y y, d en o ta d a p or x y, e s la cad en a
q u e se form a al unir y co n x P or ejem plo, s i x = s u p e r y = m ercado, en to n ces x y = s u p e r ­
m ercad o. L a cad en a v a cía e s la id en tidad e n la con catenación; es decir, p a ra cualquier cad en a
5, es — se — s.
Si p en sam os en la con caten ación com o un prod ucto, p od em os definir la “ex p o n en cia ció n ”
d e cad en as d e la sigu ien te form a. D efin a a 3o p a ra q ue s e a e, y para tod as la s i > 0 , d efin a a
5* para q ue se a $*- 1 s. C om o es — s, resu lta q ue s1 = s. E n to n ces s2 = ss, s 3 = s s s , y a sí sucesi­
vam ente.
3.3.2 O p eracio n es en los len gu ajes
E n e l a n álisis léxico, las op eracion es m ás im p o rta n tes e n los len g u a jes so n la u nión, la conca­
ten a ció n y la cerradura, las cu ales se d efin en d e m a n era form al en la figu ra 3.6. L a u n ión es
la op eración fam iliar que se hace co n los con ju n tos. L a co n ca ten a ció n d e len g u a jes e s cu an do
s e co n caten an to d a s las cad en as q u e se form an al tom ar u n a ca d en a d el prim er len gu aje y
u na cad en a d el segu n d o lengu aje, en to d a s las form as posibles. La cerradura (K lee n e) d e un
len gu aje L , q u e se d en ota com o £ * , e s el con ju n to d e ca d en a s q u e se o b tien en a l con catenar
L cero o m ás veces. O b serve q ue L°, la “co n ca ten a ció n d e L cero v eces” , se d efin e co m o {e },
y por in ducción, U es L l~l L. P or ú ltim o, la cerradura p o sitiv a , d en o ta d a co m o L + , es igual
q ue la cerradura d e K leen e, pero sin el térm in o L°. E s decir, e n o esta r á en L + a m en o s que
e s té en el m ism o L.
120
Capítulo 3. Análisis léxico
O p e r a c ió n
D e f in ic ió n
y n o t a c ió n
Unión d e L y M
L U M = { s | s e s tá en L o s e s tá en M }
C on caten ación d e L y M
L M = { st \ s e s tá en L y t e s tá e n M }
Cerradura d e K lee n e d e L
Cerradura p o sitiv o d e L
L * = U £ o L%
L+ = U S i V
Figura 3.6: D efin iciones d e las op eracion es en los lenguajes
E j e m p l o 3 .3 : S ea L el con ju n to d e letras {A, B, . . Z, a , b , . . . , z } y se a D el con ju n to d e
d íg itos {0 , 1 , . . .9 } . P od em os pensar en L y D d e d os form as, e n esen cia eq u ivalen tes. U n a
form a es q ue L y D son , resp ectivam en te, los alfab etos d e la s letras m ayúsculas y m inúsculas,
y d e los d íg ito s. L a seg u n d a form a es q ue L y D so n lengu ajes cu yas ca d en as tien en longitud
d e uno. H e aq u í algunos otros lengu ajes q ue p ueden con stru irse a partir d e los lenguajes L y
Z>, m ed ian te los operadores d e la figura 3.6:
1. L U D es e l con ju n to d e letras y d ígitos; h ablando e n sen tid o estricto , e l lengu aje co n 62
cad en as d e lon gitu d uno, y cad a u n a d e las cad en as es u na letra o un d ígito.
2. L D es e l con ju n to d e 520 cad en as de lon gitu d dos, ca d a u na d e las cu ales co n siste en una
letra, se g u id a d e u n d ígito.
3. L4 es el con ju n to d e tod as las cad en as d e 4 letras.
4 . L * es e l con ju n to d e tod as las cad en as d e letras, incluyendo e, la ca d en a vacía.
5. L (L U D )* es el con ju n to de tod as las cad en a s d e letras y d íg ito s q ue em p iezan con u na
letra.
6. D * es e l con ju n to d e tod as las cad en as d e u no o m ás d ígitos.
3.3.3
E x p re sio n e s re g u la re s
Su p on ga q ue d eseam os describir el con ju n to d e identificadores válid os d e C. E s ca si el m ism o
lengu aje d escrito en el p u n to (5) anterior; la única diferencia e s q ue se incluye el gu ión bajo
entre las letras.
En el ejem p lo 3.3, p udim os describir los identificadores proporcionando nom bres a los
con jun tos d e letras y d íg ito s, y u sand o los operadores d e u nión, con caten ación y cerradura d el
lenguaje. E ste proceso e s tan ú til q ue se h a em p eza d o a u tilizar com ú nm en te u n a n otación co ­
n o cid a com o expresion es regu lares, p ara describir a to d o s lo s lengu ajes q ue puedan construirse
a partir d e e s to s operadores, aplicados a los sím b olos d e cierto alfabeto. E n e s ta n o tación , si
¿e¿ra_ s e estab lece de m anera q u e represente a cualquier letra o al gu ión bajo, y d íg ito _ se
121
3.3 Especificación d e los tokens
estab lece d e m anera q ue represente a cualquier d íg ito , en to n ces p odríam os d escribir e l lenguaje
d e los identificadores de C m ediante lo siguiente:
letra- ( le tr a - \ d íg ito ) *
L a barra vertical d e la exp resión anterior sig n ifica la unión, los paréntesis s e u tilizan para
agrupar las su b exp resion es, e l asterisco in d ica “cero o m ás ocu rren cias d e ” , y la y u x ta p o sició n
d e letra_ co n el resto d e la exp resión in d ica la concatenación.
Las exp resion es regulares se con stru yen en form a recursiva a partir d e las exp resion es re­
gu lares m ás pequeñas, u sand o las reglas q ue describirem os a con tinu ación. C ad a expresión
regular r d e n o ta un lengu aje L (r), e l cu a l tam bién s e d efin e en form a recursiva, a partir d e los
lengu ajes d en otad os p or las su bexpresiones d e r. H e aq uí las reglas q ue d efinen la s expresiones
regulares sobre cierto alfab eto E , y los lengu ajes q u e d en o ta n d ich as expresiones.
B A SE : H ay d o s reglas que form an la base:
1. e es u na exp resión regular, y L (e) es { e } ; e s d ecir, e l len gu aje cu y o único m iem bro es la
cad en a vacía.
2. Si a e s u n sím b olo en S , en ton ces a es u na exp resión regular, y L (a ) = { a } , es d ecir, el
lengu aje con u n a cadena, d e lon gitu d uno, co n a en su ú n ica p osición. T enga en cu en ta
que por con ven ción u sam os cu rsiva para los sím b olos, y n eg rita p a ra su correspondiente
expresión regular.1
IN D U C C IÓ N : H ay cu atro partes q ue co n stitu y en la inducción, m ediante la cu a l la s exp resio­
n es regulares m ás gran d es se con stru yen a partir d e las m ás pequeñas. S u p on ga q ue r y s son
exp resion es regulares q ue d en o ta n a los lengu ajes L (r ) y L (s), respectivam ente.
1. (r )|(s) e s u na exp resión regular q ue d e n o ta e l lengu aje L (r ) U L (s).
2. (r)(s) es u n a exp resión regular q ue d en o ta el len gu aje L (r )L (s).
3. (r)* e s u n a exp resión regular q u e d e n o ta a (L (r))* .
4. (r) e s u n a expresión regular q ue d e n o ta a L (r ). E s ta ú ltim a regla d ice q ue p od em os agre­
gar pares adicionales d e paréntesis alrededor d e las exp resion es, sin cam biar e l lenguaje
que d en otan .
Según s u d efinición, las exp resion es regulares a m enudo con tien en pares innecesarios d e pa­
réntesis. T al v e z s e a necesario elim inar ciertos pares d e p aréntesis, s i a d op tam os las sigu ientes
convenciones:
a) E l operador unario * tien e la p reced en cia m ás a lta y es a so cia tiv o a la izquierda.
b) L a con caten ación tien e la seg u n d a precedencia m ás a lta y e s a so cia tiv a a la izquierda.
1
Sin embargo, al hablar sobre los caracteres específicos del conjunto de caracteres ASCII, por lo general, usaremos
la fuente de teletipo para el carácter y su expresión regular.
122
Capítulo 3. Análisis léxico
c) | tien e la p reced en cia m ás b aja y e s asociativ o a la izquierda.
Por ejem plo, bajo esta s con ven ciones p od em os su stitu ir la expresión regular ( a ) |( ( b ) * ( c ) ) por
a | b * c . A m b as exp resion es d en otan e l con ju n to d e ca d en as q ue so n u n a so la a o cero o m ás bs
segu id as por u na c.
E j e m p l o 3 . 4 : S ea E = { a , b}.
1. L a exp resión regular a | b d e n o ta e l lengu aje {a , 6}.
2. ( a | b ) ( a | b ) d e n o ta a {aa, a6,6a, 66}, el lengu aje d e to d a s la s ca d en as d e lo n g itu d dos
sobre e l alfab eto E . O tra expresión regular para e l m ism o lengu aje sería a a | a b | b a | b b .
3. a * d e n o ta e l len gu aje q ue co n siste e n tod as las ca d en a s d e cero o m ás as, e s d ecir, { e , a,
aa, aaa, ...} .
4. ( a |b ) * d en o ta e l con ju n to d e to d a s las cad en as q ue co n sisten en cero o m ás in stancias d e
a o 6, es decir, to d a s las cad en as d e as y 6s: {e, a, 6, aa, a6,6a, 66, aaa, . .. } . O tra expresión
regular para e l m ism o lengu aje es ( a * b * ) * .
5. a | a * b d en o ta el lengu aje {a, 6, a6, aa6, a a a 6 ,. . . } , es decir, la ca d en a a y tod as las cad en as
q ue co n siste n en cero o m ás as y q ue term inan en 6.
A un lengu aje q ue p uede d efinirse m ediante u na exp resión regular se le lla m a conjunto
regular. Si d os exp resion es regulares r y a d en o ta n el m ism o con ju n to regular, d ecim os q ue
son equ ivalen tes y escribim os r = s. P or ejem plo, ( a | b ) = ( b |a ) . H ay u na variedad d e leyes
algebraicas para las exp resion es regulares; ca d a ley afirm a q ue las exp resion es d e d o s form as
d istin ta s so n eq u ivalen tes. L a figura 3 .7 m u estra p a rte d e las leyes algebraicas para la s expre­
sion es regulares arbitrarias r, s y t.
Le y
fj s — s |r
r\(s\t) = (r|s)|£
r (s t) = (r s ) t
D e s c r ip c ió n
| e s con m utativo
| e s asociativo
L a con caten ación es asociativa
r(s|¿) = rs\rt\ ( $ |¿ ) r = s r \tr
L a con caten ación se d istrib uye so b re |
v.
II
£
II
vu
e es la id en tidad para la con catenación
r * = (r|e)*
r ** = r *
e se g a ra n tiza en u n cerradura
* e s id em p oten te
F igu ra 3.7: L eyes algebraicas para las exp resion es regulares
3.3 Especificación d e los tokens
3.3.4
123
D efin icio n es reg u la res
P or con ven iencia d e n otación, ta l v e z se a con ven ien te p on er nom bres a cierta s expresiones
regulares, y utilizarlos en las exp resion es su bsiguientes, com o s i los nom bres fueran sím bolos
por s í m ism os. S i E es u n alfab eto d e sím b olos básicos, en to n ces u n a d efin ició n reg u la r es una
secu en cia d e d efinicion es d e la forma:
di
di
-+ n
—► r2
dn
rn
e n donde:
1. C ad a di es un nuevo sím b olo, q ue no e s tá en E y no es el m ism o q ue cualquier o tro d.
2. C ad a
es u n a exp resión regular sob re e l alfabeto E U { á i, d¿, . . . , d i- J .
A l restringir
a E y a las á s d efinidas co n anterioridad, ev ita m o s las d efinicion es recursivas y
p od em os construir u n a exp resión regular so b re E so la m en te, para ca d a r¿. P ara ello, prim ero
su stitu im o s los u sos d e d i en r2 (que no p uede usar n in gu n a d e las d s, ex cep to d i), d esp u és su s­
titu im o s los u sos d e di y d¿ en r3 por ri y (la su stitu ció n d e) r2, y a sí en lo su cesivo. Por últim o,
e n r n su stitu im o s c a d a
para ¿ = 1 , 2 , ... , n — 1 , por la versión su stitu id a d e r¿, ca d a u n a de
las cu a les só lo tien e sím b olos d e E .
E j e m p l o 3 . 5 : Los identificadores d e C so n ca d en a s d e letras, d íg ito s y gu io n es bajos. H e aquí
u na definición regular para e l lengu aje d e los identificadores d e C . Por con ven ción, usarem os
c iu s iv a para los sím b olos d efinidos en las d efinicion es regulares.
letra_ - »
d íg ito - »
id -►
A | B |- • -| Z | a | b |- • -| z
0 | 1 |* • *¡ 9
| _
letra_ ( letra _ | d íg ito )*
□
E j e m p l o 3 . 6 : Los núm eros sin sign o (enteros o d e punto flo ta n te) so n ca d en a s com o 5280,
0 .0 1 2 3 4 , 6 .3 3 6 E 4 o 1 .8 9 E -4 . L a definición regular
d ig ito
dígitos
fra cc io n O p c io n a l
expon en te O pcion al
n u m ero
-+
-*
-►
-►
0 | 1 I* • *| 9
digito d ig ito *
. á g ito s \ e
( E ( + | - | c ) díg ito s ) | e
dig ito s fra ccio n O p cio n a l ex p on en teO pcion al
e s u n a especificación precisa para e s te con ju n to d e cad en as. E s decir, u n a fra ccio n O p cio n a l es
u n punto d ecim al (pu nto) segu id o d e u no o m ás d íg ito s, o se o m ite (la ca d en a v a cía ). U n ex­
po n en teO p cio n a l, si no se om ite, es la letra E seg u id a d e u n signo o p cio n a l + o —, seguid o de
u no o m ás d íg ito s. O bserve q ue p or lo m enos u n d ígito d eb e ir d esp u és d e l p unto, d e m anera
q u e n u m ero no coincide con 1 . , pero s í co n 1 . 0 .
□
124
Capítulo 3. Análisis léxico
3.3.5
E x te n sio n e s de las ex p re sio n es reg u la res
D esd e q ue K leen e introdujo las exp resion es regulares co n los operadores b ásicos para la unión,
la con caten ación y la cerradura d e K leen e en la d éca d a d e 1950, s e han agregado m uchas ex ­
ten sion es a las exp resion es regulares para m ejorar su habilidad a l especificar los p atron es d e
cad en as. A q u í m en cion am os algu nas ex ten sion es rotacionales q ue se incorporaron por prim era
v ez en las herram ientas d e U n ix com o Lex, q u e so n m u y ú tiles en la especificación d e los ana­
lizadores léxicos. L as referencias a e ste ca p ítu lo co n tien en u na exp licación d e algu nas variantes
d e exp resion es regulares en uso h oy en día.
1. Una o m á s in sta n cia s. E l operador unario p o stfijo + represen ta la cerradura p o sitiv o d e
u n a exp resión regular y s u lengu aje. E s decir, si r e s u n a exp resión regular, en to n ces (r )+
d en ota el len gu aje ( L ( r ) ) +. E l operador + tien e la m ism a p reced en cia y a so ciativid ad
q ue el operador *. D os leyes algebraicas ú tiles, r * = r+ |e y r+ = r r * = r * r relacionan la
cerradura d e K leen e y la cerradura positiva.
2. C ero o u na in sta n c ia . E l operador unario postfijo ? sign ifica “cero o u na ocu rren cia”. Es
decir, r? es eq u ivalen te a r|e, o d ich o d e o tr a form a, L (r? ) = L (r ) U {e}. E l operador ?
tien e la m ism a preced en cia y asociativid ad q ue * y + .
3. C lases d e caracteres. U n a expresión regular ai|o2h ' 'Ia»» e n d on d e las a¿s so n ca d a u na
sím b olos d el alfab eto, p uede su stitu irse m ed ian te la abreviación [a i 02 - • - 0^]. Lo q ue
es m ás im p ortan te, cu an d o ai, oq, . . . , On form an u n a secu en cia lógica, p or ejem p lo , letras
m ayúsculas, m inúsculas o d ígitos con secu tivos, p od em os su stitu irlo s p or ai~an; es decir,
só lo la prim era y ú ltim a separadas por u n gu ión corto. A sí, [a b e] es la abreviación para
a |b |c , y [a-z] lo e s para a |b |- • -|z.
E j e m p lo 3 .7 : M ediante e s ta s abreviaciones, p od em os rescribir la d efinición regular d e l ejem ­
plo 3.5 como;
letra_
—► [A-Za-z_]
dígito
[0-9]
id
-►
letra_ ( letra \ d ig ito )*
La definición regular d e l ejem p lo 3.6 tam b ién p u ed e sim plificarse:
dig ito
-►
[0-9]
dig íto s
-►
d ig ito +
n u m ero
-►
d ig íto s ( . dig ito s)? (E [+-]? d íg ito s )?
3.3 Especificación d e los tokens
3.3.6
125
E je rc ic io s p a ra la sección 3.3
E j e r c i c i o 3 . 3 . 1 : C onsulte los m anuales d e referencia d el lengu aje p a ra d eterm inar (i) los con ­
ju n to s d e caracteres q u e form an el alfabeto d e en tra d a (excluyend o aquellos q ue sólo puedan
aparecer en cad en as d e caracteres o com en tarios), (ii) la form a léxica d e las co n sta n tes n u m é­
ricas, y ( iii) la form a lé x ic a d e los id en tificad ores, p a ra ca d a u n o d e los sig u ie n tes lenguajes:
(a) C (b) C + + (c) C # (d ) Fortran (e) J a v a (f) L isp (g) SQL.
! E j e r c i c i o 3 .3 .2 : D escrib a los lenguajes d en o ta d o s p or las sig u ien tes exp resion es regulares:
a) a ( a |b ) * a .
b ) ((e |a )b * )* c) ( a |b ) * a ( a |b ) ( a |b ) .
d) a* b a * b a * b a * .
!! e ) ( a a | b b ) * ( ( a b | b a ) ( a a | b b ) * ( a b | b a ) ( a a | b b ) * ) * .
E j e r c i c i o 3 .3 .3 : E n u na cad en a d e lon gitu d n, ¿cu án tos d e lo s sig u ien tes hay?
a) Prefijos.
b ) Sufijos.
c) P refijos propios.
! d ) Subcadenas.
! e) Subsecuencias.
E j e r c i c i o 3 . 3 . 4 : L a m ayoría d e los lenguajes so n sensibles a m a yú scu la s y m in ú scu la s, por
lo q ue las palabras clave sólo p ueden escribirse d e u n a form a, y las exp resion es regulares que
describ en su lexem a so n m uy sim ples. N o o b sta n te, algu nos lenguajes com o SQL so n in se n si­
bles a m a yú scu las y m in ú scu la s, por lo q u e u n a p alabra cla v e p u ed e escribirse e n m inúsculas
o e n m ayúsculas, o en cualquier m ezcla d e am bas. Por en d e, la p alabra clave SELECT d e SQL
tam b ién p u ed e escribirse com o s e l e c t , S e l e c t o sE lE cT . M uestre cóm o escribir u n a expresión
regular para u na p alabra clave e n un lengu aje in sen sib le a m ayúsculas y m inúsculas. Ilustre la
id ea escribiendo la exp resión para “se le c t” e n SQL.
! E j e r c i c i o 3 .3 .5 : E scriba d efinicion es regulares para los sigu ientes lenguajes:
a) T od as las cad en as d e letras en m inúsculas q u e co n ten gan la s cin co v o ca les e n orden.
b) T od as las cad en as d e letras e n m inúsculas, en las q ue las letras s e en cu en tren en orden
lexicográfico ascendente.
c) C om entarios, q u e co n sistan d e u n a ca d en a rodeada p or / * y * / , s i n u n * / entre ello s, a
m en os q ue se encierre en tre d obles com illas (").
126
Capítulo 3. Análisis léxico
!! d ) T odas las cad en as d e d ígitos sin d ígitos rep etid os. S ugeren cia: P ru eb e este problem a
prim ero co n unos cu an tos d íg ito s, com o { 0 , 1, 2}.
!! e)
T odas
las cad en as
de
d ígitos q ue ten g a n por lo m en os u n d íg ito repetido.
!! f )
T od as
las cad en as
de
os y
fe con un núm ero par d e as y u n núm ero im par d e bs.
g) E l con ju n to d e m ovim ientos d e A jedrez, en la notación inform al, com o p -k 4 o k b p x q n .
!! h)
T odas
i)
T od as
las cad en as
de
las cad en as
os y
de
as y
fe q ue n o co n ten gan la su b ca d en a abb.
fe q ue n o co n ten gan la su b secu en cia abb.
E j e r c ic io 3 .3 .6 : E scriba cla ses d e caracteres p ara los sig u ien tes co n ju n to s d e caracteres:
a) L as prim eras d iez letras (h a sta “j ”) , y a s e a e n m ayúsculas o en m inúsculas.
b) L as con son an tes en m inúsculas.
c) Los “d ígitos” en un núm ero hexad ecim al (elija m ayúsculas o m inúsculas para los “d ígi­
to s” m ayores a 9).
d) L os caracteres q u e p ueden aparecer al final d e u na oración leg ítim a e n in glés (por ejem ­
plo, el sign o d e adm iración).
Los sigu ien tes ejercicios, h a sta e incluyendo el ejercicio 3.3.10, tra ta n acerca d e la n otación
d e exp resion es regulares exten d id a s d e Lex (el generador d e analizadores léxicos q u e verem os
con d etalle en la sección 3 .5). L a notación ex te n d id a se p resen ta en la figura 3.8.
E j e r c ic io 3 .3 .7 : O bserve q ue esta s exp resion es regulares proporcionan a tod os lo s sigu ientes
sím b olos ( caracteres de operadores) u n sign ificad o especial:
\ " .
- $ [ ] ♦ + ? { > ! /
Su sign ificad o esp ecial d eb e d esactivarse si s e n ecesitan p a ra representarse a s í m ism os en u na
ca d en a d e caracteres. P ara ello, d eb em os colocar el carácter entre com illas, d en tro d e u na ca ­
d en a d e lon gitu d u no o más; p or ejem plo, la exp resión regular "**" coincide co n la ca d en a **.
Tam bién p od em os ob ten er el sign ificad o literal d e un carácter d e operador si le anteponem os
una barra d iagon al inversa. P or en d e, la expresión regular \ * \ * tam bién coincide co n la ca d en a
**. E scrib a u n a exp resión regular q u e co in cid a con la ca d en a "V
E j e r c ic io 3 .3 .8 : E n Lex, u na clase d e ca rá cte r co m p lem en ta d o represen ta a cualquier carác­
ter, ex cep to los q ue se lista n en la c la se d e carácter. D en otam os a u n carácter com p lem en tado
m ediante el uso d e ~ com o el prim er carácter; este sím b olo no form a e n s í parte d e la clase
q ue se e s tá com p lem en tand o, a m en os que se liste d en tro d e la m ism a cla se. A sí, [~A -Z a-z]
coincide co n cualquier carácter q ue no s e a u n a letra m a yú scu la o m inúscula, y [ ~ V ] representa
a cualquier carácter ex cep to ~ (o n u eva lín ea, y a q ue e l carácter n u eva lín ea n o p u ed e estar
en n in gu n a clase d e caracteres). M u estre q ue para cualquier expresión regular co n clases d e
caracteres com p lem en tados, hay una exp resión regular eq u ivalen te sin clases d e caracteres
com p lem en tados.
3.3 Especificación d e los tokens
Ex p r e s ió n
127
C o in c i d e
con
E je m pl o
c
u n carácter c q ue no se a operador
a
V
e l carácter c, literalm en te
la cad en a 3, literalm ente
\*
»**»
.
cualquier carácter ex cep to n u eva línea
a . *b
*
e l inicio d e u na línea
"abe
$
e l final de u n a lín ea
a b c$
[«]
cualquiera d e los caracteres e n la ca d en a 5
[ab e]
r*]
cualquier carácter q ue n o e s té en la ca d en a s
[~ a b c]
r*
cero 0 m ás cad en as q ue coincidan con r
a*
r+
u n a 0 m ás cad en as q u e coincidan con r
a+
r?
cero 0 u n a r
a?
r{m , n}
en tre m y n ocu rren cias d e r
a [ l ,5 ]
n r2
una n se g u id a d e u n a r2
ab
n | r2
u n a r\ 0 u na r2
a |b
M
igual q ue r
(a Ib)
n /r 2
ri cu an do va segu id a d e r2
á b c /1 2 3
F igu ra 3.8: E xp resion es regulares d e Lex
E j e r c i c i o 3 .3 .9 : La exp resión regular r{m , n } coincide co n las ocurrencias en tre m y n del
p atrón r. P or ejem plo, a [ l , 5 ] coin cid e co n u n a ca d en a d e u n a a cin co as. M u estre q ue para
ca d a exp resión regular q ue con tien e operadores d e repetición d e e s ta form a, h ay u na expresión
regular eq u ivalen te sin operadores d e repetición.
E j e r c i c i o 3 .3 .1 0 : E l operador ~ coincide co n e l extrem o izquierdo d e u n a línea, y S coincide
co n e l extrem o derecho d e u n a línea. E l operador ~ tam b ién se u tiliza para introducir las clases
d e caracteres com p lem en tados, pero e l co n tex to siem p re d eja e n claro cu á l es e l sign ificad o de­
sead o. P or ejem p lo, ~ [ ~ a e io u ] * $ coin cid e co n cualquier lín ea co m p leta q ue no co n tien e una
v o ca l e n m inúscula.
a) ¿C óm o p od em os saber cu á l es el sign ificad o d esea d o de
b) ¿P od em os su stitu ir siem p re u n a expresión regular, usando los operadores ~ y $, p or una
expresión eq u ivalen te q ue n o u tilice n inguno d e esto s operadores?
E j e r c i c i o 3 .3 .1 1 : E l com an d o d el intérprete (sh ell) d e U N IX s h u tiliza los operadores d e la
figura 3 .9 en exp resion es d e nom bres d e archivo para describir con jun tos d e nom bres d e ar­
ch ivos. Por ejem plo, la exp resión d e nom bre d e archivo * . o coincide con to d o s los nom bres de
archivo q ue term inen en . o; o r d e n l . ? coin cid e con to d o s lo s nom bres d e archivo d e la form a
128
Capítulo 3. Análisis léxico
Ex p r e s ió n
COINCIDE CON
E je m pl o
V
la cad en a s, literalm ente
'V
V
*
e l carácter c, literalm ente
V
cualquier cad en a
* .0
?
cualquier carácter
ord en 1 . ?
[^]
cualquier carácter en 5
o r d e n l.[e s o ]
F igu ra 3.9: E xp resion es d e nom bres d e archivo utilizad as p or e l com an do s h d e l intérprete
d e U N IX
o r d e n . c, en d on d e c es cualquier carácter. M u estre cóm o pueden su stitu irse la s exp resion es d e
nom bres d e archivo d e s h por exp resion es regulares eq u ivalen tes, usand o só lo los operadores
básicos d e unión, con caten ación y cerradura.
! E j e r c ic io 3 .3 .1 2 : SQL p erm ite u n a form a rudim entaria d e patrones, en lo s cu a les d o s carac­
teres tien en u n sign ificad o especial: e l gu ión b ajo (_) represen ta a cualquier carácter y el sign o
d e p or cien to (%) represen ta a cualquier ca d en a d e 0 o m ás caracteres. A d em á s, el program ador
p uede definir cualquier carácter, p or decir e, para q u e se a e l carácter d e escap e, d e m anera q ue
si colocam os a e an tes d e e antes d e _, % o cualquier e, o b ten em os el carácter q ue v a desp ués
d e su sign ificad o literal. M uestre cóm o exp resar cualquier patrón d e SQL com o u na expresión
regular, d ad o q u e sab em os cu á l es e l carácter d e escape.
3.4
R e c o n o c im ie n to d e to k e n s
En la sección anterior, aprendim os a expresar los patrones usando exp resion es regulares. Ahora
d eb em os estu d iar cóm o tom ar to d o s los patrones para to d o s los tokens necesarios y construir
u na p ieza d e cód ig o para exam in ar la cad en a d e en trad a y buscar u n prefijo q ue s e a un lexem a q ue co in cid a con uno d e eso s patrones. E n n uestra exp licación harem os u so d e l sigu ien te
bosquejo:
i n s tr
-► i f e r p r t h e n in s tr
|
i f expr t h e n in s tr e l s e in s tr
expr
-*• te m í o p r e l te m í
|
term
-► id
n um ero
I
te m í
e
Figura 3.10: U n a g ra m á tica para la s in stru cciones d e bifurcación
E j e m p lo 3 .8 : E l fragm ento d e gram ática d e la figura 3.10 d escrib e im a form a sim p le d e ins­
trucciones d e bifurcación y d e exp resion es con d icion ales. E s ta sin ta x is es sim ilar a la d e l len­
gu a je P ascal porque t h e n aparece e n form a e x p líc ita d esp u és d e las condiciones.
3.4
Reconocimiento d e tokens
129
P ara o p r e l , u sam os los op erad ores d e com p aración d e len g u a jes co m o P a sca l o S Q L , en
d ond e = e s “e s igu al a” y o e s “no e s igu a l a” , y a q ue p resen ta u n a estr u c tu ra in teresan te de
lexem as.
Las term inales d e la gram ática, q u e so n if, t h e n , e l s e , o p r e l , id y n u m e r o , so n los
nom bres d e tok en s en lo q u e al analizador léxico resp ecta. L os p atron es para e s to s tokens se
describ en m ediante el u so d e d efinicion es regulares, com o en la figu ra 3.11. Los patrones para
i d y n ú m ero son sim ilares a lo q u e vim os e n el ejem p lo 3.7.
digito
á g ito s
num ero
letra
id
if
then
else
oprel
—*
[0-9]
—►
—►
—►
—►
—►
—►
—►
—►
d ig ito +
d ig ito s ( . dígitos)? ( E [+-]? díg ito s )?
[A-Za-z]
letra ( letra | d ig ito )*
if
th e n
e ls e
< 1 > 1 <= 1 >= 1 = 1 o
F igu ra 3.11: P atron es para los tokens d el ejem p lo 3.8
P ara e s te lengu aje, el analizador léxico reconocerá la s palabras cla v e i f , t h e n y e l s e , así
com o los lexem as q ue coinciden con los patrones para oprel, id y num ero. P a ra sim plificar las
cosas, vam os a hacer la su posición com ú n d e q ue las palabras cla v e tam b ién son palabras r e s e r ­
vadas', es d ecir, n o so n identificadores, aun cu a n d o su s lexem as coinciden co n e l p atrón para
identificadores.
A dem ás, asignarem os a l analizador léxico e l trab ajo d e elim inar e l esp a cio e n blanco,
reconociendo e l “to k en ” w s d efin id o por:
ws
—► ( b l a n c o | t a b | n u e v a l i n e a ) +
A qu í, b l a n c o , t a b y n u e v a l i n e a so n sím b olos ab stractos q ue u tiliza m o s para expresar los
caracteres A SC II d e los m ism os nom bres. E l token w s es d istin to d e los d em ás tokens porque
cu an d o lo recon ocem os, n o lo regresam os a l analizador sin tá ctico , sin o q ue rem id a m o s el ana­
lizador léxico a partir d el carácter q u e v a d esp u és d e l esp a cio e n blanco. E l sig u ien te tok en es
e l q ue se d evu elv e a l analizador sin táctico.
N u estro o b jetiv o para e l analizador léxico se resum e e n la figura 3.12. E sa ta b la m uestra,
para ca d a lexem a o fam ilia d e lexem as, q ué nom bre d e token se d evu elve a l analizador sin tác­
tico y q u é valor d e atrib u to se d evu elve, com o v im o s en la sección 3.1.3. O bserve q ue para los
se is operadores relaciónales, se u tilizan las co n sta n tes sim b ó lica s LT, LE, y d em ás com o e l valor
d e l atrib uto, para poder indicar qué in sta n cia d e l token o p r e l hem os encontrado. E l op e­
rador específico q ue se en cu en tre influirá en e l có d ig o q u e genere e l com pilador d e salida.
□
130
Capítulo 3. Análisis léxico
LEXEMAS
C ualquier ws
if
Then
e ls e
C ualquier id
C ualquier num ero
<
<=
=
o
>
>=
NOMBRE DEL TOKEN
VALOR DEL ATRIBUTO
—
—
if
th e n
e ls e
id
num ero
op rel
oprel
op rel
oprel
op rel
oprel
—
A puntador a u n a e n tra d a en la ta b la
A puntador a u n a e n tra d a en la ta b la
LT
LE
EQ
NE
GT
GE
F igu ra 3.12: Tokens, su s patrones y los valores d e lo s atributos
3.4.1
D ia g ra m a s de tra n sició n de estad os
Com o paso interm edio en la construcción d e un analizador léxico, prim ero convertim os los pa­
trones en diagram as d e flujo estilizados, a los cu ales se les llam a “diagram as d e transición d e es­
tados” . E n e s ta sección, realizarem os la conversión d e los patrones d e expresiones regulares a los
diagram as d e transición de estad os en form a m anual, p ero en la sección 3.6 verem os q ue h ay una
form a m ecánica d e construir estos diagram as, a partir d e colecciones d e expresiones regulares.
Los diagram as d e tra n sició n d e e sta d o s tien en u na colección d e n od os o círculos, llam a­
d os estados. C ad a e sta d o representa u n a condición q ue p o d r ía ocurrir d urante el proceso d e
explorar la entrada, buscando un lexem a q ue coin cid a con u no d e varios patrones. P od em os
considerar un esta d o com o un resum en d e tod o lo q u e d eb em o s sab er acerca d e los caracteres
q ue h em os v isto en tre el apuntador in id o L e x e m a y e l apuntador avan ce (com o en la situ ación
d e la figura 3.3).
Las Uneas se d irigen d e un esta d o a otro d el diagram a d e transición d e esta d o s. C ad a línea
se etiq u eta m ediante un sím b olo o conjunto d e sím b olos. Si nos en con tram os en cierto esta d o s,
y el sigu ien te sím b olo d e en trad a es a, b uscam os u n a lín ea q ue sa lg a d e l esta d o 5 y e s té e ti­
q u etad o p or a (y tal v e z por otros sím b olos tam b ién ). Si en con tram os d ich a línea, avanza­
m os el apuntador avance y en tram os al esta d o d el d iagram a d e transición d e esta d o s a l que nos
llev a e sa lín ea. A sum irem os q ue to d o s n uestros diagram as d e transición d e esta d o s so n d eter­
m in ista s, lo q ue sign ifica q ue nunca hay m ás d e u na lín ea q u e sa le d e un esta d o dado, con un
sím b olo d ad o d e entre su s etiq u etas. A partir d e la sección 3 .5 , relajarem os la con d ición d el
d eterm inism o, facilitan d o en form a considerable la v id a d e l d iseñ ador d e un analizador léxico,
aunque e s to se hará m ás difícil para e l im plem entador. A lgunas con ven ciones im p ortan tes d e
los diagram as d e tran sición d e esta d o s son:
1. Se d ice q ue ciertos estad os so n de a c e p ta c ió n , o fin a les. E sto s esta d o s indican q u e se
h a en con trad o un lexem a, au nq ue e l lexem a a ctu a l tal v e z no co n sista d e to d a s las p o ­
sicion es en tre los apuntadores in id o L e x e m a y a v a n c e Siem pre indicam os un esta d o d e
3.4
Reconocimiento d e tokens
131
aceptación m ed ian te u n círculo d oble, y s i h ay q ue realizar u n a acción (por lo general,
devolver u n token y u n valor d e atrib u to al analizador sin tá ctico ), la adjuntarem os al
esta d o d e aceptación.
2. A dem ás, si e s necesario retroceder el apuntador avance u n a p osición (es d ecir, s i el
lexem a no in clu ye el sím b olo que n os llevó a l esta d o d e a ce p ta ció n ), en ton ces deberem os
colocar d e m anera adicional u n * cerca d el esta d o d e aceptación. E n nuestro ejem plo,
nunca es necesario retroceder a avan ce m ás d e u n a p o sició n , p ero s i lo fuera, podríam os
adjuntar cualquier núm ero d e *s a l esta d o d e aceptación.
3. U n esta d o s e d esign a com o el estado in ic ia l; e s to s e in d ica m ed ian te u na línea etiq u eta ­
d a com o “inicio” , q ue no proviene d e n ingu na parte. E l d ia g ra m a d e tran sición siem pre
em p ieza en el e sta d o inicial, an tes d e leer cualquier sím b olo d e entrada.
E j e m p lo 3 .9 : L a figura 3.13 es u n diagram a d e transición d e esta d o s q ue reconoce los lexem as q ue coinciden con el tok en o p r e l . E m p ezam os e n e l esta d o 0, e l esta d o inicial. Si vem os <
com o el prim er sím b olo d e en trad a, en to n ces d e en tre los lexem as q u e coinciden con el patrón
para o p r e l sólo p od em os ver a <, o o <=. Por lo ta n to , p asam os al esta d o 1 y analizam os el
sigu ien te carácter. Si es = , en to n ces recon ocem os e l lex em a <=, p asam os al esta d o 2 y devolve­
m os e l token o p r e l co n el atrib u to LE, la co n sta n te sim b ó lica q ue represen ta a e s te operador de
com paración esp ecífico. Si e n el esta d o 1 e l sigu ien te carácter e s >, en ton ces ten em o s e l lexem a
o y p asam os a l esta d o 3 para devolver una indicación d e q ue se h a en con trad o el operador
“no es igual a”. E n cualquier otro carácter, el lex em a es <, y p asam os al esta d o 4 para devolver
e s a inform ación. Sin em bargo, observe q u e e l esta d o 4 tien e un * para indicar q u e debem os
retroceder la en tra d a u n a posición.
F igu ra 3.13: D iagram a d e tran sición d e esta d o s para o p r e l
P or otro lado, si en el esta d o 0 el prim er carácter q ue vem os es =, en ton ces e s te carácter
d eb e ser e l lexem a. D e in m ediato d evolvem os e se hecho d esd e el esta d o 5. L a p osibilid ad res­
ta n te es q u e el prim er carácter s e a >. E n ton ces, d eb em os pasar al esta d o 6 y d ecid ir, en base
132
Capítulo 3. Análisis léxico
al sigu ien te carácter, s i el lexem a es >= (si vem os a con tinu ación el sig n o =), o só lo > (con cu al­
quier o tro carácter). O bserve que, s i e n el estad o 0 vem os cualquier carácter ad em ás d e <, = o
>, no es p osib le q ue estem o s viend o un lexem a o p r e l , p or lo q ue no u tilizarem os e s te diagram a
d e tran sición d e estad os.
□
3.4.2
R e co n o cim ie n to de las p a la b ra s re s e rv a d a s
y los id en tificad o res
El recon ocim iento d e las palabras reservadas y los identificadores p resen ta un problem a. P or lo
general, las palabras clave com o i f o t h e n son reservadas (com o en nuestro b osq u ejo), p or
lo q ue no so n identificadores, aun cu an do lo parecen. A sí, aunque por lo general usam os un
d iagram a d e transición d e estad os com o el d e la figura 3.14 p a ra buscar lexem as d e identificadores, e s te d iagram a tam bién reconocerá las palabras clave i f , t h e n y e l s e d e nuestro bosquejo.
letra o dígito
*
return (obtenerToken{ ), instalarID{ ))
F igu ra 3.14: U n d iagram a d e tran sición d e esta d o s para identificadores ( id ) y palabras clave
H ay d os form as en las q ue p od em os m anejar las palabras reservadas q ue parecen id en tifi­
cadores:
1. Instalar las palabras reservadas en la ta b la d e sím b olos d esd e el principio. U n ca m p o d e
la en trad a en la ta b la d e sím b olos in dica q u e esta s ca d en a s n u n ca serán identificadores
ordinarios, y nos d ice q ué token representan. H em os su p u esto q ue e s te m éto d o es el q ue
se u tiliza en la figura 3.14. A l encontrar un identificador, u n a llam ada a in s ta la r lD lo
co lo ca e n la ta b la de sím b olos, si no se en cu en tra a h í to d a v ía , y d evu elve un apuntador a
la en trad a e n la ta b la d e sím b olos para e l lex em a q ue se en con tró. D esd e luego q u e cu al­
quier identificador q ue no se encuentre en la ta b la d e sím b olos d urante el análisis léxico
no p uede ser u n a p alabra reservada, p or lo q ue su token es id . L a función obtenerT oken
exa m in a la en trad a en la ta b la d e sím b olos para el lex em a encontrado, y d evu elve el
nom bre d e token q ue la ta b la d e sím b olos indique q ue represen ta e s te lexem a; y a sea id
o u no d e los tokens d e p alab ra clave q ue se in sta ló e n u n principio en la tabla.
2. Crear diagram as de tran sición d e estad os separados para c a d a palabra clave; en la figura
3.15 s e m uestra un ejem p lo para la palabra cla v e t h e n . O bserve q ue dicho d iagram a d e
transición d e esta d o co n siste en estad os q u e representan la situ a ció n desp ués d e ver cada
letra su cesiv a d e la p alabra clave, se g u id a d e u n a p ru eb a p a ra un “no le tr a ni d íg ito ” ,
es decir, cualquier carácter q ue no p u ed a ser la con tinu ación d e u n identificador. Es
necesario verificar q ue e l identificador h aya term inado, o d e lo contrario devolveríam os
el token t h e n e n situ a cio n es e n las q u e e l token correcto er a id , con un lex em a com o
t h e n e x tV a lu e que te n g a a t h e n com o un prefijo propio. Si ad optam os e s te m éto d o , en ­
ton ces d eb em os dar prioridad a los tokens, para q ue los to k en s d e palabra reservada se
3.4
Reconocimiento d e tokens
133
reconozcan d e preferencia en vez d e id , cu a n d o el lex em a coin cid a con am bos patrones.
N o u tilizarem os este m étod o e n nuestro ejem plo, q ue ex p lic a por q u é lo s esta d o s e n la
figura 3.15 no está n enum erados.
inicio
F igu ra 3.15: D iagram a d e transición h ip o tético p a ra la p alabra cla v e t h e n
3.4.3
F in a liza ció n d el bosqu ejo
E l diagram a d e transición para los tokens id q ue vim os en la figura 3.14 tien e u n a estructu ra
sim p le. E m p ezan d o en e l esta d o 9, com p ru eb a q u e el lex em a em p iece co n u n a letra y q ue pase
a l esta d o 10 en caso d e ser así. Perm anecem os en e l e sta d o 10 siem pre y cu a n d o la en trad a
co n ten g a letras y d ígitos. A l m om ento d e encontrar e l prim er carácter q ue no s e a le tr a ni
d íg ito , p asam os al esta d o 11 y aceptam os el lex em a en con trad o. C om o el ú ltim o carácter no
form a p arte d el identificador, d eb em os retroceder la en trad a u na p osición, y com o v im o s en la
sección 3.4.2, in trodu cim os lo q ue h em os en con trad o e n la ta b la d e sím b olos y determ inam os
s i ten em os u n a palabra clave o u n verdadero identificador.
E l diagram a d e transición d e esta d o s para el token n u m e r o se m uestra en la figura 3.16,
y es h a sta ahora e l d iagram a m ás com plejo q ue hem os v isto . E m p ezan d o en e l esta d o 12, si
vem o s un d íg ito p asam os al esta d o 13. E n ese esta d o p o d e m o s leer cualquier núm ero d e d ígitos
adicionales. N o ob sta n te, si v em o s algo q ue no s e a u n d íg ito o un punto, hem os v isto u n núm ero
e n form a d e entero; 123 es un ejem p lo. P ara m anejar e s e ca so p asam os al esta d o 20, e n donde
d evolvem os e l token n u m e r o y un apuntador a una ta b la d e co n sta n tes en d on d e se introduce
e l lexem a encontrado. E sta m ecánica n o se m u estra en el diagram a, pero es a n á loga a la form a
e n la que m anejam os los identificadores.
inicio
F igu ra 3.16: U n d iagram a d e tra n sició n para lo s núm eros sin sig n o
S i en v e z d e ello v em o s u n p u n to en e l e sta d o 13, en to n ces ten em os u n a “fracción o p cio n a l”.
P asam os al esta d o 14, y b u scam os u no o m ás d íg ito s adicionales; e l esta d o 15 s e u tiliza para
e s te fin. Si vem os u na E, en ton ces ten em os un “ex p o n en te o p cio n a l” , cuyo reconocim iento es
trab ajo d e los estad os 16 a 19. Si en el esta d o 15 vem os algo q ue no s e a u n a E o u n d ígito,
en to n ces hem os llegado al final de la fracción, no h ay ex p o n en te y d evolvem os e l lex em a encon­
trado, m ed ian te el estad o 2 1 .
134
Capítulo 3. Análisis léxico
El diagram a d e transición d e estad os final, q ue se m uestra en la figu ra 3 .1 7 , es para el
espacio en blanco. E n ese diagram a b uscam os u no o m ás caracteres d e “esp a cio en blanco” ,
representados p or d e l i m e n e se diagram a; por lo gen eral e sto s caracteres son los espacios,
tabuladores, caracteres d e n ueva lín ea y tal vez o tro s caracteres q u e e l d iseñ o d el lengu aje no
considere com o parte d e algún token.
delim
F igu ra 3.17: U n d iagram a d e transición para el espacio en blanco
O bserve q u e , en el esta d o 24, hem os en con trad o un b loqu e d e caracteres d e espacio en
blanco con secu tivos, segu id os d e un carácter q u e n o e s esp a cio e n blanco. R egresem os la en ­
trad a p ara q u e em p iece en el carácter q u e no es esp a cio e n blanco, pero no regresam os nada
al analizador sin táctico, sin o q ue d eb em os reiniciar e l proceso d el an álisis léxico d esp u és d el
espacio en blanco.
3.4.4
A r q u ite c tu r a de u n an alizad o r léx ico basado en d ia g ra m a s
de tran sició n de esta d o s
Hay varias form as e n las q ue p ueden u tilizarse los diagram as d e tran sición d e esta d o s para
construir un analizador léxico. S in im portar la estra teg ia general, ca d a e sta d o se representa
m ediante u n a p ieza d e cód igo. P od em os im aginar u n a variable e s t a d o q ue co n tien e el núm ero
d el estad o actu al para u n d iagram a d e tran sición d e esta d o s. U n a instrucción sw itch co n base
en el valor d e e s t a d o nos lleva al cód igo para ca d a u no d e los p o sib les esta d o s, en d ond e en ­
con tram os la acción d e ese estad o. A m enudo, e l có d ig o para un esta d o es en s í u n a instrucción
sw itch o u n a bifurcación d e varias v ía s q u e d eterm in a el sigu ien te esta d o m ediante el proceso
d e leer y exam inar e l sigu ien te carácter d e entrada.
E j e m p lo 3 .1 0 : E n la figura 3.18 vem os un b osquejo d e ó b te n e r O p R e lO , u n a función en
C + + cu yo trab ajo es sim u lar e l diagram a d e transición d e la figura 3.13 y devolver un o b jeto
d e tip o TOKEN; es decir, un par q u e co n siste en el nom bre d el token (que d eb e ser o p r e l en este
ca so ) y un valor d e atrib u to (el cód ig o para u no d e los seis operadores d e com paración en
e s te caso). Lo prim ero q ue hace ó b te n e r O p R e lO es crear un nuevo o b je to to k e n R e t e inicializar su prim er com p on en te con OPREL, el cód igo sim b ólico para e l token o p r e l .
P od em os ver el com p ortam ien to típ ic o d e un esta d o e n e l ca so 0, e l ca so en d on d e e l esta d o
actu al e s 0. U n a fun ción llam ad a s ig C a r O o b tie n e e l sig u ien te carácter d e la en trad a y lo
asign a a la variable local c. D espués verificam os si c es u no d e los tres caracteres q ue esperam os
encontrar, y realizam os la transición d e esta d o q ue in d ica e l d iagram a d e tran sición d e la figura
3.13 en ca d a caso. Por ejem p lo, s i e l sigu ien te carácter d e en trad a e s =, p asam os al esta d o 5.
Si e l sigu ien te carácter d e en tra d a n o e s u no q ue pueda em pezar un operador d e com p a­
ración, en ton ces se hace u na llam ad a a la función f a l l o ( ) . Lo q ue h a g a é s ta d ep en d erá d e la
3.4
Reconocimiento d e tokens
135
TOKEN o b te n e r O p R e lO
{
TOKEN to k e n R e t = new (OPREL);
w h i l e ( l ) { / * r e p i t e e l p r o c e s a m ie n t o d e c a r a c t e r e s h a s t a que
o cu rre un re to r n o o un f a l l o * /
s w itc h (e s ta d o )
{
c a s e 0 : c = s ig C a r O ;
i f ( c = >< > ) e s t a d o = 1 ;
e l s e i f ( c == , = * ) e s t a d o = 5 ;
e l s e i f ( c == *>y ) e s t a d o = 6 ;
e l s e f a l l o ( ) ; / * e l le x e m a no e s u n o p r e l * /
b reak ;
case 1 : . . .
case 8 : re tr a c ta r O ;
t o k e n R e t . a t r i b u t o = GT;
re tu r n (to k e n R e t);
>
>
}
F igu ra 3.18: Bosquejo d e la im plem en tación d e l diagram a d e tran sición o p r e l
e str a te g ia glob al d e recuperación d e errores d el analizador léxico. D eb e reiniciar e l apuntador
a v a n c e para colocarlo en la m ism a p osición q ue in ic io L e x e m a , d e m anera q u e p u ed a aplicarse
o tro d iagram a d e tran sición d e esta d o s al verdadero inicio d e la en trad a sin procesar. E ntonces
p od ría cam biar el valor d e e s t a d o para q ue se a e l esta d o in icial para otro d iagram a d e transi­
ción, e l cu a l buscará o tro token. D e m anera alternativa, si no h ay o tro d iagram a d e transición de
esta d o s q ue e s té sin uso, f a l l o ( ) podría iniciar u na fase d e corrección d e errores q ue tratará
d e reparar la en trad a y encontrar un lexem a, com o v im o s en la sección 3.1.4.
Tam bién m ostram os la acción para el esta d o 8 en la figura 3.18. C om o e l e sta d o 8 llev a u n *,
d eb em os regresar e l apuntador d e en trad a u n a p osición (es decir, colocar a c d e v u elta en el flu­
jo d e en trad a ). E sta ta re a se lleva a ca b o m ed ian te la función r e t r a c t a r O . C om o el esta d o 8
represen ta el reconocim iento d e l lexem a >=, esta b lecem o s e l segu n d o co m p o n en te d el o b jeto
d ev u elto (el cu a l su p on em os se llam a a t r i b u t o ) con GT, el có d ig o para e s te operador.
□
P ara poner en p ersp ectiv a la sim u lación d e un d iagram a d e tran sición d e esta d o s, vam os
a considerar las form as e n q ue e l cód ig o com o e l d e la figu ra 3.18 p o d ría ajustarse a to d o el
analizador léxico.
1. P odríam os arreglar q ue los d iagram as d e transición para ca d a token se probaran en
form a secu en cial. D espués, la función f a l l o ( ) d el ejem p lo 3.10 restablece e l apuntador
a v a n ce e in icia e l sigu ien te diagram a de transición d e esta d o s, ca d a vez q ue se le llam a.
E ste m étod o n os p erm ite usar diagram as d e tran sición d e esta d o s p a ra las palabras clave
individuales, com o el q ue se sugiere en la figura 3.15. Sólo ten em os q ue usarlos antes que
e l d iagram a para id , d e m anera q u e las palabras clave sea n palabras reservadas.
136
Capítulo 3. Análisis léxico
2. P odríam os ejecu tar los d iversos diagram as d e transición d e esta d o s “en paralelo” , ali­
m en tan do el sigu ien te carácter d e en trad a a tod os ellos y p erm itien d o q ue ca d a u no rea­
lice las tran siciones requeridas. S i utilizam os e s ta estra teg ia , d eb em os tener cu id ado d e
resolver e l caso en e l q ue un diagram a en cu en tra a u n lex em a q ue coin cid e con su patrón,
m ientras u no o varios d e los otros diagram as p ueden segu ir p rocesan do la entrada. La
estra teg ia norm al es tom ar el prefijo m ás largo d e la e n tra d a q ue coin cid a con cualquier
patrón. E sa regla nos p erm ite p or ejem plo, dar preferencia al identificador s i g u i e n t e
sobre la p alabra clave t h e n , o a l operador - > sobre
3. E l m étod o preferido, y e l q ue vam os a usar e n la s sig u ien tes seccion es, e s com binar tod os
los d iagram as d e transición d e esta d o s en uno solo. P erm itim os q ue e l d iagram a d e tran­
sición d e esta d o s le a la en trad a h a sta q u e no haya u n sigu ien te e sta d o posible, y después
tom am os el lexem a m ás largo q ue haya coincidido con algú n patrón, com o d ijim os en
el punto (2) anterior. E n nuestro b osqu ejo, e s ta com b inación es fácil, y a q ue n o p uede
haber d o s tok en s q ue em p iecen co n el m ism o carácter; es decir, e l prim er carácter nos
in d ica d e in m ed iato el tok en q ue esta m o s b uscando. Por en d e, p odríam os sim p lem en te
com binar los esta d o s 0 , 9, 12 y 22 e n un esta d o inicial, d ejan d o las d em ás transiciones
in tactas. N o o b sta n te , en general, el prob lem a d e com binar d iagram as d e tran sición de
esta d o s para varios tok en s e s m ás com p lejo, co m o verem os e n breve.
3.4.5
E je rcicio s p a ra la sección 3.4
E j e r c ic io 3 .4 .1 : P roporcione los diagram as d e transición d e esta d o s p a ra reconocer los m is­
m os lengu ajes q ue en ca d a una d e las exp resion es regulares en e l ejercicio 3.3.2.
E j e r c ic io 3 .4 .2 : P roporcione los diagram as d e transición p a ra reconocer los m ism os lengu ajes
q ue e n ca d a u n a de las exp resion es regulares en e l ejercicio 3.3.5.
Los sigu ien tes ejercicios, h a sta el 3.4.12, p resen tan el algoritm o d e A ho-C orasick para re­
con ocer una colección d e palabras clave en u n a ca d en a d e te x to , en un tiem p o proporcional
a la lon gitu d d e l te x to y la su m a d e la longitud d e las palabras clave. E ste algoritm o u tiliza
u na form a esp ecial d e diagram a de transición, co n o cid o co m o trie. U n trie es un d iagram a d e
transición d e estad os co n estru ctu ra d e árbol y d istin ta s etiq u e ta s e n las lín eas q ue n os llevan
d e u n n od o a su s hijos. Las h ojas d el trie representan la s palabras clave reconocidas.
K nuth, M orris y P ra tt presentaron un algoritm o para reconocer u n a p alabra cla v e indivi­
d u a l 6162 • • • bn en u n a cad en a d e tex to . A qu í, el trie es un d iagram a d e tra n sició n d e esta d o s
con n estad os, d e 0 a n. E l esta d o 0 es e l esta d o in icial, y e l esta d o n representa la aceptación,
es decir, e l d escub rim iento d e la p alabra clave. D e c a d a esta d o s, d esd e 0 h a sta n — 1, hay u na
transición al esta d o 5 + 1, q ue se e tiq u e ta m ediante el sím b olo bs+i. P or ejem plo, e l trie para
la p alabra clave ab ab aa es:
P ara p od er p rocesar las cad en as d e te x t o con rapidez y buscar u na p alabra cla v e en esas
cad en as, es ú til definir, para la palabra clave 6162 • • • bn y la p osición 5 en e s a p alabra clave
(correspondiente al esta d o s d e su trie), u n a Junción de fa llo , / ( s ) , q ue se ca lcu la com o en la
3.4
Reconocimiento d e tokens
137
figu ra 3.19. E l o b jetiv o es q ue &1&2 * • • &/(*) s e a el prefijo propio m ás largo d e bib¿ • • • bs, que
ta m b ién s e a sufijo d e fofe • • • bs. L a razón d e la im p o rta n cia d e f ( s ) es que, si tratam os de
encontrar u n a coin cid en cia en u na ca d en a d e te x to p a ra 6162 • • * bn, y h em os relacionado las
prim eras s p osiciones, pero d esp u és fallam os (es decir, q ue la sigu ien te p osición d e la ca d en a de
te x to n o co n ten g a a bs+1 ), en to n ces f ( s ) es e l prefijo m ás largo d e 6162 • • • bn q ue p o d ría quizá
coincidir con la cad en a d e te x to h a sta e l punto en e l q ue nos en con tram os. D esd e luego q u e el
sigu ien te carácter d e la cad en a d e te x to d eb e ser 6/(,)+i, o d e lo contrario seguiríam os teniendo
problem as y ten dríam os q u e considerar un prefijo aún m ás co rto , el cual será 6/(/(s)).
1)
¿=0;
2)
/ ( 1) = 0;
3)
for (s = 1; s < n; s + +)
{
4) w h i l e ( t >
0 && fctH-i ! = bt+i) t = /( í ) ;
5)
i f (& *, = = 6(+i) {
6)
t = t + 1;
7)
f ( s + 1) = f;
}
e ls e f (s + 1 ) = 0;
8)
}
F igu ra 3.19: A lgoritm o para calcu lar la función d e fallo para la p alabra cla v e 6162 * * * bn
C om o ejem plo, la función d e fallo para e l trie q u e con stru im os antes para ababaa es:
s
m
1
0
2
u
3
1
4
2
0
3
G
1
P or ejem p lo, los esta d o s 3 y 1 representan a lo s prefijos aba y a, resp ectivam en te. / ( 3 ) = 1 y a
q u e a es el prefijo propio m ás largo d e aba, q ue tam bién es un sufijo d e ab a. A dem ás, /( 2 ) = 0,
d eb ido a q ue e l prefijo propio m ás largo d e ab, que tam bién es u n sufijo, es la ca d en a vacía.
E j e r c ic io 3 .4 .3 : C on stru ya la función d e fallo para las sigu ientes cadenas:
a ) abababaab.
b ) a a aaaa.
c ) abbaabb.
! E j e r c ic io 3 .4 .4 : D em uestre, por inducción en 5, q ue el algoritm o d e la figura 3 .19 ca lcu la en
form a correcta la fun ción d e fallo.
!! E j e r c ic io 3 .4 .5 : M u estre q ue la asign ación t = f ( t ) en la lín ea (4) d e l a figura 3.19 se ejecu ta
cu an d o m ucho n veces. M uestre que, p or lo ta n to , to d o e l algoritm o requiere só lo un tiem po
0 ( n ) para u n a p alabra clave d e lon gitu d n.
138
Capítulo 3. Análisis léxico
H abiendo calcu lado la función d e fallo para u n a palabra cla v e 6162 ■• • K , p od em os explorar
una cad en a ai 02 • • • a™ en un tiem po 0 ( m ) p ara sa b er s i h ay u n a ocu rren cia d e la p a lab ra clave
en la cad en a. E l algoritm o, q ue s e m uestra en la figura 3.20, d esliza la p alabra cla v e a lo lar­
g o d e la cad en a, tratan d o d e progresar en b u sca d e la co in cid en cia d e l sig u ien te carácter d e la
palabra clave con el sigu ien te carácter d e la cadena. Si no p uede hacerlo d esp u és d e relacionar
5 caracteres, en to n ces “d esliza” la p alabra clave a la d erech a s — f(s ) p osiciones, d e m anera
q ue sólo los prim eros f ( s ) caracteres d e la palabra cla v e se consideren com o coincidencias con
la cadena.
1) 5 = 0 ;
2)
3)
4)
5)
f o r (« = 1 ; i < m \ « + + ) {
w h i l e ( 5 > 0 a¿ ! = 6^-1 ) 5 = f(s ) \
i f (ai = = bs+ 1) 5 = 5 + 1 ;
i f ( 5 = = n ) r e t u r n “si” ;
6)
}
r e t u r n “n o ” ;
F igu ra 3.20: E l algoritm o K M P eva lú a si la ca d en a a ^ • • • am co n tien e u n a palabra clave
in dividu al 6162 • • • bn com o u n a su bcadena, en u n tiem p o 0 ( m + n)
E j e r c ic io 3 .4 .6 : A pliqu e el algoritm o K M P para evaluar si la palabra cla v e ab a b a a es u na
su b ca d en a de:
a) abababaab.
b) abababbaa.
!! E j e r c ic io 3 .4 .7 : M uestre q u e el algoritm o d e la figura 3.20 n os in d ica en form a correcta si
la p alabra clave es u na su b ca d en a d e la cad en a dada. S u geren cia: p roceda p o r in du cción en i.
M uestre q ue para to d a s las i, e l valor d e 5 d esp u és d e la lín ea (4) e s la lon gitu d del prefijo m ás
largo d e la palabra clave q ue e s un sufijo d e 0102 • • • a¿.
!! E j e r c ic io 3 .4 .8 : M uestre q u e el algoritm o d e la figu ra 3.20 s e eje cu ta e n u n tiem p o 0 ( m + n ) ,
su p on ien d o q ue la función / y a s e h a calcu lado y q ue su s valores se alm acenaron en u n arreglo
indexado p or 5.
E j e r c ic io 3 .4 .9 : Las cadenas d e F ibonacci s e d efinen d e la sig u ien te manera:
1 . 51 = b.
2 . 32 = a.
3. Sk = Sk-iSk-2 para k > 2.
Por ejem plo, 53 = ab , 54 = a b a y 55 = abaab.
a) ¿C uál es la lon gitu d d e sn?
3.4
Reconocimiento d e tokens
139
b ) C on stru ya la fu n ción d e fallo para %
c ) C on stru ya la fun ción d e fallo para $7.
!! d ) M uestre q ue la función d e fallo para cualquier
p u ed e expresarse m ed ian te / ( 1 ) = / ( 2 )
= 0 , y q ue para 2 < j < \sn\, f ( j ) e s j — |s * -i|, en d on d e fc es el en tero m ás largo, de
form a q ue |$*| < j + 1 .
!! e ) E n el algoritm o K M P , ¿cuál e s el núm ero m ás gran d e d e ap licacion es co n secu tiv a s de
la función d e fallo, cu an d o tratam os d e d eterm in ar si la p a lab ra cla v e sk aparece en la
cad en a d e tex to s^+i?
A h o y C orasick generalizaron e l algoritm o K M P para reconocer cu alq uiera d e u n conjunto
d e palabras clave e n u na cad en a d e tex to . E n e s te ca so e l trie es un verdadero árb ol, con rami­
ficaciones d esd e la raíz. H ay un e sta d o para ca d a ca d en a q u e se a un prefijo (no necesariam ente
propio) d e cualquier p alabra clave. E l padre d e un esta d o corresp ond ien te a la ca d en a 6162 • • •
bk es e l esta d o q ue corresponde a fe fe - • • 6*_i. U n esta d o d e a cep tación si corresponde a una
p alabra clave com p leta. Por ejem p lo, la figura 3.21 m u estra e l trie para la s palabras cla v e he,
sh e, h is y h ers.
L a función d e fallo para e l trie gen eral s e d efin e d e la sig u ien te form a. S u p on ga q ue s e s el
e sta d o q ue corresponde a la ca d en a &ife • • • bn. E n tonces, f ( s ) es e l esta d o q u e corresp ond e al
su fijo propio m ás largo d e &ife • ■ ■ bn q ue tam bién e s un prefijo d e alguna p alabra clave. Por
ejem p lo, la función d e fallo para e l trie d e la figura 3.21 es:
s
m
1
2
0
0
3
0
4
1
5
2
G
7
8
0
3
0
9
3
E j e r c ic io 3 .4 .1 0 : M odifique el algoritm o d e la figura 3 .19 para calcular la fun ción d e fallo
para tries gen erales. S ugeren cia: L a principal diferencia es q ue no p o d em o s sim plificar la prue­
b a d e igualdad o d esigu ald ad d e 6^+1 y bt+i e n las lín eas (4) y (5) d e la figura 3.19. E n vez de
140
Capítulo 3. Análisis léxico
ello, d esd e cualquier estad o p u ed e haber varias tran siciones so b re diversos caracteres, a sí com o
hay tran sicion es ta n to en e com o en i d esd e el esta d o 1 en la figura 3.21. C ualquiera d e esas
transiciones p od ría c o n d u cim o s a un estad o q u e represente el sufijo m ás largo q ue se a tam bién
un prefijo.
E j e r c ic io 3 .4 .1 1 : C on stru ya los tries y calcu le la función d e fallo para los sig u ien tes con jun tos
d e palabras clave:
a) aaa, ab a a a y ababaaa.
b) a l l , f a l l , f a t a l , lla m a y lam e.
c) p ip e , p e t , ite m , tem p er y p e r p e t u a l.
E j e r c ic io 3 .4 .1 2 : M uestre q u e su algoritm o d el ejercicio 3.4.10 se sig u e ejecu tan d o en un
tiem p o q ue es lineal, en la su m a d e las lon gitud es d e las palabras clave.
3.5
E l g e n e ra d o r d e a n a liz a d o re s léxicos Lex
En e s ta sección presentarem os u n a herram ien ta co n o cid a co m o L ex, o F le x en u n a im plem entación m ás recien te, q ue n os p erm ite especificar un analizador léxico m ed ian te la especificación
d e exp resion es regulares para describir p atron es d e lo s tokens. L a n otación d e en trad a para la
herram ienta L ex s e co n o ce com o el lenguaje L ex , y la herram ienta en s í es e l co m p ila d o r Lex.
El com pilador L ex transform a los patrones d e en trad a en un d iagram a d e transición y gen era
có d ig o , en u n archivo llam ad o l e x . y y . c , q ue sim u la e s te diagram a d e transición. L a m ecánica
d e cóm o ocurre e s ta trad u cción d e exp resion es regulares a diagram as d e transición e s e l tem a d e
las sigu ientes secciones; aquí sólo aprenderem os acerca d el lengu aje Lex.
3 .5 .1
U s o d e Lex
La figura 3.22 su giere cóm o se u tiliz a Lex. U n archivo d e entrada, a l q ue llam arem os l e x . l ,
e s tá escrito en e l lengu aje L ex y d escrib e e l analizador léxico q u e se v a a generar. E l com pilador
Lex transform a a l e x . 1 en un program a en C, en un archivo q u e siem p re se llam a l e x . y y . c.
El com p ilad or d e C com p ila este archivo e n un archivo llam ado a .o u t , com o d e costum bre.
La sa lid a d e l com p ilad or d e C es un analizador léxico funcional, q u e p u ed e recibir un flujo d e
caracteres d e en tra d a y producir u n a ca d en a d e tokens.
El u so norm al d e l program a com p ilad o e n C , den om in ado a . o u t en la figura 3.22, es com o
una su b ru tin a d el analizador sin táctico. E s u na fun ción en C q ue d evu elve u n entero, e l cual
representa u n cód igo para uno d e los p osib les nom bres d e ca d a token. E l valor d e l atrib uto,
y a se a o tro cód igo num érico, un apuntador a la ta b la d e sím b olos, o nada, s e co lo c a en una
variable glob al llam ad a y y l v a l ,2 la cu a l se com p arte en tre e l analizador léxico y e l analizador
sin tá ctico, co n lo cu a l se sim p lifica el p roceso d e devolver tan to e l nom bre com o un valor de
a trib u to d e un token.
2A p ropósito, la y y q u e aparece en y y l v a l y l e x . y y . c s e refiere al generador d e analizadores sin tá ctico s Y acc,
que describirem os en la sección 4.9, e l cual s e u tiliza , por lo regular, en con jun to con Lex.
141
3.5 E l generador d e analizadores léxicos Lex
F igu ra 3.22: C reación d e un analizador léxico co n L ex
3 .5 .2
E s t r u c t u r a d e lo s p r o g r a m a s e n Lex
U n program a en L ex tien e la sigu ien te forma:
declaraciones
Ti
reglas de traducción
Ti
funciones auxiliares
L a sección d e declaraciones in clu ye las declaraciones d e variables, con sta n tes de m a n ifiesto
(identificadores q u e se declaran para representar a u n a con stante; p or ejem p lo , e l nom bre de
u n token) y d efinicion es regulares, en e l estilo d e la secció n 3.3.4.
C ada u na d e las reglas d e trad ucción tien e la sig u ien te forma:
P atrón
{ A c ció n }
C ad a patrón es u na expresión regular, la cu a l p uede usar las d efinicion es regulares d e la sección
d e d eclaraciones. Las acciones so n fragm entos d e có d ig o , p or lo general, escrito s en C , aunque
s e han cread o m uchas variantes d e L ex q ue u tiliza n o tro s lenguajes.
L a tercera sección con tien e las funciones ad icion ales q ue se u tiliza n en las acciones. D e ma­
nera alternativa, estas funciones pueden com pilarse p o r separado y cargarse con e l analizador
léxico.
E l analizador léxico q ue crea L ex tra b a ja en con ju n to co n e l analizador sin tá ctico d e la si­
g u ien te m anera. C uan do e l analizador sin tá ctico llam a al analizador léxico, é s te em p ieza a leer
e l resto d e s u entrada, un carácter a la vez, h a sta q u e en cu en tra e l prefijo m ás largo d e la
en trad a q ue coin cid e con u no d e los patrones P¿. D esp u és eje cu ta la acción asociad a A v P or lo
general, A i regresará al analizador sin táctico , pero s i no lo hace (tal v e z d eb ido a q ue P i d es­
crib e esp acio en b lanco o com en tarios), en to n ces el analizador léxico procede a buscar lexem as
ad icion ales, h a sta q u e u na d e las accion es corresp ond ien tes p rovoque un re to m o al analizador
sin táctico. E l analizador léxico d evu elve un so lo valor, el nom bre d e l token, al analizador sin­
tá ctico , pero u tiliza la variable en tera com p artid a y y l v a l p a ra pasarle inform ación adicional
sob re el lexem a en con trad o, si es necesario.
142
Capítulo 3. Análisis léxico
E j e m p lo 3 .1 1 : L a figura 3.23 es un program a en Lex q u e recon oce lo s to k en s d e la figu ra 3.12
y d evu elve e l token encontrado. U nas cu an tas ob servaciones acerca d e e s te có d ig o n os darán
una id ea d e varias d e las características im portan tes d e Lex.
En la sección d e declaraciones vem o s u n par d e llaves esp eciales, %{ y / } . C ualquier co sa
d en tro d e ellas se co p ia d irectam en te a l archivo l e x . y y . c , y no se tr a ta com o definición regu­
lar. E s com ú n colocar ah í las d efinicion es d e las co n sta n tes d e m anifiesto, usando instrucciones
# d e f i n e d e C para asociar cód igos en teros ú nicos c o n ca d a u na d e la s co n sta n tes d e m anifiesto.
En nuestro ejem plo, hem os listad o en un com entario los nom bres d e la s co n sta n tes d e m anifies­
to LT, IF , etc étera , pero n o las h em os m ostrado definidas para ser en teros esp ecífico s .3
A dem ás, e n la sección d e declaraciones h ay u n a secu en cia d e d efinicion es regulares. É stas
u tilizan la n otación ex te n d id a para exp resion es regulares q ue describ im os e n la secció n 3.3.5.
Las d efin icion es regulares q u e se u tilizan en d efinicion es posteriores o e n los patrones d e las
reglas d e traducción, van rodeadas de llaves. A sí, p or ejem plo, delim s e d efin e com o abreviación
para la clase d e caracteres q ue co n siste en e l espacio en blanco, el ta b u la d o r y el carácter d e
nueva línea; esto s ú ltim os d o s se representan, com o en to d o s lo s com an dos d e U N IX , por una
barra d iagon al inversa se g u id a d e t o d e n, resp ectivam en te. E n ton ces, w s se d efine para q ue
se a uno o m ás delim itadores, m ediante la exp resión regular { d e lim } + .
O bserve q u e en la definición de id y d e n u m ero se u tiliza n paréntesis co m o m eta sím bolos
d e agrupam iento, por lo q ue no s e representan a s í m ism os. E n con traste, la E en la definición d e
n u m ero s e rep resen ta a s í m ism a. S i d eseam os usar u n o d e los m e ta sím b olos d e Lex, com o
cu alq uiera d e los p arén tesis, +, * o ? para q ue se representen a s í m ism os, p od em os colocar
u na barra d iagon al inversa antes d e ellos. Por ejem p lo, vem os \ . en la definición d e n um ero
para representar el punto, y a q ue e se carácter es un m eta sím b olo q ue represen ta a “cualquier
carácter” , co m o es costu m b re e n las exp resion es regulares d e U N IX .
En la sección de funciones auxiliares v em o s d os d e esas funciones, i n s t a l a r ID O e i n s ­
t a l a r Num O . A l igual q ue la porción d e la sección d e declaración q u e aparece entre % {...% },
to d o lo q ue hay e n la sección auxiliar se co p ia d irectam ente a l archivo l e x . y y . c , pero p uede
usarse en las acciones.
Por ú ltim o, vam os a exam in ar algu nos d e los p atron es y reglas en la sección m ed ia d e la
figura 3.23. E n prim er lugar ten em os a w s, u n identificador declarado en la prim era sección,
e l cu a l tiene u na acción vacía asociada. Si en con tram os espacio e n blanco, no regresam os al
analizador sin táctico, sin o q ue buscam os otro lexem a. E l segu n d o tok en tien e e l patrón d e ex ­
presión regular sim p le i f . Si vem o s las d o s letras i f en la en trad a, y ésta s no van segu id as d e
o tra letra o d íg ito (que haría q ue e l analizador léxico b uscara u n prefijo m ás largo d e la en trad a
q ue coin cid a co n e l p atrón para i d ) , en ton ces el analizador léxico con su m e esta s d o s letras d e
la en trad a y d evu elv e el nom bre d e token IF, es decir, el en tero q ue la c o n sta n te d e m anifiesto
IF representa. Las palabras clave t h e n y e l s e se tra ta n d e m anera sim ilar.
El q u in to tok en tien e e l patrón d efinido por id . O bserve que, aunque las palabras clave com o
i f coinciden co n e s te patrón así com o co n un patrón anterior, Lex elije e l p atrón q ue aparezca
3Si s e u tiliza Lex ju n to con Yacc, en ton ces serla normal definir las con stan tes d e m anifiesto en e l program a Yacc
y usarlas sin definición en e l program a Lex. C om o lex.yy.c s e com p ila co n la salid a d e Y acc, por consiguiente las
constantes estarían d isponibles para las acciones en e l programa en Lex.
3.5 E l generador d e analizadores léxicos Lex
%{
/ * d e f i n i c i o n e s d e l a s c o n s t a n t e s de m a n i f i e s t o
LT, LE, EQ, NE, GT, GE,
I F , THEN, ELSE, ID , NUMERO, OPREL * /
7.}
/* d e f in ic io n e s r e g u la r e s * /
d e lim
[ \t\n ]
ws
{ d e lim } +
le tr a
{ A -Z a -z ]
d ig ito
[0 -9 ]
id
{ l e t r a } ( { l e t r a } |{ d i g it o } ) *
numero
{ d ig it o } + ( \.{ d ig ito } + ) ? (E [+ - ] ? (d ig it o )+ ) ?
{w s>
if
th en
e ls e
{ id }
{n um ero}
"<"
"<="
{ / * n o h a y a c c ió n y n o h a y r e t o r n o * / }
{r e tu r n (IF );}
{re tu r n (T H E N ); }
{ r e tu r n (E L S E ); }
{ y y lv a l = ( in t ) in s t a la r I D ( ) ; r e tu r n (ID );}
{ y y l v a l = ( i n t ) in s ta la r N u m O ; retura(NUM ERO); }
{ y y l v a l = LT;
r e t u r a ( OPREL); }
{ y y l v a l = LE;
retu ra (O P R E L ); }
{ y y l v a l = EQ;
retu ra(O P R E L ); }
{ y y l v a l = NE;
r e t u r a ( OPREL); }
{ y y l v a l = GT;
r e t u r a ( OPREL); }
{ y y l v a l = GE;
r e t u r a ( OPREL); }
"<>"
">"
">="
i n t i n s t a l a r I D ( ) { / * f u n c ió n p a r a i n s t a l a r e l le x e m a en
l a t a b l a d e s ím b o lo s y d e v o lv e r un
ap u n ta d o r a e s t o ; y y t e x t a p u n ta a l
p rim er c a r a c t e r y y y l e n t e s
l a lo n g itu d * /
i n t in s ta la r N u m O { / * s i m i l a r a i n s t a l a r I D , p e r o c o l o c a l a s
c o n s t a n t e s n u m é r ic a s e n u na t a b l a s e p a r a d a * /
}
F igu ra 3.23: P rogram a en Lex para los tokens d e la figura 3.12
143
144
Capítulo 3. Análisis léxico
prim ero en la lista , en situ acion es en las q ue e l prefijo m ás largo co in cid e con d o s o m ás patro­
nes. L a acción q ue s e realiza cu an d o hay u n a coin cid en cia con id c o n siste e n tres pasos:
1. Se hace u n a llam ad a a la función i n s t a l a r ID ( ) para colocar el lex em a en con trad o en la
tab la d e sím b olos.
2. E s ta fun ción d evu elv e u n apuntador a la ta b la d e sím b olos, el cu a l se co lo c a e n la va­
riable glob al y y l v a l , en d on d e el analizador sin tá ctico o u n com p on en te p osterior d el
com pilador puedan usarla. O bserve q ue i n s t a l a r I D O tien e d os variables dispon ib les,
q ue e l analizador léxico generado p or L ex esta b lece d e m anera autom ática:
(a) y y t e x t es un apuntador al inicio d el lexem a, análogo a in ic io L e x e m a en la figura 3.3.
(b) y y le n g es la lon gitu d del lexem a encontrado.
3. E l nom bre d e tok en ID se d evu elv e a l analizador sin táctico.
La acción q ue se lleva a cab o cu an do un lexem a q ue coincide con e l p atrón n u m ero es sim ilar,
sólo q ue se u sa la función auxiliar in s t a la r N u m ( ) .
□
3 .5 .3
R e s o lu c ió n d e c o n flic to s e n Lex
N os h em os referido a las d os reglas q u e u tiliza Lex para decidir acerca d el lex em a apropiado a
seleccionar, cu an do varios prefijos d e la en tra d a coinciden con uno o m ás patrones:
1. Preferir siem p re u n prefijo m ás largo a u no m ás corto.
2. Si e l prefijo m ás largo p osib le coin cid e co n d os o m ás patrones, preferir e l p atrón q ue se
lista prim ero en e l program a en Lex.
E j e m p lo 3 .1 2 : L a prim era regla nos d ice q u e d eb em o s continuar leyendo letras y d íg ito s para
buscar e l prefijo m ás largo d e esto s caracteres y agruparlos co m o un identificador. T am bién nos
d ice q ue d eb em os tratar a <= com o un solo lexem a, en v ez d e seleccion ar < com o u n lex em a y =
com o el sigu ien te lexem a. L a seg u n d a regla hace a las palabras clave reservadas, si listam os las
palabras clave an tes q ue ¡d en el program a. Por ejem p lo , si se d eterm in a q ue t h e n es e l prefijo
m ás largo d e la en trad a q ue coincide con algún patrón, y e l patrón t h e n v a antes q ue { i d } ,
com o en la figura 3.23, en to n ces s e d evu elve el tok en THEN, e n v e z d e ID.
□
3 .5 .4
E l o p e r a d o r a d e la n ta d o
Lex lee d e m anera a u tom ática un carácter ad elan te d el ú ltim o carácter q u e form a el lexem a
seleccionado, y d esp u és regresa la en trad a para q ue sólo se co n su m a e l propio lex em a de
la en trad a. N o ob sta n te, algunas veces p uede ser con ven ien te q ue cierto patrón coin cid a con la
entrada, só lo cu an do vaya segu id o d e cierto s caracteres m ás. D e ser así, ta l vez p odam os u ti­
lizar la barra d iagon al en un p atrón para indicar el final d e la p arte d e l p atrón q ue coincide
3.5 E l generador d e analizadores léxicos Lex
145
c o n e l lexem a. Lo q u e v a desp ués d e / es u n patrón adicional q ue se d eb e relacionar antes de
poder decidir q ue vim os e l token en cu estió n , pero q ue lo q ue co in cid e con e s te segu n d o patrón
n o form a p arte d e l lexem a.
E j e m p lo 3 .1 3 : E n Fortran y en algu nos o tro s lengu ajes, las palabras cla v e no son reservadas.
E sa situ ación crea problem as, com o por ejem p lo la sig u ien te instrucción:
IF ( I , J ) = 3
e n d o n d e IF es el nom bre d e u n arreglo, no u n a p alabra clave. E s ta in stru cción co n tra sta con
las in stru cciones d e la form a
IF ( c o n d ic ió n ) THEN . . .
e n d ond e IF es u na p alabra clave. P or fortuna, p od em os a segu ram os d e q ue la palabra cla v e IF
siem p re vaya se g u id a d e un p arén tesis izquierdo, cierto te x to (la co n d ició n ) q ue p uede contener
p aréntesis, un paréntesis derecho y u n a letra. A sí, p o d ríam os escribir u n a regla d e L ex p a ra la
p alabra clave IF, com o:
IF / \ (
.* \ )
{ le tr a }
E s ta regla d ice que el p atrón con e l q ue coincide e l lexem a e s só lo las d o s letras IF . L a barra
d iagon al d ice q ue le sigu e un p atrón adicional, pero q ue no coin cid e con e l lexem a. E n este
patrón, el prim er carácter es e l paréntesis izquierdo. C om o ese carácter es un m eta sím bolo
d e Lex, d eb e ir precedido por u na barra diagonal in versa para indicar q ue tien e s u significado
literal. E l punto y e l asterisco coinciden con “cualquier ca d en a sin un carácter d e n ueva línea” .
O bserve q ue e l p u n to es u n m eta sím b olo d e Lex que sign ifica “cualquier carácter ex cep to n ue­
v a lín ea” . V a segu id o d e u n paréntesis derecho, d e nuevo con u na barra d iagon al in v ersa para
dar a ese carácter su sign ificad o literal. E l p atrón adicional v a seguid o por el sím b olo letra, que
e s u n a definición regular q ue represen ta a la cla se d e caracteres d e tod as las letras.
O bserve q ue, para q u e e s te patrón p u ed a ser a p ru eb a d e errores, d eb em o s preprocesar la
en tra d a para elim inar el esp acio en blanco. N o h ay provisión en e l patrón para e l esp a cio en
blanco, ni p od em os tratar con la p osibilid ad d e q ue la con d ición se e x tie n d a en varias líneas,
y a q ue el p u n to no coin cid irá co n un carácter d e n u eva línea.
P or ejem p lo, su p o n g a q ue a e s te p atrón se le pide q ue co in cid a con un prefijo d e entrada:
IF(A<(B+C)*D)THEN. . .
los prim eros d os caracteres coinciden co n IF , el sigu ien te carácter co in cid e con \ ( , los siguien­
t e nueve caracteres coinciden con
y los sig u ien tes d o s coinciden co n \ ) y letra. Observar
e l hecho d e q u e e l prim er paréntesis derecho (después d e C) n o vaya seguid o d e u n a letra es
irrelevante; só lo n ecesitam os encontrar a lgu n a m anera d e hacer q ue la en trad a coin cid a con el
patrón. C onclu im os q u e las letras IF co n stitu y en e l lexem a, y q ue son u na in sta n cia d e l token
¡f.
□
146
Capítulo 3. Análisis léxico
3 .5 .5
E je rc ic io s p a r a la s e c c ió n 3 .5
E j e r c ic io 3 .5 .1 : D escrib a cóm o hacer las sigu ien tes m odificaciones al program a en Lex d e la
figura 3.23:
a) A gregar la p alabra clave w h ile .
b) C am biar los operadores d e com paración para q ue sea n los operadores en C d e ese
tip o.
c ) P erm itir el gu ión bajo (_) com o u n a letra adicional.
! d ) A gregar un nuevo p atrón co n el token STRING. E l p a tró n co n siste en u na d ob le co m illa
(" ), cualquier ca d en a d e caracteres y u na d o b le co m illa final. N o o b sta n te, si aparece
u n a d o b le c o m illa en la cad en a d eb e se r carácter d e e sca p e, p a ra lo cu a l le a n tep o n e­
m os u n a barra d iagon al in versa ( \ ) y, por lo tanto, una barra d iagon al inversa en la
c a d e n a d eb e represen tarse m ed ian te d o s barras d ia g o n a les in versas. E l valor léxico es
la cad en a sin las d obles com illas circun dan tes, y sin las barras d iagonales inversas q ue se
usan com o carácter d e esca p e. Las cad en a s d eb en instalarse en u n a ta b la d e cadenas.
E j e r c ic io 3 .5 .2 : E scriba u n program a e n L ex que co p ie un archivo, su stitu y en d o c a d a secu en ­
c ia no vacía d e esp acios en blanco p or u n so lo espacio.
E j e r c ic io 3 .5 .3 : E scriba un program a en L ex q ue co p ie un program a e n C, su stitu y en d o ca d a
in sta n cia d e la palabra clave f l o a t por d o u b le .
E j e r c ic io 3 .5 .4 : E scriba un program a en Lex q ue co n v ierta un archivo a “P ig la tín ”. E n es­
pecífico, su p on ga q u e el archivo es una secu en cia d e palabras (gru pos d e letras) separadas por
espacio en blanco. C ad a v e z q ue se en cu en tre con u na palabra:
1 . Si la prim era letra es u n a con son an te, desplácela h a sta el final d e la p a lab ra y desp ués
agregue ay.
2. Si la prim era letra es u na vocal, só lo agregue a y a l final d e la palabra.
Todos los caracteres q u e no sean letras d eb en cop iarse in ta cto s a la salida.
E j e r c ic io 3 .5 .5 : En SQ L, las palabras clave y los identificadores so n sen sib les a m ayúsculas
y m inúsculas. Escriba un program a en L ex que reconozca las palabras clave SELECT, FROM y
WHERE (en cualquier com binación d e letras m ayúsculas y m in ú scu las), y e l token ID, q ue para
los fines d e este ejercicio p uede considerar co m o cualquier secu en cia d e letras y d ígitos, em p e­
zando co n u na letra. N o tien e q ue in stalar los identificadores en u n a ta b la d e sím b olos, pero
d eb e indicar cu ál sería la diferencia en la fun ción “in sta ll” d e la q ue describ im os p a ra los iden­
tificadores sen sib les a m ayúsculas y m inúsculas, com o en la figura 3.23.
3 .6 A utom atas Gnitos
3.6
147
A u tó m a ta s fin ito s
A hora vam os a descubrir cóm o Lex con vierte su program a d e en trad a en un analizador léxico.
E n el corazón d e la tran sición se en cu en tra e l form alism o co n o cid o com o a u tó m a ta s fin ito s . En
esen cia, esto s co n sisten en gráfos com o lo s d iagram as d e transición d e esta d o s, con algunas
diferencias:
1. Los au tóm atas finitos so n reconocedores; só lo d icen “s í” o “n o ” en relación co n ca d a p o ­
sib le cad en a d e entrada.
2. Los au tóm atas finitos p ueden ser d e d o s tipos:
(a) Los au tó m a ta s fin ito s n o d e te rm in ista s (A F N ) no tien en restricciones en cu a n to a
las etiq u e ta s d e su s líneas. U n sím b olo p uede etiq u etar a varias líneas q ue surgen d el
m ism o esta d o , y €, la cad en a vacía , es u n a p osible etiq ueta.
(b ) Los au tóm atas fin ito s d e te rm in ista s (A F D ) tien en , para ca d a esta d o , y para ca d a
sím b olo d e su alfabeto d e entrada, ex a cta m en te u n a lín ea co n ese sím b olo q ue sale
d e ese estado.
Tanto los au tóm atas fin ito s d eterm in istas com o los no d eterm in istas son cap aces d e reco­
nocer los m ism os lengu ajes. D e hecho, esto s lengu ajes son ex a cta m en te lo s m ism os lenguajes,
con ocid os com o lenguajes regulares, q u e p ueden describir las exp resion es regulares .4
3 .6 .1 A u t ó m a t a s f in ito s n o d e t e r m i n i s t a s
U n au tóm ata fin ito n o d e te rm in ista (A F N ) co n siste en:
1 . U n con ju n to fin ito d e esta d o s S.
2. U n con ju n to d e sím b olos d e en trad a E , e l alfabeto d e en trada. Sup onem os q ue e, que
representa a la ca d en a vacía, n un ca será m iem bro d e E .
3. U n a fu n ció n d e tra n sic ió n q u e proporciona, para ca d a esta d o y para c a d a sím b olo e n E
U { e } , un con ju n to d e estados sigu ien tes.
4 . U n esta d o so d e 5, q ue s e d istin gu e com o e l estado in ic ia l
5. U n con ju n to d e esta d o s F , u n su b con ju n to d e 5, q ue s e d istin g u en com o los esta d o s a cep ­
ta n tes (o estados fin ales).
P od em os representar u n A F N o A F D m ed ian te u n gráfico d e tra n sic ió n , en d on d e los nodos
so n esta d o s y los flancos Indecidibles representan a la fun ción d e tran sición . H ay un flanco
Indecidible a, q ue va del e sta d o s al esta d o t si, y só lo si t e s uno d e los esta d o s sig u ien tes para
el e sta d o s y la en tra d a a. E ste gráfico es m uy parecido a u n diagram a d e transición, excep to
que:
4 H ay una p equeña laguna: según la definición q u e les d im os, las expresiones regulares no pueden describir el
lenguaje vacío, y a qu e no e s conveniente utilizar e s te patrón en la práctica. No ob stan te, los au tóm atas finitos pueden
definir e l lenguaje vacío. E n teoría, 0 s e trata com o una expresión regular adicional, para e l único fin d e definir el
lenguaje vacío.
148
Capítulo 3. Análisis léxico
a) E l m ism o sím b olo puede etiq u etar flancos d e un esta d o h acia varios esta d o s d istin to s.
b) U n flanco puede etiq u etarse p or e, la cad en a vacía, en vez d e, o ad em ás de, los sím bolos
d el alfabeto d e entrada.
E j e m p lo 3 .1 4 : E l gráfo d e tran sición para u n A F N q ue recon oce e l len gu aje d e la exp resión
regular ( a |b ) * a b b s e m u estra e n la figura 3.24 . U tiliza rem o s e s te ejem p lo ab stracto, q ue
d escrib e a to d a s las ca d en a s d e as y 6s q ue term inan e n la ca d en a esp ecífica abb, a lo largo d e
e s ta sección . N o o b sta n te , es sim ilar a las ex p resio n es regulares q u e d escrib en len g u a jes
d e verdadero interés. P or ejem p lo, u n a exp resión q ue d escrib e a to d o s lo s archivos cu y o nom ­
bre term in a en .o es c u a l q u i e r a * . o , en d on d e c u a l q u i e r a represen ta a cualquier carácter
im prim ible.
a
F igu ra 3.24: U n a u tó m a ta fin ito n o d eterm in ista
Siguiendo n u estra con ven ción para los d iagram as d e transición, e l d o b le círculo alrededor
d el esta d o 3 in d ica q ue e s te esta d o e s d e esta d o s. O bserve q ue la ú n ica form a d e llegar d el
esta d o inicial 0 al esta d o d e aceptación es seguir cierto ca m in o q u e p erm an ezca en e l e sta d o 0
d urante cierto tiem p o, y d esp u és v aya a los esta d o s 1, 2 y 3 leyendo abb d e la en trad a. Por en d e,
las únicas cad en as q ue llegan al esta d o d e acep tación so n las q u e term inan en abb.
□
3 .6 .2
T a b la s d e t r a n s ic i ó n
Tam bién p od em os representar a un A F N m ediante u n a tabla de tra n sic ió n , cuyas fila s corres­
pond en a los estad os, y cu yas colum nas corresponden a los sím b olos d e en trad a y a e. L a entra­
d a para u n esta d o d ad o y la en trad a es e l valor d e la función d e transición q ue s e ap lica a esos
argum entos. Si la fun ción d e tran sición n o tien e inform ación acerca d e e se par estad o-entrad a,
colo cam os 0 en la ta b la para ese estad o.
E j e m p lo 3 .1 5 : L a tab la d e transición p ara el A F N d e la figura 3 .24 se m u estra en la figura
3.25.
□
La ta b la d e transición tien e la v e n ta ja d e q ue p o d em o s encontrar co n facilidad la s tran sicio­
nes en cierto estad o y la en trad a. Su d esv en ta ja e s q ue o c u p a m ucho espacio, cu an do e l alfabeto
d e en tra d a es exten so, aunque m uchos d e lo s esta d o s n o ten gan m ovim ientos en la m ayoría d e
los sím b olos d e entrada.
3 .6 A utom atas Gnitos
149
ESTA D O
a
0
b
e
W
0
1
0
m
0
2
0
0
{3}
i
0
3
0
F igu ra 3.25: T ab la d e transición para e l A F N d e la figura 3.24
3 .6 .3
A c e p ta c ió n d e la s c a d e n a s d e e n t r a d a m e d ia n te
lo s a u t ó m a t a s
U n A F N acep ta la ca d en a d e en trad a a; s i, y sólo si h ay algún ca m in o en el grafo d e transición,
d esd e el esta d o in icial h a sta uno d e los esta d o s d e aceptación, d e form a q ue lo s sím b olos a lo
largo d el cam in o d eletreen a x. O bserve q u e las etiq u e ta s e a lo largo d el ca m in o se ignoran, y a
q ue la cad en a v a cía no con trib uye a la ca d en a q u e se con stru ye a lo largo d e l cam ino.
E j e m p lo 3 .1 6 : E l A F N d e la figura 3.24 a ce p ta la ca d en a aabb. E l cam in o etiq u eta d o por
aabb d el esta d o 0 al estad o 3 q ue dem uestra e s te hecho es:
a
a
b
b
0 --------- ► 0 --------- ►
1 --------- ► 2 --------- ► 3
O bserve q ue varios cam in os etiq u etad as por la m ism a ca d en a p ueden conducir h acia esta d o s
d istin to s. Por ejem p lo, e l cam ino
a
a
b
b
o—
—► o—
— ► O -------------- ► O --------------►O
e s o tro cam ino que parte d el esta d o 0, etiq u eta d a por la cad en a aabb. E ste cam ino con d uce al
esta d o 0, que n o d e aceptación. Sin em bargo, recuerde q u e un A F N acep ta a una ca d en a siem ­
pre y cuando h aya c ierto cam ino etiq u eta d o por esa cad en a, que con d u zca d el esta d o inicial
a un estad o d e aceptación. E s ir relevante la ex isten cia d e otros cam in os que conduzcan a un
esta d o d e no aceptación.
□
E l lenguaje d efin id o (o aceptado) por un A F N es e l con jun to de cadenas que etiq u eta n cierto
cam ino, d el estad o inicial a un esta d o d e aceptación. C om o m encionam os antes, el A F N d e la
figura 3.24 define el m ism o lenguaje que la exp resión regular ( a |b )* a b b ; es decir, to d a s las car
d en a s d el alfabeto { a , 6} que term inen en abb. P odem os usar L (A ) para representar el lenguaje
aceptad o por e l a u tó m a ta A .
E j e m p lo 3 .1 7 : L a figura 3.26 es un A F N q u e acep ta a L ( a a * |b b * ). L a ca d en a aaa s e acepta
d eb id o a el cam ino.
e
a
a
a
0
------------------------------ ►
1 ------------------------------ ► 2
------------------------------ ►
2
------------------------------ ►
2
O bserve q u e las es “desap arecen ” en u n a co n caten ación , p or lo q u e la etiq u e ta d el ca m in o es
aaa.
□
3 .6 .4
A u t ó m a t a s f in ito s d e t e r m i n i s t a s
U n au tóm ata fin ito d e te rm in ista (A F D ) es un ca so esp ecia l d e un A F N , en donde:
150
Capítulo 3. Análisis léxico
a
F igu ra 3.26: A F N q u e a cep ta a a a * |b b *
1. N o h ay m ovim ien tos e n la en trad a e.
2. P ara ca d a esta d o s y cad a sím b olo d e en trad a a, hay ex a cta m en te u n a línea q ue surge d e
5, Indecidible com o a.
Si u tilizam os u n a tab la d e transición p ara representar a un A F D , en ton ces ca d a en trad a es un
solo esta d o . Por en d e, p od em os representar a e s te esta d o sin las llaves q ue u sam os para form ar
los conjuntos.
M ientras q ue e l A F N es u n a representación a b stra cta d e un algoritm o p a ra reconocer las
cad en as d e cierto len gu aje, e l A F D es un algoritm o sim p le y con creto p a ra reconocer cadenas.
Sin d u d a es afortunado q ue cad a exp resión regular y ca d a A F N puedan convertirse en un A F D
q ue acep te e l m ism o lenguaje, y a q u e es e l A F D el q u e en realidad im plem en tam os o sim ulam os
al construir analizadores léxicos. E l sigu ien te algoritm o m uestra có m o aplicar un A F D a u na
cadena.
A lg o r it m o 3 .1 8 : Sim ulación de u n A F D .
ENTRADA:
U n a cad en a d e en trad a x , q u e se term in a con u n carácter d e fin d e archivo eof.
U n A F D D con el esta d o in icial 5o, q ue acep ta esta d o s F , y la función d e tran sición m o ver.
SALIDA:
R esp ond e “s í ” e n caso d e q ue D acepte a x\ “no” en ca so contrario.
M ÉTO D O : A plicar e l algoritm o d e la figura 3 .27 a la ca d en a d e en trad a x La función m o v e r(s,c )
proporciona e l esta d o para el cu a l h ay un flanco d esd e e l esta d o $ sobre la en trad a c. L a función
sig C a r d evu elv e e l sigu ien te carácter d e la cad en a de en tra d a x.
□
E j e m p lo 3 .1 9 : E n la figura 3 .28 vem os el grafo d e transición d e u n A F D q ue a cep ta e l lengu a­
je ( a |b ) * a b b , el m ism o que a cep ta e l A F N d e la figura 3.24. D ad a la ca d en a d e en trad a ababb,
este A F D in trodu ce la secu en cia d e esta d o s 0, 1, 2, 1 , 2 , 3 y d ev u elv e “s i”.
□
3 .6 A u tóma ta s Gnitos
151
s = s 0;
c = sig C a rQ ;
w h ile ( c != e o f ) {
s = m o v er(s , c ) ;
c = sigC arQ ;
}
¡ f ( s e s tá e n F ) r e t u r n " si" ;
e l s e r e t u r n "no";
F igu ra 3.27: Sim ulación d e un A F D
F igu ra 3.28: A F D que a cep ta a ( a |b ) * a b b
3 .6 .5
E je r c ic io s p a r a la s e c c ió n 3 .6
! E j e r c ic io 3 .6 .1 : L a figura 3.19 e n los ejercicios d e la secció n 3.4 ca lcu la la función d e fallo
para e l algoritm o KM P. M uestre cóm o, d ad a e s a fun ción d e fallo, p o d e m o s con stru ir, a partir
d e u na p alab ra clave &1&2 • • • bn, un A F D d e n + 1 esta d o s q u e recon ozca a .*6162 • • • bn, en
d o n d e e l p u n to represen ta a “cualquier carácter”. A dem ás, e s te A F D p u ed e con stru irse en un
tiem p o 0 (n ).
E j e r c ic io 3 .6 .2 : D iseñ e au tó m a ta s finitos (d eterm in istas o n o) para ca d a u no d e los lenguajes
d e l ejercicio 3.3.5.
E j e r c ic io 3 .6 .3 : P ara el A F N d e la figura 3.29, in diqu e tod os lo s cam in os etiq u eta d a s com o
aabb. ¿E l A F N a cep ta a aabbl
e
F igu ra 3.29: A F N para e l ejercicio 3.6.3
152
Capítulo 3. Análisis léxico
e
F igu ra 3.30: A F N para el ejercicio 3.6.4
E j e r c ic io 3 .6 .4 : R ep ita el ejercicio 3.6.3 para e l A F N d e la figura 3.30.
E j e r c ic io 3 .6 .5 : P roporcione las tab las d e tran sición para el A F N de:
a) E l ejercicio 3.6.3.
b) E l ejercicio 3.6.4.
c) L a figura 3.26.
3.7
D e las e x p re sio n e s re g u la re s a los a u tó m a ta s
La exp resión regular es la n otación d e elección para describir analizadores léxicos y d em ás
softw are d e p rocesam ien to d e patrones, com o se v io en la secció n 3.5. N o ob sta n te, la im plem entación d e ese softw are requiere la sim u lación d e un A F D , com o en el algoritm o 3.18, o
ta l vez la sim u lación d e un A F N . C om o, p o r lo general, u n A F N tien e la o p ció n d e m overse
sobre un sím b olo d e en trad a (com o lo hace la figura 3.24, sobre la en trad a a d esd e el esta d o 0)
o sobre e (com o lo hace la figura 3.26 d esd e e l esta d o 0 ), o incluso la o p ció n d e realizar una
transición sob re e o sobre u n sím b olo de en trad a real, s u sim u lación e s m enos sim p le q u e la d e
un A F D . P or en d e, con frecuencia e s im p ortan te convertir un A F N a u n A F D q ue a cep te el
m ism o lenguaje.
En e s ta sección verem os prim ero cóm o convertir A F N s a A F D s. D esp u és u tilizarem os e s ta
técnica, co n ocid a com o “la con stru cción d e su b con ju n tos” , para producir un algoritm o ú til
para sim ular a los A F N s d e form a d irecta, en situ a cio n es (aparte d e l análisis léxico) e n d ond e
la conversión d e A F N a A F D requiere m ás tiem p o q ue la sim u lación d irecta. D esp ués, m ostra­
rem os cóm o convertir las exp resion es regulares en A F N s, a p artir d e lo cual p uede construir un
A F D , s i lo d esea. C oncluirem os con u n a d iscu sión d e la s con cesion es en tre tiem p o y espacio,
inherentes en los diversos m éto d o s para im plem entar ex p resion es regulares, y verem os cóm o
p uede elegir e l m étod o apropiado para s u aplicación.
3 .7 .1
C o n v e r s ió n d e u n A F N a A F D
La idea general d e la con stru cción d e su b con ju n tos e s q ue ca d a esta d o d e l A F D con stru id o
corresponde a un con ju n to d e esta d o s d el A F N . D esp u és d e leer la en trad a a\Qa • • • an, e l A F D
3 .7 D e la s expresiones regulares a los autóm atas
153
s e en cu en tra en e l esta d o q ue corresponde al con ju n to d e esta d o s q ue el A F N p uede alcanzar,
d esd e su esta d o inicial, sigu iend o los cam in os etiq u eta d o s com o ai 02 • • • anE s p o sib le q u e e l núm ero d e esta d o s d e l A F D s e a ex p o n en cia l en el núm ero d e esta d o s del
A F N , lo cu a l podría provocar d ificu ltad es al tratar d e im plem entar e s te A F D . N o ob stan te,
p arte d el poder d e l m étod o b asado en au tó m a ta s para e l an álisis léxico es q ue para los lengua­
je s reales, e l A F N y e l A F D tien en aproxim adam ente e l m ism o núm ero d e esta d o s, y no se ve
e l com p ortam ien to exp on en cial.
A lg o r i t m o 3 .2 0 : L a con strucción d e su bcon jun tos d e u n A F D , a p artir d e un A F N .
E N T R A D A : U n A F N N.
SA L ID A : U n A F D D q ue a cep ta el m ism o lengu aje q ue N.
M ÉTO D O : N uestro algoritm o con stru ye u na ta b la d e tran sición D tra n p a ra D . C ad a estad o
d e D es un con ju n to d e esta d o s d e l A F N , y con stru im os D tra n p a ra q u e D p u ed a sim ular “en
paralelo” tod os los p osibles m ovim ien tos q ue N p uede realizar sobre u n a ca d en a d e en trad a
d ad a. N uestro prim er problem a e s m anejar las tran siciones e d e N en form a apropiada. En
la figura 3.31 vem os las d efinicion es d e varias funciones q ue d escrib en cá lcu lo s b ásicos en los
esta d o s d e N que so n necesarios en e l algoritm o. O bserve q ue s e s un esta d o in d iv id u a l d e N,
m ientras q u e T es u n con ju n to d e esta d o s d e N.
O p e r a c ió n
DESCRIPCIÓN
e-cerra d u ra (s)
C onjunto d e estad os d el A F N a los q u e se p uede llegar d esd e e l esta d o s
d el A F N , sólo en las transiciones e.
e -c erra d u ra (T )
C onjunto de estad os d el A F N a los q u e se p u ed e llegar d esd e cierto
e sta d o 5 del A F N en el con ju n to T, sólo en las transiciones e; = U5en T
e-cerradu ra(s).
m o v e r (T , a )
C onjunto d e estad os d el A F N p a ra lo s cu a les h ay u n a tran sición sobre el
sím b olo d e en trad a a, a partir d e cierto esta d o s en T.
F igu ra 3.31: O peraciones sobre lo s esta d o s d el A F N
D eb em os explorar eso s con ju n tos d e esta d o s e n lo s q u e puede esta r N d esp u és d e v er cierta
ca d en a d e entrada. C om o b ase, an tes d e leer el prim er sím b olo d e entrada, N p u ed e esta r en
cu alq uiera de los esta d o s d e e-cerradu ra(so), en d o n d e 5o es s u esta d o inicial. P a ra l a inducción,
su p o n g a que N p u ed e estar e n el con ju n to d e esta d o s T d esp u és d e leer la c a d en a d e en trad a x.
S i a con tinu ación lee la en trad a a, en ton ces N p uede pasar d e in m ediato a cu alq uiera d e lo s es­
ta d o s en m over( T, a). N o ob sta n te, d esp u és d e leer a tam bién podría realizar varias transicio­
n es e; por lo ta n to , TVp o d r ía estar e n cualquier esta d o d e e-cerradu ra(m over( T, a)) d esp u és de
leer la en tra d a xa. Siguiendo esta s id eas, la con stru cción d el con ju n to d e esta d o s d e D , D esta d o s, y s u función d e tran sición D tra n , se m uestran en la figura 3.32.
E l e sta d o inicial d e D es e-cerradura(so), y lo s esta d o s d e aceptación d e D so n to d o s aque­
llos con jun tos d e esta d o s d e N q u e incluyen cu a n d o m enos u n esta d o d e aceptación d e N. P ara
154
Capítulo 3. Análisis léxico
com p letar n u estra d escrip ción d e la con stru cción d e su bconjun tos, sólo n ecesitam os m os­
trar cóm o a l principio, e-cerradura(so) es e l único esta d o en D e sta d o s , y e s tá sin marcar:
w h i l e ( hay un esta d o sin m arcar T en D esta d o s ) {
m arcar T;
f o r ( c a d a sím b olo d e en trad a a ) {
U — e-cerra d u ra (m o ver(T , a));
i f ( U n o e s tá en D e sta d o s )
agregar U com o esta d o sin m arcar a D e sta d o s;
D tra n [T , a] = U\
}
}
F igu ra 3.32: L a con stru cción d e su bconjun tos
e-cerra d u ra (T ) s e calcu la para cualquier con ju n to d e esta d o s T d el A F N . E ste proceso, q u e se
m uestra e n la figura 3.33, es una b úsq ueda sim p le y d irecta en u n gráfo, a p artir d e un conjunto
d e estad os. E n e s te caso, im agin e q ue só lo está n d isp on ib les las líneas In decid ib les com o e en
e l gráfico.
□
m eter to d o s los esta d o s d e T en pila;
inicializar e-c erra d u ra (T ) co n T\
w h i l e ( p ila n o e s tá v a cía ) {
sacar t , el elem en to superior, d e la p ila ;
f o r ( cad a esta d o u co n un flanco d e t a u, Indecidible com o e )
i f ( u no e s tá en e-cerradura( T ) ) {
agregar u a e-cerradura( T);
m eter u en la pila;
}
}
F igu ra 3.33: C álcu lo d e e-cerradura( T )
E j e m p lo 3 .2 1 : L a figura 3.34 m uestra a o tro A F N q ue a cep ta a ( a |b ) * a b b ; resu lta q u e es el
q ue vam os a con stru ir d irectam ente a partir d e e s ta expresión regular en la sección 3.7. V am os
a aplicar el A lgoritm o 3.20 a la figura 3.29.
El esta d o in icial A d e l A F D eq u ivalen te es e-cerradu ra(0 ), o A = {0 , 1, 2, 4 , 7 } , y a q ue é sto s
son los m ism os esta d o s a los q ue se p uede llegar d esd e e l esta d o 0 , a través d e un cam in o cu yas
lín eas tien en tod os la etiq u e ta e. O bserve q ue un ca m in o p u ed a tener cero líneas, por lo q ue se
puede llegar al esta d o 0 d esd e s í m ism o, m ediante un ca m in o etiq u e ta d a co m o e.
El a lfa b eto d e e n tra d a es {a , b }. P or en d e, n uestro prim er p a so es m arcar A y ca lcu lar
D tra n [A , a] = e -c e rra d u ra (m o v e r(A , a)) y D tra n [A , 6] = e-cerradu ra (m o v e r ( A , &)). D e los
esta d o s 0 , 1, 2, 4 y 7, só lo 2 y 7 tien en tran sicio n es so b re a, h a cia 3 y 8 , re sp ectiv a m en te.
Por en d e, m o v e r(A , a) = {3 , 8 }. A d em á s, e-cerradu ra ({3 , 8 } ) = {1 , 2, 3, 4 , 6 , 7, 8} , p or lo
cu a l con clu im os que:
3 .7 D e la s expresiones regulares a los autóm atas
155
e
F igu ra 3.34: E l A F N Ampara ( a |b ) * a b b
D tran [A , a] — e-c erra d u ra (m o ve r(A , a)) = e-cerra d u ra ({3, 8 }) — {1 , 2, 3, 4, 6 , 7, 8 }
V am os a llam ar a este con ju n to B , d e m anera q u e D tra n [A , a] — B.
Ahora, d eb em os calcular D tran [A , b\. D e los esta d o s en A sólo e l 4 tien e u na transición sobre
6, y v a a l esta d o 5. Por ende,
D tra n [A , 6] = e-cerra d u ra ({5 }) = { 1 , 2, 4, 6 , 7 }
V am os a llam ar al con ju n to anterior C, d e m anera q ue D tra n [A , b] = C.
ESTADO DEL A F N
ESTADO DEL A F D
a
b
{0 , 1, 2, 4 , 7}
A
B
C
{ 1 , 2 , 3 , 4 , 6 , 7 , 8}
B
B
D
{1, 2, 4 , 5, 6 , 7}
C
B
C
{ 1 , 2 , 4 , 5 , 6 , 7 , 9}
D
B
E
{1, 2, 3, 5, 6 , 7, 10}
E
B
C
F igu ra 3.35: T abla d e tra n sició n D tra n para el A F D D
S i con tinu am os e s te p roceso co n los con jun tos desm arcados B y C, en un m om ento dado
llegarem os a u n p u n to en el q ue tod os los esta d o s d e l A F D esté n m arcados. E s ta co n clu sión se
garan tiza, y a q ue “sólo” h ay 211 su b con ju n tos d istin to s d e un con ju n to d e o n ce esta d o s d e un
A F N . L os cin co esta d o s d istin to s d e l A F D q ue realm ente con stru im os, su s correspondientes
con ju n tos d e estad os d el A F N , y la ta b la d e transición para e l A F D D s e m uestran en la figura
3.35, y el gráfico d e tran sición para D e s tá en la figu ra 3.36. E l e sta d o A es e l esta d o inicial, y
e l esta d o E , q ue con tien e e l esta d o 10 d el A F N , es el único esta d o d e aceptación.
O bserve q ue D tien e un e sta d o m ás q ue e l A F D de la figura 3.28 para el m ism o lenguaje.
Los estad os A y C tien en la m ism a fun ción d e m ovim ien to, por lo cu a l p ueden com binarse. En
la sección 3.9.6 hablarem os sob re la cu estió n d e reducir al m ínim o e l núm ero d e esta d o s d e un
AFD.
□
156
Capítulo 3. Análisis léxico
b
F igu ra 3.36: R esu ltad o d e aplicar la con stru cción d e su b con ju n tos a la figura 3.34
3 .7 .2
S im u la c ió n d e u n A F N
U n a estra teg ia q u e se h a u tilizad o en varios program as d e ed ició n d e t e x to es l a d e construir
un A F N a partir d e u na exp resión regular, y d esp u és sim ular e l A F N u tilizan do algo com o una
con stru cción d e su b con ju n tos “sob re la m archa” . L a sim u lación s e d escrib e a continuación.
A lg o r it m o 3 .2 2 : Sim ulación d e u n A F N .
ENTRADA:
U n a cad en a d e en trad a x q ue term in a con u n carácter d e fin d e línea eof. U n
A F N N con el esta d o in icial 5o, q ue acep ta estad o s F , y la función d e tran sición m o ver.
SALIDA:
R esp ond e “s í ” en caso d e q u e M acepte a x; “n o ” en ca so contrario.
M ÉTO D O : E l algoritm o m antiene un con ju n to d e esta d o s actu ales 5 , aquellos a lo s q u e se
lleg a d esd e 5o sigu iend o u n cam in o etiq u eta d o p or las en trad as leíd as h a sta e s e m om ento. Si c
es el sigu ien te carácter d e en trad a leído por la fun ción sig C a rQ , en ton ces prim ero calculam os
m o v e r(S , c) y d esp u és cerram os ese con ju n to usando e-cerra d u ra (). E n la figura 3.37 s e m uestra
un b osquejo d e l algoritm o.
□
1)
2)
3)
S = e-cerradura(so);
c = á g C a r{)\
while ( c ! = eof ) {
4)
5)
6)
7)
8)
S = e-cerra d u ra (m o ver(S ,c))]
c = sig C a rQ ;
}
if ( S C\ F \ =
else return
0 ) return
"no";
"sí";
F igu ra 3.37: Sim ulación d e un A F N
3 .7 D e la s expresiones regulares a los autóm atas
3 .7 .3
157
E fic ie n c ia d e la s im u la c ió n d e u n A F N
S i se im p lem en ta co n cu id ad o, el algoritm o 3 .22 p u ed e ser b astan te eficien te. C om o la s ideas
im plicad as so n ú tiles e n u n a variedad d e algoritm os sim ilares q ue involucran la búsqueda de
gráficos, verem os e s ta im plem en tación con m ás d eta lle. Las estru ctu ras d e d a to s q u e n ecesita­
m os son:
1 . D os pilas, ca d a u na de las cu ales con tien e un con ju n to d e esta d o s d el A F N . U n a d e esta s
pilas, esta d o sA n t, con tien e e l con ju n to “a ctu a l” d e estados; e s decir, el valor d e S d el lado
derecho d e la lín ea (4) e n la figura 3.37. L a segun da, esta d o sN u ev, co n tien e e l “sig u ien te”
conjunto de estad os: S d el lado izquierdo d e la línea (4). H ay un p a so q ue no s e v e en
el q u e , a m ed ida q ue avanzam os por e l ciclo d e las líneas (3) a la ( 6 ) , esta d o sN u e v se
transfiere a e s ta d o s A n t
2. U n arreglo b oolean o ya E sta E n , in dexado por los esta d o s d el A F N , p a ra indicar cuáles
estad os y a está n e n estadosN u ev. A un qu e el arreglo y la p ila co n tien en la m ism a infor­
m ación, es m ucho m ás rápido interrogar a yaE staE n[s] q ue buscar e l e sta d o s en la pila
estadosN u ev. E s p or eficien cia q ue m antenem os am bas representaciones.
3. U n arreglo b idim ensional m o ver[s, a] q u e co n tien e la ta b la d e transición d e l A F N . Las
entradas en e s ta tab la, q ue son con jun tos d e esta d o s, se representan m ediante lista s en­
lazadas.
P ara im plem entar la lín ea (1) d e la figura 3.37, d eb em o s estab lecer ca d a en trad a en el
arreglo ya E sta E n a FALSE, d esp u és para ca d a esta d o s en e-cerradu ra(so), h ay q ue m eter 5 en
e s ta d o sA n t y yaE staE n[s] a TRUE. E s ta operación sobre e l esta d o $, y la im plem en tación de
la lín ea (4) tam b ién , se facilitan m ed ian te u na fun ción a la q ue llam arem os agregarE stado(s).
E s ta función m ete el estad o s en esta d o sN u ev, esta b lece yaE staE n[s] a TRUE, y s e lla m a a sí
m ism a en form a recu rsiva sobre los esta d o s en m o v e r[s, c] para p od er am pliar e l cá lcu lo de
e-cerradu ra(s). Sin em bargo, para ev ita r d uplicar el trabajo, d eb em os tener cu id ado d e nunca
llam ar a agregarE stado en un estad o q ue y a se encuentre e n la p ila esta d o sN u ev. L a figura 3.38
m u estra u n b osquejo d e e s ta función.
9)
10)
11)
12 )
13)
14)
15)
agregarE stado(s) {
m eter s en esta d o sN u e v;
yaE staE n[s] = TRUE;
f o r ( t en m o ver[s, c] )
¡ f ( !y a E sta E n (t) )
agreg a rE sta d o (t);
}
F igu ra 3.38: A gregar u n nuevo esta d o s, que sab em os no se en cu en tra en esta d o sN u ev
P ara im plem entar la lín ea (4) d e la figura 3.37, analizam os ca d a e sta d o 5 e n esta d o sA n t.
Prim ero buscam os el con ju n to d e esta d o s m o ver[s, c], e n d on d e c es la sig u ien te entrada, y para
158
Capítulo 3. Análisis léxico
ca d a u no d e eso s esta d o s q ue no s e en cu en tren y a e n esta d o sN u ev, le aplicam os agregarE stado. O bserve q ue agregarE stado tien e el efecto d e calcu lar e-cerradu ra y d e agregar tod os esos
esta d os a esta d o sN u e v tam b ién , s i no se en con trab an y a agregados. E sta secu en cia d e pasos se
resum e en la figura 3.39.
16)
17)
18)
19)
20)
21 )
22)
23)
24)
25)
26)
f o r ( s e n esta d o sN u e v ) {
sacar s d e esta d o sN u e v;
m eter s a estadosA n t]
yaE staE n[s] = FALSE;
}
F igu ra 3.39: Im plem entación d e l p aso (4) d e la figura 3.37
Ahora, su p o n g a q u e el A F N N tien e n esta d o s y m transiciones; es d ecir, m es la su m a d e
d e salida. Sin contar la llam ad a a agregarE stado e n la lín ea (19) d e la figura 3.3 9 , el tiem po
invertido en e l ciclo d e las líneas (16) a (21) es O (n). E s d ecir, p od em os recorrer e l ciclo cu a n ­
d o m ucho n veces, y ca d a p aso d el ciclo requiere u n trab ajo con stan te, ex cep to p o r el tiem p o
invertido en agregarE stado. Lo m ism o s e ap lica al ciclo d e la s lín eas (22) a la (26).
D urante u n a ejecu ción d e la figura 3.39, e s decir, d el p a so (4) d e la figura 3.37, só lo es
p osible llam ar u na vez a agregarE stado sob re un esta d o dado. L a razón e s q u e, ca d a vez q ue
llam am os a agreg a rE sta d o (s), estab lecem os yaE staE n[s\ a TRUE en la lín ea 11 d e la figu ra 3.39.
U n a vez q u e yaE staE n[s] es TRUE, las pruebas e n la lín ea (13) d e la figura 3.38, y la lín ea (18)
d e la figura 3.39 ev ita n o tr a llam ada.
El tiem p o invertido en u n a llam ad a a agregarE stado, exclu sivo d e l tiem p o invertido en las
llam adas recursivas en la lín ea (14), e s 0 ( 1 ) para las líneas (10) y (11). P ara las lín eas (12) y
(13), el tiem p o dep en de d e cu á n ta s tran siciones e haya al salir d e l esta d o s. N o con ocem os este
núm ero para un esta d o dado, pero sab em o s q ue hay cu an do m enos m transiciones en to ta l, sa ­
liendo d e tod os los estad os. C om o resu ltad o, e l tiem p o adicional invertido en las líneas (11) d e
tod as las llam adas a agregarE stado d urante u na ejecu ción d el có d ig o d e la figura 3.39 es 0 ( m ).
El agregado para e l resto d e los p asos d e agregarE stado es O (n), y a q ue es u n a co n sta n te por
llam ada, y h ay cu an d o m en os n llam adas.
C oncluim os que, si se im p lem en ta en form a apropiada, e l tiem p o p a ra ejecu tar la lín ea (4)
d e la figura 3.37 e s 0 ( n + m ). E l resto d el ciclo w h ile d e las lín eas (3) a la ( 6 ) requiere d e un
tiem p o 0 (1 ) p or iteración. Si la en trad a £ es d e lon gitu d k , en ton ces el tra b a jo to ta l en ese
ciclo es 0 ( ( k ( n + m )). L a lín ea (1) d e la figura 3.37 p uede ejecu tarse en un tiem p o 0 ( n + m ),
3 .7 D e la s expresiones regulares a los autóm atas
159
N o ta c ió n O g r a n d e (B ig -O h )
U n a exp resión com o 0 ( n ) es u n a abreviación para “cu a n d o m enos ciertos tiem p o s n cons­
ta n tes”. T écn icam ente, d ecim os q ue u n a función / ( n ) , ta l v ez el tiem p o d e ejecu ción de
algún p aso d e u n algoritm o, es 0 (g(ri)) si h ay co n sta n tes c y r^, d e tal form a q ue c a d a vez
q ue n > no, e s cierto q u e f (n ) < cg(n). U n m od ism o ú til es “0 ( 1 ) ” , q u e sign ifica “alguna
co n sta n te”. E l uso d e e s ta n o ta c ió n B ig-O h n os p erm ite e v ita r profundizar d em asiad o en
los d eta lle s acerca d e lo q ue con tam os com o unidad d e tiem p o d e ejecu ción , y aún a sí nos
p erm ite expresar la velocid ad a la cual crece e l tiem p o d e ejecución d e un algoritm o.
y a q ue e n esen cia co n sta d e lo s pasos d e la figura 3.39, en d on d e esta d o sA n t só lo con tien en el
e sta d o 5o- Las líneas (2 ), (7) y ( 8 ) requieren d e un tiem po 0 ( 1 ) ca d a una. Por en d e, e l tiem po
de ejecu ción d el A lgoritm o 3.22, si se im p lem en ta en form a apropiada, es 0 ( ( k ( n + m )). E s d e ­
cir, el tiem p o requerido es proporcional a la longitud d e la en trad a m ultip licada por e l tam año
(nod os m ás lín eas) d e l gráfo d e transición.
3 .7 .4
C o n s tr u c c ió n d e u n A F N a p a r t i r d e u n a e x p r e s ió n r e g u la r
A hora le proporcionarem os u n algoritm o para convertir cualquier exp resión regular en un A F N
q ue d efin a e l m ism o lengu aje. E l algoritm o e s tá orien tad o a la sin ta x is, y a q u e recorre e n form a
recursiva h acia arriba el árbol sin tá ctico p a ra la exp resión regular. P a ra ca d a su bexpresión, el
algoritm o con stru ye un A F N con un so lo esta d o aceptante.
A l g o r i t m o 3 . 2 3 : El algoritm o d e M cN augh ton -Y am ada-T h om pson para convertir u n a expre­
sió n regular en un A F N .
E N T R A D A : U n a exp resión regular r sobre e l alfa b eto E .
SA L ID A : U n A F N iV q u e a ce p ta a L (r).
M ÉTO D O : E m pezar por un an álisis sin tá ctico d e r para ob ten er la s su bexpresiones q ue la
con stitu yen . L as reglas para construir un A F N co n sisten en reglas básicas p a ra el m anejo de
su bexpresiones sin operadores, y reglas in du ctivas para construir A F N s m ás largos, a partir
d e los A F N s para las su bexpresiones in m ed iatas d e u n a exp resión dada.
B A SE : P ara la exp resión €, s e con stru ye el sigu ien te A F N :
A qu í, i e s un nuevo esta d o , e l esta d o in icial d e e s te A F N , y f e s otro nuevo estad o, e l estad o
a cep tan te para el A F N .
P ara cualquier su bexpresión a en E , s e co n stru y e el sigu ien te A FN:
160
Capítulo 3. Análisis léxico
en d on d e o tr a vez i y f so n n uevos esta d o s, los esta d o s inicial y d e aceptación, respectivam ente.
O bserve q ue en am bas con stru cciones básicas, con stru im os un A F N d istin to , con nuevos esta ­
d os, para ca d a ocu rren cia d e e o algu na a com o su bexpresión d e r.
I N D U C C I Ó N : Suponga que N (s) y N (t) son A F N s para las expresiones regulares s y t, respec­
tivamente.
a) S u p on ga q ue r = s\t. E n ton ces N (r ), e l A F N para r, se con stru ye com o e n la figura 3.40.
A qu í, i y f son nuevos estad os, los esta d o s inicial y d e aceptación d e N (r ), resp ectiva­
m ente. H ay tran siciones e d esd e i h a sta los esta d o s in iciales d e N (s) y N ( t) , y ca d a uno
d e los esta d o s d e aceptación tien e tran siciones e h acia e l esta d o d e aceptación /. O bserve
que los esta d o s acep tan tes d e N (s) y N (t) n o son d e aceptación en N (r ). C om o cualquier
cam in o d e i a / d eb e pasar p or N (s) o N (t) exclu sivam en te, y co m o la e tiq u e ta d e ese ca ­
m ino no se m od ifica p or e l hecho d e q ue la s es salen d e i o en tran a f con cluim os q ue
N (r) a ce p ta a L (s) U L(¿), q ue es lo m ism o q ue L (r ). E s decir, la figura 3.40 es u n a cons­
trucción correcta para el operador d e unión.
in icio
F igu ra 3.40: A F N para la unión de d os exp resion es regulares
b) S u p on ga q ue r = st. E n ton ces, con stru ya N (r) com o en la figura 3.41. E l esta d o in icial
d e N (s) se con vierte en el esta d o inicial d e N (r ), y e l e sta d o d e aceptación d e N (t) es el
único esta d o d e aceptación d e N (r ). E l esta d o d e aceptación d e N (s) y el esta d o inicial
d e N ( t) s e com b inan e n u n so lo estad o, con to d a s la s tran sicion es q ue en tran o salen de
cualquiera d e eso s estad os. U n cam in o d e i a / e n la figura 3.41 d eb e pasar prim ero a
través d e N (s) y , por lo tan to, su etiq u e ta em p eza rá co n a lg u n a ca d en a en L (s ). D esp ués,
el cam in o con tin ú a a través d e iV(¿), p or lo q ue la etiq u e ta d el cam in o term in a con u na
cad en a en L (t). C om o pronto argum entarem os, los esta d o s de a cep tación n un ca tien en
lín ea s d e sa lid a y los esta d o s in iciales n u n ca tien en líneas d e en tra d a , por lo q ue n o es
p osible q ue un cam in o v u elv a a entrar a N (s) d esp u és d e salir d e e s te esta d o . P or en d e,
N (r) acep ta ex a cta m en te a L (s )L ( t), y es un A F N correcto para r — st.
F igu ra 3.41: A F N para la con caten ación d e d os exp resion es regulares
3 .7 D e la s expresiones regulares a los autóm atas
161
c) S u p on ga q u e r = 5*. E n ton ces, para r con stru im os e l A F N N (r) q ue se m uestra en la
figura 3.42. A q u í, i y / s o n nuevos esta d o s, el esta d o in icial y e l único e sta d o a cep ta n te de
N (r ). P ara ir d e i a f p od em os segu ir e l ca m in o introducido, etiq u eta d o com o e, e l cual
se o c u p a d e la única ca d en a en L (s )° , p od em os pasar al esta d o in icial d e N (s), a través
d e ese A F N , y d esp u és d e su e sta d o d e aceptación regresar a su esta d o in icial, cero o
m ás veces. E sta s op cion es perm iten q u e N (r) a cep te a to d a s la s ca d en a s en ¿ ( s ) 1, L (s )2,
y a sí en lo su cesiv o , d e form a que el con ju n to en tero d e cad en as acep ta d a s por N (r) es
L (s*).
e
e
F igu ra 3.42: A F N para e l cierre d e u n a exp resión regular
d ) P or ú ltim o, su p on ga q u e r = (s ). E n ton ces, L (r ) = L (s), y p o d em o s usar e l A F N N (s)
com o N (r).
□
L a descripción d el m étod o en el A lgoritm o 3.23 co n tien e sugerencias d e p or q ué la cons­
trucción in d u ctiva fu n cion a en la form a esperada. N o proporcionarem os u na p ru eb a form al de
su correcto fu n cion am ien to, p ero s í presentarem os varias propiedades d e los A F N s construidos,
ad em ás d e l im portan tísim o hecho d e q ue N (r) a ce p ta e l lengu aje L (r ). E s ta s propiedades son
in teresantes y ú tiles para realizar u n a p ru eb a formal.
1. N (r) tien e cu an do m en os el d ob le d e esta d o s, q ue eq u ivalen a los operadores y operandos en r. E ste en la ce re su lta d e l hecho d e que ca d a p aso d e l algoritm o crea cu an do m enos
dos nuevos estad os.
2. N (r) tien e u n esta d o in icial y un esta d o d e aceptación. E l esta d o d e aceptación n o tien e
tran siciones salien tes, y e l esta d o inicial no tien e tran siciones en tran tes.
3. C ad a e sta d o d e N (r) q ue n o s e a el e sta d o d e a cep tación tien e u n a tra n sició n sa lien te en
un sím b olo en S , o d os tran siciones sa lien tes, am bas en e.
E j e m p l o 3 . 2 4 : V am os a usar el A lgoritm o 3 .23 para construir un A F N para r = ( a | b ) * a b b .
L a figura 3.43 m u estra un árbol d e an álisis sin tá ctico para r, q u e es análogo a los árboles de
an álisis sin táctico con stru id os para las exp resion es aritm éticas en l a secció n 2.2.3. P a ra la
su b exp resión n , la prim era a , con stru im os e l sig u ien te A FN:
162
Capítulo 3. Análisis léxico
rll
r9
r,
a
I
r10
r2
b
F igu ra 3.43: Á rbol d e an álisis sin tá ctico para
(a | b )* a b b
H em os elegid o los núm eros d e los esta d o s para q ue sea n co n sisten tes con lo q u e sig u e. P a ra r 2
con stru im os lo siguiente:
A hora p od em os com binar N (r{) y N( r2) , m ediante la con stru cción d e la figura 3 .40 para o b te ­
ner e l A F N para r3 = ri|r 2; e s te A F N se m uestra en la figura 3.44.
F igu ra 3.44: A F N para r%
El A F N para r4 = (r3) es e l m ism o q ue para r3. E n tonces, e l A F N para
= (r3)* es com o se
m uestra en la figura 3.45. H em os usado la con stru cción en la figu ra 3.42 para crear e s te A F N ,
a partir d e l A F N d e la figura 3.44.
3 .7 D e la s expresiones regulares a los autóm atas
163
F igu ra 3.45: A F N para rs
A hora con sid erem os la su b exp resión r6, q u e es o tr a a . U tilizam os la con stru cción básica
para a o tr a vez, pero d eb em os usar nuevos esta d o s. N o se p erm ite reutilizar el A F N q u e cons­
tru im os para n , aun cu an do n y r6 so n la m ism a expresión. E l A F N para r6 es:
P ara ob tener e l A F N d e r 7 = r5 r6, aplicam os la con stru cción d e la figu ra 3.41. C om binam os los
estad os 7 y 7', co n lo cual s e produce el A F N d e la figura 3.46. S i continuam os d e e s ta form a
co n n uevos A F N s para las d o s su bexpresiones b llam adas rg y n o , en un m om ento d a d o cons­
truirem os el A F N para ( a | b ) * a b b q u e v im o s prim ero en la figura 3.34.
□
inicio
F igu ra 3.46: A F N para iy
3 .7 .5
E f ic ie n c ia d e lo s a lg o r itm o s d e p r o c e s a m ie n to d e c a d e n a s
O bservam os q ue el A lgoritm o 3.18 p rocesa u n a ca d en a x en u n tiem p o 0 ( \x \) , m ientras que
e n la sección 3.7.3 con cluim os q ue p odríam os sim ular u n A F N en un tiem p o proporcional al
164
Capítulo 3. Análisis léxico
producto d e |z| y el tam añ o d el gráfo d e tran sición d el A F N . O b viam en te, es m ás rápido hacer
un A F D q u e sim ular un A F N , p or lo q ue p odríam os p reg u n ta m o s por q u é ten d ría sentid o
sim ular u n A F N .
U n a cu estió n q ue p uede favorecer a un A F N es que la con stru cción d e lo s su bconjun tos
puede, en el peor caso, exp on en ciar e l núm ero d e esta d o s. A un qu e en principio, e l núm ero d e
esta d os d el A F D n o influye en el tiem p o d e ejecución d el A lgoritm o 3 .1 8 , s i el núm ero d e esta ­
d os se vu elv e ta n grande q ue la ta b la d e transición no q u ep a en la m em oria principal, en ton ces
e l verdadero tiem p o d e ejecución ten dría q u e incluir la E / S en d isco y, p or en d e, se elev a ría d e
m anera considerable.
E j e m p l o 3 . 2 5 : C onsidere la fam ilia d e lenguajes d escritos por la s ex p resion es regulares d e
la form a Ln = ( a | b ) * a ( a | b ) n_1, e s decir, ca d a lengu aje L n c o n siste en ca d en a s d e as y 6s d e ta l
form a q u e e l n-ésim o carácter a la izquierda d el ex trem o derecho co n tien e a a. U n A F N d e
n + 1 estad os es fácil d e construir. P erm anece e n su esta d o inicial b a jo cualquier entrada, pero
tam bién tien e la o p ció n , e n la en trad a a, d e pasar a l esta d o 1. D el esta d o 1 p a sa a l esta d o 2 en
cualquier entrada, y a sí en lo su cesivo, h a sta q u e en e l esta d o n acepta. L a figura 3.47 sugiere
este A F N .
inicio
a, b
s ~ \ a, b
a, b
a, b
F igu ra 3.47: U n A F N q u e tien e m ucho m enos esta d o s q u e el A F D eq u ivalen te m ás pequeño
N o o b sta n te, cualquier A F D para el len gu aje Ln d eb e tener cu an do m en os 2" esta d o s. N o
dem ostrarem os e s te hecho, pero la id ea es q ue si d os ca d en as d e lon gitu d n p ueden llevar al
A F D a l m ism o esta d o , en to n ces p od em os exp lotar la ú ltim a posición en la q u e difieren las
cad en as (y, por lo tan to, u na d eb e tener a a y la o tr a a 6) p a ra continuarlas en form a idéntica,
h a sta q u e sean la m ism a en las ú ltim as n — 1 p osiciones. E n ton ces, e l A F D esta rá en un esta d o
en e l q ue d eb e ta n to aceptar com o no aceptar. Por fortuna, com o dijim os antes, e s raro q ue en
e l análisis léxico se involucren p atron es d e este tip o , y no esperam os encontrar A F D s con nú­
m eros extravagantes d e estad os en la práctica.
□
Sin em bargo, los generadores d e analizadores léxicos y o tro s sistem a s d e p rocesam ien to d e
cad en as em p iezan a m enudo co n u n a expresión regular. N o s en frentam os a la o p ció n d e conver­
tir e s ta exp resión en un A F N o A F D . E l co sto adicional d e elegir un A F D es, por en d e, e l co sto
d e ejecu tar el A lgoritm o 3.23 en el A F N (podríam os pasar d irecto d e u na exp resión regular a
un A F D , pero e n esen cia e l trab ajo es el m ism o). Si e l procesador d e ca d en a s se v a a ejecutar
3 .7 D e la s expresiones regulares a los autóm atas
165
m uchas veces, com o es el caso para e l an álisis léxico, en ton ces cualquier c o sto d e convertir a
u n A F D es aceptab le. N o ob sta n te, e n otra s ap licacion es d e procesam iento d e cad en as, com o
G rez, en d ond e el usuario esp ecifica u n a exp resión regular y u no d e varios archivos en lo s que
s e v a a buscar e l patrón d e esa exp resión , p uede ser m ás eficien te om itir el paso d e construir
u n A F D , y sim ular e l A F N d irectam ente.
V am os a considerar e l c o sto d e convertir u na exp resión regular r e n u n A F N m ed ian te el
A lgoritm o 3.23. U n p aso clave es construir e l árbol d e an álisis sin tá ctico para r. E n e l cap ítu ­
lo 4 verem os varios m éto d o s que son cap aces d e con stru ir e s te árbol d e an álisis sin tá ctico en
tiem p o lin eal, es decir, en u n tiem p o 0 ( |r |) , en d on d e |r | represen ta e l ta m a ñ o d e r: la su m a
d e l núm ero d e op erad ores y op eran d os en r. Tam bién es fácil verificar q ue ca d a u n a d e las
con stru ccion es b á sica e in d u ctiva d e l A lgoritm o 3 .23 requiera un tiem p o co n sta n te, d e m anera
q u e e l tiem p o com p leto invertido p or la conversión a un A F N es 0 ( |r |) .
A dem ás, com o ob servam os e n la sección 3 .7 .4 , e l A F N q ue con stru im os tien e cu an do mucho
\r \ esta d o s y 2 |r | transiciones. E s decir, e n térm inos d el an álisis en la sección 3.7.3, tenem os
q u e n < | r | y r a < 2 | r | . A sí, la sim u lación de e s te A F N en u na ca d en a d e en trad a x requiere un
tiem p o 0 ( |r | x \x \). E ste tiem p o d om in a el tiem po requerido p o r la con stru cción d el A F N , que
e s 0 ( |r |) y, p or lo tan to, con clu im os q ue e s p o sib le tom ar u na exp resión regular r y la cad en a
x , e indicar si rrestá en L (r ) en u n tiem p o 0 ( |r | x \x\).
E l tiem p o q ue requiere la con stru cción d e su b con ju n tos d ep en d e e n gran p arte d e l núm ero
d e estad os q ue te n g a el A F D resu ltan te. P ara em p ezar, observe q u e en la con stru cción d e la fi­
g u ra 3.32, e l p aso clave, la con stru cción d e un con ju n to d e e sta d o s U a p artir d e un conjunto de
esta d o s T y un sím b olo d e en trad a a, es m uy parecida a la con stru cción d e u n n u evo conjunto
d e esta d o s a partir d el an tigu o con ju n to d e esta d o s e n la sim u lación d e un A F N d el A lgoritm o
3.22. Y a hem os con cluid o que, si s e im p lem en ta en form a apropiada, e s te p aso requiere cuan­
d o m ucho un tiem p o proporcional a l núm ero d e esta d o s y tran siciones d e l A F N .
S u p on ga q ue em p ezam os con u n a expresión regular r y la con vertim os en un A F N . E ste
A F N tien e cu an do m ucho |r | esta d o s y 2 |r | transiciones. A dem ás, h ay cu a n d o m ucho \r \ sím b o­
los d e entrada. A sí, para ca d a esta d o con stru id o d e l A F D , d eb em os construir cu a n d o m ucho |r|
nuevos estad os, y cada u no requiere a lo m ás un tiem p o 0 ( |r | + 2 |r |) . E l tiem p o para construir
u n A F D d e s esta d o s e s , p o r con sigu ien te, 0 ( |r | 2s).
E n el caso com ú n en el q ue 5 es ap roxim adam ente |r |, la con stru cción d e subconjuntos
requiere u n tiem p o 0 ( |r |3). N o ob sta n te, en el peor ca so com o en el ejem p lo 3 .2 5 , e s te tiem po
e s 0 ( |r | 22 ^ ). La figura 3.48 resu m e las op cion es cu an do recibim os u na exp resión regular r y
d eseam os producir un reconocedor q ue indique si u na o m ás ca d en a s x e stá n en L (r).
AUTÓMATA
AFN
Caso típico del A F D
Peor caso del A F D
In i c i a l
0(M)
0(|r|3)
Oflr|22l-1)
POR CADENA
0(|r| x |*|)
0(1*1)
0(|*|)
F igu ra 3.48: C osto in icial y c o sto por ca d en a d e varios m étod os para reconocer e l len gu aje de
u n a exp resión regular
166
Capítulo 3. Análisis léxico
Si d om in a e l c o sto por cad en a, com o es e l caso cu a n d o con stru im os un analizador léxico, es
evid en te q ue preferim os el A F D . N o ob stan te, en los com an dos com o g r e p , en donde ejecu ta ­
m os e l a u tó m a ta só lo sob re u n a cad en a, p or lo general, preferim os e l A F N . N o e s sin o h a sta
q ue \x\ se acerca a |r |3 q ue em p ezam os a considerar la conversión a u n A F D .
Sin em bargo, h ay una estra teg ia m ix ta q ue es casi ta n b uena com o la mejor estra teg ia d el
A F N y A F D para ca d a exp resión r y cad en a x. E m p ezam os sim u land o e l A F N , pero recor­
d am os los con jun tos d e estad os d e l A F N (es d ecir, los esta d o s d e l A F D ) y su s transiciones,
a m ed ida q ue los calcu lam os. A n tes d e procesar e l con ju n to actu al d e esta d o s d el A F N y el
sím b olo d e en trad a actu al, com probam os si ten em os y a calcu lada e s ta tra n sició n , y utilizam os
la inform ación en caso d e q ue así sea.
3 .7 .6
E je rc ic io s p a r a la s e c c ió n 3 .7
E je r c ic io
3 .7 .1 :
C onvierta a A F D s los A F N s de:
a) L a figura 3.26.
b) L a figura 3.29.
c) L a figura 3.30.
E je r c ic io
3 .7 .2 :
U se e l A lgoritm o 3.22 p ara sim ular los A F N s.
a) F igu ra 3.29.
b) F igu ra 3.30.
con la en tra d a aabb.
3 . 7 . 3 : C onvierta las sigu ien tes exp resion es regulares en au tó m a ta s finitos d eterm i­
nistas, m ediante los algoritm os 3.23 y 3.20:
E je r c ic io
a)
(a | b )* .
b)
(a * | b * )* .
c)
((e | a )b * )* .
d)
(a | b )* a b b (a | b )* .
3.8
D iseñ o d e u n g e n e ra d o r d e a n a liz a d o re s léxicos
En e s ta sección aplicarem os las técn icas p resen tad as en la sección 3.7 p a ra ver la arquitectura
d e u n generador d e analizadores léxicos com o Lex. H ablarem os sobre d o s m éto d o s, basados en
A F N s y A F D s; el ú ltim o es e n esen cia la im plem en tación d e Lex.
3.8 D iseño de un generador d e analizadores léxicos
3 .8 .1
167
L a e s t r u c t u r a d e l a n a liz a d o r g e n e r a d o
L a figura 3.49 p resen ta las gen eralid ades acerca d e la arq u itectura d e un analizador léxico
generado por Lex. E l program a q ue sirve com o analizador léxico in clu ye u n program a fijo que
sim u la a un au tóm ata; e n e s te punto dejam os ab ierta la d ecisión d e si el a u tó m a ta es deter­
m in ista o no. E l resto d el analizador léxico co n siste en com p o n en tes q ue s e crean a partir d el
program a Lex, por e l m ism o Lex.
Búfer d e entrada
Programa
en Lex
F igu ra 3.49: U n program a en Lex s e con vierte en u na ta b la d e transición y en acciones, para
q ue las u tilice un sim ulador d e au tóm atas finitos
E sto s com p on en tes son:
1. U n a ta b la d e transición para e l au tóm ata.
2. Las funciones q u e se pasan d irectam en te a través d e Lex a la sa lid a (v ea la sección
3.5.2).
3. Las accion es d e l program a d e entrada, q u e aparece com o fragm entos d e có d ig o q ue el
sim ulador d e l a u tó m a ta d eb e invocar e n e l m om ento apropiado.
P ara construir el au tóm ata, em p ezam os tom an d o ca d a patrón d e expresión regular en el
program a en Lex y lo con vertim os, m ediante el A lgoritm o 3.23, en un A F N . N ecesitam os un
so lo a u tó m a ta q ue reconozca los lexem as q ue coinciden co n algu no d e los patrones en el progra­
m a, p or lo q u e com binam os to d o s los A F N s en u no solo, introduciendo u n nuevo esta d o inicial
c o n tran siciones e h acia cad a u no d e los esta d o s in iciales del N { d e los A F N s p a ra el p atrón p v
E s ta con stru cción se m u estra en la figura 3.50.
E je m p lo
sim ple:
3 .2 6 :
V am os a ilustrar las ideas de e s ta secció n co n el sigu ien te ejem p lo abstracto
168
Capítulo 3. Análisis léxico
F igu ra 3.50: U n A F N con stru id o a partir d e u n program a en Lex
a
a b b
a* b +
{ acción A i
{ acción A 2
{ acción A 3
p a ra el p a tró n p i }
para el p a tró n p 2}
para el p a tró n p 3}
O bserve q ue e sto s tres patrones presentan ciertos co n flicto s d e l tip o q u e describ im os en l a sec­
ción 3.5.3. E n esp ecial, la ca d en a abb coin cid e con e l segu n d o y tercer patrones, pero vam os a
considerarla com o u n lexem a para el p atrón p¿, y a q ue el p atrón se lista prim ero en el p rogram a
anterior en Lex. E n ton ces, las cad en as d e en trad a com o aabbb • • • tien en m uchos prefijos q ue
coinciden co n e l tercer p atrón. L a regla d e L ex es to m a r e l m ás largo, por lo q ue continuam os
leyendo bs h a sta encontrarnos con o tra a, en d o n d e reportam os q ue e l lex em a c o n sta d e las as
iniciales, segu id as d e to d a s las bs q u e haya.
La figura 3.51 m u estra tres A F N s q ue reconocen los tres patrones. E l tercero es u n a sim p li­
ficación d e lo q ue sald ría d el A lgoritm o 3.23. A sí, la figura 3 .52 m uestra e sto s tres A F N s com ­
binados en un so lo A F N , m ed ian te la adición d el esta d o inicial 0 y d e tres tran sicion es e.
□
3 .8 .2
C o in c id e n c ia d e p a t r o n e s c o n b a s e e n lo s A F N s
Si e l analizador léxico sim u la un A F N com o el d e la figura 3.5 2 , en to n ces d e b e leer l a en trad a
q ue em p ieza en el p u n to d e su entrada, al cu a l nos hem os referido com o in icio L exem a. A m e­
dida q ue el apuntador llam ado avan ce avan za h acia d ela n te e n la en trad a, ca lcu la e l conjunto
d e esta d o s en los q u e se en cu en tra en ca d a punto, sig u ien d o e l A lgoritm o 3.22.
En algú n m om ento, la sim u lación d e l A F N lleg a a un p u n to en la en trad a e n d on d e n o hay
sig u ien tes estad os. E n e se punto, no h ay esp eran za d e q ue cualquier prefijo m ás largo d e la en ­
trad a haga q ue e l A F N llegue a un esta d o d e aceptación; e n vez d e ello, el con ju n to d e estad os
siem p re esta rá vacío. P or en d e, esta m o s listos para decidir so b re el prefijo m ás largo q u e se a
un lexem a q ue coincide con cierto patrón.
3.8 D iseño de un generador d e analizadores léxicos
169
F igu ra 3.52: A F N com binado
.*b +
ninguno
F igu ra 3.53: Secu en cia d e los con jun tos d e esta d o s q ue s e in trodu cen al procesar la en trad a
aaba
170
Capítulo 3. Análisis léxico
B u scam os h acia atrás en la secu en cia d e con jun tos d e esta d o s, h a sta encontrar u n conjunto
q ue in clu ya u no o m ás esta d o s d e aceptación. Si h ay varios esta d o s d e aceptación en e s e con ­
ju n to, elegim os e l q u e e s té asociad o co n el prim er p a tró n
en la lis ta d el program a en L e x .
R etroced em os el apuntador avan ce h acia e l final d el lexem a, y realizam os la acción A { asociad a
con el p atrón p¿.
E j e m p l o 3 . 2 7 : Su p on ga q ue ten em os los patrones d el ejem p lo 3.36 y q ue la en trad a em p ieza
con aaba. L a figura 3 .5 3 m uestra los con ju n tos d e esta d o s d el A F N d e la figura 3 .52 q u e intro­
d ucim os, em p ezan d o con e-cerradu ra del esta d o inicial 0, e l cu a l es {0, 1, 3, 7 } , y p rocedien do
a partir d e ahí. D esp u és d e leer e l cu arto sím b olo d e en tra d a , nos encontram os e n un conjunto
vacío d e estad os, y a q u e en la fig u ra 3.52 no h ay tran siciones salien tes d e l e sta d o 8 en la en ­
trad a a.
Por en d e, n ecesitam os retroceder para buscar un con ju n to d e esta d o s q ue in clu ya un esta d o
aceptante. O bserve q u e , com o se in d ica en la figura 3.53, d esp u és d e leer a n os encontram os en
un con ju n to q ue in clu ye el e sta d o 2 y, p or lo ta n to , in d ica q u e el patrón a tien e u n a coinciden ­
cia. N o ob sta n te, d esp u és d e leer aab n os encontram os en el esta d o 8 , el cu a l in d ica q u e s e h a
en con trad o u n a coin cid en cia co n a * b + ; e l prefijo aab es el prefijo m ás largo q ue nos llev a a un
esta d o d e aceptación. P or lo tan to, seleccion am os aab com o e l lex em a y ejecu tam os la acción
^ 3 , la cual d eb e incluir un regreso al analizador sin tá ctico , indicando q ue se h a en con trad o el
token cu yo patrón es p3 = a * b + .
□
3 .8 .3
A F D s p a r a a n a liz a d o r e s lé x ic o s
O tra arquitectura, q ue se asem eja a la salid a d e L e x , es convertir e l A F N para to d o s los p a ­
trones en u n A F D eq u ivalen te, m ediante la con stru cción d e su bconjun tos d e l A lgoritm o 3.20.
D entro d e ca d a esta d o d e l A F D , si h ay u no o m ás esta d o s acep tan tes d el A F N , se d eterm in a
e l prim er p atrón cu yo esta d o a cep tan te s e representa, y e s e p atrón se con vierte en la sa lid a d el
esta d o A F D .
E j e m p l o 3 . 2 8 : L a figura 3.54 m u estra un diagram a d e transición d e esta d o basado en e l A F D
q ue s e con stru ye m ed ian te la con stru cción d e subconj u n tos d el A F N e n la figura 3.52. Los es­
tad os d e aceptación se etiq u e ta n m ediante el p atrón identificado por ese esta d o . Por ejem p lo,
e l esta d o { 6 , 8 } tien e d o s esta d o s d e aceptación, los cu ales corresponden a lo s patrones a b b
y a * b + . C om o e l prim er patrón se lista prim ero, ése es e l p atrón q u e se asocia con el esta d o
{6, 8 }.
□
U tilizam os el A F D en un analizador léxico e n form a m uy parecida a l A F N . Sim ulam os el
A F D h a sta q ue en cierto p u n to n o h aya un esta d o sigu ien te (o h ablando e n sen tid o estricto ,
h a sta q u e e l sigu ien te esta d o se a 0 , el esta d o m u e rto q ue corresponde al con ju n to vacío d e esta ­
d os d e l A F N ). E n e se punto, retrocedem os a través d e la secu en cia d e esta d o s q ue introdujim os
y, ta n pronto com o nos encontram os con un e sta d o d e aceptación d e l A F D , realizam os la acción
a sociad a con el p atrón para ese estado.
E j e m p l o 3 . 2 9 : S u p on ga q ue e l A F D d e la figura 3 .54 recibe la en trad a abba. L a secu en cia
d e esta d o s in troducidos es 0137, 247, 58, 68 , y en la a final no h ay u na tran sición q ue sa lg a d el
esta d o 68 . Por en d e, consideram os la secu en cia a partir d el final, y en e s te caso, 68 en s í es
un e sta d o d e acep tación que rep orta e l patrón
= abb.
□
171
3.8 D iseño de un generador d e analizadores léxicos
a
F igu ra 3.54: Grafo d e tran sición para un A F D q ue m aneja lo s patrones
3 .8 .4
a, a b b
y
a * b +
I m p le m e n ta c ió n d e l o p e r a d o r d e p r e a n á lis is
E n la sección 3.5.4 v im o s q ue algunas veces es necesario el operador d e preanálisis / d e L e x en
u n p atrón n /r ¿ , y a q u e ta l vez e l patrón n para un tok en específico d eb a describir cierto con ­
te x to r2 a la izquierda, para poder identificar e n form a correcta e l lex em a a ctu al. A l convertir el
p atrón r i /r 2 e n un A F N , tratam os a l / com o si fuera e, p o r lo q u e en realidad no buscam os u n /
e n la en trad a. N o ob sta n te, si el A F N reconoce u n prefijo x y d e l búfer d e entrada, d e form a que
co in cid a con e s ta exp resión regular, e l final d el lex em a no es en donde e l A F N en tró a su estad o
d e aceptación. E n v e z d e ello , e l final ocurre cu a n d o el A F N en tra a un esta d o s t a l que:
1 . 5 ten g a u n a tran sición e en e l / im aginario.
2. H ay u n cam in o d e l e sta d o inicial d el A F N h a sta e l esta d o 5 , q ue d eletrea a x.
3. H ay u n cam in o d e l e sta d o s al esta d o d e a cep tación que d eletrea a y.
4 . ares lo m ás largo p osib le para cualquier x y q u e cu m p la c o n las con d icion es 1-3.
S i só lo h ay u n e sta d o d e transición e en el / im aginario en e l A F N , en ton ces e l final del
lexem a ocurre cu an do s e en tra a este esta d o p or ú ltim a vez, com o se ilu stra en e l siguiente
ejem p lo. Si el A F N tien e m ás d e un e sta d o d e transición e e n e l / im aginario, en to n ces e l pro­
b lem a gen eral de encontrar e l esta d o 5 actu a l s e d ificu lta m ucho m ás.
3 . 3 0 : E n la figura 3.55 se m u estra un A F N para e l patrón d e la instrucción IF de
Fortran co n lectu ra ad elan tad a d e l ejem p lo 3.13. O bserve q u e la tran sición e d e l esta d o 2 a l 3
representa al operador d e aceptación. E l esta d o 6 in dica la presencia d e la palabra cla v e IF . N o
o b sta n te, para encontrar e l lexem a IF exp loram os en retroceso h a sta la ú ltim a ocu rren cia del
e sta d o 2 , ca d a v e z q ue se en tra al esta d o 6 .
□
E je m p lo
172
Capítulo 3. Análisis léxico
E s ta d o s m u e r to s e n lo s A F D s
T écnicam ente, e l a u tó m a ta e n la figura 3.54 n o es e n s í un A F D . L a razón es q u e un
A F D tien e una transición proveniente d e ca d a esta d o , e n ca d a sím b olo e n su a lfab eto de
entrada. A q u í hem os o m itid o las tran sicion es q ue van al esta d o m uerto 0 y, p or lo tanto,
hem os om itid o las tran siciones q ue v a n d e l esta d o m uerto h acia s í m ism o, en tod as las
en trad as. Los ejem plos anteriores d e conversión d e A F N a A F D no ten ían u n a form a de
pasar del esta d o in icial a 0, pero el A F N d e la figura 3.52 sí.
N o ob sta n te, a l construir un A F D para usarlo en un analizador léxico, es im portante
q ue tratem os al estad o m uerto d e m anera d istin ta , y a q u e d eb em os sab er cu a n d o no hay
m ás p osibilid ad d e reconocer un lexem a m ás largo. Por en d e, sugerim os siem p re om itir
las tran siciones h acia el estad o m uerto y elim inar el esta d o m uerto en sí. D e hecho, el
problem a es m ucho m ás difícil d e lo q ue parece, y a q ue u n a con stru cción d e A F N a A F D
puede producir varios esta d o s q u e n o puedan llegar a u n e sta d o d e aceptación, y d ebem os
saber cu án d o se h a llegado a cu alq uiera d e e sto s esta d o s. L a sección 3 .9 .6 h ab la sobre
cóm o com binar to d o s esto s esta d o s en un e sta d o m uerto, d e m anera q u e se a m ás fácil
identificarlos. T am bién es interesante observar q u e si con stru im os un A F D a p artir de
una exp resión regular q ue u tilice los A lgoritm os 3 .20 y 3.23, en to n ces e l A F D no tendrá
ningún estad o, aparte d e 0 , q ue no p ueda d irig im o s h acia un esta d o d e aceptación.
inicio
Figura 3.55: A F N q u e recon oce la p alabra clave IF
3 .8 .5
E je rc ic io s p a r a la s e c c ió n 3 .8
E j e r c i c i o 3 .8 .1 : S u p on ga q u e ten em os d os tokens: (1) la p a lab ra clave i f y (2) los identificadores, q u e so n cad en as d e letras d istin ta s d e i f . Muestre:
a) E l A F N para e sto s tokens.
b) E l A F D p ara esto s tokens.
E j e r c i c i o 3 .8 .2 : R ep ita el ejercicio 3.8.1 para los tokens q ue co n sista n en ( 1 ) la p alabra clave
w h ile , (2) la p alabra clave when, y (3) los identificadores co m p u esto s de ca d en a s d e letras y
d ígitos, em p ezan d o co n u n a letra.
3 .8 .3 : S u p on ga q u e vam os a revisar la definición d e un A F D para p erm itir cero o
una transición salien te d e ca d a esta d o , en cad a sím b olo d e en tra d a (en v e z d e q u e s e a ex a cta ­
m ente u na transición, com o en la definición están d ar d el A F D ). D e e s ta form a, algunas expre­
E je r c ic io
3.9
Optimización d e los buscadores p o r concordancia d e patrones basados en AFD
173
sio n es regulares tendrían “A F D s” m ás pequeños en com paración con la d efinición está n d a r de
u n A F D . P rop orcion e un ejem p lo d e u na exp resión regular así.
E j e r c i c i o 3 . 8 . 4 : D iseñ e un algoritm o para reconocer lo s patrones d e lectu ra p or adelantado
d e Lex d e la form a n / r2, en d on d e n y r 2 so n exp resion es regulares. M u estre cóm o funciona
su algoritm o en las sigu ien tes entradas:
a) ( abcd\abc)/d
b) ( a |a 6) / 6a
c ) aa * /a *
3.9
O p tim iz a c ió n d e los b u s c a d o re s p o r c o n c o rd a n c ia
d e p a tr o n e s b a sa d o s e n A F D
E n e sa sección presentarem os tres algoritm os q ue se u tiliza n para im plem entar y optim izar
b uscadores p o r con cordan cia d e p atron es, con stru id os a partir d e exp resion es regulares.
1. El primer algoritm o es ú til en un com pilador d e Lex, y a q ue construye un A F D directam en­
te a partir d e u na expresión regular, sin construir un A F N interm edio. A dem ás, e l A F D
resultante puede tener m enos estad os q ue e l A F D que se construye m ediante un A F N .
2. E l segu n d o algoritm o dism inu ye al m ínim o e l núm ero d e esta d o s d e cualquier A F D , me­
diante la com binación d e los esta d o s q ue tien en e l m ism o co m p ortam ien to a futuro. El
algoritm o e n s í es b astan te eficien te, pues se eje cu ta en un tiem p o 0 (n log n ), e n donde
n es e l núm ero d e esta d o s d e l A F D .
3. E l tercer algoritm o produce representaciones m ás com p a cta s d e las tab las d e transición
que la ta b la están d ar bidim ensional.
3 .9 .1
E s ta d o s s ig n ific a tiv o s d e u n A F N
P ara em p ezar n uestra d iscu sión acerca d e cóm o pasar d irecta m en te d e u na expresión regular
a un A F D , prim ero d eb em os analizar co n cu id ad o la con stru cción d el A F N d el algoritm o 3.23
y considerar los p apeles q ue d esem p eñ an varios esta d o s. A un esta d o d e l A F N le llam am os
sig n ifica tivo si tien e u n a transición d e sa lid a q ue no s e a e. O bserve q ue la con stru cción de
su b con ju n tos (A lgoritm o 3.20) só lo u tiliz a los esta d o s sig n ifica tiv o s en u n con ju n to T cuando
calcu la e-c erra d u ra (m o ve r(T , a)), el con ju n to d e esta d o s a lo s q ue se p u ed e llegar d esd e T con
u na en trad a a. E s decir, el con ju n to d e esta d o s m overos, a) no e s tá v a cío só lo s i e l esta d o s es
im p ortan te. D u ran te la con stru cción d e su b co n ju n to s, pueden identificarse d os con jun tos de
esta d o s del A F N (que se tra ta n com o si fueran el m ism o co n ju n to ) si:
1 . T ien en los m ism os esta d o s sign ificativos.
2. Y a s e a q u e am bos ten gan esta d o s d e acep ta ció n , o ninguno.
174
Capítulo 3. Análisis léxico
C uando e l A F N se con stru ye a partir d e u n a exp resión regular m ediante e l A lgoritm o 3.23,
p od em os decir m ás acerca d e los esta d o s sign ificativos. L os únicos esta d o s sig n ifica tiv o s son
los que se in trodu cen com o esta d o s in iciales en la p a rte b á sica p a ra la p o sició n d e un sím b olo
específico en la exp resión regular. E s decir, ca d a e sta d o sign ificativo corresponde a un op eran ­
d o esp ecífico en la expresión regular.
El A F N con stru id o só lo tien e un esta d o d e aceptación, p ero é s te , q ue n o tien e transiciones
d e salida, no es un esta d o sign ificativo. A l con catenar u n único m arcador final # derecho con
una exp resión regular r, p roporcionam os a l esta d o d e aceptación p a ra r u n a transición sobre # ,
con lo cu al lo m arcam os com o u n estad o sign ificativo d el A F N para ( r ) # . E n o tra s palabras,
al usar la exp resión regular au m en ta d a ( r ) # , p od em os olvid arn os d e los esta d o s d e aceptación
a m ed ida q ue procede la con stru cción d e subconjuntos; cu an do se co m p leta la con stru cción ,
cualquier esta d o con una transición sobre # d eb e ser un esta d o d e aceptación.
Los esta d o s sign ificativos del A F N corresponden d irectam ente a la s p osiciones en la ex ­
presión regular q ue con tien en sím b olos d el alfabeto. C om o pronto verem os, es con ven ien te pre­
sen tar la expresión regular m ed ian te su árbol sin tá c tic o , en d ond e la s h ojas corresponden a
los operandos y los n od os interiores corresponden a los operadores. A un n odo interior s e le
llam a n odo-con cat, n odo-o o n o d o -a sterisco s i se e tiq u e ta m ediante el operador d e co n ca ten a ­
ción (p u n to ), el operador d e unión |, o e l operador *, resp ectiv a m en te. P od em os construir un
árbol sin tá ctico para u na exp resión regular al igual q ue com o lo h icim os para las expresiones
aritm éticas en la sección 2.5.1.
3 . 3 1 : L a figura 3.56 m uestra e l árbol sin tá ctico p a ra la exp resión regular d e nuestro
bosquejo. L os n od os-con cat s e representan m ed ian te círculos.
□
E je m p lo
F igu ra 3.56: Á rbol sin tá ctico para
(a | b )* a b b #
3.9
Optimización d e los buscadores p o r concordancia d e patrones basados en AFD
175
Las h ojas e n un árbol sin tá ctico s e etiq u e ta n m ed ian te e o m ediante u n sím b olo d e l alfabe­
to . P ara c a d a h oja q ue no se e tiq u e ta com o e, le adjuntam os un en tero ú nico. N os referim os a
e s te en tero com o la po sició n d e la h oja y ta m b ién com o u n a p osición d e su sím b olo. O bserve
q u e un sím b olo p uede tener varias posiciones; p or ejem p lo, a tien e la s p osiciones 1 y 3 e n la
figura 3.56. Las p osiciones en el árbol sin tá ctico corresponden a lo s esta d o s sign ificativos del
A F N construido.
E j e m p l o 3 . 3 2 : L a figura 3.57 m u estra e l A F N para la m ism a expresión regular q ue la figura
3.56, co n los esta d o s sign ificativos en um erados y los dem ás esta d o s representados por letras.
Los estad os enum erados e n el A F N y las p osiciones en el árbol sin tá ctico corresponden d e una
form a q u e pronto verem os.
□
e
F igu ra 3.57: A F N con stru id o por el A lgoritm o 3.23 para ( a |b ) * a b b #
3 .9 .2
F u n c io n e s c a lc u la d a s a p a r t i r d e l á r b o l s in tá c tic o
P ara construir u n A F D d irectam en te a partir d e u na exp resión regular, con stru im os su árbol
sin táctico y d esp u és calcu lam os cu atro funciones: anulable, p rim era p o s, v ltim a p o s y á g u ie n te p o s, las cu ales se d efinen a con tin u ación . C ad a definición se refiere al árbol sin tá ctico para una
exp resión regular au m en tad a ( r ) # específica.
1 . anulable(n) es verdadera para un nodo n d el árbol sin táctico si, y sólo si, la subexpresión
representada por n tien e a e e n su lenguaje. E s decir, la subexpresión p u ed e “hacerse nula”
o puede ser la cad en a vacía, aun cu an do p ueda representar tam b ién a o tra s cadenas.
2 . prim erapos(n) es el conjunto d e posiciones en e l subárbol con raíz en n, que corresponde al
primer sím bolo d e por lo menos una cadena en e l lenguaje de la subexpresión con raíz en n.
3. idtim apos(ri) es e l conjunto d e posiciones en e l subárbol con raíz en n, que corresponde al
últim o sím bolo d e por lo m enos u na cadena en e l leguaje d e la subexpresión con raíz en n.
176
Capítulo 3. Análisis léxico
4. sig u ien tepos(p), para u na p osición p, e s el con ju n to d e p osiciones q en to d o el árbol
sin táctico, d e ta l form a q ue h aya cier ta cad en a x = aia>¿ • • • an en u na L ( ( r ) # ) ta l q ue
p ara cierta ¿, h aya u n a form a d e exp licar la m em bresía d e a: en L ( ( r ) # ) , h aciendo q ue a¿
coin cid a co n la p osición p d e l árbol sin tá ctico y Oj+i con la p osición q.
3 .3 3 : C onsidere e l n odo-con cat n en la figura 3.56, q ue corresp ond e a la expresión
A legam os q ue anulable(n) es falsa, y a q u e e s te nodo gen era to d a s las ca d en a s d e as
y fe q u e term in an en u na a; no gen era a e. Por o tro lado, el n odo-asterisco d eb a jo d e é l p uede
hacerse nulo; gen era a e ju n to co n tod as las d em ás cad en as d e as y fe.
p rim era p o s(n ) = { 1 , 2, 3 } . E n una cad en a gen erad a en form a com ú n , com o aa, la prim era
p osición d e la cad en a corresp ond e a la p osición 1 d e l árbol, y en u n a ca d en a com o ba, la pri­
m era p osición d e la cad en a proviene d e la p osición 2 d e l árbol. N o ob sta n te, cu an do la ca d en a
gen erad a por la exp resión d el nodo n es só lo a, en to n ces e s ta a proviene d e la posición 3.
ídtim apo$(ri) = { 3 } . E s decir, sin im portar q u é ca d en a se genere a partir d e la expresión d el
n odo n, la ú ltim a posición es la a q ue proviene d e la p osición 3 d e la cadena.
sigu ien tepos es m ás d ifícil d e calcular, pero en b reve verem os la s reglas para hacerlo. He
aquí u n ejem p lo d e l razonam iento: sigu ien tepos (1) = {1, 2, 3 }. C onsidere u na ca d en a • --ac-- •,
en d ond e la c p u ed e ser a o 6, y la a proviene d e la p o sició n 1. E s decir, e s ta a e s u n a d e las
q ue se generan m ediante la a en la exp resión ( a |b ) * . E s ta a p o d ría ir seg u id a d e o tr a a o b q ue
p rovenga d e la m ism a su bexpresión, en cu yo caso c proviene d e la p osición 1 o 2. Tam bién es
p osible q ue e s ta a s e a la ú ltim a en la cad en a gen erad a por ( a |b ) * , en cuyo ca so e l sím b olo c
d eb e ser la a q ue proviene d e la p osición 3. Por ende, 1, 2 y 3 son ex a cta m en te las p osiciones
q ue p ueden segu ir d e la p osición 1 .
□
E je m p lo
(a | b )* a .
3 .9 .3
C á lc u lo d e anulable , p rim era p os y u ltim apos
P od em os calcu lar a anulable, p rim era p o s y u ltim a p o s m ediante recursividad d ire cta sobre la
altu ra d el árbol. L as reglas básicas e in du ctivas para anulable y p rim era p o s se resum en en
la figura 3.58. L as reglas para u ltim apos son e n esen cia las m ism as q ue p a ra p rim era p o s, pero las
funciones d e los hijos C\ y
d eb en intercam biarse e n la regla para un n odo-con cat.
E j e m p l o 3 . 3 4 : D e to d o s los nodos en la figura 3.56, só lo e l n odo-asterisco p uede hacerse nulo.
D e la ta b la d e la figura 3.58 p od em os observar q u e n in gu n a de las h ojas p u ed e hacerse nula,
y a q ue tod as ellas corresponden a op eran d os q ue no so n e. E l n odo-o no p uede hacerse nulo, y a
q ue n ingu no d e su s hijos lo son . E l n odo-asterisco p uede hacerse nulo, y a q ue tod os los nodosasterisco p ueden hacerse nulos. P or ú ltim o, ca d a u no d e los n o d o s-co n ca tt, q ue tien en por lo
m enos un h ijo q ue no p u ed e hacerse nulo, n o pueden hacerse nulos.
El cálcu lo d e p rim era p o s y u ltim apos para ca d a u no d e los n od os s e m u estra en la figura
3.59, co n p rim era p o s(n ) a la izquierda d el nodo n, y u ltim a p o s(n ) a su derecha. C ad a u n a d e las
h ojas só lo s e tien e a s í m ism a para p rim era p o s y u ltim a p o s, segú n lo requerido en la regla para
las hojas q ue no son e en la figura 3.58. P ara e l nodo-o, tom am os la unión d e p rim erapos en los
hijos y hacem os lo m ism o para ultim apos. L a regla para e l nodo-asterisco d ice q ue d ebem os tom ar
e l valor d e p rim erapos o u ltim apos en el único hijo d e ese nodo.
3.9
Optimización d e los buscadores p o r concordancia d e patrones basados en AFD
177
NODO n
anulable(n)
p rim era p o s(n )
U n a h oja etiq u e ta d a com o e
tru e
0
U n a h oja co n la posición i
f a ls e
w
U n n odo-o n = ci|c 2
an u lable(ci) o r
anulable (C2)
p rim era p o s(ci) U prim erapos(o¿)
U n n odo-con cat n = C1 C2
an ulable(ci) a n d
anuláble(c 2)
i f (a n u la b le(ci) )
p rim era p o s(c\) U p rim erapos{o¿)
e l s e p rim era p o s(ci)
U n n odo-asterisco n — Ci*
tru e
p rim era p o s(ci)
F igu ra 3.58: R eglas para calcu lar a anulable y p rim era p o s
A hora, considere el n odo-con cat m ás inferior, al q ue llam arem os n. P ara calcu lar p rim era p o s( n) ,
prim ero consideram os s i e l operando izquierdo p uede hacerse n ulo, lo cu a l e s cierto en este
ca so . P or lo tan to, p rim era p o s para n es la unión d e p rim era p o s p a ra ca d a u no d e su s hijos;
e s decir, {1 , 2} U { 3 } = { 1 , 2, 3 } . L a regla p a ra id tim a p o s no aparece en form a ex p líc ita e n la
figura 3.58, pero com o d ijim os antes, las reglas so n las m ism as q ue para p rim era p o s, con los
h ijos intercam biados. E s d ecir, para calcular u ltim a p o s(n ) d eb em o s verificar s i s u hijo derecho
(la h oja con la p osición 3) p uede hacerse nulo, lo cu a l no es cierto. P or lo ta n to , u ltim a p o s(n )
e s e l m ism o q ue e l n odo u ltim apos d e l hijo derecho, o { 3 } .
□
3 .9 .4
C á lc u lo d e siguientepos
P or últim o, n ecesitam os ver cóm o calcular sigu ientepos. Sólo h ay d o s form as en q ue p od em os
hacer q ue la p osición d e u na exp resión regular sig a a otra.
1. Si n es un n odo-con cat con e l hijo izquierdo C\ y co n e l hijo derecho c¿, en to n ces para
cad a p osición i en u ltim a p o s{c i) , to d a s las p o sicio n es en prim era p o s(c 2) se en cu en tran en
sigu ien tepos(i).
2. Si n e s un n odo-asterisco e i es una p osición en u ltim a p o s(n ), en ton ces to d a s la s p o sicio ­
nes en prim era p o s(n ) s e en cu en tran en sig u ien tep o s(Í).
E j e m p lo 3 .3 5 : V am os a continuar co n nuestro bosquejo; recuerde q ue en la figura 3.59 calcu­
lam os p rim era p o s y xdtim apos. L a regla 1 para sigu ien tepos requiere q ue analicem os c a d a nodocon cat, y q u e coloqu em os ca d a p osición e n p rim era p o s d e su hijo derecho e n sig u ien tep o s, para
cad a posición e n u ltim apos d e s u hijo izquierdo. P ara el n odo-con cat m ás inferior en la figura
3.59, esa regla in d ica q ue la posición 3 e s tá e n sig u ien tep o s( 1) y sig u ien tep o s(2). E l siguiente
n od o-con cat in dica q ue la p osición 4 e s tá en siguientepos^3 ), y lo s d o s n o d os-con cat restan­
te s n os dan la p osición 5 en siguientepos^4 ) y la 6 e n siguientepos^5).
178
Capítulo 3. Análisis léxico
{1,2,3} o {6}
{1,2,3} o {5}
{5} b { 5}
{1*2,3} o {4}
{1,2,3} o {3}
{1,2} *{1,2}
{6} #{6}
{4} b {4}
{3} a {3}
{ U } I {1,2}
{\} a { \ }
{2}b{2}
F igu ra 3.59: p rim era p o s y xdtim apos para los n od os en el árbol sin tá ctico p a ra ( a |b ) * a b b #
Tam bién d eb em os aplicar la regla 2 al nodo-asterisco. E sa regla nos in d ica q ue las p osi­
cion es 1 y 2 e s tá n tan to en sigu ien tepos( 1 ) com o en siguientepos{ 2 ), y a q ue ta n to p rim era p o s
com o vitim a p o s para e s te n od o so n {1 ,2 }. L os con jun tos co m p leto s sig u ien tep o s s e resum en en
la figura 3.60.
□
NODO n
sigu ien tep o s(n )
1
2
{ 1 ,2 ,3 }
{ 1 ,2 ,3 }
3
4
5
{4 }
{5 }
{6 }
6
0
F igu ra 3.60: L a fun ción sigu ien tepos
P od em os representar la función sigu ien tepos m ed ian te la creación d e un gráfico dirigido,
con un nodo para cada p osición y u n arco d e la p o sició n i a la p o sició n j s i y só lo si j se en cu en ­
tra en sigu ien tepos(i) . L a figura 3.61 m u estra e s te gráfico para la función d e la figura 3.60.
N o d eb e sorprendernos el hecho d e q ue e l grafo para sig u ien tep o s s e a casi un A F N sin tran­
saccion es e para la exp resión regular su byacen te, y se con vertiría en uno si:
1. H acem os q ue tod as las p osicion es en p rim era p o s d e la raíz sean esta d o s iniciales,
2. E tiq u etam os ca d a arco d e i a j m ediante e l sím b olo en la p osición i.
3.9
Optimización d e los buscadores p o r concordancia d e patrones basados en AFD
179
F igu ra 3.61: G ráfico d irigido para la función sigu ientepos
3. H acem os q ue la p osición asociad a co n e l m arcador final # s e a e l único esta d o d e acepta­
ción.
3.9.5
C o n v e rsió n d ire c ta de u n a exp re sió n re g u la r a u n A F D
A lg o r i t m o 3 .3 6 : C onstrucción d e u n A F D a p artir d e u na expresión regular r.
E N T R A D A : U n a exp resión regular r.
SA L ID A : U n A F D D q ue reconoce a L (r).
M ÉTODO:
1. C onstruir u n árbol sin tá ctico T a partir d e la expresión regular au m en tad a ( r ) # .
2. C alcular anulable, p rim era p o s, v ltim a p o s y sig u ien tep o s para T, m ed ian te los m étod os de
las secciones 3.9.3 y 3.9.4.
3. C onstruir D e sta d o s, el con ju n to de esta d o s d el A F D D , y D tra n , la fun ción d e transi­
ción para D , m ediante e l p rocedim ien to d e la figura 3.62. Los esta d o s d e D so n estad os
d e posiciones e n T. A l principio, ca d a esta d o e s tá “sin m arca” , y un esta d o se “m arca”
ju sto an tes d e q ue considerem os su s tran siciones d e salida. E l e sta d o inicial d e D es
p rim era p o s(n 0), en d ond e e l nodo n 0 es la raíz d e T. L os esta d o s d e a cep tación so n los
que con tien en la posición para e l sím b olo d e m arcador final # .
E j e m p lo 3 .3 7 : A hora p od em os unir los pasos d e nuestro bosquejo y construir un A F D para
la expresión regular r = ( a |b ) * a b b . E l árbol sin tá ctico para ( r ) # apareció e n la figura 3.56.
A h í ob servam os q u e para e s te árbol, anulable es verdadera sólo para e l n odo-asterisco, y ex ­
h ibim os a p rim era p o s y u ltim a p o s en la figura 3.59. Los valores d e sigu ien tepos aparecen e n la
figu ra 3.60.
E l valor d e p rim era p o s para la raíz d e l árbol e s {1, 2, 3 } , p or lo q ue e s te con ju n to es el
esta d o in icial d e D . L lam em os a e s te con ju n to d e esta d o s A . D eb em os calcu lar D tra n [A , a]
y D tra n [A , b]. D e entre las p osiciones d e A , la 1 y la 3 corresponden a a, m ientras q u e la 2
corresp ond e a b. P or en d e, D tra n [A , a] = sigu ien tepos{ 1) U sig u ien tep o s(3) = { 1 , 2, 3, 4 } y
180
Capítulo 3. Análisis léxico
inic¡alizar D e sta d o s para q u e co n ten ga sólo el esta d o sin m arcar p rim era p o s(n o ) ,
en d ond e no e s la raíz d el árbol sin tá ctico T p a ra ( r ) # ;
w h i l e ( h ay un esta d o sin m arcar S en D e sta d o s ) {
m arcar 5;
f o r ( ca d a sím b olo d e en trad a a ) {
dejar q ue U s e a la unión d e sig u ien tep o s(p ) para to d a s la s p
en 5 q ue correspondan a a;
i f ( U n o e s tá en D e sta d o s )
agregar U com o e sta d o sin m arcar a D esta d o s;
D tran [S , a] — U\
}
}
F igu ra 3.62: C onstrucción de un A F D d irecta m en te a partir d e u n a exp resión regular
D tra n [A , 6] = sig u ie n te p o s(2) = {1 , 2, 3 }. E ste ú ltim o es el esta d o A y , por lo ta n to , no tien e
q ue agregarse a D esta d o s, pero el anterior, B = {1 , 2, 3 , 4 } es nuevo, p or lo q u e lo agregam os
a D e sta d o s y procedem os a calcular su s transiciones. E l A F D co m p leto se m uestra en la figura
3.63.
□
b
F igu ra 3.63: A F D con stru id o a partir d e la figura 3.57
3.9.6
M in im izació n d el n ú m ero de esta d o s de u n A F D
P u ed e haber m uchos A F D s q ue reconozcan e l m ism o lenguaje. Por ejem p lo , observe q ue los
A F D s d e las figuras 3.36 y 3.63 reconocen e l lengu aje L ( ( a |b ) * a b b ) . E sto s a u tó m a ta s no solo
tien en estad os con d istin to s nom bres, sin o que ni siq u iera tien en el m ism o núm ero d e estad os.
Si im plem en tam os un analizador léxico com o u n A F D , p or lo general, e s preferible un A F D q ue
ten g a el m enor núm ero d e estad os p osib le, y a q ue ca d a esta d o requiere en trad as en la ta b la
para describir al analizador léxico.
El asu nto d e los nom bres d e los estad os e s m enor. D ecim os q ue d o s a u tó m a ta s tien en n o m ­
bres de esta d o s equ ivalen tes s i u no p u ed e transform arse en e l o tro c o n só lo cam biar lo s nom bres
d e los estad os. Las figuras 3.36 y 3.63 no tien en nom bres d e esta d o s eq u ivalen tes. N o ob sta n te,
hay u na estrech a relación en tre los esta d o s d e ca d a uno. Los esta d o s A y C d e la figura 3.36
son en realidad eq u ivalen tes, y a q ue n ingu no es u n e sta d o d e aceptación, y en cualquier en trad a
3.9
Optimización d e los buscadores p o r concordancia d e patrones basados en AFD
181
transfieren h acia e l m ism o estado: h acia B en la e n tra d a a y h a cia C e n la e n tra d a 6. A dem ás,
am bos esta d o s A y C se com p ortan com o el esta d o 123 d e la figura 3.6 3 . D e igual form a, el
esta d o B d e la figura 3.36 s e co m p o rta com o e l esta d o 1234 d e la figura 3.63, e l esta d o D se
co m p o rta com o el esta d o 1235, y e l esta d o E s e co m p o rta co m o e l esta d o 1236.
C om o resultado siem p re h ay un A F D único c o n e l núm ero m ínim o d e esta d o s (equivalentes)
para cualquier len gu aje regular. A dem ás, e s te A F D con e l m ínim o núm ero d e e sta d o s pude cons­
truirse a p artir d e cualquier A F D para e l m ism o lengu aje, m ed ian te e l agrupam iento d e con­
ju n to s con estad os eq u ivalen tes. E n e l caso d e L ( ( a |b ) * a b b ) , la figura 3.63 es e l A F D co n el
m ínim o núm ero d e esta d o s, y p uede construirse particionando los esta d o s d e la figura 3.36 de
la sigu ien te m anera: { A , C } { B } { D } { E } .
P ara p od er com prender e l algoritm o para crear la partición d e esta d o s q u e co n v ierta a cu al­
quier A F D e n s u A F D eq u ivalen te co n e l m ínim o núm ero d e esta d o s, ten em os q ue ver cóm o las
cad en as d e en trad a d iferencian un esta d o d e otro. D ecim os q ue la ca d en a x d iferen cia e l estad o
s d e l estad o t s i só lo u no d e los estad os a los q ue se lleg a d esd e s y
sigu iend o e l ca m in o con
la etiq u e ta x, es un e sta d o d e aceptación. E l esta d o s p uede diferen cia rse d el esta d o t si hay
a lgu n a ca d en a q ue los diferencie.
E j e m p lo 3 .3 8 : L a cad en a v acía diferencia a cualquier esta d o d e aceptación d e cualquier estad o
d e no aceptación. E n la figura 3.36, la cad en a bb diferencia e l esta d o A d e l B , y a q ue bb llev a al
esta d o A h acia un esta d o C d e no aceptación, pero lleva a B a l esta d o d e aceptación E .
□
E l algoritm o d e m inim ización d e estad o s fu n cion a m ed ian te el p articion am ien to d e los es­
ta d o s d e un A F D en gru p os de estad os q ue n o puedan diferenciarse. D esp ués, ca d a gru p o se
co m b in a en un so lo esta d o del A F D co n el núm ero m ínim o d e esta d o s. E l algoritm o funciona
m anten ien d o u n a p artición, cu yos gru p os son con jun tos d e esta d o s q u e n o se han diferenciado
tod avía, m ientras q u e se sab e q ue d os esta d o s cualesquiera d e d istin to s gru p os pueden diferen­
ciarse. C uan do la p artición no p u ed e depurarse m ás m ed ian te la descom p osición d e cualquier
gru p o en gru p os m ás p eq ueños, ten em o s e l A F D co n e l m ínim o núm ero d e estad os.
A l principio, la partición c o siste e n d o s grupos: los esta d o s d e aceptación y los d e n o acep­
tación . E l p aso fun dam en tal es tom ar cierto gru p o d e la partición actual, p or decir A = {¿ i,
52, • ■ - , s*}, y cierto sím b olo d e en trad a a, y ver cóm o p uede usarse a para diferenciar algunos
esta d o s e n e l gru p o A . E xam in am os las tran sicion es q ue sa len d e ca d a e sta d o s i,
. . . , s* en
la en trad a a, y si los esta d o s a los q ue s e llega p ertenecen a d o s o m ás gru p os d e la partición
actu al, d ividim os a A en u na colección d e grupos, p a ra q ue
y Sj esté n e n e l m ism o g ru p o, si y
só lo si p asan al m ism o grupo en la en trad a a. R ep etim o s e s te p roceso d e divid ir grupos, h asta
q u e ninguno d e los gru p os p u ed a d ivid irse m ás co n ningún sím b olo d e entrada. E n e l siguiente
algoritm o se form aliza e s ta idea.
A lg o r i t m o 3 .3 9 : M inim ización d el núm ero d e esta d o s d e u n A F D .
E N T R A D A : U n A F D D co n un con ju n to d e esta d o s 5, e l alfa b eto d e en trad a E , e l estad o
in icial s 0 y e l con ju n to d e esta d o s d e aceptación F.
SA L ID A : U n A F D D ', q ue a ce p ta el m ism o len gu aje q ue D y tien e e l m enor núm ero d e estad os
posible.
182
Capítulo 3. Análisis léxico
P o r qu é fu n cio n a el alg o ritm o de m in im ización de esta d o s
D eb em os dem ostrar d o s cosas: q ue los esta d o s q ue perm anecen en el m ism o gru p o en
Hfinai no p ueden diferenciarse por n in gu n a cad en a, y q ue los esta d o s q ue term in an en gru­
p os d istin to s s í p ueden hacerlo. L a prim era es u na inducción sobre i , la cu a l nos d ice que
si d esp u és d e la ¿-ésim a iteración d e l p aso (2) d el A lgoritm o 3 .3 9 , s y t se en cu en tran en
e l m ism o grupo, en ton ces no h ay u n a ca d en a d e lon gitu d i o m enor q ue p ueda diferenciar­
los. D ejarem os los d eta lles d e e s ta in du cción para q u e u sted los deduzca.
La seg u n d a es u na inducción sobre ¿, la cu a l n os d ice q ue si los esta d o s s y t s e co lo ­
can en d istin to s gru p os en la 2-ésim a iteración d el p aso (2 ), en ton ces hay u n a ca d en a que
p uede diferenciarlos. L a base, cu an d o s y t s e colo ca n en grupos d istin to s d e la partición
inicial, es sim ple: u no d eb e ser d e aceptación y e l o tro no, para q ue e los diferencíe. Para
la inducción, d eb e haber u n a en trad a a y esta d o s p y q, d e ta l form a q ue s y t vayan a
los esta d o s p y g, resp ectivam en te, con la en trad a a. A dem ás, p y q y a d eb en haberse
colocad o e n gru p os d istin tos. E n ton ces, p or la h ip ótesis in d u ctiva, hay algu na ca d en a x
que diferencia a p d e q. Por lo ta n to , ax diferencia a s d e t.
M ÉTODO:
1. E m pezar co n u n a partición in icial II con d os grupos, F y S - F , los esta d o s d e aceptación
y d e no acep tación d e D.
2. A plicar el procedim iento d e la figura 3.64 p a ra construir u n a n u eva partición U mev¡i.
al principio, d ejar q ue n nueva = ü ;
f o r (cad a gru p o G d e I I ) {
p articionar G en su bgrup os, d e form a q u e d o s esta d o s s y t
se en cu en tren en el m ism o su b gru p o, s i y só lo s i para todos
los sím b olos d e en trad a a, lo s esta d o s s y t tien en transiciones
sobre a h acia esta d o s en e l m ism o gru p o d e II;
/ * en el p eo r caso, un esta d o esta rá e n u n su bgrup o p or s í solo * /
su stitu ir G e n n nueVa p or e l con ju n to d e tod os los su bgrup os form ados;
}
F igu ra 3.64: C onstrucción d e llueva
3. Si Ilnueva = II, dejar q ue n finai = II y continuar con el p a so (4 ). D e no ser así, repetir el
p aso (2) co n n nueva e n v e z d e II.
4. Elegir un esta d o en ca d a grupo d e üfinai com o e l re p rese n ta n te para e se grupo. L os re­
p resentantes serán los esta d o s d e l A F D D ' con e l m ínim o núm ero d e esta d o s. Los d em ás
com p on en tes d e D ' s e con stru yen d e la sigu ien te manera:
3.9
Optimización d e los buscadores p o r concordancia d e patrones basados en AFD
183
E lim in ación d el estad o m u erto
A lgunas veces, e l algoritm o d e m m im ización produce un A F D con un esta d o muerto;
uno q ue no e s aceptante y q u e se transfiere h acia s í m ism o en ca d a sím b olo d e entrada.
T écnicam ente, este esta d o es necesario, y a q ue un A F D d eb e ten er u n a tran sición p ro­
ven iente d e cualquier estad o con ca d a sím bolo. N o o b sta n te y com o vim os en la sección
3.8.3, co n frecuencia es con ven iente saber cu an do no hay p osib ilid ad d e aceptación, para
poder d eterm in ar q u e se h a v isto e l lexem a apropiado. Por en d e, ta l vez s e a con ven iente
elim inar e l esta d o m uerto y u tilizar un a u tó m a ta q ue o m ita algu nas transiciones. E ste
a u tó m a ta tien e un esta d o m en os q ue e l A F D co n el m ínim o núm ero d e esta d o s, pero
h ablando e n sen tid o estr icto n o es un A F D , d eb ido a las tran siciones q ue faltan h a cia el
esta d o m uerto.
(a) El esta d o inicial d e D ' es e l representante d e l grupo que co n tien e el esta d o inicial
d e D.
(b ) Los esta d o s d e aceptación d e D ' son los representantes d e los gru p os q ue contienen
un esta d o d e aceptación d e D . O bserve q ue ca d a grupo co n tien e sólo esta d o s de
aceptación o só lo estad os d e no aceptación, y a q ue em p ezam os separand o esa s dos
clases d e esta d o s, y e l procedim iento d e la figura 3.64 siem p re form a nuevos gru­
p os q u e so n su bgrup os d e los gru p os q ue se construyeron p reviam ente.
(c) D ejar q u e s s e a el representante d e algún gru p o G d e IIfinai, y dejar q u e la transición
d e D , d esd e s co n la en trad a a, s e a h acia e l esta d o t. D ejar q ue r s e a e l representan­
te d el gru p o H d e t. D espués en D \ h ay u na transición d esd e s h acia r c o n l a en trad a a.
O bserve q ue en D , ca d a esta d o en e l gru p o G d eb e ir h acia algún esta d o d el gru p o H
co n la en tra d a a, o d e lo con trario, e l grupo G s e hubiera d iv id id o d e acuerdo a la
figura 3.64.
E j e m p lo 3 .4 0 : V am os a reconsiderar e l A F D d e la figura 3.36. La p artición inicial co n siste
e n los d o s gru p os { A , B , C, D } { E } q ue son , resp ectivam en te, los esta d o s d e no aceptación y los
esta d o s d e aceptación. P ara construir IInueva, el procedim iento d e la figura 3.64 co n sid era am­
b os gru p os y recib e com o en trad a a y 6. E l gru p o { E } no p uede d ivid irse, y a q u e só lo tien e un
e sta d o , p or lo cu a l { E } perm anecerá in tacto en n raieVaE l o tro grupo { A , ¿?, C, D } p u ed e dividirse, p or lo q ue d eb em o s considerar e l e fecto d e ca d a
sím b olo d e en trad a. C on la en trad a a, ca d a u no d e esto s esta d o s p a sa a l esta d o B , por lo q u e no
hay form a d e diferenciarlos m ediante cad en as q ue em p iecen con a. C on la en trad a 6, los estad os
A , B y C pasan a los m iem bros d el gru p o { A , B , C, D } , m ientras q u e e l esta d o D p a sa a 2?, un
m iem bro d e otro grupo. Por en d e, en IInueva, e l grupo { A , B , C, D } se d iv id e e n { A , B , C } { D } , y
n nUeva para e s ta ronda es { A , B , C } { D } { E } .
184
Capítulo 3. Análisis léxico
En la sigu ien te ronda, p od em os divid ir a { A , B , C } en { A , C } { B } , y a q ue ca d a u no d e los
esta d os A y C p asan a un m iem bro d e { A , B , C } con la en trad a 6, m ientras q ue B p asa a un
m iem bro d e o tro gru p o, { D }. A sí, desp ués d e la seg u n d a iteración, llueva = { A , C } { B } { D } { E } .
P ara la tercera iteración , n o p od em os divid ir el único gru p o restan te co n m ás d e un estad o,
y a q u e A y C van a l m ism o esta d o (y, p or lo tan to , al m ism o gru p o) co n c a d a entrada. C onclui­
m os q ue nfinaj = { A , C } { B } { D } { E } .
A hora vam os a construir e l A F D con e l m ínim o núm ero d e esta d o s. T ien e cu a tro estad os,
los cu ales corresponden a los cu atro gru p os d e Ilfinai, y vam os a elegir a A , B , D y E com o los
representantes d e esto s grupos. E l esta d o inicial e s A y e l único esta d o a cep ta n te e s E . L a figura
3.65 m u estra la función de transición para el A F D . P or ejem p lo, la tran sición d esd e e l e sta d o E
con la en tra d a b es h acia A , y a q ue e n el A F D original, E p a sa a C con la en trad a 6, y A es el
representante del gru p o d e C. P or la m ism a razón, la tran sición co n b d esd e e l e sta d o A p a sa al
m ism o esta d o A , m ientras q ue to d a s las d em ás tran sicion es son com o e n la figura 3.36.
□
ESTADO
a
b
A
B
A
B
B
D
D
B
E
E
B
A
F igu ra 3.65: T ab la d e tran sición d e un A F D co n e l m ínim o núm ero d e esta d o s
3.9.7
M in im izació n de esta d o s en los a n a lizad o res léxico s
P ara aplicar el p rocedim ien to d e m inim ización d e esta d o s a los A F D s generados en la sección
3.8.3, d eb em os em pezar el A lgoritm o 3.39 co n la partición q ue agrupa en con ju n to a to d o s los
esta d os q ue reconocen a un token esp ecífico, y q ue tam b ién c o lo c a e n un gru p o a to d o s los esta ­
d os q ue n o in dican n ingú n token. P ara hacer m ás claro esto , vam os a ver u n ejem plo.
E j e m p lo 3 .4 1 : Para e l A F D d e la figura 3.54, la partición in icial es:
{0137, 7 } { 2 4 7 } { 8 , 5 8 } { 7 } { 6 8 } { 0 }
Es decir, los esta d o s 0137 y 7 d eb en estar ju n tos, y a q u e ninguno d e ello s an un cia un token.
Los esta d o s 8 y 58 d eb en estar ju n to s, y a q ue am bos anuncian el tok en a * b + . O bserve q ue
hem os agregado un esta d o m uerto 0, el cu a l su p on em os tien e tran siciones h a cia s í m ism o con
las en trad as a y 6. E l e sta d o m uerto tam b ién es e l d estin o d e las tran sicion es faltan tes co n a
d esd e los esta d o s 8, 58 y 68.
D eb em os separar a 0137 d e 7, y a q ue p asan a d istin to s gru p os con la en trad a a. Tam bién
separam os a 8 d e 58, y a q ue pasan a d istin to s gru p os co n b. P or en d e, to d o s los esta d o s se
en cu en tran en gru p os por s í solos, y la figura 3.54 es e l A F D con e l m ínim o núm ero d e estad os
q ue recon oce a su s tres tok en s. R ecuerde q ue un A F D q ue sirv e com o analizador léxico, p or lo
general, elim in a e l esta d o m uerto, m ientras q ue tra ta m o s a las tran siciones fa lta n tes com o una
señ a l para finalizar e l recon ocim iento d e tokens.
□
3.9
Optimización d e los buscadores p o r concordancia d e patrones basados en AFD
3.9.8
185
In terca m b io de tiem p o p o r espacio en la sim u lación
de u n A F D
L a m anera m ás sim p le y ráp id a d e representar la función d e transición d e un A F D es u n a ta b la
b idim ensional in d exad a p or esta d o s y caracteres. D a d o u n esta d o y el sig u ien te carácter de
en trad a, acced em os a l arreglo para encontrar el sig u ien te e sta d o y cualquier acción e sp ecia l que
d eb em os tomar; p o r ejem plo, devolver un token al analizador sin tá ctico . C om o un analizador
léxico ordinario tien e varios cien tos d e estad o s en su A F D e involucra al alfabeto A SC II d e 128
caracteres d e en trad a, e l arreglo con su m e m enos d e un m egabyte.
N o ob sta n te, los com piladores tam b ién aparecen en d isp o sitiv o s m uy p eq ueños, en donde
h a sta un m egab yte d e m em oria p od ría ser d em asiad o. P a ra ta les situ a cio n es, ex iste n m uchos
m éto d o s q ue p o d e m o s usar para com p actar la ta b la d e transición. Por ejem plo, p o d em o s re­
presentar ca d a esta d o m ed ian te una lis ta d e tran siciones (es decir, pares carácter-estado) que
s e term in en m ediante un esta d o predeterm inado, el cu a l d eb e elegirse para cualquier carácter
d e en trad a q ue no se en cu en tre en la lista . Si elegim os com o predeterm inado e l sig u ien te esta ­
d o q u e ocu rra con m ás frecuencia, a m enudo p od em os reducir la cantidad d e alm acenam iento
necesario por un factor extenso.
Hay u na estructu ra d e d atos m ás su til q ue n os perm ite com binar la velocidad d el acceso a los
arreglos con la com presión d e listas con valores predeterm inados. P odem os considerar e s ta es­
tructura com o cuatro arreglos, según lo sugerido en la figura 3.66.5 El arreglo base se u tiliza para
determ inar la ubicación base d e las entradas para e l estad o s, q ue se encuentran en los arreglos si­
g u ien te y com probacion El arreglo predeterm in a d o se u tiliza para determ inar u na ubicación base
alternativa, si el arreglo com probacion n os indica q ue e l q ue proporciona base[s] es inválido.
p re d e te r ­
m in a d o
sig u ie n te
b a se
/
c o m p ro b a c ió n
y
F igu ra 3.66: E stru ctu ra d e d a to s para representar tab las d e transición
P ara calcu lar sig u ie n te E sta d o (s, a ), la transición p a ra e l e sta d o s con la en tra d a a, exam ina­
m os las en trad as sig u ien te y com probacion en la ubicación l = b a se[s]+ a , en d on d e e l carácter
a s e tra ta com o entero, su p u estam en te en e l rango d e 0 a 127. Si com probacion[l) = 5, entonces
5 En la práctica^ habría otro arreglo indexado p o r estados, p ara proporcionar la acción asociada con ese estado,
si lo hay.
186
Capítulo 3. Análisis léxico
e s ta en trad a es válid a y el sigu ien te esta d o para e l esta d o 5 con la en trad a a e s sig u ien te[l\. Si
com probacion[l\ * s , en ton ces d eterm in am os o tro esta d o t — predeterm in ado[s] y rep etim o s el
proceso, com o si t fuera e l esta d o actu al. D e m anera m ás form al, la fun ción sig u ien teE sta d o se
d efine así:
in t sig u ie n te E sta d o (s, a) {
i f ( com probacion[base[s]+a] = s ) r e t u r n s¿guiente[base[s] + a];
e l s e r e t u r n sigu ien teE stado(p red eterm in a d o [s], a);
}
El u so q ue s e p retende d e la estru ctu ra d e la figura 3.66 e s acortar los arreglos sigu ien ­
te-com probacion, aprovechando las sim ilitu d es en tre los esta d o s. Por ejem p lo, e l esta d o ¿, el
predeterm inado para el esta d o s, p od ría ser el esta d o q u e d ice “esta m o s trab ajan do con un
identificador” , al igual q ue e l esta d o 10 en la figura 3.14. T al vez se en tre al e sta d o 5 desp ués
d e v er las letras th , q ue son un prefijo d e la p alabra cla v e t h e n , a sí com o tam b ién p odrían ser
e l prefijo d e algún lexem a para un identificador. C on e l carácter d e en trad a e , d eb em o s pasar
d el estad o s a u n e sta d o esp ecial q u e recuerde q ue hem os v is to t h e , pero en caso con trario, el
esta d o 5 se co m p o rta d e igual form a q ue t. Por en d e, a comprobacion[base[s] + e ] le asignam os
s (para confirm ar q ue e s ta en trad a es válid a para s ) y a siguiente[base[s]+Q \ le asign am os el
esta d o q u e recuerda a t h e . A dem ás, a p re d e te rm in a d o [5] se le a sig n a t.
A unque tal vez no p od am os elegir los valores d e base d e form a q ue no h a y a entradas en
sigu ien te-com probacion sin utilizar, la exp erien cia h a dem ostrado q ue la e str a te g ia sim p le d e
asignar valores base a los esta d o s en tu m o , y asignar a c a d a valor d e base[s] e l en tero m ás bajo,
d e m anera q ue las entradas esp eciales p ara el e sta d o 5 n o esté n y a o cu p a d a s, u tiliza un p o co
m ás d e espacio q ue e l m ínim o posible.
3.9.9
E je rcicio s p a ra la sección 3.9
E j e r c ic io 3 .9 .1 : E x tie n d a la ta b la d e la figura 3.58 para q ue in clu ya los operadores (a) ? y
(b) +.
E j e r c ic io 3 .9 .2 : U se e l A lgoritm o 3.36 para convertir las exp resion es regulares d e l ejercicio
3.7 .3 d irectam en te en au tóm atas fin itos d eterm in istas.
! E j e r c ic io 3 .9 .3 : P od em os dem ostrar q ue d os exp resion es regulares so n eq u ivalen tes s i m ostra­
m os que su s A F D s co n e l m ínim o núm ero d e esta d o s so n los m ism os si se ca m b ia e l nom bre a
los estad os. D em uestre d e e s ta form a q ue las sigu ien tes exp resion es regulares: ( a |b ) * , (a * |b * )*
y ( (e |a ) b * ) * so n tod as eq u ivalen tes. N o ta : T al vez h a y a con stru id o los A F D s para e s ta s expre­
siones, al responder al ejercicio 3.7.3.
! E j e r c ic io 3 .9 .4 : C onstruya los A F D s co n el m ínim o núm ero d e esta d o s para las sigu ientes
exp resion es regulares:
a) ( a |b ) * a ( a |b ) .
b) ( a |b ) * a ( a |b ) ( a |b ) .
c) ( a |b ) * a ( a |b ) ( a |b ) ( a |b ) .
3.10 Resumen d el capítulo 3
187
¿P u ed e ver u n patrón?
E j e r c ic io 3 .9 .5 : P ara hacer u so form al d e la afirm ación inform al d e l ejem p lo 3.25, m uestre
q u e cualquier a u tó m a ta fin ito d eterm in ista para la sig u ien te exp resión regular:
( a |b ) * a ( a |b ) ( a |b ) - ( a |b )
e n d on d e ( a |b ) aparece n — 1 veces al final, d eb e tener por lo m enos 2n esta d o s. Sugerencia:
O bserve e l p atrón en e l ejercicio 3.9.4. ¿Q ué co n d ició n co n relación al h istorial d e entradas
representa ca d a estad o?
3 .10
R e su m e n d e l c a p ítu lo 3
♦ Tbkens. E l analizador léxico ex p lo ra e l program a fuente y produce com o sa lid a u n a se­
cu en cia d e tokens, los cuales, p or lo general, se pasan a l analizador sin tá ctico , u no a la
vez. A lgu n os tokens pueden con sistir sólo d e un nom bre d e token, m ientras q ue otros
tam bién pueden tener u n valor léxico asociado, e l cu a l p rop orcion a inform ación acera de
la in stan cia esp ecífica d e l token q ue se h a en con trad o en la entrada.
♦ L exem as. C ad a vez q ue e l analizador léxico d ev u elv e un token al analizador sin tá cti­
co, tiene un lexem a asociado: la secu en cia d e caracteres d e en tra d a q ue representa el
token.
♦
Uso de búferes. C om o a m enudo es necesario explorar por ad elan tad o sobre la entrada,
para p od er ver en dónde term in a e l sigu ien te lexem a, es necesario q ue e l analizador léxico
u tilice búferes en la entrada. E l u so d e un par d e búferes en form a cíclica y la term ina­
ción d e l con ten ido d e cad a búfer con u n cen tin ela q ue avise al llegar a su fin a l, so n dos
técnicas q ue aceleran e l p roceso d e esca n eo d e la entrada.
♦ P a tro n es. C ad a token tien e un p atrón q u e d escrib e cu áles son las secu en cias d e ca r a cte­
res q u e p ueden form ar los lexem as correspondientes a e se token. A l con ju n to d e palabras,
o cad en as d e caracteres, q ue coinciden co n u n p atrón d a d o se le co n o ce com o lenguaje.
♦ E xpresion es regulares. E sta s exp resion es se u tiliza n con frecuencia para describir los
patrones. Las exp resion es regulares s e crean a partir d e caracteres individuales, m ediante
el operador d e unión, d e con caten ación y el cierre d e K leene, o el operador “cualquier
núm ero d e ”.
♦ D efin icio n es regulares. L as coleccion es com p lejas d e lenguajes, com o los patrones q ue d es­
criben a los tokens d e un lengu aje d e program ación, s e d efinen a m enudo m ed ian te una
definición regular, l a cu a l es u n a secu en cia d e in stru cciones, en la s q ue ca d a u n a d e ellas d e ­
fine a u na variable q ue representa a cierta exp resión regular. L a exp resión regular para
u na variab le p u ed e u tiliza r las variables d efin id a s co n anterioridad en s u exp resión
regular.
♦ N o ta ció n d e ex presión regu lar exten d id a . P u ed e aparecer u n a variedad d e operadores
adicionales com o abreviaciones en las exp resion es regulares, para facilitar la acción de
expresar los patrones. A lgu nos ejem plos incluyen e l operador + (uno o m ás d e ), ? (cero
188
Capítulo 3. Análisis léxico
o uno d e ), y las cla ses d e caracteres (la unión d e las cadenas, en d o n d e ca d a u n a co n siste
en uno d e los caracteres).
♦ D iagram as d e tra n sició n de esta d o s. A m enudo, e l co m p ortam ien to d e un analizador
léxico p uede describirse m ed ian te u n d iagram a d e transición d e esta d o s. E sto s diagram as
tien en esta d o s, ca d a uno d e los cu ales represen ta algo acerca d el h istorial d e lo s caracte­
res v isto s d urante e l escan eo actu al, en b u sca d e un lex em a q ue co in cid a con u no d e los
p osibles patrones. H ay flechas, o transiciones, d e u n e sta d o a o tro , c a d a u n a d e la s cu ales
indica los p osib les sigu ien tes caracteres d e entrada, q ue p ueden hacer q ue el analizador
léxico realice ese cam b io d e estad o.
♦ A u tó m a ta s fin ito s. Son u n a form alización d e los d iagram as d e tra n sició n d e esta d o s, los
cu ales incluyen u n a d esign ación d e un estad o inicial y u no o m ás esta d o s d e aceptación,
así com o el con ju n to d e estad os, caracteres d e en trad a y tran siciones en tre los estad os.
Los estad os acep tan tes in dican q ue se h a en con trad o el lex em a para cierto token. A d i­
ferencia d e los diagram as d e tran sición d e esta d o s, los au tó m a ta s fin ito s pueden realizar
tran siciones sob re u n a en trad a vacía, a sí co m o sobre los caracteres d e entrada.
♦ A u tó m a ta s fin ito s d e te rm in ista s. U n A F D e s un tip o esp ecia l d e a u tó m a ta fin ito , el cual
tien e exa cta m en te u n a transición sa lien te d e ca d a esta d o , para c a d a sím b olo d e entrada.
T am poco se p erm iten las tran sicion es sobre u n a en trad a vacía. E l A F D se p uede sim ular
con facilidad, adem ás d e q ue realiza u n a b u en a im plem en tación d e u n analizador léxico,
sim ilar a u n d iagram a d e transición.
♦ A u tó m a ta s fin ito s n o d e te rm in ista s. A los au tó m a ta s q ue n o son A F D s se le s con oce
com o n o d eterm in istas. A m enudo, los A F N s son m ás fáciles d e diseñar q ue los A F D s.
O tra p osible arquitectura para un analizador léxico es tabular to d o s los esta d o s en los
q ue pueden encontrarse los A F N s p ara cad a u no d e lo s p osibles patrones, a m ed id a q ue
exp loram os los caracteres d e entrada.
♦ C on versión en tre rep rese n ta cio n es d e p a tro n es. E s p o sib le convertir cualquier expresión
regular en un A F N d e u n ta m a ñ o aproxim ado, q ue reconozca el m ism o len gu aje q ue
define la exp resión regular. A dem ás, cualquier A F N p uede convertirse e n un A F D para
el m ism o p atrón, au nq ue en e l peor d e los ca so s (que n un ca se p resen ta en los lengu ajes
d e program ación com u n es), e l tam añ o d e l a u tó m a ta p uede crecer en form a exp on en cial.
Tam bién es p osible convertir cualquier a u tó m a ta fin ito no d eterm in ista o d eterm in ista en
u n a exp resión regular q ue d efin a el m ism o lengu aje recon ocido por el a u tó m a ta finito.
♦ Lex. H ay u n a fam ilia d e sistem a s d e softw are, incluyendo a L ex y F le x , q ue son genera­
dores d e analizadores léxicos. E l usuario esp ecifica los patrones para los tokens, usando
u n a n otación d e exp resion es regulares exten d id a s. L e x con vierte esta s exp resion es e n un
analizador léxico, el cu a l en esen cia e s u n a u tó m a ta fin ito d eterm in ista q ue reconoce
cu alq uiera d e los patrones.
♦ M in im iza ció n d e a u tó m a ta s fin ito s. P ara ca d a A F D , h ay un A F D co n e l m ínim o núm ero
de esta d o s q u e acep ta e l m ism o lenguaje. A dem ás, e l A F D con e l m ínim o núm ero d e
esta d o s para un lengu aje d ad o es ú nico, ex cep to por los nom bres q ue se d a a los diver­
sos estad os.
3.11
Referencias para el capítulo 3
3.11
189
R e fe re n c ia s p a r a el c a p ítu lo 3
E n la d écad a d e 1950, K leen e desarrolló p or prim era v ez las exp resion es regulares [9]. K leene
e s ta b a interesado e n describir los even tos q ue p odrían representarse p or el m o d elo d e au tóm a­
ta s finitos d e actividad neuronal d e M cC ullough y P it ts [12]. D esd e en ton ces, la s expresiones
regulares y los a u tó m a ta s fin ito s s e han u tiliza d o e n g ra n m ed id a e n la c ie n c ia co m p u tacional.
D esd e e l com ienzo, se han usado las exp resion es regulares en d iversas form as en m uchas
herram ientas populares d e U nix, com o awk, ed , e g r e p , g r e p , l e x , s e d , s h y v i . Los docu­
m en tos d e los están dares IE E E 1003 e IS O /IE C 9945 para la Interfaz d e sistem a s op erativos
p ortables (P O S IX ) definen las exp resion es regulares ex ten d id a s d e P O S IX , q ue so n sim ilares a
las exp resion es regulares originales d e U n ix , co n algu nas ex cep cio n es co m o la s representaciones
d e nem ónicos para las clases d e caracteres. M uchos lengu ajes d e secu en cias d e com an dos com o
P erl, P y th o n y T c l han ad optado las exp resion es regulares, pero a m enudo con exten sion es
in com patib les.
El conocido m odelo d e a u tóm ata finito y la m inim ización d e au tóm atas finitos, com o se vieron
en e l A lgoritm o 3.39, provienen de Huffm an [6] y M oore [14]. R abin y S co tt [15] propusieron por
prim era vez los au tóm atas finitos no determ inistas; la construcción d e subconjuntos d el Algorit­
m o 3.20, q ue m uestran la equivalencia d e los au tóm atas finitos determ inistas y no determ inistas,
provienen d e ahí.
M cN aughton y Y am ad a [13] fueron los prim eros en proporcionar un algoritm o p a ra conver­
tir las exp resion es regulares d e m anera d irecta en a u tó m a ta s fin itos d eterm in ista s. A h o utilizó
por prim era vez e l algoritm o 3.36 d escrito en la secció n 3 .9 para crear la herram ienta para
relacionar exp resion es regulares, co n o cid a com o e g r e p . E s te algoritm o tam bién s e u tilizó en
las rutinas para relacionar patrones d e exp resion es regulares en awk [3]. E l m éto d o d e utilizar
au tó m a ta s n o d eterm in istas com o interm ediarios se d eb e a T h om p son [17]. E ste ú ltim o artículo
tam b ién con tien e e l algoritm o p ara la sim u lación d irecta d e au tó m a ta s fin ito s no determ in istas
(A lgoritm o 3.22), q u e T h o m p so n u tilizó en el ed ito r d e tex to QED.
Lesk desarrolló la prim era versión d e Lex; d esp u és Lesk y S ch m id t crearon u n a seg u n d a ver­
sión , u tilizan d o el A lgoritm o 3.36 [10]. D esp u és d e ello, s e han im plem en tad o m uchas variantes
d e Lex. L a versión d e G N U llam ad a F le x p uede descargarse, ju n to co n s u d ocu m en tación , en [4].
Las versiones populares d e Lex en J ava incluyen a J F le x [7] y JL ex [8].
E l algoritm o d e KM P, q ue describim os en lo s ejercicios p a ra la secció n 3.4, ju sto an tes del
ejercicio 3.4 .3 , es d e [11]. Su generalización para m uchas palabras cla v e aparece en [2]; A ho lo
u tilizó en la prim era im plem en tación d e la herram ienta f g r e p d e U nix.
L a teoría d e los au tóm atas finitos y las exp resion es regulares s e cu b re e n [5]. E n [1] h ay una
en cu esta d e técnicas para relacionar cadenas.
1. A ho, A . V ., “A lgorithm s for finding p atterns in strin gs” , en Handbook o f T heoretical
C om pu ter S cience (J. van Leeuwen, e d .), V ol. A , C ap. 5, M IT P ress, C am bridge, 1990.
2. A ho, A . V . y M . J. Corasick, “E fficien t strin g m atching: a n aid to b ibliograp hic search” ,
C om m . A C M 18:6 (1975), pp. 333-340.
3. A ho, A . V ., B . W . K em igh am y P. J. W einberger, The A W K P rogram m in g L anguage,
A ddison-W esley, B osto n , M A , 1988.
190
Capítulo 3. Análisis léxico
4. P á g in a inicial d e F le x , h t t p : //w w w . g n u . o r g / s o f t w a r e / f l e x / , F undación d e softw are
libre.
5. H opcroft, J. E ., R . M otw ani y J. D . U llm an, In tro d u ctio n to A u to m a ta T heory, L angu a­
ges a n d C o m p u ta tio n , A ddison-W esley, B o sto n M A , 2006.
6 . H uffm an, D . A ., “T h e sy n th esis o f sequ en tial m achines” , J. F ranklin In st. 2 5 7 (1954),
pp. 3-4, 161, 190, 275-303.
7. P á g in a in icial d e J F le x , h t t p : / / j f l e x . d e / .
8 . h t t p : / /www. c s . p r i n c e t o n . e d u /~ a p p e l/m o d e r n /j a v a /J L e x .
9. K leene, S. C ., “R ep resen tation o f events in nerve n ets” , en [16], pp. 3-40.
10. Lesk, M . E ., “L ex - a lexical analyzer generator” , C om p u tin g Science T ech. R ep orte
39, B ell L aboratories, M urray Hill, N J, 1975. U n d ocu m ento sim ilar co n e l m ism o nom ­
bre d e l títu lo , pero co n E . S chm idt com o coau tor, aparece en el volu m en 2 d e Unix
P rogram m er's M anual, B ell L aboratories, M urray Hill N J , 1975; v e a h t t p : / / d i n o ­
s a u r . c o m p i l e r t o o l s . n e t / l e x / i n d e x . h tm l.
11. K nuth, D . E ., J. H. M orris y V . R . P ratt, “F a st p a tte m m atchin g in strin g s” , S IA M J.
C o m p u tin g 6:2 (1977), pp. 323-350.
12. M cC ullough, W . S. y W . P itts , “A logical ca lcu lu s o f th e ideas im m an en t in nervous
a c tiv ity ” , B ull. M ath . B io p h y sic s 5 (1943), pp. 115-133.
13. M cN aughton, R . y H. Y am ada, “R egular exp ression s and s ta te grap h s for a u to m a ta ” ,
IR E Trans, on E lectro n ic C om p u ters E C -9 :1 (1960), pp. 38-47.
14. M oore, E . F ., “G edanken exp erim en ts o n seq u en tia l m achines” , e n [16], pp. 129-153.
15. R abin, M . O . y D . S co tt, “F in ite a u to m a ta and their d ecision problem s” , IB M J. R e s.
an d D ev el. 3:2 (1959), pp. 114-125.
16. Shan non , C. y J. M cC arthy (e d s.), A u to m a ta S tu d ie s, P rinceton U niv. P ress, 1956.
17. T h om pson , K ., “R egular exp ression search algorithm ” , C om m . A C M 1 1 :6 (1 9 6 8 ), pp.
419-422.
C a p ít u lo 4
Análisis sintáctico
E ste cap ítulo e s tá dedicado a los m étodos d e análisis sin táctico q ue se utilizan, por lo general, en los
com piladores. Primero presentarem os los conceptos básicos, después las técnicas adecuadas para
la im plem entación m anual y, p or últim o, los algoritm os q ue se han utilizado en las herram ientas
autom atizadas. D ebido a q ue los programas pueden contener errores sintácticos, hablarem os sobre
las extension es d e los m étodos d e análisis sintáctico para recuperarse d e los errores com unes.
P or diseño, cad a lengu aje d e program ación tien e reglas precisas, las cu a les prescriben la
estru ctu ra sin tá ctica d e los program as bien form ados. P or ejem p lo , e n C un program a está
com p u esto d e funciones, u na fun ción d e declaraciones e in stru cciones, u n a in stru cción d e expre­
sion es, y así su cesivam en te. L a sin ta x is d e las con stru cciones d e u n lengu aje d e program ación
p u ed e especificarse m ed ian te gram áticas libres d e co n tex to o la notación B N F (Form a d e Backus-N aur), q ue s e presentó en la sección 2.2. Las g ra m áticas ofrecen beneficios considerables,
ta n to p ara los diseñ adores d e lengu ajes com o para los escritores d e com piladores.
• U na g ra m á tica proporciona u n a especificación sin tá ctica precisa, pero fácil d e entender,
d e un lengu aje d e program ación.
• A partir d e cierta s clases d e gram áticas, p o d em o s construir d e m anera a u to m á tica un
analizador sin tá ctico eficien te q u e d eterm in e la estru ctu ra sin tá ctica d e un program a
fuente. C om o b en eficio colateral, e l proceso d e con stru cción d e l analizador sin tá ctico pue­
d e revelar am bigüedades sin tá ctica s y p u n to s p roblem áticos q ue p odrían h aberse pasado
por alto d urante la fase inicial d el diseño d el lenguaje.
• L a estru ctu ra im p artid a a un lengu aje m ediante u n a g ra m á tica d iseñ a d a en form a apro­
p iad a e s ú til para traducir los program as fuente e n có d ig o o b je to correcto, y para d etectar
errores.
• U na gram ática perm ite que un lenguaje evolucione o se desarrolle en forma iterativa, agregando
nuevas construcciones para realizar nuevas tareas. Estas nuevas construcciones pueden inte­
grarse con más facilidad en una implementación que siga la estructura gram átical del lenguaje.
191
192
4.1
Capítulo 4. A nálisis sintáctico
In tro d u c c ió n
En e s ta sección, exam in arem os la form a en q u e el analizador sin tá ctico se a co m o d a en un
com pilador ordinario. D esp ués analizarem os las gram áticas com unes para las exp resion es arit­
m éticas. Las gram áticas para las exp resion es so n su ficientes para ilustrar la esen cia d e l análisis
sin tá ctico, y a q ue d ich as técnicas d e análisis para las exp resion es se transfieren a la m ayoría d e
las con stru cciones d e program ación. E s ta sección term in a c o n u n a exp licación sob re e l m anejo
d e errores, y a q ue el analizador sin tá ctico d eb e responder d e m anera ad ecu ad a para descubrir
q ue s u en trad a no p uede ser generada por s u gram ática.
4 .1 .1
L a f u n c ió n d e l a n a liz a d o r s in tá c tic o
En nuestro m odelo d e com pilador, e l analizador sin tá ctico o b tie n e u n a ca d en a d e tokens d el
analizador léxico, com o s e m uestra en la figura 4 .1 , y verifica q ue la ca d en a d e nom bres d e los
tokens p u ed a generarse m ed ian te la gram ática p ara e l lengu aje fuente. E speram os q ue el anali­
zador sin tá ctico reporte cualquier error sin tá ctico en form a in teligible y q ue se recupere d e los
errores q ue ocu rren co n frecuencia para segu ir procesando el resto d e l program a. D e m anera
con ceptu al, para los program as b ien form ados, e l analizador sin tá ctico co n stru y e un árbol d e
análisis sin táctico y lo pasa al resto d el com pilador para q ue lo sig a procesando. D e hecho, e l árbol
d e análisis sin táctico no n ecesita construirse en forma exp lícita, y a q ue las acciones d e com pro­
bación y traducción pueden intercalarse co n e l análisis sintáctico, com o verem os m ás adelante.
Por ende, el analizador sin táctico y e l resto d e la interfaz d e usuario podrían im plem entarse sin
problem as m ediante un solo m ódulo.
F igu ra 4.1: P osición d e l analizador sin tá ctico e n e l m odelo d e l com pilador
E xisten tres tip os generales d e analizadores para las gram áticas: universales, d escen dentes y
ascendentes. Los m étod os universales d e análisis sin tá ctico com o e l algoritm o d e Cocke-YoungerK asam i y e l algoritm o d e E arley pueden analizar cualquier g ra m á tica (v ea la s n otas bibliográ­
ficas). S in em b argo, esto s m étod os generales so n d em asiad o in eficien tes com o para usarse en la
producción d e com piladores.
Los m étodos q ue s e utilizan, por lo regular, en los com piladores pueden clasificarse com o
descendentes o ascendentes. Según su s nombres, los m étod os descendentes construyen árboles d e
análisis sin táctico d e la p arte superior (raíz) a la parte inferior (hojas), m ientras q ue los m étodos
ascendentes em piezan d e las h ojas y avanzan hasta la raíz. En cualquier caso, la en trad a al anali­
zador se exp lora d e izquierda a derecha, un sím b olo a la vez.
4.1
In trod ucción
193
Los m éto d o s d escen d en tes y ascen dentes m ás eficien tes só lo funcionan para su b cla ses de
gram áticas, pero varias d e esta s clases, e n esp ecia l las gram áticas LL y LR , so n lo bastan te
exp resivas com o p ara describir la m ayoría d e las con stru ccion es sin tá ctica s en los lenguajes
d e program ación m odernos. L os analizadores sin tá ctico s q ue se im plem entan en form a m anual
u tilizan co n frecuencia gram áticas LL; p or ejem plo, e l m éto d o d e análisis sin tá ctico predictivo
d e la se cc ió n 2.4.2 fu n cion a p ara las gram áticas LL. Los analizadores para la cla se m á s ex te n ­
s a d e gram áticas L R , por lo general, se con stru yen m ed ia n te herram ientas a u tom atizad as.
E n e s te ca p ítu lo vam os a su pon er q u e la sa lid a d el analizador sin tá ctico es c ie r ta repre­
sen tación d e l árbol d e análisis sin tá ctico p a ra e l flujo d e tokens q ue proviene d e l analizador
léxico. E n la práctica, hay u na variedad d e tareas q ue p od rían realizarse d urante e l análisis
sin táctico, com o la recolección d e inform ación d e varios tokens para colocarla en la ta b la d e sím ­
b olos, la realización d e la com probación d e tip o s y otro s tip o s d e an álisis sem á n tico , a sí com o
la generación d e cód ig o interm edio. H em os agrupado to d a s es ta s a ctivid ad es en e l cuadro co n e l
títu lo “R esto d el front-end” d e la figura 4.1. E n lo s sig u ien tes ca p ítu lo s cubrirem os co n detalle
esta s actividades.
4 .1 .2
R e p r e s e n ta c ió n d e g r a m á t ic a s
A lgu n as d e las gram áticas q u e exam in arem os e n e s te ca p ítu lo s e p resen tan para facilitar la
representación d e gram áticas. Las con stru ccion es q ue em p iezan co n palabras clave com o w h i l e
o in t son m uy fáciles d e analizar, y a q ue la palabra cla v e g u ía la elecció n d e la producción
gram átical q u e d eb e aplicarse para hacer q ue co in cid a co n la en trad a. P or lo ta n to , n os concen­
trarem os e n las expresiones, q ue represen tan un reto d eb ido a la asociatividad y la precedencia
d e operadores.
L a a sociativid ad y la p reced en cia s e resuelvan en la sig u ien te gram ática, q u e e s sim ilar a
las q u e u tilizam os en e l cap ítu lo 2 para describir ex p resion es, térm inos y factores. E represen­
t a a las exp resion es q ue co n sisten en térm inos separados p or los sig n o s +, T representa a los
térm inos q u e co n sisten en factores separados por lo s sign os * , y F represen ta a lo s factores que
p ueden ser exp resion es en tre p arén tesis o identificadores:
E
T
F
-+ E + T \ T
-► T * F | F
- + ( E ) | id
(4.1)
L a gram ática para exp resion es (4.1) p ertenece a la cla se d e g ra m áticas L R q ue son adecuadas
para el an álisis sin táctico ascen dentes. E s ta g ra m á tica p u ed e ad aptarse para m anejar operadores adicionales y niveles adicionales d e precedencia. Sin em bargo, n o p uede usarse para el
an álisis sin táctico d escen d en te, y a q u e es recursiva por la izquierda.
L a sigu ien te varian te no recursiva por la izquierda d e la g ra m á tica d e exp resion es (4.1) se
u tilizará para el an álisis sin tá ctico descendente:
E
E'
T
t'
F
TE'
-+ + T E ' | e
-► F T '
-► f
|e
-►( E ) | id
* r
(4.2)
194
Capítulo 4. A nálisis sintáctico
La sigu ien te gram ática tra ta a los sig n o s + y * d e igual form a, d e m anera q ue sirve para ilus­
trar las técn icas para el m anejo d e am bigüedades d urante el an álisis sin táctico:
E
E + E \ E * E\ ( E) \ i d
(4.3)
A quí, E representa a las exp resion es d e tod o tipo. L a gra m á tica (4.3) p erm ite m ás d e un árbol
d e an álisis sin táctico para las exp resion es com o a + b * c.
4 .1 .3
M a n e jo d e lo s e r r o r e s s in tá c tic o s
El resto d e e s ta sección considera la n atu raleza d e los errores sin tá ctico s y las estra teg ia s g e­
nerales para recuperarse d e ellos. D o s d e esta s estra teg ia s, con ocidas com o recuperaciones en
m odo d e pánico y a nivel d e frase, se describirán co n m ás d eta lle ju n to co n los m étod os esp e­
cíficos d e an álisis sin táctico.
Si u n com p ilad or tu viera q u e procesar só lo program as correctos, s u d iseñ o e im plem entación se sim plificaría en form a considerable. N o ob sta n te, se esp era q u e un com p ilad or ayude al
program ador a localizar y rastrear los errores q ue, d e m anera in evitab le, s e infiltran en los pro­
gram as, a pesar d e los m ejores esfuerzos d el program ador. A un qu e parezca increíble, son p o co s
los lengu ajes q ue s e d iseñ an ten ien d o en m en te e l m anejo d e errores, au n cu a n d o ésto s so n tan
com unes. N u estra civilización sería radicalm ente d istin ta si los lenguajes h ablados tuvieran
los m ism os requerim ientos en cu an to a precisión sin tá ctica q ue los lengu ajes d e com p utadora.
La m ayoría d e las especificacion es d e los lenguajes d e program ación no describen la form a en
q ue u n com pilador debe responder a los errores; e l m anejo d e los m ism os e s resp onsab ilidad
d el diseñador d el com pilador. L a p laneación d e l m anejo d e los errores d esd e el principio p u ed e
sim plificar la estru ctu ra d e un com p ilad or y m ejorar s u cap acidad para m anejar lo s errores.
Los errores d e program ación com unes pueden ocurrir e n m uchos niveles d istin tos.
• Los errores léxicos incluyen la escritu ra incorrecta d e los identificadores, las palabras
clave o los operadores; p o r ejem p lo, e l u so d e un identificador ta m a n io E lip c e en v e z d e
t a m a n io E lip s e , y la om isión d e com illas alrededor d e l tex to q u e se d eb e interpretar com o
u n a cadena.
• Los errores sin tácticos incluyen la colocación incorrecta d e los signos d e punto y com a, ade­
m ás d e llaves adicionales o faltantes; es d ecir,
o
C om o otro ejem plo, en C o Java,
la aparición d e u na instrucción c a s e sin u n a instrucción s w it c h q ue la encierre es un error
sintáctico (sin em bargo, por lo general, e s ta situación la acepta e l analizador sin táctico y se
atrap a m ás ad elan te en e l procesam iento, cu an do e l com pilador in te n ta generar código).
• Los errores sem ánticos incluyen los conflictos d e tipos entre los operadores y los operandos. U n
ejemplo es u na instrucción r e t u r n en un m étodo de Java, con el tipo de resultado v o id .
• Los errores lógicos p ueden ser cualquier cosa, d esd e un razonam iento incorrecto d e l pro­
gram ador en e l u so (en un program a en C) d e l operador d e asign ación =, e n vez d el
operador d e com paración ==. E l program a q u e co n ten g a = p uede esta r bien form ado; sin
em bargo, t a l v e z n o refleje la in tención d el program ador.
La precisión d e los m étod os d e an álisis sin tá ctico p erm ite d etecta r los errores sin tá ctico s con
m ucha eficien cia. Varios m étod os d e análisis sin tá ctico , com o lo s m étodos LL y L R , d etecta n
4.1
In trod ucción
195
u n error lo m ás pronto posible; es decir, cu a n d o e l flujo d e tokens q u e proviene d el analizador
léxico no p uede seguirse an alizan d o d e acuerdo con la g ra m á tica p a ra e l lengu aje. D ich o e n for­
m a m ás precisa, tien en la p ro p ied a d de p re fijo v ia b le , lo cu a l sig n ifica q ue d etecta n la ocurrencia
d e un error ta n pronto co m o ven un prefijo d e la en tra d a q ue no p uede com p letarse para formar
u n a cad en a vá lid a en el lenguaje.
O tra d e las razones para enfatizar la recuperación d e lo s errores d urante el an álisis sin tá cti­
c o es q u e m uchos errores parecen ser sin táctico s, s e a cu a l fuere su ca u sa , y se ex p o n en cu a n d o e l
an álisis sin táctico no p uede continuar. A lgunos errores sem án ticos, com o los co n flicto s entre los
tip os, tam bién pueden d etectarse con eficiencia; sin em bargo, la d etecció n precisa d e los errores
sem án ticos y lógicos en tiem p o d e com p ilación es, por lo general, u na tarea difícil.
E l m ango d e errores en un analizador sin tá ctico tien e o b je tiv o s q u e so n sim p les d e declarar,
pero d ifíciles d e llevar a cabo:
• R eportar la presencia d e errores con claridad y precisión.
• Recuperarse d e cad a error lo bastante rápido com o para poder detectar los errores siguientes.
• A gregar u na sob recarga m ín im a al procesam iento d e los program as correctos.
Por fortuna, los errores com u n es son sim p les, y a m enudo b a sta con un m ecan ism o sim ple
para su m anejo.
¿D e q ué m anera u n m ango d e errores d eb e reportar la p resen cia d e un error? C om o m íni­
m o, d eb e reportar e l lugar e n e l program a fuente e n d on d e se d e te c tó un error, y a q ue h ay una
b u en a probabilidad d e q u e é s te en s í haya ocurrido en uno d e los p o co s tokens anteriores. U na
estr a te g ia com ú n es im prim ir la lín ea d e l problem a co n u n apuntador a la p osición en la que
s e d e te c tó el error.
4 .1 .4
E s t r a t e g i a s p a r a r e c u p e r a r s e d e lo s e r r o r e s
U n a vez q u e s e d e te c ta un error, ¿cóm o d eb e recuperarse e l analizador sin táctico? A un qu e no
hay u n a estra teg ia q ue haya d em ostrad o ser aceptab le en form a universal, algu nos m étodos
p ueden aplicarse e n m uchas situ acion es. E l m éto d o m ás sim p le e s q u e e l analizador sin tá ctico
term in e con u n m en saje d e error inform ativo cu a n d o d etec te el prim er error. A m enudo se d es­
cu b ren errores adicionales si el analizador sin tá ctico p uede restaurarse a s í m ism o, a u n estad o
en el q ue p u ed a continuar el p rocesam ien to d e la entrada, co n esperanzas razonables d e q ue un
m ayor p rocesam ien to proporcione inform ación ú til para e l d iagn óstico. S i los errores s e apilan,
e s m ejor para el com p ilad or d esistir d esp u és d e exced er cierto lím ite d e errores, q u e producir
u n a m olesta avalancha d e errores “fa lso s”.
E l resto d e e s ta sección se d ed ica a las sig u ien tes estra teg ia s d e recuperación d e los errores:
m od o d e pánico, nivel d e frase, producciones d e errores y corrección global.
R ecuperación en m odo de pánico
C on este m étod o, al describir un error e l analizador sin tá ctico d esca rta los sím b olos d e entrada,
u no a la vez, h a sta encontrar u n con ju n to design ado d e tokens de sin cro n iza ció n . Por lo gene­
ral, los tokens d e sincronización so n delim itadores com o el punto y co m a o >, cu y a función en
196
Capítulo 4. A nálisis sintáctico
e l program a fuente es clara y sin am bigüedades. E l d iseñ ador d e l com pilador d eb e seleccionar
los tokens de sin cronización apropiados para el lengu aje fuente. A un qu e la corrección en m odo
d e p ánico a m en ud o o m ite u na can tid ad considerable d e en tra d a sin verificar errores adiciona­
les, tien e la ven taja d e ser sim p le y, a diferencia d e ciertos m étod os q ue considerarem os más
ad elan te, se g aran tiza q u e no en trará en u n ciclo infinito.
R ecuperación a nivel de frase
A l descubrir u n error, u n analizador sin tá ctico p uede realizar u na corrección lo ca l so b re la
en trad a restante; es decir, p uede su stitu ir u n prefijo d e la en trad a resta n te p or algu na ca d en a
q ue le p erm ita continuar. U n a corrección local com ú n es su stitu ir u na co m a por un punto y
com a, elim inar u n punto y co m a extrañ o o in sertar un p u n to y com a faltan te. L a elección d e la
corrección local s e d e ja al diseñador del com pilador. D esd e luego q ue d eb em os tener cu id a d o d e
elegir su stitu cio n es q ue no nos lleven h acia ciclos in fin ito s, com o sería, por ejem p lo, si siem pre
insertáram os algo en la en trad a ad elan te d el sím b olo d e en trad a actual.
La su stitu ción a nivel d e frase se h a u tilizad o en varios com piladores q ue reparan lo s erro­
res, y a que p uede corregir cualquier ca d en a d e en trad a. Su d esv en ta ja principal e s la d ificultad
q ue tien e p ara arreglárselas co n situ a cio n es e n la s q ue el error a ctu a l ocurre antes d e l p u n to
d e d etección .
Producciones d e errores
A l anticipar los errores com unes q ue p odríam os encontrar, p o d em o s aum entar la gra m á tica
para el len gu aje, co n producciones q ue gen eren la s con stru ccion es erróneas. U n analizador
sin tá ctico con stru id o a p artir d e u n a g ra m á tica au m en tad a por es ta s producciones d e errores
d etec ta los errores an ticip ados cu an do s e u tiliza u n a producción d e error d u ran te el análisis
sin táctico. A sí, e l analizador sin tá ctico p uede generar d iagnósticos d e error apropiados sobre la
con stru cción errón ea q u e se haya recon ocido en la entrada.
Corrección global
Lo ideal sería q ue u n com p ilad or hiciera la m enor ca n tid a d d e ca m b ios en e l p rocesam ien to
d e u na cad en a d e en trad a incorrecta. H ay algoritm os para elegir u n a secu en cia m ín im a d e
cam b ios, p ara o b ten er u n a corrección con e l m en or c o s to a nivel g lob al. D a d a u n a ca d en a
d e en tra d a in correcta x y u na g ra m á tica G, esto s algoritm os buscarán u n árbol d e an álisis
sin tá ctico para u na ca d en a y relacionad a, d e ta l form a q ue el núm ero d e inserciones, elim in a ­
cion es y m od ifica cio n es d e los tokens requeridos p a ra transform ar a £ e n y s e a lo m ás p equeño
posible. P or desgracia, esto s m éto d o s so n en gen eral d em asiad o co sto so s para im plem entar­
los en térm in os d e tiem p o y esp acio, por lo cu a l e s ta s técn ica s só lo so n d e in terés teó rico en
esto s m om entos.
H ay q ue observar q ue u n program a ca si correcto ta l v ez no s e a lo q ue e l program ador tem a
en m ente. S in em bargo, la noción d e la corrección con el m enor co sto prop orciona u na norm a
para evaluar las técn icas d e recuperación d e los errores, la cu a l se h a u tilizad o para buscar
cad en as d e su stitu ción ó p tim a s para la recuperación a nivel d e frase.
4.2
Gramáticas libres d e contexto
4.2
197
G ra m á tic a s lib re s d e c o n te x to
E n la sección 2.2 se presentaron las gram áticas p a ra describir en form a sis te m á tic a la sin ta x is
d e las con stru ccion es d e u n len gu aje d e program ación, com o las exp resion es y las instrucciones.
S i utilizam os u n a variable sin tá ctica in s tr para d en otar las instrucciones, y u n a variable ex p r
para d en otar las exp resion es, la sigu ien te producción:
in s tr
-►
i f ( ex p r ) in s tr e l s e in s tr
(4.4)
esp ecifica la estru ctu ra d e e s ta form a d e in stru cción condicional. E n ton ces, o tra s producciones
definen con precisión lo q ue es u na expr y q u é m ás puede ser u n a in str.
E n e s ta sección repasarem os la definición d e u na gra m á tica libre d e co n tex to y presentare­
m os la term in ología para hablar acerca d el an álisis sin tá ctico . E n esp ecia l, la noción d e deri­
vaciones es m uy ú til para hablar sobre e l orden en e l q u e se aplican la s producciones durante
e l an álisis sin táctico.
4 .2 .1
L a d e fin ic ió n f o r m a l d e u n a g r a m á t i c a lib r e d e c o n te x t o
E n la sección 2.2 vim os q ue u na gram ática libre d e co n tex to (o sim p lem en te g ra m ática) consis­
t e en term inales, no term inales, un sím b olo in icial y producciones.
1. Los term in a les son los sím b olos básicos a partir d e los cu ales se form an las cadenas. El
térm ino “nom bre d e tok en ” es u n sin ón im o d e “term in al” ; con frecuencia usarem os la
palabra “to k en ” en vez d e term inal, cu an do e s té claro q ue esta m o s h ablando só lo sobre
el nombre d e l token. A sum im os q u e las term inales so n los prim eros com p o n en tes d e los
tokens q ue produce e l analizador léxico. E n (4 .4 ), los term in ales son la s palabras reser­
vadas i f y e l s e , y los sím b olos “( ” y “) ”.
2. L os no te rm in a le s son variables sin tá ctica s q ue d en otan con jun tos de ca d en a s. E n (4.4),
in s tr y ex p r son no term inales. Los con jun tos d e cad en as d en o ta d o s por los no term inales
ayudan a definir el len gu aje generado por la gram ática. Los no term in ales im ponen una
estru ctu ra jerárq uica sobre e l lengu aje, q ue representa la clave p a ra e l análisis sin tá ctico
y la traducción.
3. E n una gram ática, un no term inal se d istin g u e com o el sím bolo in ic ia l, y e l con ju n to de
cad en as q ue d en o ta es e l lengu aje generado p or la gram ática. Por convención, las pro­
duccion es p ara e l sím b olo inicial s e listan primero.
4. L as producciones d e u n a gram ática especifican la form a en q u e p ueden com binarse los
term inales y los no term in ales para form ar cad en as. C a d a p rodu cción co n siste en:
(a) U n n o term inal, con ocid o com o encabezado o lado izq u ie rd o d e la producción; esta
producción d efin e algunas d e las cad en as d en o ta d a s por e l encabezado.
(b ) E l sím b olo
A lgu nas veces s e h a u tilizad o : := en vez d e la flecha.
(c) U n cu erpo o lado derecho, q ue co n siste e n cero o m ás term in ales y n o term in ales. Los
com p on en tes d e l cu erpo d escrib en u n a form a en q u e pueden con stru irse las cad en as
del no term inal en el en cab ezado.
198
Capítulo 4. A nálisis sintáctico
Ejemplo 4.5: L a gram ática en la figura 4 .2 d efine expresiones aritm éticas sim ples. En e s ta gra­
m ática, los sím b olos d e los term in ales son:
id + - * / ( )
Los sím b olos d e los no term in ales so n expresión , te rm y f a c to r , y expresión es el sím b olo ini­
cial.
□
expresión
expresión
expresión
term
te rm
te rm
f a c to r
f a c to r
—►
—►
—*
—>
—►
—>
—►
—►
expresidn + te rm
expresidn - term
te rm
te r m * fa c to r
te r m / f a c to r
f a c to r
( expresidn )
id
F igu ra 4.2: G ram ática para las exp resion es a ritm éticas sim ples
4 .2 .2
C o n v e n c io n e s d e n o ta c ió n
P ara ev ita r siem pre tener q ue decir q ue “ésto s so n los term in ales” , “és to s son los no term ina­
les” , etcétera, u tilizarem os las sigu ien tes con ven ciones d e n otación para las gram áticas d urante
e l resto d e este libro:
1. E stos sím b olos so n terminales:
(a) Las prim eras letras m inúsculas d el alfabeto, com o a, 6 , c.
(b) Los sím b olos d e operadores com o + , * , etcétera.
(c) Los sím b olos d e pun tu ación com o paréntesis, com a, etcétera.
(d) Los d ígitos 0, 1, . . . , 9.
(e) Las cad en as en n egrita com o
bolo term inal.
id
o
if,
ca d a u n a d e las cu ales representa un so lo sím ­
2. E sto s sím b olos so n no term inales:
(a) Las prim eras letras m ayúsculas d e l alfabeto, com o A , B , C.
(b) L a letra S q ue, al aparecer es, p or lo general, el sím b olo inicial.
(c) Los nom bres en cu rsiva y m inúsculas, co m o ex p r o in str.
(d) A l hablar sobre las con stru cciones d e program ación, las letras m ayúsculas pueden
utilizarse para representar no term inales. Por ejem plo, lo s no term inales para las
exp resion es, los térm inos y los factores s e representan a m enudo m ediante E , T y F,
respectivam ente.
4.2
Gramáticas libres d e contexto
199
3. Las ú ltim as letras m ayúsculas d e l alfa b eto , com o X , Y , Z , representan sím bolos g ra m a ti­
cales; es decir, p ueden ser n o term in ales o term inales.
4. Las ú ltim as letras m inúsculas d e l alfa b eto , com o u , v , ... , z, representan cad en as d e ter­
m inales (posiblem ente vacías).
5. Las letras griegas m inú sculas a , 0 , 7 , por ejem p lo , representan ca d en as (posiblem ente
vacías) d e sím b olos gram aticales. Por en d e, u n a producción g en érica p u ed e escribirse
com o A -► a , en d ond e A e s e l en cab ezad o y a e l cuerpo.
6 . U n conjunto d e producciones A -> a i , A - » a 2,
A -*■ a * con un en cab ezado com ún A
(las llam arem os p ro d u cc io n e s A ) , p u ed e escribirse co m o A ->■ a i | a 2 |
| a*. A a i,
a 2, . . . , o¿k les llam am os las a ltern a tiva s para A.
7. A m enos q ue s e indique lo contrario, e l en cab ezad o d e l a prim era producción es el sím ­
b olo inicial.
Ejemplo 4 .6 : M ediante esta s con ven ciones, la g ra m á tica d e l ejem p lo 4 .5 p u ed e rescribirse en
form a con cisa como:
E
T
->
E + T \ E - T \
T * F \ T / F \ F
F
->
( E ) | id
T
Las convenciones d e n otación nos indican q ue E, T y F son no term inales, y E e s el sím bolo
inicial. E l resto d e los sím b olos so n term inales.
□
4 .2 .3
D e r iv a c io n e s
L a con stru cción d e u n árbol d e an álisis sin tá ctico p u ed e hacerse p recisa si tom am os u n a v ista
d erivacion al, en la cu a l las producciones s e tra ta n com o reglas d e rescritura. E m p ezan d o con el
sím b olo inicial, ca d a p aso d e rescritura su stitu y e a u n no term inal por e l cuerpo d e u n a d e sus
producciones. E s ta v ista derivacion al corresp ond e a la con stru cción d escen d en te d e un árbol de
an álisis sin táctico, pero la precisión q ue ofrecen las derivacion es será m uy ú til cu a n d o hablem os
d el an álisis sin tá ctico ascendente. C om o verem os, e l an álisis sin tá ctico ascen dente s e relaciona
co n u n a c la se d e derivacion es con ocid as com o derivacion es d e “m á s a la derecha” , en d o n d e el
n o term in al p or la d erech a se rescribe en ca d a paso.
P or ejem p lo, considere la sigu ien te gram ática, con un so lo no term inal E , la cu a l agrega una
producción E -*■ — E a la gram ática (4.3):
E
-►
E + E \ E * E \ - E \ ( E )
\ id
(4.7)
L a producción E
— E significa q ue si E d en o ta una expresión, entonces - E d eb e tam bién
d en otar u na expresión. L a su stitu ció n d e u n a so la E por — E se describirá escribiendo lo si­
guiente:
E=> - E
200
Capítulo 4. A nálisis sintáctico
lo cu a l se lee com o “E d eriva a — E ”. L a producción E
( E ) p uede aplicarse p a ra su stitu ir
cualquier in stan cia d e E e n cualquier cad en a d e sím b olos gram aticales por (E ); p or ejem plo,
E * E => ( E ) * E o E * E => E * ( E ) . P od em os tom ar u n a s o la E y aplicar p rod uccion es e n for­
m a rep etid a y en cualquier ord en para ob ten er u na secu en cia d e su stitu cio n es. Por ejem plo,
E => —E => —( E ) => - ( i d )
A d ich a secu en cia d e su stitu cio n es la llam am os u na d eriva ció n d e - ( i d ) a partir d e E . E s ta
d erivación proporciona la p ru eb a d e q ue la ca d en a —( id ) es u n a in sta n cia esp ecífica d e u na
expresión.
Para u n a definición general d e la derivación, considere u n no term inal A en la m itad d e
u na secu en cia d e sím b olos gram aticales, com o en a A ¡3, en d on d e a y 0 so n ca d en a s arbitrarias
d e sím b olos gram aticales. Suponga q u e A - > 7 es una producción. E n ton ces, escribim os a A 0
=>■ 0 7 # E l sím b olo =>■ sign ifica, “s e deriva en un p a so ” . C uando u n a secu en cia d e pasos d e
d erivación a i =4* c*2 =>■
=>■ a „ se rescrib e com o a i a a n, d ecim os q ue a i d eriva a a n. Con
frecuencia es con ven ien te p od er decir, “d eriv a en cero o m ás p asos” . P ara este fin, p od em os
usar e l sím b olo => . A sí,
1. a ^
a , para cualquier cad en a a .
2. S i a ^ 0 y 0 => 7 , en to n ces a ^ 7 D e igual form a, i - sign ifica “deriva en uno o m ás p asos” .
Si S
a , en d on d e 5 es el sím b olo inicial d e u n a gra m á tica G, d ecim os q ue a e s u na fo rm a
de fra se d e G. O bserve q ue u na form a d e frase p uede co n ten er tan to term inales com o no term i­
nales, y puede estar vacía. U n e n u n á a d o d e G e s u n a form a d e frase sin sím b olos no term inales.
El lenguaje g en erado por u na gram ática es s u con ju n to d e oraciones. Por en d e, u n a ca d en a d e
term inales w e s tá e n L (G ) , el lengu aje generado p or G, si y só lo si tí? es un enunciado d e G
( o 5 ^ w ). U n len gu aje q u e p uede generarse m ed ian te u n a g ra m á tica se co n sid era u n lengua­
je Ubre de con texto. Si d os gram áticas gen eran el m ism o len g u a je, se consideran com o equiva­
lentes.
La cad en a - ( i d + id ) e s u n en u nciado d e la gra m á tica (4.7), y a q ue h ay u na derivación
E => —E = > —( E ) => - ( £ + E ) => - ( i d + E ) => - ( i d + id )
(4.8)
Las cad en as E , —E , - ( E ) , . . . , —( i d H- i d ) so n tod as form as d e frases d e e s ta gram ática. Escri­
bim os E => - ( i d + i d ) para indicar q u e —( i d 4- i d ) p uede derivarse d e E.
E n cada paso d e u na derivación, h ay d os elecciones por hacer. D ebem os elegir q u é no term inal
d ebem os su stitu ir, y habiendo realizado e s ta elección, d eb em os elegir u na producción con ese no
term inal com o encabezado. Por ejem plo, la siguiente derivación alternativa d e - ( i d + id ) difiere
d e la derivación (4.8) en los ú ltim os d os pasos:
E => —E => —( E ) => —(E + E ) => - ( E + id ) => - ( i d + id )
(4.9)
4.2
Gramáticas libres d e contexto
201
C ad a no term inal se su stitu y e por el m ism o cu erpo en las d o s d erivacion es, pero e l ord en de
las su stitu cio n e s es distinto.
P ara com prender la form a en q u e trab a ja n los analizadores sin tá ctico s, d eb em os conside­
rar las derivacion es e n las q ue el n o term inal q ue se v a a su stitu ir en ca d a p aso se elig e d e la
sigu ien te manera:
1. E n las d erivaciones p o r la izq u ie rd a , siem pre se elig e e l no term inal por la izquierda en
cad a d e frase. S i a =>■ 0 es un p aso en e l q ue s e su stitu y e e l no term in a l p or la izquierda
en a , escribim os a => 3.
lm
2. E n las derivacion es p o r la derecha, siem p re se elig e e l no term inal p o r la derecha; en este
caso escribim os a => ¡3.
rm
L a d erivación (4.8) es por la izquierda, por lo q ue p uede rescribirse d e la sigu ien te manera:
E
=>
hn
—E
=>
bn
—( E ) => —(E
bn
+
E)
=>
lm
- ( i d + £ )= * * - ( i d + id )
hn
O bserve q ue (4.9) es u na d erivación p or la derecha.
S i utilizam os n uestras con ven ciones d e n otación, ca d a p a so p or la izquierda p u ed e escribir­
s e com o wA'y => wxfy, en d o n d e w con siste só lo d e term inales, A ->■ S es la producción q ue se
aplica, y 7 es u n a cad en a d e sím b olos gram aticales. P ara en fatizar q u e a deriva a ¡3 m ediante
u na d erivación por la izquierda, escribim os a => fi. S i S => a , d ecim os q ue a es u n a fo rm a de
lm
hn
frase izqu ierda d e la g ra m á tica e n cu estión .
Las análogas d efin icion es son válid as para las derivacion es p or la derecha. A esta s deriva­
cio n es s e les co n o ce algu nas v ec es com o derivacion es canónicas.
4 .2 .4
Á r b o le s d e a n á lis is s in tá c tic o y d e r iv a c io n e s
U n árbol d e análisis sin tá ctico es u na representación gráfica d e u na d erivación q u e filtra el
orden en el q ue se ap lican las producciones para su stitu ir los no term inales. C a d a nodo interior
d e un árbol d e análisis sin táctico representa la aplicación d e u na producción. E l nodo interior se
etiq u e ta con el no term inal A en e l en cab ezad o d e la producción; los hijos d el nodo se etiq uetan ,
d e izquierda a derecha, m ediante los sím bolos e n el cuerpo d e la producción por la q ue s e su sti­
tu yó e s ta A d urante la derivación.
P or ejem p lo, el árbol d e an álisis sin tá ctico para —(id + id) en la figura 4 .3 re su lta d e la
d erivación (4.8), así com o d e la d erivación (4.9).
Las hojas d e un árbol d e análisis sin tá ctico s e etiq u e ta n m ed ian te n o term in ales o term i­
nales y, leídas d e izquierda a derecha, co n stitu y en u na form a d e frase, a la cu a l s e le llam a
prod u cto o fro n tera d el árbol.
P ara ver l a relación en tre las d erivaciones y los árboles d e an álisis sin tá ctico , considere cu al­
quier d erivación a i =>■ olq =>• • •• => a n, en d on d e a i es un só lo n o term inal A . P a ra c a d a form a
d e frase a¿ en la derivación, p od em os construir u n árbol d e an álisis sin tá ctico cu y o producto
s e a a¿. E l proceso e s u na inducción sobre i
B A SE : E l árbol para a i = A es un solo n o d o , etiq u eta d o com o A .
202
Capítulo 4. A nálisis sintáctico
y
E
E
(
E
E
+
id
\
)
\
E
id
F igu ra 4.3: Á rbol d e an álisis sin tá ctico para —( id + id )
IN D U C C IÓ N : Suponga q u e ya h em os con stru id o un árbol d e análisis sin tá ctico con e l pro­
d u c to
i = X iX 2 ---X k (ten g a en c u en ta que, d e acuerdo a n uestras convenciones d e notación,
ca d a sím b olo gram atical X i es u n no term inal o un term in al). S u p o n g a q ue a¿ se deriva d e a¿_i
al su stitu ir Xj, un n o term inal, p or 0 = Y i V2 ■ Ym. E s d ecir, e n e l ¿-ésimo paso d e la derivación,
la producción X j - > f i s e ap lica a
i p ara derivar a i = X iX 2 ■■■Xj-i¡3Xj+1
P ara m odelar e s te p aso d e la derivación, b uscam os la j-é sim a h oja, p artien do d e la izquierda
en e l árbol d e análisis sin táctico actual. E sta h o ja se etiq u e ta com o Xj. A e s ta h o ja le d am os m
hijos, etiq u etad os Yh Y2, . . . , Y m, partiendo d e la izquierda. C om o ca so especial, s i m = 0 en ton ­
ces ¡ 3 = €, y proporcionam os a la j-é sim a h oja un hijo etiq u eta d o com o e.
E j e m p lo 4 .1 0 : L a secu en cia d e árboles d e an álisis sin tá ctico q u e se con stru yen a partir d e la
d erivación (4.8) s e m uestra en la figura 4.4. E n e l prim er p aso d e la derivación, E => —E . P ara
m odelar e s te paso, se agregan d o s hijos, etiq u etad o s com o — y E, a la raíz E d el árbol inicial.
El resultado e s e l segu n d o árbol.
En el segu n d o p aso d e la d erivación, —E
—( E) . Por con sigu ien te, agregam os tres hijos,
etiq u etad os com o ( , E y ) , a l nodo h o ja etiq u eta d o com o E d el segu n d o árb ol, para ob ten er el
tercer árbol co n coséch ale p rod ucto —( E) . Si con tinu am os d e e s ta form a, o b ten em os e l árbol
d e an álisis sin táctico com p leto com o el se x to árbol.
□
C om o un árbol d e an álisis sin táctico ignora la s variacion es e n e l ord en en e l q ue se su sti­
tu y en los sím b olos en las form as d e las oraciones, h ay u n a relación d e varios a uno entre las
derivaciones y los árboles d e an álisis sin táctico. P or ejem plo, am bas derivaciones (4.8) y (4.9)
se asocian co n el m ism o árbol d e análisis sin tá ctico final d e la figura 4.4.
En lo q ue sigu e, realizarem os con frecuencia el an álisis sin tá ctico p roduciendo u n a deriva­
ción por la izquierda o p o r la derecha, y a q ue h ay u n a relación d e uno a uno en tre los árboles
d e análisis sin tá ctico y e s te tip o d e d erivaciones. T an to las derivacion es por la izquierda com o
las d e p or la derecha eligen un ord en específico para su stitu ir sím b olos en las form as d e las
oracion es, p or lo q ue tam b ién filtran las variacion es en orden. N o e s difícil m ostrar q ue tod os
los árboles sin tá ctico s tien en asociadas u n a d erivación ú n ica p o r la izquierda y u n a d erivación
ú n ica p or la derecha.
4.2
Gramáticas libres d e contexto
203
E
E
E
E
\E
/ \ \
(
=>
E
-
=>
/ \E
(
E
E
-
/w
zw
=s>
/ \E
E )
(
+ E
E
/\\
/w
E
)
E
/ \E
E
)
(
+
E
£
id
id
/\\
/\\
E
)
+
E
id
F igu ra 4.4: Secu en cia d e árboles d e an álisis sin tá ctico para la d erivación (4.8)
4 .2 .5
A m b ig ü e d a d
E n la sección 2.2.4 vim os q u e u n a g ra m á tica q ue produce m ás d e un árbol d e an álisis sin tá ctico
para cierto en u nciado es am biguo. D ich o d e o tr a form a, u na g ra m á tica am bigua e s aq uella que
p roduce m ás d e u n a d erivación p or la izquierda, o m ás d e u n a d erivación p o r la d erech a para
e l m ism o enunciado.
E j e m p lo 4 .1 1 : L a g ram ática d e exp resion es a ritm éticas (4.3) p erm ite d o s derivacion es por la
izquierda d istin ta s para el enunciado id + id * id :
E
=>
=>
=>
=»
=>
E +
ld +
id +
id +
id +
E
E
E *E
id * E
id * id
E
=>
=>
=>
E *E
E + E *E
id + E * E
id + id * E
i d + i d * id
Los árboles d e an álisis sin tá ctico correspondientes aparecen en la figura 4.5.
O bserve q u e el árbol de an álisis sin tá ctico d e la figura 4 .5 (a ) refleja la p reced en cia q ue se
asu m e com ú nm en te para + y *, m ientras q ue el árbol d e la figura 4 .5 (b) no. E s decir, lo com ún
e s tratar al operador * teniendo mayor precedencia q ue +, en form a corresp ond ien te a l hecho
d e que, por lo general, evalu am os la exp resión a + b * c com o a + (b * c), e n v ez d e hacerlo
com o ( a + b) * c.
□
P ara la m ayoría d e los analizadores sin tá ctico s, es con ven ien te q u e la gram ática n o ten ga
am bigüedades, y a q ue d e lo contrario, no p od em os d eterm inar e n form a ú n ica q ué árbol de
an álisis sin táctico seleccion ar para un enunciado. E n o tro s ca so s, es con ven ien te usar gram á­
ticas am biguas elegid as con cuidado, ju n to co n reglas p a ra elim in a r la am bigü edad, la s cuales
“d escartan ” los árboles sin tá ctico s no deseados, d ejan d o só lo u n árbol para c a d a enunciado.
204
Capítulo 4. A nálisis sintáctico
E
E
I
id
/
l
+
E
E
\
E
E
/ l \
*
id
E
E
id
id
/
/ l \
+
l
*
E
\
E
I
id
id
(a)
(b)
F igu ra 4.5: D os árboles d e an álisis sin tá ctico p a ra i d + i d * i d
4 .2 .6
V e rific a c ió n d e l le n g u a je g e n e r a d o p o r u n a g r a m á t i c a
A unque los diseñ adores d e com piladores m u y raras veces lo hacen para u na g ra m á tica d e len­
gu a je d e p rogram ación com p leta, es ú til p od er razonar q ue un conjunto dado d e producciones
gen era un len gu aje específico. Las con stru ccion es p rob lem áticas pueden estu d ia rse m ediante la
escritu ra d e una gram ática a b stracta y concisa, y estu d ian d o e l lengu aje q ue genera. A co n ti­
nuación va m o s a construir u na gram ática d e e s te tip o , para instrucciones con d icion ales.
U n a p ru eb a d e q ue u n a gram ática G gen era un len gu aje L co n sta d e d os partes: m ostrar
q ue to d a s las cad en as generadas p or G está n en L y, d e m anera inversa, q u e to d a s las cad en as
en L p ueden generarse sin d u d a m ed ian te G.
E j e m p l o 4 . 1 2 : C onsidere la sigu ien te gram ática:
S - + ( S ) S \e
(4.13)
Tal v e z no s e a evid en te d esd e un principio, pero e s ta gra m á tica sim p le g en era to d a s las
cad en as d e paréntesis balanceados, y só lo ese tip o d e cad en as. P a ra v er por qué, prim ero m os­
trarem os q ue to d a s las frases q u e se derivan d e S son balanceadas, y d esp u és q ue to d a s las
cad en as balancead as se derivan d e S. P ara m ostrar q u e to d a s las frases q u e p ueden derivar­
se d e 5 son balanceadas, u tilizarem os u na prueba in d u ctiv a so b re el núm ero d e pasos n e n una
derivación.
BA SE: L a base e s n = 1. L a ú n ica cad en a d e term in ales q ue p uede derivarse d e 5 en un paso
es la cad en a vacía, q ue sin d u d a e s tá balanceada.
IN D U C C IÓ N : A hora su p o n g a q ue to d a s las d erivacion es d e m en os d e n p asos producen fra­
ses b alancead as, y considere una d erivación p or la izquierda, co n n pasos ex a cta m en te. D icha
d erivación d eb e ser d e la sigu ien te forma:
5 => ( 5 ) 5 ^
lm
Im
(x )S ^
( x )y
Im
Las derivacion es d e x y y q ue provienen d e 5 requieren m enos d e n pasos, por lo q ue en
b ase a la h ip ótesis in du ctiva, x y y está n b alancead as. P or lo ta n to , la ca d en a ( x) y d eb e ser
balanceada. E s d ecir, tien e un núm ero eq u ivalen te d e paréntesis izquierdos y derechos, y ca d a
prefijo tien e, por lo m enos, la m ism a can tid ad d e p arén tesis izquierdos q u e derechos.
4.2
Gramáticas libres d e contexto
205
H abiendo dem ostrado en to n ces q ue cualquier ca d en a q u e s e d eriv a d e 5 e s tá balanceada,
d eb em os ahora m ostrar q ue to d a s las cad en as b alanceadas se derivan d e S. P a ra ello, utiliza­
rem os la inducción sob re la lon gitu d d e u n a cadena.
B A SE : S i la cad en a es d e lon gitu d 0 , d eb e ser e, la cu al e s tá balanceada.
IN D U C C IÓ N : Prim ero, ob serve q u e to d a s las ca d en a s b a la n cea d a s tien en lo n g itu d uniform e.
S u p o n g a q u e to d a s las cad en as b alan cead a s d e u n a lon gitu d m enor a 2 n s e d erivan d e 5, y
considere u na ca d en a b alan cead a w d e lon gitu d 2n, n > 1. S in duda, w em p ieza co n un parén­
tesis izquierdo. H agam os q ue (x ) se a e l prefijo n o vacío m ás corto d e w, q ue ten g a el m ism o
núm ero d e p arén tesis izquierdos y derechos. A sí, w puede escribirse co m o w — ( x ) y , e n donde
x y y está n balanceadas. C om o x y y tien en u n a lon gitu d m enor a 2n, p ueden derivarse d e S m e­
d ia n te la h ip ótesis in d u ctiva. P or en d e, p od em o s buscar u n a d erivación d e la sigu ien te forma:
s=* (S)Sk-
(x)S b-
(x)y
co n lo cu a l dem ostram os q ue w = ( x ) y tam b ién p uede derivarse d e 5.
4 .2 .7
□
C o m p a r a c ió n e n t r e g r a m á ti c a s lib r e s d e c o n te x t o
y e x p r e s io n e s r e g u la r e s
A n tes d e dejar e s ta sección sobre las gram áticas y su s propiedades, establecem os q ue la s gram á­
ticas son u na notación m ás p od erosa q ue las expresiones regulares. C ada construcción q ue pue­
d e describirse m ediante u na expresión regular p uede describirse m ediante u n a gram ática, pero
no al revés. D e m anera alternativa, cada lenguaje regular es un lenguaje libre d e contexto, pero no
al revés.
P or ejem p lo, la expresión regular ( a | b ) * a b b y la sig u ien te gram ática:
Aq
—► qA q |bAo |a,Ai
A\
—► bA 2
A2
Az
-► bAz
“* €
describ en el m ism o len gu aje, e l con ju n to d e ca d en a s d e as y 6s q ue term inan en abb.
P od em os construir d e m anera m ecánica u n a g ra m á tica para reconocer el m ism o lenguaje
q ue un a u tó m a ta fin ito n o d eterm in ista (A F N ). L a g ra m á tica anterior s e co n stru y ó a p artir del
A F N d e la figura 3.24, m ediante la sigu ien te construcción:
1. P ara ca d a e sta d o i d e l A F N , crear un no term in a l Ai.
2. Si el estad o i tien e u na transición al esta d o j con la en trad a a, agregar la producción A t ->■
aAj. Si e l estad o i p asa al estad o j co n la en trad a €, agregar la p roducción A{ ->• A j
3. Si i es un esta d o d e aceptación, agregar A i
e.
4 . Si i es e l esta d o inicial, hacer q ue A t s e a e l sím b olo in icial d e la gram ática.
206
Capítulo 4. A nálisis sintáctico
Por o tra parte, el lengu aje L = { a nbn \ n > 1} co n u n núm ero eq u ivalen te d e as y bs e s un
ejem p lo d e p rototip o d e u n len gu aje q ue p uede describirse m ediante u n a gram ática, p ero no
m ediante u n a exp resión regular. P ara ver p or qué, su p o n g a q ue L es e l lengu aje d efinido por
alguna expresión regular. C onstruiríam os un A F D D con un núm ero finito d e estad os, por decir
k, para aceptar a L. C om o D só lo tien e A;estados, para u na en trad a q ue em p ieza con m ás d e A; as,
D d eb e entrar a cierto esta d o d o s veces, p or decir s¿, com o en la figura 4 .6 . S u p on ga q ue la ru ta
d e Si d e v u e lta a s í m ism o s e etiq u e ta co n u n a secu en cia a T %
. C om o a'b1e s tá e n e l lengu aje, d eb e
haber u n a ru ta etiq u eta d a com o bl d esd e Si h a sta un e sta d o d e a cep tación f Pero, entonces
tam bién h ay u n a ru ta q u e sa le d esd e el esta d o s 0 y Pa sa a través d e para llegar a /, etiq u eta d a
com o a?b\ co m o se m uestra en la figu ra 4 .6 . Por en d e, D tam b ién a ce p ta a a’b1, q ue n o e s tá en
e l len gu aje, lo cu a l con trad ice la su p osición d e q u e L es e l len gu aje acep tad o p or D.
ruta etiquetada com o a 3 - i
ruta etiquetada como a*
so )---------- ►
...
ruta etiquetada com o bl
----------- ► (Si-
F igu ra 4.6: U n A F D D que a cep ta a a*6* y a atb*
En lengu aje coloqu ial, d ecim os q ue “lo s au tó m a ta s finitos n o pueden con tar” , lo cu a l sig ­
nifica q ue un a u tó m a ta fin ito n o p uede aceptar un len gu aje com o { a nbn \ n > 1 }, q u e requiera
q ue e l a u tó m a ta lleve la cu en ta d el núm ero d e as an tes d e v er las bs. D e igual form a, “u n a
gra m ática p uede con tar d o s elem en tos pero no tres” , com o verem os cu a n d o h ablem os sobre las
con stru cciones d e lenguajes q u e n o so n libres d e co n tex to en la secció n 4.3.5.
4 .2 .8
E je rc ic io s p a r a la s e c c ió n 4 .2
E j e r c i c i o 4 .2 .1 : C onsidere la sigu ien te g ra m á tica libre d e contexto:
S —►S S + | S S * | a
y la ca d en a aa + a*.
a) P rop orcion e u n a d erivación p or la izquierda para la cadena.
b) P rop orcion e u n a d erivación p or la derecha para la cadena.
c) P rop orcion e u n árbol d e an álisis sin tá ctico para la cadena.
! d ) ¿L a g ra m á tica es am bigua o no? Ju stifiq ue su respuesta.
! e) D escrib a e l len gu aje generado p or e s ta gram ática.
E j e r c i c i o 4 . 2 . 2 : R ep ita el ejercicio 4.2.1 para cad a u na d e las sigu ientes gram áticas y cadenas:
4.2
Gramáticas libres d e contexto
207
a) 5
—► 0 5 1 | 0 1 co n la cad en a 0 0 0 111 .
b) 5
—► + 5 5 | * S S | a c o n la cad en a + * aaa.
le ) 5
—► 5 ( 5 ) 5 | e con la cad en a (()()).
! d) 5
—► 5 + 5 | 5 5 | ( 5 ) | 5 * | a co n la cad en a (a + a) * a.
le ) 5
—► ( L ) | a y L
!! f ) 5
L , S \ S c o n la cad en a ((a , a ), a, (a)).
—► a 5 6 5 | b S a S | e co n la ca d en a aabbab.
! g ) L a sigu ien te gram ática para las exp resion es booleanas:
bexpr
b te rm
b fa c to r
-►
-►
-»
bexpr o r b te rm \ bterm
b te rm a n d b fa c to r \ b fa cto r
n o t b fa c to r | ( b e x p r ) | t r u e
| fa ls e
E j e r c ic io 4 .2 .3 : D iseñ e gram áticas p ara los sigu ientes lenguajes:
a ) El con ju n to d e to d a s las cad en as d e Os y l s , d e ta l form a q ue ju sto antes d e ca d a 0 vaya
por lo m en os un 1 .
! b ) E l con ju n to d e tod as las cad en as d e Os y l s q ue sea n p a lín d ro m o s; es d ecir, q ue la cad en a
se lea igual al derecho y a l revés.
! c)
E l con ju n to d e to d a s las cad en as d e Os y l s co n un núm ero igual d e Os y ls.
!! d )
E l con ju n to d e to d a s las cad en as d e Os y l s co n un núm ero d esigual d e Os y
! e)
E l con ju n to d e to d a s las cad en as d e Os y l s e n d o n d e 011 no aparece com o
dena.
ls .
u n a su bca-
!! f ) E l con ju n to d e to d a s las cad en as d e Os y l s d e la form a xy, en d on d e x * y, y x y y tienen
la m ism a longitud.
E j e r c ic io 4 .2 .4 : H ay u n a n otación d e gra m á tica ex te n d id a d e u so com ún. E n e s ta notación,
los corch etes y las llaves e n los cu erp os d e las producciones son m eta sím b olos (com o
o |)
c o n los sigu ien tes significados:
i) Los corch etes alrededor d e u n sím b olo o sím b olos gram aticales d e n o ta q u e esta s cons­
tru cciones so n opcion ales. Por en d e, la producción A -► X [Y ] Z tien e e l m ism o efecto
q u e las d o s p roducciones A - * X Y Z y A - + X Z.
ii) Las llaves alrededor d e un sím b olo o sím b olos gram aticales indican q ue esto s sím bolos
p ueden rep etirse cualquier núm ero d e veces, in clu yen d o cero. P or en d e, A
X { Y Z}
tien e el m ism o efecto q u e la se cu en cia in fin ita d e p ro d u ccio n es A
X , A - * X Y Z,
A -► X Y Z Y Z, y así sucesivam ente.
208
Capítulo 4. A nálisis sintáctico
M uestre q ue esta s d o s exten sion es n o agregan p o te n c ia a la s gram áticas; es decir, cualquier
lengu aje q ue p u ed a generarse m ed ian te u na gram á tica co n es ta s ex ten sion es, p o d rá generarse
m ediante u na gram ática sin las extension es.
E j e r c ic io 4 .2 .5 : U se las llaves d escritas en el ejercicio 4 .2 .4 para sim plificar la sigu ien te gra­
m á tica para los bloqu es d e instrucciones y las instrucciones condicionales:
in s t r
-►
h s ta ln s tr
|
-►
i f ex p r t h e n in s tr e l s e in s tr
i f in s tr t h e n in s tr
b e g i n k s ta ln s tr e n d
in s tr ; k s ta ln s tr \ in s tr
E j e r c ic io 4 .2 .6 : E x tie n d a la id ea d el ejercicio 4 .2 .4 p a ra p erm itir cualquier exp resión regular
d e sím b olos gram aticales en el cuerpo d e u na producción. M uestre q ue e s ta ex ten sió n no per­
m ite q ue las gram áticas d efinan nuevos lenguajes.
E j e r c ic io 4 .2 .7 : U n sím b olo gram atical X (term inal o no term inal) es in ú til si no h ay deri­
vación d e la form a S ^ w X y ^ wxy. E s d ecir, X n u n ca p od rá aparecer e n la d erivación d e un
enunciado.
a) P rop orcion e u n algoritm o para elim inar d e u n a gra m á tica to d a s la s producciones q ue
con ten gan sím b olos inútiles.
b) A plique su algoritm o a la sigu ien te gram ática:
S
A
B
0 IA
AB
-► 1
E j e r c ic io 4 .2 .8 : L a g ra m á tica en la figura 4 .7 gen era d eclaracion es para un so lo id en tificad or num érico; e s ta s d eclaracion es involucran a cu a tro p ropiedades d istin ta s e in d ep en d ien tes
d e núm eros.
in s tr
h staO pcion es
opcion
m odo
escala
p re cisio n
base
-¥■ d e c l a r e id U staO pciones
-► h staO pcio n es o p tio n \ e
-► m o d o \ escala \ p re c isio n \ base
—► r e a l | c o m p l e x
—► f i x e d | f l o a t i n g
-► s i n g l e | d o u b l e
-► b i n a r y | d e c i m a l
F igu ra 4.7: U na gram ática para declaraciones con varios atributos
a) G eneralice la gram ática d e la figura 4 .7 , p erm itien d o n o p cio n es Ai, para algu nas n fijas
y para i = 1, 2, . . . , n, en d o n d e A t p u ed e ser a¿ o
S u gra m á tica d eb erá usar só lo 0 ( n )
sím b olos gram aticales y tener u n a longitud to ta l d e prod uccion es igual a O(n).
4.3 Escritura d e una gram ática
209
! b ) La g ra m á tica d e la figura 4 .7 y su gen eralización en la parte (a) p erm ite declaraciones
que son con trad ictorias o redundantes, ta les como:
declare foo real fixed real floating
P odríam os in sistir e n q ue la sin ta x is d el len gu aje prohíbe d ich as declaraciones; es decir,
ca d a declaración gen erad a p or la gra m á tica tien e ex a cta m en te un valor para ca d a una
d e las n op cion es. Si lo hacem os, en to n ces para cualquier n f ij a hay só lo un núm ero fini­
to d e declaraciones legales. Por ende, el lenguaje d e declaraciones legales tiene u na gram á­
tica (y tam bién u na expresión regular), al igual que cualquier lenguaje finito. La gram ática
obvia, en la cu al el sím bolo inicial tiene u na producción para ca d a declaración legal, tiene n!
producciones y u na longitud de producciones to ta l d e 0 { n x n!). H ay que esforzarse más:
una b n g itu d d e producciones total que se a 0 (n2 n).
!! c ) M uestre q ue cualquier gram ática para la parte (b ) d e b e ten er u n a longitud d e produc­
cion es to ta l d e por lo m en os 2 n.
d ) ¿Q ué d ice la p arte (c) acerca d e la via b ilid a d d e im poner la no redundancia y la no
con trad icción entre las op cio n es en las d eclaraciones, a través d e la sin ta x is d el lenguaje
d e program ación?
4 .3
E s c r itu r a d e u n a g ra m á tic a
Las gram áticas so n cap aces d e describir casi la m ayoría d e la sin ta x is d e lo s len g u a jes d e pro­
gram ación. Por ejem plo, el requerim iento d e q ue los identificadores d eb en declararse antes de
usarse, n o p uede describirse m ediante u na gra m á tica libre d e co n tex to . Por lo ta n to , las secuen­
cia s d e los tokens q ue acep ta un analizador sin tá ctico form an un su perconjun to d el lenguaje
d e program ación; las fases sigu ien tes d e l com p ilad or d eb en analizar la sa lid a d e l analizador
sin táctico, p ara asegurar q ue cu m p la co n las reglas q ue no verifica e l analizador sin táctico.
E sta sección em p ieza con u na d iscu sión acerca d e có m o divid ir el trab ajo en tre u n anali­
zador léxico y un analizador sin táctico. D esp u és considerarem os varias transform aciones que
p odrían aplicarse para ob tener u n a gram á tica m ás ad ecu ad a para e l análisis sin tá ctico . U na
téc n ic a p uede elim inar la am bigüedad e n la gram ática, y las o tra s (elim inación d e recursividad
por la izquierda y factorización por la izquierda) son ú tiles p a ra rescribir las gram áticas, de
m anera q ue sean ad ecu ad as para e l anáfisis sin tá ctico descen dente. C oncluirem os e s ta sección
con sid erand o algu nas con stru ccion es d e los lengu ajes d e program ación q ue n ingu na gram ática
p u ed e describir.
4 .3 .1
C o m p a ra ció n e n tre análisis léx ico y an álisis sin tá ctico
C om o ob servam os en la sección 4.2 .7 , tod o lo q ue p uede describirse m ediante u na expresión
regular tam bién p u ed e describirse m ediante u n a gram ática. P or lo ta n to , sería razonable pre­
guntar: “¿P or q u é usar exp resion es regulares p a ra definir la sin ta x is lé x ica d e un lenguaje?”
E x isten varias razones.
210
Capítulo 4. A nálisis sintáctico
1. A l separar la estru ctu ra sin tá ctica d e un lengu aje en p artes léxicas y no léxicas, se pro­
p orcion a u na m anera con ven ien te d e colocar e n m ódulos la interfaz d e usuario d e un
com pilador en d os com p on en tes d e un tam a ñ o m anejable.
2. L as reglas léxicas d e un len gu aje son con frecuencia b a sta n te sim p les, y para describirlas
no n ecesitam os u n a n otación tan p o d e ro sa co m o las gram áticas.
3. Por lo general, las exp resion es regulares proporcionan u n a n otación m ás co n cisa y fácil
de entender para los tok en s, en com paración co n las gram áticas.
4. P u ed en con stru irse analizadores léxicos m ás eficien tes en form a a u to m á tica a partir d e
exp resion es regulares, en com paración con las gram áticas arbitrarias.
N o h ay lincam ientos firm es en lo q ue se d eb e poner en la s reglas léxicas, en co n tra ste a las re­
glas sin tácticas. Las exp resion es regulares so n m uy ú tiles para describir la estru ctu ra d e las
con stru cciones com o los identificado res, las co n sta n tes, la s palabras reservadas y e l esp a cio en
blanco. Por o tro lado, las gram áticas son m uy útiles para describir estructuras anidadas, com o
los paréntesis balanceados, las instrucciones begin-end relacionadas, las instrucciones if-then-else
correspondientes, etcétera. E stas estructuras anidadas no p ueden describirse m ediante las expre­
siones regulares.
4.3.2
E lim in ació n de la am b igü ed ad
A lgunas veces, u na gram ática am b igu a p u ed e rescribirse para elim inar la am bigüedad. C om o
ejem plo, vam os a elim inar la am bigüedad d e la sig u ien te gra m á tica d el “else co lg a n te” :
in s tr
->•
i f e r p r t h e n in s tr
i f e r p r t h e n in s tr e l s e in s tr
o tra
(4.14)
A quí, “o t r a ” representa a cualquier o tr a instrucción. D e acuerdo co n e s ta gram ática, la si­
g u ien te in stru cción con d icion al com puesta:
i f E \ t h e n S i e l s e i f E¿ t h e n S -2 e l s e S 3
Ei
52
53
F igu ra 4.8: Á rb ol d e an álisis sin tá ctico para una in stru cción con d icion al
211
4.3 Escritura d e una gram ática
tien e e l árbol d e an álisis sin tá ctico q ue se m uestra en la figura 4 .8 .1 L a gra m á tica (4 .1 4 ) es
am bigua, y a q ue la cad en a
i f E i t h e n ¡ f 2% t h e n S i e l s e S 2
(4 1 5 )
tien e los d os árboles d e an álisis sin táctico que s e m uestran e n la figu ra 4.9.
instr
E-2
Si
S2
Si
F igu ra 4.9: D os árboles d e an álisis sin tá ctico para u n en u nciado am biguo
E n to d o s los lenguajes d e program ación co n instrucciones con d icion ales d e e s ta form a, se
prefiere el prim er árbol d e an álisis sin táctico . L a regla general es, “R elacion ar ca d a e l s e con el
t h e n m ás cercano q ue no esté relacionado ” .2 E s ta regla p a ra elim inar am bigüedad p u ed e, en
teoría, incorporarse d irectam en te en u na gram ática, pero en la p ráctica raras veces se integra
a las producciones.
E j e m p lo 4 .1 6 : P od em os rescribir la gram ática d e l else co lgan te (4.14) com o la siguiente
gra m á tica sin am bigüedades. L a id ea es q u e u na in stru cción q ue aparece en tre un t h e n y un
e l s e d eb e estar “relacionada” ; e s decir, la instrucción interior no d eb e term inar co n un t h e n
sin relacionar o abierto. U n a instrucción relacionada es u n a in stru cción ¡ f - t h e n - e l s e q ue no
co n tien e instrucciones ab iertas, o es cualquier o tro tip o d e instrucción in con dicion al. Por ende,
p od em os usar la g ra m á tica d e la figura 4.1 0 . E s ta gra m á tica g en era la s m ism as cad en as que
la g ra m á tica d e l else colgan te (4 .1 4 ), pero só lo p erm ite un an álisis sin tá ctico para la cad en a
(4.15); e n específico, e l q u e aso cia a cad a e l s e con la in stru cción t h e n m ás cercana q ue no
h aya e sta d o relacionad a antes.
□
1Los su b ín d ice s e n E y S s o n sólo p a r a d ife re n c ia r las d is tin ta s o c u rre n c ia s d e l m ism o no te rm in a l, p o r lo c u a l no
im p lican no te rm in a le s d istin to s.
2 H ay q u e te n e r e n c u e n ta q u e C y s u s d eriv ad o s s e in clu y en e n e s t a clase. A u n c u a n d o la fa m ilia d e len g u ajes C
n o u tiliz a la p a la b ra c la v e th e n , s u función s e r e p re s e n ta m ed ia n te e l p a rén tesis d e c ie rre p a r a la con d ició n q u e v a
d esp u é s d e i£
212
Capítulo 4. A nálisis sintáctico
in s tr
in str.rela cio n a d a
-► in str.rela cio n a d a
|
in str.a b ie rta
- * i f expr t h e n in str.rela cio n a d a e l s e in str.rela cio n a d a
o tra
in str.a b ie rta
->
|
i f ex p r t h e n in s tr
i f e x p r t h e n in str.rela cio n a d a e l s e in str.a b ie rta
F igu ra 4.10: G ram ática sin am bigüedades para la s instrucciones if-then-else
4 .3 .3
E lim in a c ió n d e la r e c u r s i v id a d p o r la iz q u ie r d a
U n a gram ática es recursiva p o r la izquierda si tien e u na term inal A ta l q u e haya u na derivación
A =$► A a para cierta cad en a a . Los m étodos d e análisis sin táctico d escendentes no pueden m a­
nejar las gram áticas recursivas por la izquierda, por lo q ue se n ecesita u na transform ación para
elim inar la recursividad por la izquierda. E n la sección 2 .4 .5 hablam os sobre la recu rsividad
in m ediata p o r la izqu ierda, en donde hay u na producción d e la form a A -► A a . A q u í estu dia­
rem os el caso general. En la sección 2.4.5, m ostram os cóm o el par recursivo p or la izquierda de
producciones A -+ A a \ 0 p o d ía su stitu irse m ediante las siguientes producciones n o recursivas
por la izquierda:
A -> 0 A'
A ' -> a A ' | e
sin cam biar las cad en as q ue se derivan d e A . E sta reg la p o r s í s o la b a sta p a ra m uchas gram á­
ticas.
E j e m p lo 4 .1 7 : L a gram ática d e exp resion es no recursivas p or la izquierda (4 .2 ), q ue se rep ite
a continuación:
E -+ T E '
E' -* + T E '
T -+ F T '
T '^ > * F T '
F - + ( E ) | id
se o b tien e m ed ian te la elim inación d e la recursividad in m ediata p or la izquierda d e la gram á­
tica d e exp resion es (4.1). E l p ar recursivo por la izquierda d e las prod uccion es E
E + T \ T
se su stitu y e m ediante E - + T E ' y E '
+ T E ' \ e. L as n uevas producciones para T y f se
o b tien en d e m anera sim ilar, elim in an d o la recursividad in m ed ia ta p or la izquierda.
□
La recursividad in m ed iata por la izquierda p uede elim inarse m ediante la sigu ien te técnica,
que fu n cion a para cualquier núm ero d e p roducciones A . E n prim er lugar, se agrupan las pro­
d uccion es d e la sigu ien te manera:
A - + A a x | A a 2 | ••• | A a m | A
en d ond e n in gu n a
lo siguiente:
| &
| — | &
term in a con u n a A . D esp ués, se su stitu y en la s producciones A m ediante
4.3 Escritura d e una gram ática
213
A -► & A ' I Ih A ' I ... I jfcA'
A ! ol\ A! |
| ••• | a mA ' \ e
E l n o term inal A gen era las m ism as cad en as que antes, pero y a no es recursiva p or la izquier­
d a . E ste p rocedim ien to elim in a to d a la recursividad por la izquierda d e las producciones A y
A! (siem pre y cu an d o n in gu n a
se a e), pero n o elim in a la recursividad por la izquierda que
in clu ye a las derivacion es d e d o s o m ás p asos. Por ejem plo, considere la sig u ien te gram ática:
A
í . i
A c | S d | e
(4.18)
v
'
E l no term inal S es recursiva p or la izquierda, y a q u e S => A a => S d a , p ero no e s inm ediata­
m en te recursiva por la izquierda.
E l A lgoritm o 4.19, q u e se m uestra a con tinu ación, elim in a e n form a siste m á tic a la recursivi­
d a d p or la izquierda d e u n a gram ática. Se g a ra n tiza q ue fu n cion a si la g ra m á tica no tien e ciclos
(derivaciones d e la form a A =5* A ) o producciones e (producciones d e la form a A -► e). L os ci­
clo s pueden elim inarse en form a siste m á tic a d e u n a gram ática, a l igual q ue las producciones e
(v ea los ejercicios 4 .4 .6 y 4.4.7).
A lg o r i t m o 4 .1 9 : E lim in ación d e la recursividad por la izquierda.
E N T R A D A : L a gram ática G sin ciclos ni p roducciones e.
SA L ID A : U na gram ática eq u ivalen te sin recursividad p or la izquierda.
M ÉTO D O : A plicar e l algoritm o de la figura 4 .11 a G. O bserve q ue la gra m á tica no re cursiva
por la izquierda resu ltan te p uede tener prod uccion es e.
□
1)
2)
3)
4)
ordenar los n o term in ales d e cierta form a A h A2, ..., A n.
f o r ( cad a i d e 1 a n ) {
f o r ( ca d a j d e 1 a i — 1 ) {
su stitu ir cad a producción d e la form a A i - > A jy p o r las
p roducciones A t -► ô tf \ ó¿y \ • •- | <5*7 , en donde
A j -+ Si | £2 | ••• | Sk sea n to d a s producciones f a c t u a l e s
5)
6)
7)
}
elim inar la recursividad in m ed ia ta p o r la izquierda en tre la s producciones A {
}
F igu ra 4.11: A lgoritm o p ara elim inar la recursividad p o r la izquierda d e u na gram ática
El procedim iento en la figura 4.11 funciona de la siguiente m anera. En la prim era iteración
para i = 1, e l ciclo for extern o d e las líneas (2) a la (7) elim in a cualquier recursividad inm ediata
por la izquierda entre las producciones A h Cualquier producción A i restante d e la form a Ay ->■
A ta deb e, por lo tanto, tener l > 1. D espués de la ¿-1-ésim a iteración d e l ciclo for externo, todas
las no term inales Ak, en donde k < i, se “lim pian” ; e s decir, cualquier producción Ak -► A ¡a debe
ten er l > k. C om o resultado, e n la ¿-ésim a iteración, e l ciclo interno d e las líneas (3) a la (5) elev a
e n form a progresiva el lím ite inferior en cualquier producción A { ->■ A ma , h a sta tener m > i
214
Capítulo 4. A nálisis sintáctico
D esp ués, la elim in ación d e la recursividad in m ed ia ta por la izquierda p a ra las producciones A ,
en la lín ea ( 6 ) o b lig a a q u e m se a m ayor q ue i
E j e m p lo 4 .2 0 : V am os a aplicar e l A lgoritm o 4 .1 9 a la g ra m á tica (4 .1 8 ). T écnicam ente, no
se garan tiza q u e el algoritm o vaya a funcionar debido a la producción e, pero e n este caso, la
producción A - * e resu lta ser inofensiva.
O rdenam os los n o term in ales 5 , A . N o h ay recursividad in m ed ia ta p or la izquierda entre
las producciones 5, por lo q ue no ocurre n ad a d urante el ciclo extern o para i = 1. P a ra i = 2,
su stitu im o s la 5 e n A -► S d p ara ob ten er las sigu ientes prod uccion es A .
A
A c \A a d \ b d \ e
A l elim inar la recursividad in m ed iata por la izquierda entre las producciones A produce la
sigu ien te gram ática:
S —►A a | b
A -+ b d A! | A!
A ' - » c A! | a d A! \ e
4 .3 .4
F a c to r iz a c ió n p o r la iz q u ie r d a
La factorización por la izquierda es u na transform ación gram átical, ú til para producir u n a gra­
m á tica adecuada para el an álisis sin táctico predictivo, o d escen d en te. C uan do la elecció n entre
d os producciones A altern ativas no e s tá clara, tal v e z p o d a m o s rescribir las producciones para
diferir la d ecisión h a sta haber v isto la su ficiente en tra d a co m o para p od er realizar la elección
correcta.
Por ejem p lo, s i ten em o s las sigu ien tes dos producciones:
in s t r -►
i f e x p r t h e n i n s tr e l s e in s tr
i f ex p r t h e n in s tr
al ver la en trad a if, no p od em os saber d e in m ediato q ué p rod ucción elegir p a ra exp an d ir in str.
En gen eral, si A a 0 i \ a 0 ¿ son d os producciones A , y la en trad a em p ieza co n u na ca d en a no
v a cía d erivad a d e a , n o sab em o s si d eb em os expandir A a a f a o a a/%. N o o b sta n te , p od em os
diferir la d ecisión si exp an d im os A a a A'. A sí, d esp u és d e v er la en trad a d erivad a d e a , exp an ­
d im os i ' a f t o a f t - E s decir, si se factorizan por la izquierda, las producciones originales se
con vierten en:
A -> a A '
A' —*•
|
02
A lg o r it m o 4 .2 1 : F actorización por la izquierda d e u na gram ática.
E N T R A D A : L a gram ática G.
SALID A: U n a gram ática eq u ivalen te factorizada p or la izquierda.
4.3 Escritura d e una gram ática
215
M ÉTO D O : P ara ca d a no term in al A , encontrar el prefijo a m ás largo q ue s e a com ú n p a ra una
o m ás d e su s alternativas. S i a * e (es decir, si hay un prefijo com ún no trivial), se su stitu y en
to d a s las producciones A , A -+ a p i | afi¿ | ••• |a fin | 7 , en d ond e 7 representa a to d a s las alter­
n ativas q ue no em p iezan co n a , m ediante lo siguiente:
A —►olA! I 7
A’
|
02
|
|
0n
A q u í, A' es u n no term inal nuevo. Se ap lica e s ta transform ación en form a rep etid a h a sta que
n o h aya d o s altern ativas para un no term inal q ue ten gan un prefijo com ún.
□
E j e m p lo 4 .2 2 : L a sigu ien te gram ática ab strae el p rob lem a d el “else co lg a n te”:
S - * i E t S \ i E t S e S \
E
b
a
[
ó)
A qu í, i, t y e representan a if , t h e n y e l s e ; E y S representan “expresión con d icion al” e “ins­
tru cción ”. S i se factoriza a la izquierda, e s ta g ra m á tica se con vierte en:
S -► i E t S S' | a
S'-+eS | €
b
(4.24)
A sí, p od em os expandir S a iE tS S ' con la en tra d a ¿, y esperar h a sta q ue se haya v isto iE tS para
decidir si se v a a expandir S ' a e S o a e. D esd e luego q ue e sta s g ra m áticas son am biguas, y con
la en trad a e no quedará claro q u é altern a tiv a d eb e elegirse para S '. E l ejem p lo 4 .3 3 h ab la sobre
cóm o salir d e e s te d ilem a.
□
4 .3 .5
C o n s tr u c c io n e s d e le n g u a je s q u e n o s o n lib r e s d e c o n te x t o
A lgu n as con stru cciones sin tá ctica s q ue se en cu en tran en los lenguajes d e p rogram ación ordina­
rios no p ueden especificarse só lo m ed ian te e l u so d e gram áticas. A q u í considerarem os d o s de
esta s con stru cciones, usand o lengu ajes ab stra cto s sim p les para ilustrar las d ificu ltad es.
E j e m p lo 4 .2 5 : E l lengu aje en e s te ejem p lo abstrae el problem a d e com probar q ue se declaren
los identificadores an tes d e poder usarlos en un p rogram a. E l len gu aje c o n siste e n ca d en a s d e la
form a w cw , en d on d e la prim era w representa la declaración d e un identificador w , c representa
u n fragm ento interm edio del program a, y la seg u n d a w represen ta e l u so d e l identificador.
E l lengu aje ab stracto es L i = {w c w \ w e s tá en (a|b)*}. L i co n siste en tod as las palabras
co m p u estas d e u n a ca d en a rep etid a d e as y bs separadas por c, com o aabcaab. A un qu e no lo
vam os a dem ostrar aquí, la ca racterística d e no ser libre d e co n tex to d e L \ im plica d irectam ente
que los lenguajes d e program ación com o C y J a v a no sea n libres d e co n tex to , los cu ales requie­
ren la d eclaración de los identificadores antes d e usarlos, ad em ás d e p erm itir identificadores de
lon gitu d arbitraria.
P or e s ta razón, u n a gram ática para C o J a v a no hace diferencias en tre los identificadores
que so n cad en as d istin ta s d e caracteres. E n vez d e ello , to d o s los identificadores se representan
216
Capítulo 4. A nálisis sintáctico
m ediante un token com o ¡d en la gram ática. E n un com p ilad or p a ra dicho lengu aje, la fa se d e
análisis sem án tico com p ru eb a q ue los identificadores se declaren an tes d e usarse.
□
E j e m p lo 4 .2 6 : E l lengu aje, q u e n o e s in d ep en d ien te d e l co n tex to en e s te ejem p lo, ab strae el
problem a d e com probar q ue e l núm ero d e p arám etros form ales e n la d eclaración d e u n a función
coin cid a co n el núm ero d e parám etros actu ales e n un u so d e la función. E l lengu aje co n siste
en cad en as d e la form a anbmc1ld m. (R ecuerde q ue an sign ifica a escrita n v eces). A quí, an y bm
podrían representar las listas d e parám etros form ales d e dos funciones declaradas para tener n
y ¡n argu m en tos, resp ectivam en te, m ientras q u e cn y cT representan las lista s d e los parám etros
actu ales en las llam adas a esta s d o s funciones.
El len gu aje ab stracto es
| n > 1 y m > 1}. E s d ecir, L¿ co n siste d e cad en as
en e l lengu aje generado por la expresión regular a*b*c*d*, d e ta l form a q u e el núm ero d e as y
es y d e bs y ds se a igual. E ste lengu aje no es in d ep en d ien te d e l con tex to .
D e nuevo, la sin ta x is com ú n d e las declaraciones d e las funciones y los u sos no s e responsa­
biliza d e con tar el núm ero d e parám etros. P or ejem p lo, la llam ad a a u n a función en u n lengu aje
sim ilar a C p od ría especificarse d e la sigu ien te manera:
in s tr
hst(L expr
-►
-+
|
i d ( h sta-expr)
ksta^expr, ex p r
ex p r
con p roducciones ad ecu ad as para expr. L a com probación de q ue el núm ero d e p arám etros en
una llam ad a s e a correcto s e realiza p or lo general d u ra n te la fase d el análisis sem án tico.
□
4 .3 .6
E je rc ic io s p a r a la s e c c ió n 4 .3
E j e r c ic io 4 .3 .1 : L a sigu ien te gram ática e s para exp resion es regulares sobre los sím b olos a y
b so lam en te, usando + en vez d e | para la unión, co n lo cu a l s e e v ita e l con flicto con e l u so d e
la barra vertical com o un m eta sím b olo e n las gram áticas:
re x p r
r te r m
r fa c to r
r p rim a rio
-►
-*
->
->
re x p r + r te r m
\ rte rm
r te r m r f a c to r \ r ja c to r
r f a c to r * | rp rim a rio
a | b
a) F actorice e s ta gram ática por la izquierda.
b) ¿L a factorización por la izquierda hace a la g ra m á tica ad ecu ad a para e l an álisis sin tá cti­
co descendente?
c) A d em ás d e la factorización por la izquierda, elim in e la recursividad p o r la izquierda d e
la gram ática original.
d) ¿L a gram ática resultante es ad ecu ad a p ara e l an álisis sin tá ctico descendente?
E j e r c ic io 4 .3 .2 : R ep ita el ejercicio 4.3.1 con las sig u ien tes gram áticas:
a) L a gram ática d el ejercicio 4.2.1.
b) L a gram ática d el ejercicio 4 .2 .2 (a).
4.4 A nálisis sintáctico descendente
217
c) L a gram ática d e l ejercicio 4 .2 .2 (c).
d ) L a gram ática d e l ejercicio 4 .2 .2 (e).
e) L a gram ática d e l ejercicio 4 .2 .2 (g ).
E j e r c ic io 4 .3 .3 : S e propone la sigu ien te gra m á tica para elim inar la “am bigüedad d e l else
co lg a n te” , d escrita en la sección 4.3.2:
in s tr
-►
in strR ela c io n a d a
-►
i f ex p r t h e n in s tr
in strR ela cio n a d a
i f expr t h e n in strR ela c io n a d a e l s e in s tr
o tr a
M u estre q ue e s ta g ra m á tica sigu e siend o am bigua.
4.4
A n á lisis s in tá c tic o d e s c e n d e n te
E l an álisis sin táctico d escen d en te p uede verse com o e l p rob lem a d e construir un árbol d e anár
lisis sin tá ctico para la ca d en a d e entrada, p artien do desde la raíz y crean do los n od os d e l árbol
d e an álisis sin tá ctico en preorden (profundidad prim ero, com o vim os en la secció n 2 .3 .4 ). D e
m anera eq u ivalen te, p od em os considerar el an álisis sin tá ctico d escen dente co m o la búsqueda
d e u na d erivación por la izquierda para u na ca d en a d e entrada.
E j e m p lo 4 .2 7 : L a secu en cia d e árboles d e an álisis sin tá ctico en la figura 4 .1 2 para la en trad a
i d + i d * i d es u n an álisis sin tá ctico d escen d en te, d e acuerdo co n la gra m á tica (4 .2 ), q ue repeti­
m os a continuación:
E
E'
T
r
F
—►
—►
—►
—►
—►
TE'
+ TE' | e
F T
* FT' \ e
(E )
(4.28)
| id
E s ta secu en cia d e árb oles corresp ond e a u n a d erivación p or la izquierda d e la en trad a.
□
E n ca d a p aso d e un análisis sin táctico d escen d en te, e l problem a cla v e es e l d e determ inar
la producción q ue d eb e aplicarse para un n o term inal, p o r decir A . U n a vez q u e se elige una
producción A , el resto d el proceso d e an álisis sin tá ctico co n siste en “relacionar” los sím bolos
term in ales e n el cu erpo d e la producción co n la cad en a d e entrada.
E sta sección em p ieza co n u na form a general d el an álisis sin tá ctico descen dente, con ocid a
com o análisis sin táctico d e d escen so recursivo, la cu a l p uede requerir d e u n rastreo h acia atrás
para encontrar la producción A correcta q ue d eb e aplicarse. L a sección 2 .4 .2 introdujo e l anáfi­
sis sin tá ctico predictivo, un ca so esp ecia l d e anáfisis sin tá ctico d e d escen so recursivo, en donde
n o se requiere un rastreo h acia atrás. E l an álisis sin tá ctico p red ictivo elig e la p rod ucción A
correcta m ed ian te u n análisis por ad elan tad o d e la entrada, en d ond e se v e un núm ero fijo de
sím b olos adelantados; p or lo general, só lo n ecesitam os v er u n sím b olo por ad elan tad o (es decir,
e l sigu ien te sím b olo d e en trad a).
218
Capítulo 4. A nálisis sintáctico
E
=>
E
lm
T
=>
lm
/
id
E
/
Ef
T
E
=>
\
/
Ef
T E ?
F T'
F T
T
/\
F Tr
id
id
/
/
4- / TN^ Ef
A\
V
id
T
id
E
/
F
Ef.
T'
F
E
T
/ \
=>
lm
E[
F T' +
T E ?
mí / ;r
id
*
F V
7*
id
/
E
=>
\
lm
T
E'
/I
/ w
F T* +
T E ?
I eI
id
/ \
*
F T
Jid
*
F T'
E
/ \
T
F?^
/I
/
F T* 4T
F
id
/ \ e
id
id
lm
\
F T
I I
id 6
Ef
Ef
/ L /I X ,
F T' + T E
T
/
4-
6
Ef
=*
lm
E[
/I
F T
E
lm
/
/\
T
F
E
lm
\
/\
Ef.
6
E
lm
l=*
m
\
T
/I
F r
=>
lm
/ \
1
f
f
id
*
/T \
F 7
Jid
1
f
F igu ra 4.12: A nálisis sin tá ctico d escen d en te para i d + i d * i d
Por ejem plo, considere e l an álisis sin táctico d escen d en te en la figura 4 .1 2 , en la cual se
con stru ye u n árbol con d os n od os etiq u etad os co m o E '. E n el prim er nodo E ' (en preorden),
se elige la producción E '
4- TE'; en el segu n d o n o d o E?, se elig e la producción E ' -»• e. Un
analizador sin táctico predictivo p uede elegir u n a d e la s p roducciones E ' m ed ian te e l an álisis d el
sigu ien te sím b olo d e entrada.
A la clase d e gram áticas para las cu a les p od em os construir analizadores sin tá ctico s predictiv o s q u e analicen k sím b olos por ad elan tad o en la en trad a, s e le co n o ce algu nas v eces com o
la clase L L (k). E n la sección 4 .4 .3 hablarem os sobre la cla se L L (1), pero presentarem os antes
ciertos cálcu los, llam ados PRIMERO y SIGUIENTE, en la secció n 4.4.2. A p artir d e los con jun tos
PRIMERO y SIGUIENTE para u n a gram ática, con stru irem os “ta b la s d e an álisis sin tá ctico pred ictivo” , las cu ales hacen ex p líc ita la elección d e la p rod ucción d u ra n te e l an álisis sin tá ctico
d escen dente. E sto s con jun tos tam b ién so n ú tiles d urante e l an álisis sin tá ctico ascendente.
En la sección 4 .4 .4 proporcionarem os u n algoritm o d e análisis sin tá ctico n o recursivo q ue
m antiene u na p ila e n form a ex p líc ita , en vez d e hacerlo en form a im p lícita m ed ian te llam adas
recursivas. Por ú ltim o, en la sección 4.4.5 hablarem os sobre la recuperación d e errores d urante
e l an álisis sin táctico descendente.
4.4 A nálisis sintáctico descendente
4 .4 .1
219
A n á lis is s in tá c tic o d e d e s c e n s o r e c u r s iv o
void
1)
2)
3)
4)
5)
6)
7)
A () {
E legir u na producción A , A
X iX 2
X k\
for ( i = 1 a k ) {
if ( X i es u n n o term inal )
llam ar a l procedim iento X¿();
else if ( X i e s igual al sím b olo d e en tra d a actu al a )
avanzar la en trad a h a sta e l sigu ien te sím bolo;
else /* h a ocurrido un error * /;
}
}
Figura 4.13: Un procedimiento ordinario para un no terminal en un analizador sintáctico descendente
U n program a d e análisis sin táctico d e d escen so recursivo co n siste en un con ju n to d e procedi­
m ien tos, u no para ca d a n o term in al. L a ejecución em p ieza co n e l procedim iento para e l sím bolo
inicial, q u e se d etien e y anuncia q ue tu vo é x ito si el cuerpo d e su p rocedim ien to ex p lo ra to d a
la cad en a co m p leta d e entrada. E n la figura 4 .1 3 aparece e l seu d o có d ig o para un no term inal
com ú n . O bserve q u e e s te seu d ocód igo es no d eterm in ista, y a que em p ieza eligiend o la produc­
ción A q u e d eb e aplicar d e u na form a no especificada.
E l d escen so recursivo gen eral p uede requerir d e un rastreo h acia atrás; es d ecir, ta l vez
requiera exploracion es rep etid as sob re la entrada. S in em bargo, raras veces se n ecesita el ras­
treo h acia atrás para analizar las con stru cciones d e u n lengu aje d e program ación, por lo que
los analizadores sin tá ctico s co n é s te n o se ven con frecuencia. In clu so para situ acion es com o el
an álisis sin tá ctico d e un lengu aje natural, e l rastreo h acia atrás no es m uy eficien te, por lo cu al
s e prefieren m étod os tabulares com o e l algoritm o d e program ación d in ám ico d el ejercicio 4.4.9,
o el m éto d o d e E arley (v ea las n otas b ib liográficas).
P ara p erm itir el rastreo h acia atrás, hay q ue m odificar e l có d ig o d e la figura 4.13. E n primer
lugar, no p od em os elegir u na producción A ú n ica en la lín ea (1 ), p o r lo q u e d eb em os probar
ca d a u n a d e las d iversas producciones e n cierto orden. D esp ués, e l fallo e n la lín ea (7) no e s defi­
n itiv o , sin o q ue sólo su giere q ue n ecesitam os regresar a la línea (1) y probar o tr a producción A.
S ólo si no hay m ás p roducciones A p ara probar es cu an do d eclaram os q ue s e h a en con trad o un
error en la entrada. P ara p o d er probar otra p rod ucción A , d eb em os restablecer el apuntador de
en trad a a la p osició n en la que se en con trab a cu a n d o llegam os p o r prim era v ez a la lín ea ( 1 ).
E s decir, s e requiere u n a variable local para alm acenar e s te apuntador d e entrada, para u n uso
futuro.
Ejemplo 4.29: C onsidere la sigu ien te gram ática:
S
A
—>
c A d
a b | a
P ara construir un árbol d e análisis sin tá ctico d escen d en te para la ca d en a d e en trad a w = cad,
em p ezam os co n un árbol q ue co n siste e n un so lo n o d o etiq u eta d o com o 5 , y e l apuntador d e en­
tra d a a p u n ta a c, el prim er sím b olo d e w. S só lo tien e u n a producción, por lo q u e la utilizam os
220
Capítulo 4. A nálisis sintáctico
para expandir S y obtener el árbol de la figura 4.14(a).La hoja por la izquierda, etiquetada como c,
coincide con el primer símbolo de la entrada tí?, por lo que avanzamos el apuntador de entrada
hasta a, el segundo símbolo de w,y consideramos la siguiente hoja, etiquetada c o m o A.
S
c
A
S
d
d
A
c
a
(a)
S
b
(b)
c
A
d
a
(c)
Figura 4.14: Los pasos de un análisis sintáctico descendente
Ahora expandimos A mediante la primera alternativa A -► a b para obtener el árbol de
la figura 4.14(b). Tenemos una coincidencia para el segundo símbolo de entrada a, por lo que
avanzamos el apuntador de entrada hasta d, el tercer símbolo de entrada, y comparamos a d
con la siguiente hoja, etiquetada con b. C o m o b no coincide con d, reportamos un error y re­
gresamos a A para ver si hay otra alternativa para A que no hayamos probado y que pueda
producir una coincidencia.
Al regresar a A , debemos restablecer el apuntador de entrada a la posición 2, la posición
que tenía cuando llegamos por primera vez a A, lo cual significa que el procedimiento para A
debe almacenar el apuntador de entrada en una variable local.
La segunda alternativa para A produce el árbol de la figura 4.14(c). L a hoja a coincide con
el segundo símbolo de tí?y la hoja d coincide con el tercer símbolo. C o m o hemos producido un
árbol de análisis sintáctico para tí?, nos detenemos y anunciamos que se completó el análisis
sintáctico con éxito.
□
U n a gramática recursiva por la izquierda puede hacer que un analizador sintáctico de des­
censo recursivo, incluso uno con rastreo hacia atrás, entre en un ciclo infinito. Es decir, al tratar
de expandir una no terminal A , podríamos en un mome nt o dado encontramos tratando otra
vez de expandir a A , sin haber consumido ningún símbolo de la entrada.
4.4.2
P R IM E R O y S IG U IE N T E
La construcción de los analizadores sintácticos descendentes y ascendentes es auxiliada por dos
funciones, PRIM E RO y SIGUIENTE, asociadas con la gramática G. Durante el análisis sintáctico
descendente, PRIM E RO y SIGUIENTE nos permiten elegir la producción que vamos a aplicar, con
base en el siguiente símbolo de entrada. Durante la recuperación de errores en m o d o de pánico, los
conjuntos de tokens que produce SIGUIENTE pueden usarse como tokens de sincronización.
Definimos a PRIMERO(a), en donde a es cualquier cadena de símbolos gramaticales, como
el conjunto de terminales que empiezan las cadenas derivadas a partir de a. Si a => e, entonces
6 también se encuentra en PRIM E RO (a). Por ejemplo, en la figura 4.15, A
c y ™por lo que c
está en PRIMERO(^4).
Para una vista previa de c ó m o usar P R I M E R O durante el análisis sintáctico predictivo,
considere dos producciones A , A
a |¿3, en donde PRIM ER O (a) y PRIME R O (0) son conjuntos
4.4 A nálisis sintáctico descendente
221
Figura 4.15: El terminal c está en P R I M E R 0 (j4) y a está en SIGUIENTE(;4)
separados. Entonces, podemos elegir una de estas producciones A si analizamos el siguiente
símbolo de entrada a, ya que a puede estar a lo m á s en P R I M E R O (a) o en P R I M E R O (/3), pero no
en ambos. Por ejemplo, si a está en PRIMERO(/?), elegimos la producción A - > 0. Exploraremos
esta idea en la sección 4.4.3, cuando definamos las gramáticas LL(1).
Definimos a SIGUIENTE(Á), para el no terminal A , c o m o el conjunto de terminales a que
pueden aparecer de inmediato a la derecha de A en cierta forma de frase; es decir, el conjunto
de terminales A de tal forma que exista una derivación de la forma S
olA ü0 , para algunas a y
0, c o m o en la figura 4.15. Observe que pudieron haber aparecido símbolos entre A y a, en algún
m o m e n t o durante la derivación, pero si es así, derivaron a e y desaparecieron. Además, si A
puede ser el símbolo por la derecha en cierta forma de frase, entonces $ está en SIGUIENTE (A);
recuerde que $ es un símbolo “
delimitador”especial, el cual se supone que no es un símbolo de
ninguna gramática.
Para calcular PRI ME R O( X ) para todos los símbolos gramaticales X, aplicamos las siguientes
reglas hasta que no pueden agregarse m á s terminales o e a ningún conjunto PRIMERO.
1. Si X es un terminal, entonces P R I M E R O ( X ) = {X}.
2. Si X es un no terminal y X
Y \ Y2 ••• Yk es una producción para cierta k > 1, entonces
se coloca a en PR I ME R O( X ) si para cierta ¿, a está en P R I M E R O (Y¿), y e está en todas
las funciones PRIMERO(Yi), ..., P R I M E R O (Vj-i); es decir, Yi ••• Y¿_i => e. Si € está en
PRIMERO( Y j) para todas las j — 1,2, ..., k, entonces se agrega e a PRIMERO(X). Por ejem­
plo, todo lo que hay en PRIMERO( Y \) se encuentra sin duda en PRIMERO(X). Si Y \ no
deriva a e, entonces no agregamos nada m á s a PRIMERO(X), pero si Y \= > e, entonces
agregamos PRIMERO( Y¿), y así sucesivamente.
3. Si X ->* e es una producción, entonces se agrega e a PRTMERO(X).
Ahora, podemos calcular P R I M E R O para cualquier cadena X \ X 2
X n de la siguiente m a ­
nera. Se agregan a P R I ME RO ( Xi X 2
X n) todos los símbolos que no sean e de P R I M E R O (Xi).
También se agregan los símbolos que no sean e de PR.IMERO(X2), si e está en PRIMERO(Xi); los
símbolos que no sean e de P R I M E R O ( X 3), si e está en PRIMERO(Xj) y P R I M E R 0 ( X 2); y así suce­
sivamente. Por último, se agrega e a P R I M E R O (X iX 2
X n) si, para todas las ¿, e se encuentra
en P R I M E R O (X¿).
Para calcular SIGUIENTE(v4) para todas las no terminales A ,se aplican las siguientes reglas
hasta que no pueda agregarse nada a cualquier conjunto SIGUIENTE.
1. Colocar $ en SIGUIENTE(5), en donde S es el símbolo inicial y $ es el delimitador derecho
de la entrada.
222
Capítulo 4. A nálisis sintáctico
2. Si hay una producción A
está en SIGUIENTE(B).
aB/3, entonces todo lo que hay en P R I M E R O (/3) excepto e
3. Si hay una producción A -* aB , o una producción A
aB¡3, en donde PRIMERO(/?)
contiene a e, entonces todo lo que hay en SIGUIENTE(í4) está en SIGUIENTE(B).
Ejemplo 4.30: Considere de nuevo la gramática no recursiva por la izquierda (4.28). Entonces:
1. PRIMERO(F) = P R I M E R O (T) = PRIMERO(E) = {(, id}. Para ver por qué, observe que las
dos producciones para F tienen producciones que empiezan con estos dos símbolos termi­
nales, id y el paréntesis izquierdo. T sólo tiene una producción y empieza con F. C o m o
F no deriva a e, PR IM E RO ( T) debe ser igual que P R I M E R O (F). El mismo argumento se
cumple con P R I M E R O (E ).
2. P R I M E R O (E ') = { + , e } . La razón es que una de las dos producciones para E ' tiene un
cuerpo que empieza con el terminal +, y la otra es e. C a d a vez que un no terminal deriva
a €, colocamos a e en P R I M E R O para ese no terminal.
3. PRIMERO(T') = {*, e}. El razonamiento es análogo al de PRIMERO(-E')4. SIGUIENTE ( £ ) = SIGUIENTE^') = { ) , $ }. C o m o E es el símbolo inicial, SIGUIENTE(£)
debe contener $. El cuerpo de la producción ( E ) explica por qué el paréntesis derecho
está en SIGUIENTE(£). Para E \ observe que esta no terminal sólo aparece en los extre­
m o s de los cuerpos de las producciones E. Por ende, SIGUIENTE) i?') debe ser el mismo
que SIGUIENTE(£).
5. SIGUIENTE) T) = SIGUIENTE) V ) — {+, ), $}. Observe que T aparece en las producciones
sólo seguido por E '. Por lo tanto, todo lo que esté en P R I M E R O (l^), excepto e, debe estar
en SIGUIENTE) T); eso explica el símbolo +. N o obstante, c o m o PRIMERO) E ') contiene a
e (es decir, E ' % e), y E f es la cadena completa que va después de T e n los cuerpos de las
producciones E ,todo lo que hay en SIGUIENTE)2?) también debe estar en SIGUIENTE) T).
Eso explica los símbolos $ y el paréntesis derecho. E n cuanto a T', c o m o aparece sólo en
los extremos de las producciones T, debe ser que SIGUIENTE) T ') = SIGUIENTE) T).
6. SIGUIENTE(F) = { + , *, ) ,$ } . El razonamiento es análogo al de T en el punto (5).
4 .4 .3
G r a m á t i c a s L L (1 )
Los analizadores sin tá ctico s predictivos, es d ecir, los analizadores sin tá ctico s d e d escen so re­
cursivo q ue no n ecesitan rastreo h acia atrás, p ueden construirse para u na cla se d e gram áticas
llam adas L L )1). L a prim era “L ” en L L )1) es p ara explorar la en trad a d e izquierda a d erech a
(por left e n in g lés), la seg u n d a “L ” p ara producir u n a d erivación p or la izquierda, y el “1” para
usar u n sím b olo d e en trad a d e an ticip ación en ca d a paso, para tom ar las decision es d e acción
d el análisis sin táctico.
4.4 A nálisis sintáctico descendente
223
D ia g r a m a s d e tr a n s ic ió n p a r a a n a liz a d o re s s in tá c tic o s p re d ic tiv o s
Los diagramas de transición son útiles para visualizar los analizadores sintácticos pre­
dictivos. Por ejemplo, los diagramas de transición para las no terminales E y E ' de la
gramática (4.28) aparecen en la figura 4.16(a). Para construir el diagrama de transición
a partir de una gramática, primero hay que eliminar la recursividad por la izquierda y
después factorizar la gramática por la izquierda. Entonces, para cada no terminal A,
1. Se crea un estado inicial y un estado final (retorno).
2. Para cada producción A -► X iX 2 ••• X k., se crea una ruta desde el estado inicial
hasta el estado final, con los flancos etiquetados c o m o X h X 2, . . . , X k. Si A
e, la
ruta es una línea que se etiqueta c o m o e.
Los diagramas de transición para los analizadores sintácticos predictivos difieren de
los diagramas para los analizadores léxicos. Los analizadores sintácticos tienen un diagra­
m a para cada no terminal. Las etiquetas de las líneas pueden ser tokens o no terminales.
U n a transición sobre un token (terminal) significa que tomamos esa transición si ese
token es el siguiente símbolo de entrada. U n a transición sobre un no terminal A es una
llamada al procedimiento para A.
C o n una gramática LL(1), la ambigüedad acera de si se debe tomar o no una línea e
puede resolverse si hacemos que las transiciones e sean la opción predeterminada.
Los diagramas de transición pueden simplificarse, siempre y cuando se preserve la
secuencia de símbolos gramaticales a lo largo de las rutas. También podemos sustituir el
diagrama para un no terminal A, en vez de una línea etiquetada como A. Los diagramas en
las figuras 4.16(a) y (b) son equivalentes: si trazamos rutas de E a un estado de aceptación
y lo sustituimos por E \ entonces, en ambos conjuntos de diagramas, los símbolos gramati­
cales a lo largo de las rutas forman cadenas del tipo T + T + ••• + T. El diagrama en (b)
puede obtenerse a partir de (a) mediante transformaciones semejantes a las de la sección
2.5.4, en donde utilizamos la eliminación de recursividad de la parte final y la sustitución
de los cuerpos de los procedimientos para optimizar el procedimiento en un no terminal.
L a clase de gramáticas LL(1) es lo bastante robusta c o m o para cubrir la mayoría de las
construcciones de programación, aunque hay que tener cuidado al escribir una gramática ade­
cuada para el lenguaje fuente. Por ejemplo, ninguna gramática recursiva por la izquierda o
ambigua puede ser LL(1).
U n a gramática G es LL(1) si, y sólo si cada vez que A
a \ 0 son dos producciones dis­
tintas de G,se aplican las siguientes condiciones:
1. Para el no terminal a, tanto a c o m o 0 derivan cadenas que empiecen con a.
2. A lo más, sólo a o 0 puede derivar la cadena vacía.
3. Si 0
e, entonces a no deriva a ninguna cadena que empiece con una terminal en
SIGUIENTE (A). D e igual forma, si a ^ c, entonces 0 no deriva a ninguna cadena que
empiece con una terminal en SIGUIENTE(i4).
224
Capítulo 4. A nálisis sintáctico
E:
Ef :
(a)
(b)
Figura 4.16: Diagramas de transición para los no terminales E y E ' de la gramática 4.28
Las primeras dos condiciones son equivalentes para la instrucción que establece que P R I M E R O (a)
y PRIMERO(/?) son conjuntos separados. L a tercera condición equivale a decir que si e está en
P R I M E R O (/3), entonces PRIMERO(a) y SIGUIENTE( í4) son conjuntos separados, y de igual forma
si e está en PRIMERO(a).
Pueden construirse analizadores sintácticos predictivos para las gramáticas LL(1), ya que
puede seleccionarse la producción apropiada a aplicar para una no terminal con sólo analizar
el símbolo de entrada actual. Los constructores del flujo de control, con sus palabras clave
distintivas, por lo general, cumplen con las restricciones de LL(1). Por ejemplo, si tenemos las
siguientes producciones:
in s tr
-►
|
if ( e x p r ) i n s t r e ls e
w h ile ( e x p r ) i n s t r
{
k s ta -in s tr
in s tr
}
entonces las palabras clave if , w h i l e y el símbolo { nos indican qué alternativa es la única que
quizá podría tener éxito, si vamos a buscar una instrucción.
El siguiente algoritmo recolecta la información de los conjuntos P R I M E R O y SIGUIENTE en
una tabla de análisis predictivo M [A , a], un arreglo bidimensional, en donde A es un no terminal
y a es un terminal o el símbolo $, el marcador de fin de la entrada. El algoritmo se basa en la
siguiente idea: se elige la producción A - > a si el siguiente símbolo de entrada a se encuentra
en PRIMERO(a). L a única complicación ocurre cuando a = e, o en forma má s general, a =>• e.
E n este caso, debemos elegir de nuevo A - » a si el símbolo de entrada actual se encuentra en
SIGUIENTE (^4), o si hemos llegado al $ en la entrada y $ se encuentra en SIGUIENTE) ,4).
Algoritm o
ENTRADA:
SALIDA:
4 .3 1 :
Construcción de una tabla de análisis sintáctico predictivo.
L a gramática G.
L a tabla de análisis sintáctico M.
M ÉTO D O :
Para cada producción
A
a de la gramática, hacerlo siguiente:
1. Para cada terminal a en PRIMERO(j4), agregar A -► a a M [A, a].
2. Si e está en PRIMERO(a), entonces para cada terminal b en SIGUIENTE (A), se agrega
A -» a a M [A , 6]. Si e está en P R I M E R O (a) y $ se encuentra en SIGUIENTE(í4), se agre­
ga A
a a M [A , $] también.
4.4 A nálisis sintáctico descendente
225
Si d esp u és d e realizar lo anterior, no h ay producción e n M [A , a], en to n ces se esta b lece M [A , a]
a e r r o r (que, por lo general, representam os m ed ian te u n a e n tra d a v a cía en la ta b la ).
□
E j e m p l o 4 . 3 2 : P ara la gram ática de exp resion es (4.28), el A lgoritm o 4 .31 p rod u ce la ta b la de
an álisis sin tá ctico en la figura 4.17. Los esp acios en blanco so n entradas d e error; los espacios
que no está n e n blanco in dican u n a p rod ucción con la cu a l se ex p a n d e un no term inal.
S ímbolo
No
TERMINAL
id
E
E —►T E '
Ef
T
de entrada
*
+
E
E'
)
$
E '^ e
E '^ e
TEf
+TE'
T -» FT'
T —)■F T ‘
r
T'
F
(
F - > id
*F T/
T ’ -> e
F
(E )
F igu ra 4.17: T a b la d e an álisis sin tá ctico M p a r a el ejem p lo 4 .32
C onsidere la producción E
T E '. C om o
P R I M E R O ^ ') = PRIMERO(T) = { (, id }
e s ta p rod ucción se agrega a M [E , (] y M [E , id ]. L a p rod ucción E ' ->■ + T E ' se agrega a M [ E \
+ ] , y a q u e PRIMERO{+ T E * ) = { + } . C om o SIGUIENTE ( £ ') ) = { ) , $ } , l a p rod ucción E ' -+ e se
agrega a M [E ', )] y a M [ E \ $].
□
E l algoritm o 4.31 p uede aplicarse a cualquier gra m á tica G p a ra producir u na ta b la de
an álisis sin tá ctico M . P ara c a d a gram ática L L (1), ca d a en tra d a en la ta b la d e an álisis sin tác­
tico id en tifica en form a ú n ica a u na producción, o in d ica un error. S in em bargo, para algunas
gram áticas, M p uede ten er algunas entradas q u e ten g a n m ú ltip les d efinicion es. Por ejem p lo, si
G es recu rsiva por la izquierda o am bigua, en to n ces M tendrá p o r lo m en os u n a en trad a con
m ú ltip les definiciones. A un qu e la elim in ación d e la recursividad por la izquierda y la factorización por la izquierda son fáciles d e realizar, h ay algunas g ram áticas para la s cu ales ningún tipo
d e alteración producirá u n a g ram ática L L (1).
E l len gu aje en el sigu ien te ejem p lo no tien e u na g ra m á tica L L ( 1 ).
4 . 3 3 : L a sigu ien te gram ática, q ue ab strae el problem a d el else co lg a n te, se repite
aq u í d e l ejem p lo 4.22:
E je m p lo
S -►
S ' -+
E -+
iE tS S ' | a
eS | e
b
L a tab la d e an álisis sin tá ctico
M [ S ', e] con tien e ta n to a S ' ^
L a gram ática es am b igu a y
d u cción usar cu an d o se v e u n a
para e s ta g ra m á tica aparece e n la figura 4.18. La en trad a para
e S com o a S '
e.
la am bigüedad s e m a n ifiesta m ed ian te u na elección d e q ué pro­
e ( e l s e ) . P od em os resolver e s ta am bigüedad eligien d o S ' -► eS.
226
Capítulo 4. A nálisis sintáctico
Símbolo
No
TERMINAL
5
a
6
de entrada
e
5 —> a
i
S
t
iE tS S '
S' ^ 6
S'
S
S '^ e
S r —» c S
E
E —» ò
F igu ra 4.18: T a b la d e an álisis sin tá ctico M para e l ejem p lo 4 .33
E s ta elección corresponde a la asociación d e un e l s e con e l t h e n anterior m ás cercano. O b­
serve q ue la elección S ' -► e ev ita ría q ue e se m etiera en la p ila o s e elim inara d e la en trad a, y
eso d efin itivam en te e s tá m al.
□
4.4.4
A n á lisis sin tá ctico p re d ic tiv o no re cu rsivo
P od em os construir un analizador sin tá ctico predictivo no recursivo m ed ian te el m anten im ien to
ex p lícito d e u n a pila, en vez d e hacerlo m ediante llam adas recursivas im p lícitas. E l analizador
sin tá ctico im ita u na d erivación por la izquierda. S i w es la en trad a q u e se h a relacionado h a sta
ahora, en ton ces la p ila con tien e u n a secu en cia d e sím b olos gram aticales a d e ta l form a que:
El analizador sin tá ctico con trolad o por u n a tab la , que s e m u estra e n la figura 4 .1 9 , tien e un
búfer d e en trad a, u na p ila q u e con tien e u na secu en cia d e sím b olos gram aticales, u na ta b la de
análisis sin tá ctico con stru id a por e l A lgoritm o 4 .3 1 , y un flujo d e sa lid a . E l búfer d e en trad a
co n tien e la cad en a q ue s e v a a analizar, segu id a p or el m arcador final $. R eu tiliza m o s e l sím ­
b olo $ para m arcar la p arte inferior d e la p ila, q ue al principio co n tien e e l sím b olo in icial d e la
gra m ática en cim a d e $.
El analizador sin tá ctico s e con tro la m ediante un program a q ue con sid era a X , e l sím b olo
en la parte superior d e la pila, y a a, el sím b olo d e en trad a actual. S i X e s un no term in al, el
analizador sin tá ctico elige u n a producción X m ed ian te u n a co n su lta a la en trad a M [X , a] d e la
ta b la d e an álisis sin táctico M (aq u í p od ría ejecutarse có d ig o adicional; por ejem p lo, el cód igo
para construir un n od o en un árbol d e an álisis sin tá ctico ). E n cualquier o tro ca so , verifica si
h ay u na coin cid en cia en tre el term inal X y e l sím b olo d e en trad a actu al a.
El com p ortam ien to d el analizador sin tá ctico p uede describirse e n térm inos d e su s configura­
ciones, q ue proporcionan e l con ten ido d e la p ila y e l resto d e la entrada. E l sigu ien te algoritm o
d escrib e la form a e n q ue se m anipulan las configuraciones.
A lg o r it m o
4 .3 4 :
A nálisis sin tá ctico p redictivo, con trolad o p or u n a tabla.
E N T R A D A : U n a cad en a w y u n a ta b la d e an álisis sin tá ctico M p ara la gra m á tica G.
SALID A: Si w e s tá en L (G ), u n a d erivación por la izquierda d e w\ en caso contrario, u n a indi­
cación d e error.
4.4 A nálisis sintáctico descendente
227
F igu ra 4.19: M od elo d e u n analizador sin tá ctico p redictivo, con trolad o p or u n a ta b la
M ÉTO D O : A l p rin cip io, e l analizador sin tá ctico se en cu en tra en u n a configuración con
en
e l búfer d e entrada, y el sím b olo in icial 5 d e G en la p arte su perior d e la pila, p or en cim a d e $.
E l program a en la figura 4.20 u tiliza la ta b la d e an álisis sin tá ctico predictivo M p a r a producir
u n an álisis sin tá ctico predictivo para la entrada.
□
esta b lecer ip para q ue ap un te al prim er sím b olo d e w\
esta b lecer X co n e l sím b olo d e la parte su perior d e la pila;
w h i l e ( X * $ ) { / * la p ila no e s tá v a cía * /
i f ( X es a ) sacar d e la p ila y avanzar ip;
e ls e
i f (X e s un term inal ) erro r{);
e ls e
i f (M [X , a] es u n a en tra d a d e error ) erro rQ ;
e ls e
i f ( M[ X , a] = X -> Y \Y 2 - Yk ) {
enviar d e salid a la producción X
Y i Y2
Y k;
sacar d e la pila;
m eter Y*, Y¿_i, . . . , Yi en la pila, con Yi e n la p arte superior;
}
estab lecer X co n e l sím b olo d e la p a rte superior d e la pila;
}
F igu ra 4.20: A lgoritm o d e an álisis sin tá ctico predictivo
4 . 3 5 : C onsidere la g ra m á tica (4.28); s e m uestra la ta b la de análisis sin tá ctico e n la
figura 4 .17. Con la en trad a i d + i d * i d , e l analizador predictivo sin recursividad d e l A lgorit­
m o 4.34 realiza la secu en cia d e m ovim ientos en la figura 4.21. E sto s m ovim ien tos corresponden
a u n a d erivación por la izquierda (v ea la figura 4 .1 2 p a ra la d erivación com pleta):
E je m p lo
E
=»
bu
TE'
=>
bn
F T 'E '
=> id
bu
T 'E '
=> id
bu
E'
=> id
bu
+
T E ' =>
bu
228
Capítulo 4. A nálisis sintáctico
Coincidencia
P ila
E ntrada
id
id
id
id +
id +
id +
id + id
id + id
id + id *
id + id *
id + id * id
id + id * id
id + id * id
ES
T E 'S
F V E 'S
id V E ? S
VE?S
E /S
+ TE?S
T E 'S
F V E 'S
id V E ? S
VE?S
* F V E 'S
F V E 'S
id V E ? S
VE?S
E?S
S
id + id * idS
id + id * idS
id + id * idS
id + id * idS
+ id * idS
+ id * idS
+ id * idS
id * idS
id * idS
id * idS
*id$
*idS
idS
idS
S
s
s
Acción
em itir E
TE'
em itir T —» F T '
em itir F —>id
relacionar id
em itir V -»■e
em itir B? —>+ T E '
relacionar +
em itir T -+ F V
em itir F —>id
relacionar id
em itir V -►* F T '
relacionar *
em itir F
id
relacionar id
em itir V —> e
em itir E?
e
F igu ra 4.21: M ovim ientos q u e realiza un analizador sin tá ctico p red ictivo con la en trad a
¡d +
id
* id
O bserve q u e las form as d e frases en e s ta d erivación corresponden a la en trad a q u e y a se h a
relacionado (en la colu m n a COINCIDENCIA), se g u id a d el con ten ido d e la pila. L a en trad a rela­
cionad a se m uestra só lo para resaltar la correspondencia. P or la m ism a razón, la p arte superior
d e la p ila e s tá a la izquierda; cu an d o considerem os e l análisis sin tá ctico ascen dente, será más
n atural m ostrar la p arte su perior d e la p ila a la derecha. E l apuntador d e la en trad a a p u n ta al
sím b olo por la izquierda d e la cad en a en la co lu m n a ENTRADA.
□
4.4.5
R e c u p e ra ció n de erro re s en el an álisis sin tá ctico p re d ic tiv o
E s ta d iscu sión sobre l a recuperación d e errores s e refiere a la p ila d e un analizador sin tá ctico
p red ictivo con trolad o p or u n a tabla, y a q ue hace ex p lícita s lo s term in ales y no term in ales q ue
e l analizador sin táctico esp era relacionar con e l resto d e la entrada; las técn ica s tam b ién p ueden
usarse con e l an álisis sin táctico de d escen so recursivo.
D urante el análisis sin táctico predictivo, un error se d e te c ta cu a n d o e l term inal en la p arte
superior d e la p ila no coin cid e con el sigu ien te sím b olo d e en trad a, o cu a n d o e l n o term in al A
se en cu en tra e n la p arte superior d e la pila, a es e l sig u ien te sím b olo d e en trad a y M [A , a] es
e r r o r (es decir, la en trad a en la ta b la d e análisis sin tá ctico e s tá va cía ).
M o do
d e p á n ic o
La recuperación d e errores e n m odo d e p ánico s e basa e n la id ea d e om itir sím b olos en la en ­
trad a h a sta q u e aparezca un token en un con ju n to seleccion ad o d e tokens d e sincronización. Su
4.4 A nálisis sintáctico descendente
229
efectividad depende de la elección del conjunto de sincronización. Los conjuntos deben elegirse
de forma que el analizador sintáctico se recupere con rapidez de los errores que tengan una
buena probabilidad de ocurrir en la práctica. Algunas heurísticas son:
1. C o m o punto inicial, colocar todos los símbolos que están en SIGUIENTE (.4) en el conjun­
to de sincronización para el no terminal A. Si omitimos tokens hasta que se vea un ele­
mento de S E G U I M E N T O (A) y sacamos a A de la pila, es probable que el análisis sintáctico
pueda continuar.
2. N o basta con usar SIGUIENTE(>1) c o m o el conjunto de sincronización para A. Por ejem­
plo, si los signos de punto y c o m a terminan las instrucciones, c o m o en C, entonces las
palabras reservadas que empiezan las instrucciones no pueden aparecer en el conjunto
SIGUIENTE del no terminal que representa a las expresiones. U n punto y c o m a faltante
después de una asignación puede, por lo tanto, ocasionar que se omita la palabra reser­
vada que empieza la siguiente instrucción. A menudo hay una estructura jerárquica en
las construcciones en un lenguaje; por ejemplo, las expresiones aparecen dentro de las
instrucciones, las cuales aparecen dentro de bloques, y así sucesivamente. Al conjunto
de sincronización de una construcción de bajo nivel podemos agregar los símbolos que
empiezan las construcciones de un nivel m á s alto. Por ejemplo, podríamos agregar pala­
bras clave que empiezan las instrucciones a los conjuntos de sincronización para los no
terminales que generan las expresiones.
3. Si agregamos los símbolos en P R I M E R O (A) al conjunto de sincronización para el no ter­
minal A ,entonces puede ser posible continuar con el análisis sintáctico de acuerdo con A ,
si en la entrada aparece un símbolo que se encuentre en P R I M E R O (4).
4. Si un no terminal puede generar la cadena vacía, entonces la producción que deriva a e
puede usarse c o m o predeterminada. Al hacer esto se puede posponer cierta detección de
errores, pero no se puede provocar la omisión de un error. Este método reduce el número
de terminales que hay que considerar durante la recuperación de errores.
5. Si un terminal en la parte superior de la pila no se puede relacionar, una idea simple es
sacar el terminal, emitir un mensaje que diga que se insertó el terminal, y continuar con
el análisis sintáctico. E n efecto, este método requiere que el conjunto de sincronización
de un token consista de todos los demás tokens.
E j e m p l o 4.36: El uso de los símbolos en P R I M E R O y SIGUIENTE c o m o tokens de sincroniza­
ción funciona razonablemente bien cuando las expresiones se analizan de acuerdo con la gramár
tica usual (4.28). L a tabla de análisis sintáctico para esta gramática de la figura 4.17 se repite
en la figura 4.22, en donde “
sinc”indica los tokens de sincronización obtenidos del conjunto
SIGUIENTE de la no terminal en cuestión. Los conjuntos SIGUIENTE para las no terminales se
obtienen del ejemplo 4.30.
L a tabla en la figura 4.22 debe usarse de la siguiente forma. Si el analizador sintáctico busca
la entrada M[A, a] y descubre que está en blanco, entonces se omite el símbolo de entrada a. Si la
entrada es “
sinc”,entonces se saca el no terminal que está en la parte superior de la pila, en un
intento por continuar con el análisis sintáctico. Si un token en la parte superior de la pila no
coincide con el símbolo de entrada, entonces sacamos el token de la pila, c o m o dijimos antes.
230
Capítulo 4. A nálisis sintáctico
Símbolo
No
TERMINAL
id
E
E -» TF?
Ff
T
+
de entrada
*
(
E - » TE?
E -> + T E '
T —» F T f
T —» FT*
sinc
T'
F —» id
sinc
sinc
sinc
E -> e
E -> e
sinc
sinc
T ' - * c T* —y 6
7 V- > * F 7 V
F
S
)
sinc
F -> (E )
sinc
sinc
F igu ra 4.22: T ok en s d e sincronización agregados a la ta b la d e an álisis sin tá ctico
d e la figura 4.17
Con la en trad a errón ea ) i d * + id , el analizador sin tá ctico y e l m ecanism o d e recuperación
d e errores d e la figura 4 .2 2 se co m p o rta com o en la figura 4.23.
□
P ila
ES
ES
TE' S
F T 'E ' S
id
T 'E 'S
T 'E 'S
* F T 'E ' S
F T 'E ' S
T 'E 'S
E 'S
+ T E 'S
TE' S
F T 'E ' S
i d T 'E ' S
T 'E 'S
E 'S
S
E ntrada
Comentario
) id * + id S error, om itir )
id * + id S id e s tá en PRIMERO(£)
id * + id S
id * + id S
id * + id S
* + id S
* + id S
H-idS error, M[F, + ] = sin c
+ idS Se sacó F
+ idS
+ idS
idS
idS
id S
S
s
s
F igu ra 4.23: M ovim ien tos d e an álisis sin tá ctico y recuperación d e errores realizados
por un analizador sin tá ctico predictivo
La d iscu sión anterior sobre la recuperación e n m odo d e pánico no señ a la el p u n to im portante
relacionado co n los m ensajes d e error. E l diseñador d el com pilador d eb e proporcionar m ensajes
d e error inform ativos q u e no sólo describan e l error, sin o q u e tam bién llam en la atención hacia
e l lugar en donde se descubrió e l error.
4.4 A nálisis sintáctico descendente
231
R e c u p e r a c ió n a n i v e l d e f r a s e
L a recuperación d e errores a nivel d e frase se im p lem en ta llenando las entradas e n blanco en la
ta b la d e an álisis sin tá ctico predictivo co n apuntadores a rutinas d e error. E sta s ru tinas pueden
m odificar, insertar o elim inar sím b olos en la en trad a y em itir m ensajes d e error apropiados.
Tam bién p ueden sacar d e la pila. L a alteración d e los sím b olos d e la p ila o el p roceso d e m eter
nuevos sím b olos a la p ila es cu estion ab le por d o s razones. E n prim er lugar, los pasos q ue realiza
e l analizador sin tá ctico p odrían en to n ces no corresponder a la d erivación d e n ingu na palabra
e n el lenguaje. E n segun do lugar, d eb em os asegurarnos d e q u e no haya p osib ilid ad d e un ciclo
in finito. V erificar q ue cualquier acción d e recuperación o casion e en u n m om ento d a d o q u e se
con su m a un sím b olo d e en trad a (o q u e s e redu zca la p ila si se h a llegado a l fin d e la entrada)
e s u n a b u en a form a d e protegerse con tra ta les ciclos.
4.4.6
E je rc ic io s p a ra la sección 4.4
E j e r c ic io 4 .4 .1 : P ara cad a u n a d e las sigu ien tes gram áticas, id ee analizadores sin tá ctico s pred ictiv o s y m uestre las tab las d e an álisis sin tá ctico . P u ed e factorizar p o r la izquierda o elim inar
la recursividad por la izquierda d e su s gram áticas prim ero.
a) L a gram ática d e l ejercicio 4 .2 .2 (a ).
b) L a gram ática d e l ejercicio 4 .2 .2 (b ).
c) L a gram ática d e l ejercicio 4 .2 .2 (c).
d ) L a gram ática d e l ejercicio 4 .2 .2 (d ).
e) L a gram ática d e l ejercicio 4 .2 .2 (e).
f) L a gram ática d e l ejercicio 4 .2 .2 (g ).
!! E j e r c ic io 4 .4 .2 : ¿E s p osib le, m ediante la m odificación d e la g ra m á tica en cualquier form a,
con stru ir un analizador sin táctico predictivo para el len gu aje d el ejercicio 4 .2 .1 (expresiones
p ostfijo co n e l operando a)?
E j e r c ic io 4 .4 .3 : C alcu le PRIMERO y SIGUIENTE para la gra m á tica d el ejercicio 4 .2 .1 .
E j e r c ic io 4 .4 .4 : C alcule PRIMERO y SIGUIENTE para c a d a u n a d e las g ram áticas d el ejercicio
4.2 .2 .
E j e r c ic io 4 .4 .5 : L a gram ática 5 - » a S a \ a a gen era to d a s las cad en as d e lon gitu d uniform e
d e as. P od em os idear u n analizador sin tá ctico d e d escen so re cursivo co n rastreo h acia atrás
para e s ta gram ática. Si elegim os expandir m ediante la p rod ucción S
a a prim ero, entonces
só lo d eb em os reconocer la ca d en a aa. Por en d e, cualquier analizador sin tá ctico d e descenso
recursivo razonable probará S - + a S a prim ero.
a ) M uestre q u e e s te analizador sin tá ctico d e d escen so recursivo reconoce las entradas
aaaa y aaaaaaaa, pero n o aaaaaa.
!! b ) ¿Q ué lengu aje reconoce e s te analizador sin tá ctico d e d escen so recursivo?
aa,
232
Capítulo 4. A nálisis sintáctico
Los sigu ien tes ejercicios so n pasos ú tiles e n la con stru cción d e u na g ra m á tica e n la “Form a
N orm al d e C hom sk y” a partir d e gram áticas arbitrarias, com o se d efin e en e l ejercicio 4.4.8.
E j e r c ic io 4 .4 .6 : U n a gram ática es Ubre d e e s i ningún cu erpo d e las producciones es e (a lo
cu a l se le llam a produ cción e).
a) Prop orcion e un algoritm o para convertir cualquier g ra m á tica en u na gra m á tica libre d e
e q ue genere e l m ism o len gu aje (con la p osible ex cep ció n d e la ca d en a vacía; ninguna
gram ática libre d e e p u ed e generar a e).
b) A plique su algoritm o a la gram ática S -► a S b S \ b S a S \ e. S u geren cia: Prim ero busque
tod as las no term in ales q ue sean anulables, lo cu a l sign ifica q ue gen eran a e, ta l v e z m e­
d ia n te u n a d erivación exten sa.
E j e r c ic io 4 .4 .7 : U n a produ cción sim p le e s u n a producción cu y o cu erpo e s u n a so la n o term i­
nal; por ejem p lo, u n a producción d e la form a A - » A .
a) Prop orcion e un algoritm o para convertir cualquier g ra m á tica en u na gra m á tica libre d e
e, sin producciones sim p les, q ue genere el m ism o lengu aje (con la posible ex cep ció n d e la
cad en a vacía) S ugeren cia: Prim ero elim in e las producciones e y desp ués averigüe para
qué pares d e no term in ales A y B se cu m p le q ue A =>• B m ediante u n a secu en cia d e pro­
d uccion es sim p les.
b) A plique su algoritm o a la gram ática (4.1) en la secció n 4 .1 .2 .
c) M uestre que, com o con secu en cia d e la p arte (a), p od em os convertir u na gra m á tica en
u na gram ática eq u ivalen te q ue no ten g a ciclo s (derivaciones d e uno o m ás p asos, en los
que A => A para cierta n o term inal A ) .
E j e r c ic io 4 .4 .8 : Se d ice q ue u n a g ra m á tica e s tá en F orm a N o rm a l d e C h om sky (F N C ) s i to d a
producción e s d e la form a A
B C o d e la form a A
a, e n d o n d e A , B y C son no term inales,
y a es un term inal. M uestre có m o convertir cualquier g ra m á tica en u n a g ra m á tica F N C para
e l m ism o lengu aje (con la p osible excep ción d e la ca d en a vacía; n in gu n a gra m á tica F N C p uede
generar a e).
E j e r c ic io 4 .4 .9 : T odo lengu aje q ue tien e una g ra m á tica libre d e co n tex to p u ed e reconocerse
en un tiem p o m áxim o d e 0 ( n 3) p ara las cad en as d e lon gitu d n. U n a m anera sim p le d e hacerlo,
co n o cid a co m o el algoritm o d e Coche- Y o u n g er-K a sa m i (o C Y K ), se b a sa en la program ación
d inám ica. E s decir, d a d a una cad en a a ia 2 ••• an, con stru im os u n a ta b la T d e n por n d e ta l
form a q u e T y se a e l con ju n to d e n o term inales q u e generen la su b ca d en a a¿a¿+1 ■■■
Si la gra­
m á tica su b yacen te e s tá en F N C (v ea el ejercicio 4 .4 .8 ), en ton ces u n a en trad a en la ta b la p uede
llenarse en u n tiem p o O (n), siem p re y cu an do llenem os las en trad as e n e l orden apropiado: el
m enor valor d e j — i prim ero. E scriba u n algoritm o q ue llene en form a correcta las entradas
d e la tabla, y m uestre q ue su algoritm o requiere u n tiem p o 0 ( n 3). D esp ués d e llenar la ta b la ,
¿cóm o p od em os d eterm in ar si a ia 2 ••• an e s tá en e l lenguaje?
4.5 A nálisis sintáctico ascendente
233
E j e r c ic io 4 .4 .1 0 : M uestre có m o , desp ués d e llenar la ta b la com o en el ejercicio 4 .4 .9 , pode­
m os recuperar en u n tiem p o 0 ( n ) un árbol d e an álisis sin tá ctico para a i 02 ••• On- Sugerencia:
M odifique la ta b la d e m anera q ue registre, p a ra ca d a no term inal A en ca d a en trad a d e la
ta b la T y, cierto par de n o term inales en otra s entradas en la ta b la q ue ju stifiq u en la acción de
colocar a A e n Ty.
E j e r c ic io 4 .4 .1 1 : M odifique su algoritm o d el ejercicio 4 .4 .9 d e m anera q u e busque, para
cualquier cad en a, el m enor núm ero d e errores d e inserción, elim inación y m utación (cad a error
d e u n so lo carácter) necesarios para convertir la c a d en a e n u n a ca d en a d el len gu aje d e la gra­
m á tic a subyacente.
in s tr
c o la ln str
i f e t h e n in s tr c o la ln s tr
w h i l e e d o in s tr
b e g i n k sta e n d
s
e l s e in s tr
€
Usta
colaL ista
in s tr co la L ista
; k sta
c
F igu ra 4.24: U n a g ra m á tica para cierto s tip o s d e instrucciones
E je r c ic io 4 .4 .1 2 : E n la figura 4.24 hay una gram ática para ciertas instrucciones. Podem os
considerar que e y s son term inales q ue representan expresiones condicionales y “o tra s instruc­
cion es” , respectivam ente. Si resolvem os e l conflicto en relación con la exp an sión d e la instrucción
“else” opcional (la n o term inal colalnstr) al preferir consum ir un e l s e d e la en trad a ca d a vez que
veam os uno, p odem os construir un analizador sin táctico predictivo para e s ta gram ática. Usando
la id ea d e los sím bolos d e sincronización descritos en la sección 4.4.5:
a) C on stru ya una tab la d e an álisis sin tá ctico p red ictivo co n corrección d e errores para la
gram ática.
b) M u estre e l com p ortam ien to d e su analizador sin tá ctico co n la s sig u ien tes entradas:
( i)
(ii)
4.5
if e th e n s ; if e th e n s en d
w h ile e d o b e g in s ; i f e t h e n s ; e n d
A n á lisis s in tá c tic o a s c e n d e n te
U n an álisis sin tá ctico ascen dente corresponde a la construcción d e un árbol d e an álisis sin tác­
tico para u na cad en a d e en trad a que em p ieza en las h o ja s (la p arte inferior) y avan za h acia la
raíz (la p arte su perior). E s con ven ien te describir e l análisis sin tá ctico com o e l proceso d e cons­
trucción d e árboles d e an álisis sin táctico, aunque d e hecho un front-end d e usuario podría rea­
lizar u na traducción d irectam en te, sin necesidad d e construir u n árbol ex p lícito . L a secu en cia
234
Capítulo 4. A nálisis sintáctico
id * id
F * id
I
id
T * id
|
F
id
T * F
I I
F id
I
id
T
/ l \
T * F
I
I
F
id
I
id
E
I
T
/ l \
T * F
I
I
F
id
id
F igu ra 4.25: U n an álisis sin tá ctico a scen d en te para
id
*
id
d e im ágenes d e árboles en la figura 4.25 ilu stra un an álisis sin tá ctico ascen dente d e l flujo d e
tokens id * id, co n resp ecto a la gram ática d e exp resion es (4.1).
E sta sección presenta u n estilo gen eral d e an álisis sin tá ctico ascendente, con ocid o com o
análisis sin tá ctico d e desplazam iento-reducción. E n las seccion es 4 .6 y 4 .7 hablarem os sobre
las g ram áticas LR , la clase m ás e x te n sa d e gram áticas para las cu ales p u ed en con stru irse los
analizadores sin tá ctico s d e d esplazam iento-reducción. A un qu e es d em asiad o tra b a jo construir
un analizador sin tá ctico L R en form a m anual, las herram ientas co n o cid a s com o generadores
a u to m áticos d e analizadores sin tá ctico s facilitan la con stru cción d e analizadores sin tá ctico s LR
eficientes a partir d e gram áticas adecuadas. L os con ceptos e n e s ta sección so n ú tiles para escribir
gram áticas adecuadas q ue nos p erm itan hacer u n u so efectiv o d e un generador d e analizadores
sin tácticos LR. E n la sección 4 .7 aparecen los algoritm os para im plem entar los generadores de
analizadores sintácticos.
4 .5.1
R e d u ccio n e s
P odem os considerar el análisis sin táctico ascendente com o el proceso d e “reducir” u n a cad en a w
al sím b olo inicial de la gram ática. En cad a paso d e reducción, se su stitu y e u na su bcadena especí­
fica q ue coincide con el cuerpo d e u n a producción por e l no term inal q ue se en cu en tra en el enca­
bezado d e e sa producción.
Las d ecision es clave d urante e l análisis sin tá ctico ascen dente son acerca d e cu án do reducir
y q u é p rod ucción aplicar, a m ed id a q ue procede el an álisis sin táctico.
E j e m p lo 4 .3 7 : Las im ágenes e n la figura 4 .2 5 ilustran u na secu en cia d e reducciones; la gra­
m á tica es la gram ática d e exp resion es (4.1). H ablarem os sobre la s reducciones en térm inos d e
la sig u ien te secu en cia d e cadenas:
id * id,
F *
id,
T *
id,
T
*F,
T, E
Las cad en as e n e s ta secu en cia se form an a partir d e la s raíces d e to d o s los su bárboles d e las
im ágenes. L a secu en cia em p ieza co n la cad en a d e en trad a id * id. La prim era reducción pro­
d u ce F * id al reducir el id por la izquierda a F, u sand o la p rod ucción F ->• id. L a segu n d a
reducción p roduce T * id a l reducir F a T.
A hora ten em os u na elección entre reducir la ca d en a T, q u e e s el cu erpo d e E
T, y la
ca d en a q ue co n siste en e l segu n d o id, que es e l cu erpo d e F
id. E n vez d e reducir T a £ ,
e l segu n d o id se reduce a T, con lo cu a l se produce la ca d en a T * F. D espués, e s ta ca d en a se
reduce a T. E l análisis sin tá ctico term in a co n la reducción d e T al sím b olo inicial E.
□
4.5 A nálisis sintáctico ascendente
235
P or d efinición, u na reducción es e l inverso d e u n p a so en u n a d erivación (recuerde q ue en
u na derivación, un no term inal en u n a form a d e frase s e su stitu y e p o r e l cu erpo d e u n a de
su s p roducciones). Por lo tan to, e l o b jetiv o d e l an álisis sin tá ctico ascen dente e s construir una
derivación e n form a inversa. L a sigu ien te d erivación corresponde al análisis sin tá ctico e n la
figura 4.25:
E = > T => T * F => T *
¡d
=>- F *
id =>- id * ¡d
E s ta d erivación es d e hecho u na d erivación p or la derecha.
4.5.2
P o d a de m an gos
D u ran te u na exp loración d e izquierda a d erech a de la entrada, e l análisis sin tá ctico ascendente
con stru ye u na d erivación p or la d erech a en form a inversa. D e m anera inform al, un “m a n g o ” es
u na su b ca d en a q ue coin cid e con el cu erpo d e u n a producción, y cu y a reducción representa un
p aso a lo largo d e l inverso d e u na d erivación por la derecha.
P or ejem p lo, si agregam os su bín d ices a lo s tokens id para m ejorar la legibilid ad, los m angos
d urante e l an álisis sin tá ctico d e idi * id2, d e acuerdo co n la g ra m á tica d e exp resion es (4.1),
so n com o en la figura 4 .26. A un qu e T es el cu erpo d e la p rod ucción E
T, e l sím b olo T no es
u n m ango en la form a d e frase T * id2. S i T se su stitu y era p or E , ob tend ríam os la ca d en a E *
id2, lo cu a l no p u ed e derivarse d e l sím b olo in icial E. P or en d e, la su b ca d en a por l a izquierda
q u e coin cid e co n e l cu erpo d e algu na producción n o n ecesita ser un m ango.
Forma
d e frase d e r e c h a
idi *id2
F * id2
T * id2
T*F
M
ango
idi
F
id2
T*F
R
educción de la producción
F-> id
T -*F
F-> id
E ->T * F
F igu ra 4.26: M angos d u ran te u n an álisis sin tá ctico d e
D e m anera form al, si S ^
¡di * ¡d2
olAw => a(3w, co m o e n la figura 4.2 7 , entonces la producción A
0
e n la p osición q ue sig u e d esp u és d e a es u n m a n g o d e o¿0w. D e m anera a ltern a tiv a , un m ango
d e la form a d e frase d erech a 7 es u n a producción A
0 y u na posición d e 7 en d on d e puede
en con trarse la ca d en a 0 , d e tal form a q ue a l su stitu ir 0 e n esa p osición por A se p rod uzca la
form a d e frase d erech a anterior en u na d erivación p or la d erech a d e 7 .
O bserve q ue la cad en a w a la d erech a d el m ango d eb e contener sólo sím b olos term inales.
P or con ven iencia, nos referim os a l cu erpo 0 en vez d e A -► 0 com o u n m ango. O bserve que
decim os “un m ango” en vez d e “e l m ango” , y a q ue la gram ática p odría ser am bigua, con m ás de
una derivación por la derecha d e a 0 w . Si u na gram ática no tiene am bigüedad, entonces ca d a forma
d e frase derecha d e la gram ática tiene sólo un m ango.
P u ed e ob tenerse u n a d erivación por la d erech a en form a inversa m ed ian te la “p o d a de
m angos” . E s decir, em p ezam os con u na ca d en a d e term in ales w a las q u e se les v a a realizar
236
Capítulo 4. A nálisis sintáctico
/
X
X
Á
¿
Q
S
/
I
a
P
IV
F igu ra 4.27: U n m ango A -+ p e n el árbol de análisis sin tá ctico p a ra a p w
e l an álisis sin tá ctico . Si w es un enunciado de la gra m á tica a la m ano, en ton ces dejam os q ue
w = 7 n, en d ond e y n e s la ra-ésima form a d e frase derecha d e a lg u n a d erivación por la derecha,
q ue to d a v ía se desconoce:
S = 00 => 71 ^
rm
rm
72 => **•=>■ 7 n - i => 7n — w
rm
rm
rm
P ara reconstruir e s ta d erivación en orden inverso, localizam os el m ango p n en -yn y su sti­
tuim os p n por e l en cab ezad o d e la producción A n -> 0n para ob ten er la form a d e frase d erech a
7 n -i anterior. T enga en c u en ta q ue to d a v ía no sa b em o s cóm o s e van a encontrar los m angos,
pero en breve verem os m éto d o s para hacerlo.
D espués repetim os e s te proceso. Es decir, localizam os e l m ango p n- 1 en 7 n_ i y reducim os e ste
m ango p ara obtener la form a d e frase derecha 7 n_2. Si al continuar este proceso producim os u na
form a d e frase derecha q ue con sista sólo en el sím b olo inicial 5, entonces nos d etenem os y anun­
ciam os que el análisis sin táctico se com p letó con éx ito . El inverso d e la secu en cia d e producciones
utilizadas en las reducciones es u na derivación por la derecha para la cad en a d e entrada.
4.5.3
A n á lisis sin tá ctico de d esp laza m ien to -red u cció n
El an álisis sin tá ctico d e desplazam iento-reducción es u n a form a d e an álisis sin tá ctico ascenden­
te, en la cu a l una p ila con tien e sím b olos gram aticales y u n búfer d e en trad a co n tien e e l resto d e
la ca d en a q ue se v a a analizar. C om o verem os, el m ango siem p re aparece en la p arte superior
d e la pila, ju sto an tes d e identificarla com o el m ango.
U tilizam os el $ para m arcar la p arte inferior d e la p ila y tam b ién el extrem o derecho d e la
entrada. Por convención, a l hablar sobre el an álisis sin tá ctico ascen dente, m ostram os la parte
superior d e la p ila a la derecha, en vez d e a la izquierda com o h icim os p a ra e l análisis sin tá ctico
d escen dente. A l principio la p ila e s tá vacía, y la ca d en a w e s tá e n la en trad a, com o s e m uestra
a continuación:
P ila
$
Entrada
w $
D urante u na exp loración de izquierda a derecha d e la ca d en a d e entrada, el analizador sin táctico
d esp laza cero o m ás sím b olos d e en trad a y los m ete en la pila, h a sta q ue e s té listo para reducir
una cad en a 0 d e sím bolos gram aticales e n la p arte superior d e la pila. D espués reduce p al en ­
cabezado d e la producción apropiada. E l analizador sin tá ctico repite este ciclo h asta q ue haya
d etectad o u n error, o h a sta que la p ila co n ten ga e l sím b olo inicial y la en trad a e sté vacía:
PILA
$ S
ENTRADA
$
4.5 A nálisis sintáctico ascendente
237
A l entrar a e s ta configuración, el analizador sin tá ctico s e detien e y an un cia q u e e l análisis
sin tá ctico se com p letó co n éx ito . L a figura 4 .2 8 avan za por p asos a través d e las accion es que
p od ría realizar un analizador sin tá ctico d e d esp lazam iento-red ucción a l analizar la ca d en a de
en trad a i d i * i d 2, d e acuerdo con la g ra m á tica d e exp resion es (4.1).
P ila
E ntrada
S
S id i
id i * id 2 8
* id 2 8
SF
* id 2 8
* id > 8
id 2 S
3T
8T *
8 T * id*>
S
S
s
s
ST *F
ST
SE
A cc ió n
desplazar
reducir F —►i d
reducir T
F
desplazar
desplazar
reducir F -»• i d
reducir T
T *F
reducir E - * T
aceptar
F igu ra 4.28: C onfiguraciones d e un analizador sin tá ctico d e desplazam iento-reducción,
c o n u na en tra d a i d i * i d 2
A un qu e las op eracion es prim arias son d esplazar y reducir, en realidad h ay cu a tro acciones
p osib les q ue p uede realizar un analizador sin tá ctico d e desplazam iento-reducción: ( 1 ) despla­
zar, (2) reducir, (3) aceptar y (4) error.
1. D esplazar. D esplazar e l sigu ien te sím b olo d e en trad a y lo co lo ca en la parte superior de
la pila.
2. R educir. E l extrem o derecho d e la cad en a q ue se v a a reducir d eb e esta r e n la p arte supe­
rior d e la pila. L ocalizar e l ex trem o izquierdo d e la ca d en a d en tro d e la p ila y decidir con
q ué term in al se v a a su stitu ir la cadena.
3. A ceptar. A nunciar q u e e l an álisis sin tá ctico s e co m p letó con éxito.
4 . E rror. D escubrir u n error d e sin ta x is y llam ar a u na r u tin a d e recuperación d e errores.
E l uso d e u na p ila e n el análisis sin tá ctico d e d esp lazam iento-red ucción se ju stifica debido
a un hecho im portante: e l m ango siem p re aparecerá en algún m om ento d a d o en la p arte supe­
rior d e la pila, n u n ca en e l interior. E ste hecho p uede d em ostrarse si con sid eram os las posibles
form as d e d o s pasos su cesivos en cualquier d erivación por la izquierda. L a figura 4 .29 ilu stra
los d os p osibles casos. E n e l ca so (1 ), A se su stitu y e por 0 B y , y d esp u és el no term inal B por
la d erech a en e l cu erpo ¡3By se su stitu y e por 7 . E n e l ca so (2 ), A se ex p a n d e prim ero o tr a vez,
pero ahora e l cu erpo es u na cad en a y q u e co n siste sólo en term inales. E l sigu ien te no term inal
B p or la d erech a se en con trará en alguna parte a la derecha d e y.
E n o tra s palabras:
(1)
(2 )
S => otA z =>
rg rt
rm
S => o lB x á z
rm
a p B y z => a f i y y z
rm
=>
rm
a B x y z => orfxyz
rm
238
Capítulo 4. A nálisis sintáctico
C a so (1 )
C a so (2)
F igu ra 4.29: C asos para d o s pasos su cesiv o s d e u na d erivación por la derecha
C onsidere e l caso (1) a la inversa, e n d on d e un analizador sin tá ctico d e d esplazam iento-reduc­
ción acab a d e llegar a la sigu ien te configuración:
P il a
$ a fry
Entrada
yz%
El analizador sin táctico reduce e l m ango 7 a B p a ra llegar a la sig u ien te configuración:
%[email protected]
yz%
A hora el analizador p uede d esplazar la cad en a y y co lo ca rla en la pila, m ed ian te u na secu en cia
d e cero o m ás m ovim ientos d e d esp lazam iento para llegar a la configuración
%a¡3By
2$
con el m ango ¡5By en la p arte su perior d e la pila, y se reduce a A .
A hora considere e l caso (2). E n la configuración
$07
xyz%
e l m ango 7 e s tá en la p arte su perior d e la pila. D espués d e reducir e l m ango 7 a B , e l analizador
sin tá ctico p uede reducir la cad en a x y para m eter el sig u ien te m ango y en la p arte superior d e
la pila, listo para reducirse a A:
%o¿Bxy
z$
En am bos casos, d esp u és d e realizar u na reducción, e l analizador sin tá ctico tu v o q ue desplazar
cero o m ás sím b olos para m eter e l sigu ien te m ango e n la pila. N u n ca tu v o q ue buscar el m ango
d en tro d e la pila.
4 .5 .4
C o n f lic to s d u r a n t e e l a n á lis is s in tá c tic o
d e d e s p la z a m ie n to - r e d u c c ió n
E x isten gram áticas libres de co n tex to para las cu a les n o se p uede utilizar e l an álisis sin tá ctico
d e d esplazam iento-reducción. C ad a analizador sin tá ctico d e d esp lazam iento-red ucción para
u na g ra m á tica d e e s te tip o p u ed e llegar a u n a configuración en la cu a l el analizador sin táctico,
co n ocien d o e l con ten ido com p leto d e la p ila y e l sig u ien te sím b olo d e entrada, no p uede decidir
4.5 A nálisis sintáctico ascendente
239
s i v a a desplazar o a reducir (un conflicto d e d esp la za m ie n to /re d u c ció n ), o n o p uede decidir qué
reducciones realizar (un conflicto de red u cció n /red u cció n ). A hora verem os algu nos ejem p los de
con stru ccion es sin tá ctica s q u e ocasion an ta les gram áticas. T écn icam ente, esta s g ra m áticas no
está n en la clase LR(fc) d e gram áticas d efinidas e n la secció n 4.7; nos referim os a ella s com o
gram áticas no LR . L a k en L R (k) se refiere al núm ero d e sím b olos d e preanálisis e n la entrada.
Las gram áticas q ue s e u tilizan en la com p ilación, por lo general, en tran e n la clase L R (1 ), con
u n sím b olo d e an ticip ación a lo m ás.
E j e m p l o 4 .3 8 : U n a gram ática am bigua nunca p o d rá ser LR . P or ejem plo, considere la gra­
m á tic a d e l else co lg a n te (4.14) d e la sección 4.3:
in s tr -►
i f ex p r t h e n in s tr
i f expr t h e n i n s tr e l s e in s tr
o tra
S i ten em os un analizador sin táctico d e d esp lazam iento-red ucción con la sigu ien te configu­
ración:
P IL A
• i f ex p r t
h e n
in s tr
E N TR A D A
e l s e ••• $
n o p od em os sab er s i i f ex p r t h e n i n s tr es el m ango, sin im portar lo q ue aparezca d eb a jo de
é l en la pila. A q u í ten em os un con flicto d e d esp la za m ien to /red u cció n . D ep en dien do d e lo que
sig a desp ués d e l e l s e en la entrada, p od ría ser correcto reducir i f ex p r t h e n in s tr a in s tr , o
p od ría ser correcto d esplazar e l e l s e y d esp u és buscar o tro in s tr para com p letar la expresión
a ltern ativa i f ex p r t h e n i n s tr e l s e in str.
O bserve q u e el an álisis sin tá ctico d e d esp lazam iento-red ucción p uede adaptarse p a ra ana­
lizar ciertas gram áticas am biguas, com o la gra m á tica if-th en -else anterior. Si resolvem os el
con flicto d e d esp lazam ien to/red u cción en e l e l s e a favor d e l d esp lazam iento, e l analizador
sin tá ctico se com p ortará com o esperam os, asociand o ca d a e l s e con e l t h e n anterior sin coinci­
d en cia. E n la sección 4 .8 hablarem os sobre los analizadores sin tá ctico s para d ich as gram áticas
am biguas.
□
O tra configuración com ú n para los co n flicto s ocu rre cu a n d o sa b em o s q u e ten em os un m ango,
pero e l con ten id o d e la p ila y el sigu ien te sím b olo d e en trad a n o so n su ficien tes p a ra determ inar
q ué producción d eb e usarse e n u n a reducción. E l sig u ien te ejem p lo ilu stra e s ta situ ación .
E j e m p l o 4 . 3 9 : S uponga q ue tenem os un analizador léxico q ue devuelve el nombre d e token i d
para tod os lo s nombres, sin im portar su tip o . S u p on ga tam b ién q ue nuestro lenguaje in voca a
los procedim ientos proporcionando su s nom bres, con los parám etros rodeados entre paréntesis,
y q ue los arreglos s e referencian m ediante la m ism a sin ta x is. C om o la traducción d e los índices
en las referencias a arreglos y los parám etros en las llam adas a procedim ientos son distintos,
querem os usar d istin tas producciones para generar listas d e parám etros e índices actuales. Por
lo tanto, n uestra gram ática p odría tener p roducciones com o las d e la figura 4 .3 0 (entre otras).
U n a in stru cción que em p ieza co n p ( i , j ) aparecería com o e l flujo d e tokens i d ( i d , i d ) para
e l analizador sin táctico. D esp u és d e d esplazar lo s prim eros tres tokens en la p ila, un analizador
sin tá ctico d e d esp lazam iento-red ucción ten dría la sig u ien te configuración:
240
Capítulo 4. A nálisis sintáctico
(1)
(2)
(3)
(4)
(5)
(6)
(7)
( 8)
(9)
in s tr
in s tr
h sta.param etros
h sta-param etros
param etro
expr
expr
h sta .e x p r
h sta .e x p r
—►
—►
—>
—>
—►
—►
—►
—*
—>
i d ( h sta -p a ra m etro s )
ex p r := ex p r
lista -p a ra m etro s , p a rá m etro
pa rá m etro
id
i d ( h sta .e x p r )
id
h sta -ex p r , expr
ex p r
F igu ra 4.30: P rod ucciones q u e im plican llam adas a p rocedim ien tos y referencias a arreglos
P il a
id
Entrada
( ¡d
, i d ) •••
Es ev id en te q ue el i d e n la p arte su perior d e la p ila d eb e reducirse, pero ¿m ediante q ué produc­
ción? L a elección correcta es la producción (5) si p es un procedim iento, pero si p es un arreglo,
en ton ces es la producción (7). L a p ila no in d ica q ué inform ación d eb em os usar en la en la ta b la
d e sím b olos q ue se o b tie n e a partir d e la d eclaración d e p.
U n a solu ción es cam b iar el tok en i d en la producción (1) a p r o c i d y usar u n analizador
léxico m ás sofisticad o, q ue d evu elva e l nom bre d e tok en p r o c i d cu an do recon ozca u n lex em a
q ue s e a el nom bre d e u n procedim ien to. P ara ello se requeriría q u e el analizador léxico con su l­
tara la ta b la d e sím b olos, antes d e devolver un token.
Si realizam os e s ta m odificación, en to n ces al procesar p ( i , j ) el analizador se en con traría
en la sigu ien te configuración:
P IL A
p ro c id ( i d
ENTRADA
, i d ) •••
o en la configuración anterior. E n e l caso anterior, elegim os la reducción m ediante la producción
(5); en el ú ltim o caso m ed ian te la producción (7). O bserve cóm o el tercer sím b olo d e la p arte
superior d e la p ila d eterm in a la reducción q ue s e v a a realizar, aun cu an do n o e s tá involucrado
en la reducción. E l an álisis sin tá ctico d e d esp lazam iento-red ucción p u ed e utilizar inform ación
d e m ás adentro e n la p ila, p ara guiar e l análisis sin tá ctico .
□
4 .5 .5
E je rc ic io s p a r a la s e c c ió n 4 .5
E j e r c ic io 4 .5 .1 : P ara la g ra m á tica S -► 0 S 1 | 0 1 del ejercicio 4 .2 .2 (a ), indique el m ango
en ca d a u na d e las sigu ien tes form as d e frases derechas:
a) 0 0 0 111 .
b) 00511.
E j e r c ic io 4 .5 .2 : R ep ita el ejercicio 4.5.1 para la gra m á tica 5 - * 5 S + | 5 5 * | a d e l ejercicio
4 .2 .1 y las sigu ien tes form as d e frases derechas:
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
241
a) S SS + a * + .
b) S S + a * a + .
c ) aaa * a + + .
E j e r c ic io 4 .5 .3 : P rop orcion e los an álisis sin tá ctico s a scen d en tes para las sig u ien tes cad en as
d e en trad a y gram áticas:
a) L a en trad a 000111, d e acuerdo a la g ra m á tica d e l ejercicio 4.5.1.
b) L a en trad a aaa * a++, d e acuerdo a la g ra m á tica d e l ejercicio 4.5.2.
4.6 In tro d u c c ió n al análisis sin tá c tic o L R : S L R (L R sim ple)
E l tip o m ás frecuente d e analizador sin tá ctico a scen d en tes en la actu alid ad se b a sa e n un
con cep to con ocid o com o an álisis sin tá ctico LR(fc); la “L ” in d ica la exp loración d e izquierda
a derecha de la en trad a, la “R ” in dica la con stru cción d e u n a d erivación por la derecha a la
inversa, y la A: para e l núm ero d e sím b olos de en trad a d e preanálisis q ue se u tiliza n al hacer
d ecision es d e l an álisis sin táctico. L os casos k = 0 o k = 1 so n d e interés p ráctico, p or lo que
aq u í só lo considerarem os los analizadores sin tá ctico s L R co n k < 1. C uan do s e o m ite (&), se
asu m e q ue A: es 1.
E sta sección presenta los con cep tos b ásicos d e l an álisis sin tá ctico L R y e l m éto d o m ás senci­
llo para construir analizadores sin tá ctico s d e d esp lazam iento-red ucción, llam ados “L R Sim ple”
(o SL R ). E s ú til tener cierta fam iliaridad co n los co n cep to s básicos, in clu so si e l analizador
sin táctico L R se con stru ye m ed ian te un generador d e analizadores sin tá ctico s au tom ático. Em ­
p ezarem os con “elem en tos” y “estad os d el analizador sin tá ctico ” ; la sa lid a d e d iagn óstico d e un
generador d e analizadores sin tácticos LR , p or lo general, incluye esta d o s d e l analizador sin tá cti­
c o , los cu a les p ueden usarse para aislar las fu en tes d e co n flicto s en e l análisis sin táctico.
L a sección 4 .7 introduce d o s m étod os m ás com p lejos (L R can ón ico y L A L R ) q u e s e utilizan
e n la m ayoría d e los analizadores sin tá ctico s LR.
4 .6 .1
¿ P o r q u é a n a liz a d o r e s s i n tá c ti c o s L R ?
Los analizadores sin tá ctico s L R son con trolad os por tab las, en form a m uy parecida a lo s anali­
zadores sin tácticos LL no recursivos d e la secció n 4 .4 .4 . Se d ice q u e u na gra m á tica para la cual
p od em os construir u na ta b la d e an álisis sin tá ctico , usando uno d e los m étod os en e s ta sección
y en la sigu ien te, es u n a gram ática L R . D e m anera in tu itiva, para q ue u n a gra m á tica se a LR,
b a sta co n q ue un analizador sin tá ctico d e d esp lazam iento-red ucción d e izquierda a derecha
p u ed a reconocer m angos d e las form as d e frases derechas, cu a n d o é s ta s aparecen en la p arte
su perior d e la pila.
E l an álisis sin táctico L R e s atractivo p or u n a variedad d e razones:
•
P u ed en con stru irse analizadores sin tá ctico s L R p a ra reconocer p rácticam en te to d a s las
con stru ccion es d e lenguajes d e program ación para las cu ales puedan escribirse gram áticas
libres d e co n tex to . E x isten gram áticas libres d e co n tex to q ue no so n L R , pero p or lo g e n e ­
ral se pueden evitar para las con stru ccion es com u n es d e lo s lengu ajes d e program ación.
242
Capítulo 4. A nálisis sintáctico
• E l m étod o d e an álisis sin táctico L R es e l m éto d o d e an álisis sin tá ctico d e d esp lazam iento
reducción sin rastreo h acia atrás m ás gen eral q ue s e co n o ce a la fecha, y aún a sí p uede
im plem entarse co n la m ism a eficien cia q u e o tro s m étod os m ás prim itivos d e d esp lazam iento-reducción (v ea las n otas bibliográficas).
• U n analizador sin táctico L R p uede d etectar u n error sin tá ctico ta n p ron to com o se a p o ­
sib le en u n a exp loración d e izquierda a d erech a d e la entrada.
• L a clase d e gram áticas q ue pueden analizarse m ediante los m étod os LR e s un supercon­
ju n to propio d e la clase de gram áticas q ue p ueden analizarse co n m éto d o s p red ictivos o
LL. P ara que u n a gram ática se a LR(fc), d eb em o s ser cap aces d e reconocer la ocu rren cia
d e l lado derecho d e una producción en u n a form a d e frase derecha, co n k sím b olos d e en ­
tra d a d e preanálisis. E ste requerim iento e s m ucho m enos estr icto q ue para las gram áticas
LL(A), en d o n d e d eb em os ser cap aces d e reconocer e l uso d e u n a producción, v ie n d o sólo
los prim eros sím b olos k d e lo q ue d eriv a su lado derecho. P or en d e, no d eb e sorprender
que las gram áticas L R puedan describir m ás lengu ajes q u e la s gram áticas LL.
La principal d esv e n ta ja d e l m étod o L R e s q ue es d em asiad o trab ajo con stru ir un analizador
sin tá ctico L R en form a m anual para u n a gram ática com ú n d e un lengu aje d e program ación.
Se n ecesita u n a herram ienta especializada: u n generador d e analizadores sin tá ctico s LR . Por
fortuna, h ay varios generadores d isp on ib les, y en la secció n 4 .9 hablarem os so b re u no d e los q ue
se u tilizan con m ás frecuencia: Y acc. D ich o generador recibe u n a g ra m á tica libre d e co n tex to
y produce d e m anera a u tom ática un analizador p a ra esa gram ática. S i la g ra m á tica co n tien e
am bigüedades u otras con stru ccion es q u e sean d ifíciles d e analizar en u na exp loración d e iz­
q uierd a a d erech a d e la entrada, en ton ces el generador d e analizadores sin tá ctico s lo ca liza e sta s
con stru cciones y proporciona m ensajes de d iagnóstico d etallados.
4 .6 .2
L o s e le m e n to s y e l a u t ó m a t a LR (O )
¿C óm o sa b e u n analizador sin táctico d e d esp lazam iento-red ucción cu án do d esplazar y cu án do
reducir? Por ejem plo, co n e l con ten id o S T d e la p ila y e l sigu ien te sím b olo d e en trad a * en la
figura 4.28, ¿cóm o sa b e el analizador sin táctico q u e la T en la p arte superior d e la p ila no es
un m ango, p or lo cu a l la acción ap rop iada e s d esplazar y no reducir T a E l
U n analizador sin táctico L R realiza las decision es d e desplazam iento-reducción m ediante el
m anten im ien to d e estad os, para llevar el registro d e la ubicación q u e ten em o s en un análisis
sin tá ctico. Los estad os representan con jun tos d e “elem en to s” . U n elem en to L R ( 0 ) ( elem e n to ,
para abreviar) d e u na g ra m á tica G e s u na producción d e G con un p u n to en cierta p osición d el
cuerpo. P or en d e, la producción A -► X Y Z produce los sig u ien tes cu atro elem entos:
A -> .X Y Z
A
X YZ
A -¥ X Y - Z
A
XYZ•
La producción A -► e gen era sólo un elem en to, A
D e m anera in tu itiva, un elem en to in dica q u é p arte d e u na p rod ucción h em os v isto e n un
punto d ad o d el p roceso d e an álisis sin tá ctico . Por ejem p lo, el elem en to A -+ X Y Z in dica
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
243
R e p r e s e n ta c ió n d e c o n ju n to s d e e le m e n to s
U n generador d e an álisis sin tá ctico q ue produce u n analizador d escen d en te ta l v e z requie­
ra representar elem en tos y con jun tos d e elem en tos en u na form a con ven iente. U n elem en ­
to p uede representarse m ed ian te un par d e enteros, e l prim ero d e lo s cu ales es e l núm ero
d e u n a d e las p roducciones d e la gram ática subyacente, y e l segun do d e los cu a les es la
p osición d e l punto. Los con ju n tos d e elem en to s p u ed en representarse m ediante u n a lista
d e e sto s pares. N o ob sta n te, com o verem os pronto, lo s con jun tos necesarios d e elem en tos
a m en ud o incluyen elem en tos d e “cierre” , en d ond e el p u n to se en cu en tra al principio del
cuerpo. E sto s siem p re p ueden reconstruirse a partir d e los o tro s elem en to s en el conjunto,
por lo q ue n o ten em os q u e incluirlos en la lista.
q ue esperam os ver u n a ca d en a q ue p u ed a derivarse d e X Y Z a con tinu ación en la entrada. El
elem en to A -► X Y Z in dica q u e acabam os d e ver en la en trad a u n a ca d en a q u e p uede derivarse
d e X, y q u e esperam os ver a con tinu ación u na ca d en a q u e p u ed a derivarse d e Y Z. E l elem ento
A
X Y Z • in d ica q ue hem os v isto el cu erpo X Y Z y q ue p u ed e ser hora d e reducir X Y Z a A .
U n a colección d e con jun tos d e elem en to s L R (0 ), co n o cid a com o la colección L R (0) canó­
n ic a , proporciona la base para construir un a u tó m a ta finito d eterm in ista, e l cu a l se u tiliza
para realizar decision es e n el análisis sin táctico . A d ich o a u tó m a ta se le co n o ce com o a u tó m a ta
L R (0 ) ? E n especial, ca d a esta d o d el a u tó m a ta L R (0) representa un con ju n to d e elem en tos
e n la colección L R (0) can ón ica. E l a u tó m a ta para la gra m á tica d e exp resion es (4 .1 ), q ue se
m u estra en la figura 4.31, servirá com o ejem p lo ab ierto para hablar sobre la colección L R (0)
can ón ica para u n a gram ática.
P ara construir la colección L R (0) ca n ón ica de u n a g ra m á tica , d efinim os u n a gra m á tica au­
m en tad a y d os funciones, CERRADURA e ir _ A . Si G e s u na g ra m á tica co n el sím b olo in icial 5,
en to n ces G \ la gram ática au m en ta d a para G, e s G co n un nuevo sím b olo inicial S ' y la produc­
ción S ' - * S. E l prop ósito d e e s ta n u eva producción in icial es indicar al analizador sin tá ctico
cu án d o d eb e dejar d e analizar para anunciar la aceptación d e la en trad a. E s decir, la aceptación
ocurre só lo cu an d o el analizador sin táctico e s tá a punto d e reducir m ediante S ' -► S.
C e r r a d u r a d e c o n ju n to s d e e le m e n to s
S i I e s u n conjunto d e elem en tos p ara u n a gra m á tica G, en ton ces CERRADURA( / ) es e l conjun­
t o d e elem en tos q ue se con stru yen a partir de I m ed ian te las sig u ien tes d o s reglas:
1. A l principio, agregar ca d a elem en to e n I a CERRADURA(I).
2. Si A
a - B 0 e s tá en CERRADURA(Z) y B
7 es u n a producción, en ton ces agregar el
elem en to B
7 a CERRADURA(J), s i no se en cu en tra y a ahí. A plicar e s ta regla h asta
q ue no puedan agregarse m ás elem en to s nuevos a CERRADURA ( / ) .
3Técnicam ente, el a u tó m a ta d e ja d e se r d eterm inista d e acuerdo a la definición d e la sección 3.6.4, y a que no
tenemos un estado m uerto, que corresponde al conjunto vacío d e elem entos. Como resultado, hay ciertos pares estadoe n tra d a p ara los cuales no existe un siguiente estado.
244
Capítulo 4. A nálisis sintáctico
F igu ra 4.31: A u tó m a ta LR(O) para la gra m á tica d e ex p resion es (4.1)
D e m anera in tu itiva, A - » a -B /3 e n CERRADURA( / ) in dica que, en algún p u n to en el proce­
so d e análisis sin tá ctico , creem os q ue podríam os v er a con tinu ación u na su b ca d en a q u e p ueda
derivarse d e Bf3 com o entrada. L a su b ca d en a q u e p u ed a derivarse d e B¡3 ten d rá un prefijo q ue
p u ed a derivarse d e B , m ed ian te la aplicación d e u n a de la s producciones B . Por lo ta n to , agre­
gam os elem en tos para to d a s las p roducciones B\ es d ecir, si B 7 es u na producción, tam bién
incluim os a B —►*7 en CERRADURA(Z).
E j e m p lo 4 .4 0 : C onsidere la sigu ien te g ra m á tica d e exp resion es aum entada:
E'
E
T
E
-»
-+
Si I e s el con ju n to d e un elem en to {[E f
ju n to d e elem en tos Iq en la figura 4.31.
E
E + T \ T
T * F| F
( E ) | ¡d
• £ ] } , en ton ces CERRADURA( / ) co n tien e e l con ­
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
245
P ara ver cóm o se ca lcu la la CERRADURA, E ' —►-E se co lo c a en CERRADURA(J) m ediante
la regla (1). C om o h ay u n a E ju sto a la d erech a d e un punto, agregam os las prod uccion es E
c o n p un tos en los extrem os izquierdos: E -*• • £ + T y E -+ -T. A hora h ay u n a T ju sto a la
d erech a d e un p u n to e n e s te ú ltim o elem en to, por lo q ue agregam os T ^ - T * F y T ^ -F.
A con tin u ación , la F a la d erech a d e un p u n to n os o b lig a a agregar F - > -(E ) y F
id , pero
n o n ecesita agregarse ningú n otro elem en to.
□
L a cerradura p uede calcularse com o e n la figura 4.3 2 . U n a m anera con ven ien te d e im plem entar la fun ción cerradura es m antener un arreglo b o o lea n o llam ad o agregado, indexado me­
d ia n te los no term in ales d e G, d e tal form a q u e agregado[B] se esta b lez ca a t r u e si, y só lo si
agregam os e l elem en to B - * -7 para c a d a producción B d e la form a B - + 7 .
C onjun toD eE lem en tos CERRADURA( / ) {
J = I\
repeat
f o r ( c a d a elem en to A ^ a-B /3 en J )
f o r ( ca d a p rod ucción B - + 7 d e G )
if ( B
*7 no e s tá en J )
agregar B
-7 a J;
u n t i l no se agreguen m ás elem en to s a J e n u n a ronda;
r e t u r n J\
}
F igu ra 4.32: C álculo d e CERRADURA
O bserve q ue si se agrega u n a producción B al cierre d e / c o n e l punto en e l ex trem o izquier­
d o , en ton ces se agregarán tod as las producciones B d e m anera sim ilar al cierre. P or en d e, no
e s necesario en algunas circun stan cias listar lo s elem en to s B - + 7 q ue se agregan a I m ediante
CERRADURA. B a sta co n u na lista d e los no term inales B cu yas p roducciones se agregaron.
D ivid im os tod os los con jun tos d e elem en to s d e interés en d os clases:
1 . FXementos del corazón : e l elem en to inicial, S ' -► *5, y to d o s lo s elem en tos cu yos p un tos
no esté n en e l ex trem o izquierdo.
2. E lem en tos que n o so n del corazón: to d o s lo s elem en to s con su s puntos en e l extrem o
izquierdo, ex cep to S ' -► -5.
A dem ás, ca d a con ju n to d e elem en tos d e in terés se form a tom an d o la cerradura d e un conjunto
d e elem en tos d el corazón; d esd e luego q u e los elem en to s q u e se agregan en la cerradura nunca
p odrán ser elem en tos d el corazón. Por lo tanto, p o d em o s representar lo s con jun tos d e elem en­
to s en los q ue realm ente estam os interesados con m uy p o co alm acenam iento si descartam os todos
los elem entos que no sean d el corazón, sabiendo que podrían regenerarse m ediante el proceso de
cerradura. En la figura 4.31, los elem en tos q ue no so n d el corazón se encuentran en la parte som ­
breada del cuadro para un estado.
246
Capítulo 4. A nálisis sintáctico
L a f u n c ió n i r _ A
La segu n d a función ú til es ir _ A ( / , X ) , en d on d e I e s un con ju n to d e elem en tos y X es un sím b o­
lo gram atical. ir _ A ( / , X ) se define com o la cerradura d el conjunto d e tod os los elem entos [A ->
aX-/3\, d e tal form a q ue [A - » a -X p ] s e encuentre en I. D e m anera in tu itiva, la función ir _ A se
u tiliza para definir las tran siciones en e l a u tó m a ta L R (0 ) para u n a gram ática. Los esta d o s d el
a u tó m a ta corresponden a los con ju n tos d e elem en tos, y ir _ A (J , X ) esp ecifica la transición q ue
proviene d e l esta d o para / , con la en trad a X
E j e m p lo 4 .4 1 : S i I e s e l con ju n to d e d os elem en to s { [E '
ir _ A (7 , + ) con tien e los sigu ien tes elem entos:
E
T
T
F
F
—►
—►
—►
—►
—►
B ] , [E
B -f T ]} , en ton ces
E + -T
-T * F
•F
•(E )
•id
P ara calcu lar ir _ A (J , + ) , exam in am os I en b u sca d e elem en tos co n + ju s to a la d erech a
d el punto. E '
E- no es uno d e esto s elem en tos, pero E
B + T s í lo es. D esp lazam os el
punto sobre e l + para ob tener E - * E + -T y d esp u és tom am os la cerradura d e e s te conjunto
sin gleton .
□
A hora esta m o s listo s para q ue e l algoritm o co n stru y a a C, la colección ca n ó n ica d e con ­
ju n to s d e elem en tos L R (0 ) para u na gram ática au m en tad a G ’\ el algoritm o se m uestra en la
figura 4.33.
v o i d e le m e n to ^ G ') {
C = CERRADURA( { [S' -+ - 5 ]» ;
repeat
f o r ( cad a con ju n to d e elem en to s / e n C )
f o r ( cad a sím b olo gram a tica l X )
i f ( i r _ A ( /, X ) n o e s tá vacío y no e s tá en C )
agregar ir _ A ( /, X ) a C;
u n t i l no se agreguen nuevos con jun tos d e elem en to s a C e n u n a iteración;
}
F igu ra 4.33: C álcu lo d e la colección can ón ica d e con jun tos d e elem en tos L R (0)
E j e m p lo 4 .4 2 : L a colección can ón ica d e con jun tos d e elem en tos L R (0) para la gra m á tica
(4.1) y la fun ción ir _ A s e m uestran e n la figura 4.3 1 . ir _ A se co d ifica m ediante las transiciones
en la figura.
□
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
247
U s o d e l a u t ó m a t a L R (O )
L a id ea central d el análisis sin táctico “L R sim p le” , o SLR, es la construcción d el a u tó m a ta LR (0)
a partir d e la gram ática. Los estad os d e este a u tó m a ta son los conjuntos d e elem en tos d e la co ­
lección L R (0) canónica, y las traducciones las proporciona la función ir _ A . El a u tó m a ta LR (0)
para la gram ática d e expresiones (4.1) apareció an tes en la figura 4.31.
E l estad o inicial d el a u tóm ata L R (0 ) es CERRADURA({ [5 ' -► -5 ]}), en d on d e S ' es el sím ­
b olo inicial d e la gram ática aum entada. T od os lo s esta d o s son d e aceptaciones. D ecim os q ue el
“esta d o j ” se refiere al e sta d o q ue corresponde al con ju n to d e elem en tos Ij.
¿Cómo puede ayudar el au tóm ata L R (0) con las d ecisiones d e desplazar-reducir? E stas decisio­
nes pueden realizarse d e la siguiente m anera. Suponga q ue la cad en a 7 d e sím bolos gram aticales
lleva el au tóm ata LR (0) d el estad o inicial 0 a cierto estad o j. D espués, se realiza un desplazam iento
sobre e l siguiente sím b olo de en trad a a si el estad o j tiene u na transición en a. En cualquier otro
caso, elegim os reducir; los elem entos en e l estad o j nos indicarán q ué producción usar.
E l algoritm o d e análisis sin táctico LR q ue presentarem os en la sección 4 .6 .3 u tiliza s u pila
para llevar el registro d e los estad os, así com o d e los sím bolos gram aticales; d e hecho, e l sím bolo
gram atical p uede recuperarse d el estad o, p or lo que la p ila con tien e los estad os. E l siguiente
ejem p lo proporciona u na v ista previa acerca de cóm o p ueden utilizarse un a u tó m a ta L R (0) y una
p ila d e estad os para realizar decisiones d e desplazam iento-reducción en e l análisis sin táctico.
E j e m p lo 4 .4 3 : La figura 4.34 ilu stra las acciones d e un analizador sin táctico d e desplazam ientoreducción con la entrada id * id , usando el a u tó m a ta L R (0) d e la figura 4.31. U tilizam os una
pila para guardar los estados; por claridad, los sím bolos gram aticales q ue corresponden a los esta­
d o s en la p ila aparecen en la colu m n a SÍMBOLOS. E n la línea (1 ), la p ila con tien e el esta d o inicial
0 d e l autóm ata; el sím b olo correspondiente es e l m arcador $ d e la parte inferior d e la pila.
L ínea
P
a)
(2 )
(3)
0
(4)
(5)
(C)
(7)
(8)
(9)
ila
05
03
02
027
0275
02710
02
01
Símbolos
Entrada
S
S id
SF
ST
ST *
S T * id
ST* F
ST
SE
id * id S
* id S
* id S
* id S
id S
S
s
s
s
A
cción
d esplazar
reducir F
reducir T
d esplazar
d esplazar
reducir F
reducir T
reducir E
aceptar
5
id
-> F
7
5
- ¥ id
—►T * F
T
F igu ra 4.34: E l an álisis sin tá ctico d e id * id
E l sigu ien te sím b olo d e en trad a e s id y e l esta d o 0 tien e u n a transición en id al esta d o 5.
P or lo tan to, realizam os un d esp lazam iento. E n la lín ea (2 ), e l esta d o 5 (sím bolo id ) s e ha
m etid o en la pila. N o h ay tran sición desde el esta d o 5 con la en trad a * , p or lo q ue realizam os
u n a reducción. D el elem en to [F -► id-] en e l esta d o 5, la reducción es m ed ian te la producción
F
id .
248
Capítulo 4. A nálisis sintáctico
Con los sím b olos, u n a reducción se im p lem en ta sacand o e l cu erpo d e la producción d e la
pila (en la lín ea ( 2 ), e l cu erpo es ¡ d ) y m etien d o e l en cab ezad o d e la p rod ucción (en e s te caso,
F ) . C on los estad os, sacam os e l esta d o 5 para e l sím b olo ¡d , lo cu a l llev a e l e sta d o 0 a la p arte
superior y b uscam os u na transición en F , e l en cab ezad o d e la producción. E n la figura 4 .3 1 , el
esta d o 0 tien e u na transición en F al esta d o 3, por lo q u e m etem os el e sta d o 3, co n e l sím b olo
F correspondiente; v ea la lín ea (3).
C om o otro ejem plo, considere la lín ea (5), con el esta d o 7 (sím bolo * ) e n la parte superior
d e la pila. E ste esta d o tien e una transición al esta d o 5 co n la en trad a id , por lo q ue m etem os
e l esta d o 5 (sím bolo id ). E l e sta d o 5 no tien e transiciones, a sí q ue lo reducim os m ed ian te F
id . A l sacar el e sta d o 5 para el cu erpo id , e l esta d o 7 p a sa a la p arte superior d e la pila. C om o
e l esta d o 7 tien e u n a tran sición en F al esta d o 10, m etem os e l esta d o 10 (sím bolo F ) .
□
4 .6 .3
E l a lg o r itm o d e a n á lis is s in tá c tic o L R
En la figura 4 .3 5 s e m u estra u n d iagram a d e un analizador sin tá ctico LR . E ste diagram a con ­
sis te en u n a entrada, u n a salid a, una pila, un program a controlador y u n a ta b la d e análisis
sin tá ctico q ue tien e d o s p artes (ACCION y e l ir _ A ) . E l program a controlador e s igual para to ­
d os los analizadores sin tácticos LR; só lo la ta b la d e an álisis sin tá ctico ca m b ia d e un analizador
sin tá ctico a otro. E l program a d e análisis sin tá ctico lee caracteres d e un búfer d e en tra d a , uno
a la vez. E n d ond e u n analizador sin táctico d e d esp lazam iento-red ucción d esp lazaría a u n sím ­
bolo, un analizador sin táctico L R d esp laza a un estado. C ada esta d o sin te tiz a la inform ación
co n ten id a en la pila, d eb ajo d e éste.
E n trad a
P ila
Sra—1
ai
...
ai
...
Ou
Program a
d e análisis
sin tá ctico LR
ACCION
S
Salida
ir _ A
F igu ra 4.35: M od elo d e un analizador sin tá ctico LR
La p ila con tien e u n a secu en cia d e estad os, SoSi
s m, en d o n d e $m, se en cu en tra en la parte
superior. E n e l m étod o SLR , la p ila con tien e esta d o s d e l a u tó m a ta L R (0); los m étod os LR
canónico y L A L R so n sim ilares. P or con stru cción , ca d a e sta d o tien e un sím b olo gram atical
correspondiente. R ecuerde q ue los esta d o s corresponden a los con jun tos d e elem entos, y q ue
hay u n a tran sición d el estad o i al esta d o j s i ir_A (/¿ , X ) = Ij. T od as las tran siciones al esta d o j
d eb en ser para e l m ism o sím b olo gram atical X . P or en d e, ca d a esta d o , ex cep to e l esta d o inicial
0 , tien e un sím b olo gram atical único asociad o co n é l .4
4 Lo o p u esto no n ecesariam en te e s válido; e s d e c ir, m ás d e u n e s ta d o p u e d e te n e r e l m ism o sím b o lo g ra m a tic a l. P o r
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
249
E s t r u c t u r a d e l a t a b l a d e a n á lis is s i n t á c t i c o L R
L a ta b la d e an álisis sin tá ctico co n siste en d o s partes: u n a fun ción d e acción d e an álisis sin tác­
tic o llam ad a ACCION y u n a función ir _ A .
1. L a función ACCION recibe com o argu m en tos un esta d o ¿ y u n term inal a (o $, e l m arcador
d e fin d e en trad a). E l valor d e ACCION [i, a] p u ed e tener u n a d e cu a tro formas:
(a) D esplazar j , en d o n d e j e s un estad o. L a acción realizada p or e l analizador sin táctico
d esp laza en form a efectiv a la en tra d a a h acia la p ila, pero u sa e l esta d o j para repre­
sen tar la a.
(b ) R educir A
¡5. L a acción d e l analizador reduce en form a efectiv a a 0 en la p arte
superior d e la pila, al en cab ezad o A .
(c) A ceptar. E l analizador sin tá ctico a cep ta la en trad a y term in a e l an álisis sin táctico.
(d ) Error. E l analizador sin tá ctico d escubre un error e n su en trad a y realiza c ie r ta acción
correctiva. E n las seccion es 4 .8 .3 y 4 .8 .4 hablarem os m ás acerca d e cóm o funcionan
dich as ru tinas d e recuperación d e errores.
2. E xten d em os la función ir _ A , d efin id a en los con jun tos d e elem entos, a los estados: s i ir _
A [7¿, A] — Ij, en to n ces ir _ A tam bién asigna un esta d o i y un no term in al A al esta d o j
C o n f ig u r a c io n e s d e l a n a liz a d o r s i n t á c t i c o L R
P ara describir el com p ortam ien to d e u n analizador sin tá ctico LR , es ú til tener u n a notación
q ue represente e l esta d o com p leto d e l analizador sin táctico: su p ila y e l resto d e la en trad a. U na
configuración d e u n analizador sin tá ctico L R es un par:
(S0$1
■■■3 r o »
1
•••
On§)
e n d on d e el prim er com p on en te e s e l con ten id o d e la p ila (parte su perior a la derecha) y el
segu n d o com p on en te es el resto d e la en trad a. E sta configuración representa la form a d e frase
derecha:
X 1X 2 ••• X maiai+1 ••• an
b ásicam en te en la m ism a form a en q u e lo haría un analizador sin tá ctico d e d esplazam ientoreducción; la ú n ica diferencia es q u e en vez d e sím b o lo s gram aticales, la p ila co n tien e estad os
a partir d e los cu ales pueden recuperarse lo s sím b olos gram aticales. E s decir, X¡ e s el sím bolo
gram atical representado m ed ian te e l esta d o
O bserve q ue 5o, el esta d o inicial d el analizador
sin táctico, no represen ta a un sím b olo gram atical y sirve com o m arcador d e la p arte inferior de
la pila, a sí com o tam b ién ju e g a un p ap el im portan te en e l an álisis sin táctico.
ejem p lo , v e a los e s ta d o s 1 y 8 e n e l a u tó m a ta L R (0) d e l a fig u ra 4.31, a los cuales s e e n t r a m ed ia n te la s transiciones
e n E , o los e s ta d o s 2 y 9 , a los c u ales s e e n t r a m ed ia n te las tran sicio n es e n T.
250
Capítulo 4. A nálisis sintáctico
C o m p o rta m ie n to d e l a n a liz a d o r s in tá c tic o L R
El sigu ien te m ovim ien to d el analizador sin tá ctico a partir d e la configuración anterior, se
d eterm in a m ed ian te la lectu ra d e a¿, e l sím b olo d e en trad a a ctu al, y sm, el esta d o en la p arte
superior d e la pila, y d esp u és se con su lta la en trad a ACCION[$m, at] en la ta b la d e acción d el
análisis sin táctico. Las configuraciones resu ltan tes d esp u és d e ca d a uno de lo s cu atro tip o s d e
m ovim ien to son:
1. Si ACCION[sm, a¡ = d esplazar s, el analizador eje cu ta un m ovim ien to d e desplazam iento;
d esp la za e l sigu ien te e sta d o s y lo m ete en la pila, in trodu cien do la sig u ien te configura­
ción:
(SoSl ” •
5m5’
fli+ l
a n$)
E l sím b olo di n o n ecesita guardarse en la pila, y a q ue p uede recuperarse a partir d e s, si
es necesario (en la práctica, n un ca lo e s ). A hora, el sím b olo d e en trad a a ctu a l es a*+i2. Si ACCION[sm, a¿] = reducir A - + (3, en ton ces e l analizador sin tá ctico ejecu ta un m ovim ien­
to d e reducción, entrando a la siguiente configuración:
($0Si ••• sm-r$, a>iOi+1 ••• (Ln§ )
en d o n d e r e s la lon gitu d d e /?, y s = ir _ A [$ m_ r, A ]. A quí, e l analizador sin tá ctico prim ero
sacó los sím b olos d el esta d o r d e la pila, ex p o n ien d o al esta d o Sm-r. D esp u és e l analiza­
dor sin tá ctico m etió a s, la e n tra d a para ir _ A [ s m_ n >1] en la p ila. E l sím b olo d e en trad a
actu al no se cam b ia en un m ovim ien to d e reducción. P a ra los analizadores sin tá ctico s LR
q ue vam os a construir, X m-r + i
X m, la secu en cia d e los sím b olos gram aticales corres­
p ond ien tes a los esta d o s q u e s e sa ca n d e la pila, siem p re coin cid irá co n ¡3, el lado derecho
d e la producción reductora.
L a salid a d e un analizador sin táctico L R se g en era d esp u és d e un m ovim ien to d e reduc­
ción, m ediante la ejecución d e la acción sem á n tica a so cia d a con la p rod ucción reductora.
Por el m om en to, vam os a su pon er q u e la sa lid a co n siste só lo en im prim ir la producción
reductora.
3. Si ACCION [i™, a¿] = aceptar, s e co m p leta el an álisis sin táctico.
4. Si A C C I O N a ¿ ] = error, e l analizador ha d escub ierto u n error y llam a a u n a ru tin a d e
recuperación d e errores.
A con tinu ación se sin tetiza el algoritm o d e análisis sin tá ctico LR . T odos los analizadores
sin tá cticos L R s e co m p ortan de e s ta m anera; la ú n ica diferencia entre un analizador sin tá ctico
LR y o tro e s la inform ación en los ca m p o s ACCION e ir _ A d e la ta b la d e análisis sin táctico.
A lg o r it m o 4 .4 4 : A lgoritm o d e an álisis sin tá ctico LR.
E N T R A D A : U n a cad en a d e en tra d a w y u n a ta b la d e análisis sin tá ctico L R con las funciones
ACCION e ir _ A , p ara u n a gram ática G.
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
251
SA L ID A : Si w e s tá en L( G ), los p asos d e reducción d e un an álisis sin tá ctico ascen dentes para
w; en cualquier o tro caso, u na indicación d e error.
M ÉTO D O : A l principio, e l analizador sin tá ctico tien e 5o en su pila, en d o n d e so es e l estad o
in icial y w $ e s tá e n e l búfer d e entrada. E n to n ces, e l analizador eje cu ta e l program a en la figura
4.36.
□
hacer q ue a s e a e l prim er sím b olo d e vM]
w h i l e ( l ) { / * repetir in definid am en te * /
hacer q ue s s e a e l estad o en la p a rte superior d e la pila;
i f ( ACCION[5, a] = d esplazar t ) {
m eter t en la pila;
hacer q ue a s e a el sigu ien te sím b olo d e entrada;
} e l s e i f ( ACCION[5, a] = reducir A
¡5 ) {
sacar \/3\ sím b olos d e la pila;
hacer q ue e l esta d o t ahora e s té en la p arte su perior d e la pila;
m eter ir_A [¿, 4 ] en la pila;
enviar d e sa lid a la producción A -► /?;
} e l s e i f ( ACCION[s, a] = aceptar ) break; / * term in ó e l an álisis sin tá ctico * /
e l s e llam ar a la ru tina d e recuperación d e errores;
}
F igu ra 4.36: P rogram a d e análisis sin tá ctico LR
E j e m p l o 4 .4 5 : La figura 4 .3 7 m uestra las funciones ACCION e ir _ A d e u n a ta b la d e análisis
sin tá ctico L R para la gram ática d e exp resion es (4 .1 ), q ue repetim os a con tinu ación con las
producciones enum eradas:
(1)
(2)
(3 )
E -+ E + T
E -> T
T -+ T * F
(4) T ^ F
(5) T —►(E )
(6 ) F - » i d
Los cód igos para las accion es son:
1. s i sign ifica d esplazar y m eter el esta d o i en la pila,
2. rj sign ifica reducir m ediante la producción en u m erad a co m o j ,
3. acc sign ifica aceptar,
4 . espacio en blanco sig n ifica error.
O bserve que e l valor d e ir _ A [s, a] para el term inal a se en cu en tra en e l cam p o ACCION
con ectado con la acción d e desplazam iento en la en trad a a, para e l esta d o 5. E l cam p o ir _ A
proporciona ir _ A [s, A] para los no term inales A . A un qu e no hem os exp licado aú n cóm o se se­
leccionaron las en trad as para la figura 4.37 , en breve tratarem os con e s ta cu estión .
252
Capítulo 4. A nálisis sintáctico
E stado
0
Acción
id
6
7
8
9
10
11
*
s5
1
2
3
4
5
+
(
ir _ A
)
S
r2
r4
ace
r2
r4
1-6
1-6
94
s6
r2
r4
s7
r4
r6
r6
s5
s4
s5
s5
s4
s4
s6
rl
r3
r5
s7
r3
r5
E
T
F
1
2
3
8
2
3
9
3
10
s il
rl
r3
r5
rl
r3
r5
F igu ra 4.37: T a b la d e an álisis sin táctico para la gra m á tica d e expresiones
En la en trad a ¡d * ¡d + id, la se cu en cia d e l co n ten id o d e la p ila y d e la en trad a se m uestra
en la figura 4.38. P ara fines d e clarid ad, tam b ién s e m uestran las secu en cias d e lo s sím bolos
gram aticales q ue corresponden a los esta d o s con ten id os en la pila. Por ejem p lo, e n la lín ea (1)
el analizador LR se encuentra en e l estad o 0, el estad o inicial sin sím bolo gram atical, y con id el
prim er sím b olo d e en trad a. L a acción en la fila 0 y la co lu m n a id d el cam p o acción d e la fi­
g u ra 4 .3 7 es s5, lo cu a l sign ifica d esplazar m etien d o e l esta d o 5. E sto es lo q u e h a ocurrido en
la línea (2) se h a m etido en la p ila el sím b olo d e estad o 5, m ientras q ue id se h a elim inado d e la
entrada.
D esp u és, * se con vierte e n e l sím b olo de en trad a a ctu al, y la acción d el esta d o 5 so b re la en ­
trad a * es reducir m ed ian te F -► id. Se saca un sím b olo d e e sta d o d e la p ila. D esp u és s e ex p o n e
e l esta d o 0. C om o el ir _ A d e l estad o 0 en F es 3, e l esta d o 3 se m ete a la pila. A hora tenem os
la configuración d e la línea (3). C ad a uno d e los m ovim ien tos restan tes se d eterm in a en form a
sim ilar.
□
4 .6 .4
C o n s tr u c c ió n d e t a b l a s d e a n á lis is s in tá c tic o S L R
El m étod o SL R para construir tab las d e an álisis sin tá ctico es u n b u en p u n to in icial para e stu ­
diar e l an álisis sin táctico LR . N o s referirem os a la ta b la d e an álisis sin tá ctico co n stru id a por
este m éto d o com o una ta b la SLR, y a u n analizador sin tá ctico L R que u tiliz a u na ta b la d e
análisis sin tá ctico SL R com o un analizador sin tá ctico SLR . L os o tro s d o s m étod os au m entan e l
m éto d o SL R co n inform ación d e anticipación.
El m étodo SL R em p ieza con elem en tos L R (0) y un a u tó m a ta L R (0 ), q ue presentam os en la
sección 4 .5 . E s decir, d a d a u n a gram ática G , la au m entam os para producir G ', con u n nuevo
sím b olo in icial S'. A partir d e G ’ con stru im os a C, la colección ca n ó n ica d e co n ju n to s d e ele­
m en tos para G \ ju n to con la fun ción ir _ A .
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
Pila
(1 )
(2 )
(3)
(4)
(5)
(6 )
(7)
(8)
(9)
( 10 )
(11)
( 12 )
Símbolos
0
05
03
02
027
0275
0 2 7 10
02
01
01 6
(13)
0165
0163
0169
(14)
01
id
F
T
T*
T * id
T*F
T
E
E+
E + id
E+ F
E+ T
E
253
E ntrada
id * id +
* id -f* id -f
* id +
id +
+
+
+
+
Acción
id $
id $
id S
id $
id $
i d$
id S
id $
id S
id S
$
s
$
$
desplazar
reducir mediante
reducir mediante
desplazar
desplazar
reducir mediante
reducir mediante
reducir mediante
desplazar
desplazar
reducir mediante
reducir mediante
reducir mediante
aceptar
F -* id
T -> F
F —> id
T —►T * F
E
T
F
id
T -> F
E
E + T
F igu ra 4.38: M ovim ientos d e un analizador sin tá ctico L R co n i d * id + id
D esp ués, las en trad as ACCION e ir _ A en la ta b la d e an álisis sin tá ctico se con stru yen u tili­
zan d o e l sigu ien te algoritm o. P ara ello, requerim os con o cer SIGUIENTE(.4) p a ra c a d a no term i­
n al A d e u n a g ra m á tica (v ea la sección 4 .4 ).
A lg o r i t m o 4 .4 6 : C onstrucción d e u n a ta b la d e análisis sin tá ctico SLR.
E N T R A D A : U n a g ra m á tica au m en tad a G'.
SA L ID A : Las funciones ACCION e ir _ A para G ' d e la ta b la d e an álisis sin tá ctico SLR.
M ÉTODO:
1. C onstruir C = { /o, I i, . .., In } , la colección d e con jun tos d e elem en tos L R (0 ) para G'.
2. E l esta d o i se con stru ye a partir d e
Las accion es d e an álisis sin tá ctico p a ra e l estad o
i
s e d eterm in an d e la sigu ien te forma:
(a) Si [A -> a-a0\ e s tá en ¡i e ir _ A (/„ a) =
zar j ”. A quí, a d eb e ser u na term inal.
entonces establecer ACCION[¿, a] a “despla­
(b) Si [A -> a-] e s tá en i¡, en to n ces estab lecer ACCION[i, a] a “reducir A
a en SIGUIENTE (A )] aq uí, A ta l v ez no se a S'.
(c) Si [S' -► 5-] e s tá en
a ” para to d a
en to n ces esta b lecer ACCION[*, $] a “aceptar”.
Si resu lta cualquier acción con flictiv a d eb ido a la s reglas anteriores, d ecim o s q ue la gra­
m ática n o e s S L R (l). E l algoritm o no p roduce un analizador sin tá ctico en e s te caso.
254
Capítulo 4. A nálisis sintáctico
3. L as transiciones d e ir _ A para el esta d o i se co n stru yen para to d o s los no term inales A ,
usando la regla: S i ir _ A (/¿ , A ) = J¿, en ton ces ir _ A [t, A] = j.
4 T od as las entradas q u e no esté n definidas p or las reglas (2) y (3) se dejan com o “error”.
5. E l esta d o inicial d el analizador sin tá ctico es el q ue se co n stru y ó a partir d e l con ju n to d e
elem en tos q ue con tien en [S' - * -5].
A la tab la d e análisis sin táctico q u e co n siste en las funciones ACCION e i r _ A d eterm in adas
p or el algoritm o 4.46 s e le co n o ce com o la tabla S L R ( l ) p a ra G. A un analizador sin tá ctico LR
q ue u tiliz a la ta b la S L R (l) p ara G se le co n o ce com o analizador sin tá ctico S L R (l) par G, y a
u na g ram ática q ue tien e u n a ta b la d e an álisis sin tá ctico S L R (l) se le co n o ce com o S L R ( l ) . Por
lo general, om itim os e l “(1 )” d esp u és d e “SL R ” , y a q ue no tratarem os aquí co n lo s analizadores
sin tá ctico s q ue tien en m ás d e un sím b olo d e preanálisis.
E j e m p lo 4 .4 7 : V am os a construir la ta b la SL R para la gra m á tica d e exp resion es aum entada.
La colección can ón ica d e con jun tos d e elem en tos L R (0 ) para la gra m á tica s e m ostró en la figura
4.3 1 . Prim ero considerem os e l con ju n to d e elem en to s Jo:
E'
■E
E -+ E + T
E -+ T
T -+ T * F
T -y F
F - » (E )
F - y ¡d
El elem ento F -»• -(E ) produce la en trad a ACCION[0, (] = desplazar 4 , y e l elem ento F
id
produce la e n tra d a ACCION[0, id ] = d esp lazar 5. Los d em á s elem en to s en lo no producen nin­
g u n a acción. A hora con sid erem os I\.
E'
E•
E - + E- + T
El prim er elem ento produce ACCION[1, $] = aceptar, y e l segundo produce ACCION[1, + ] = d es­
plazar 6 . A hora considerem os
E - + TT - + T- * F
C om o SIGUIENTE(i?) = { $ , + , ) } , e l prim er elem en to produce lo siguiente:
ACCION[2, $] = ACCION[2, + ] = ACCION[2, )] = reducir E - + T
El segu n d o elem en to p rod uce ACCION[2, *] = d esplazar 7. Si con tinu am os d e e s ta form a o b ­
tendrem os las tab las ACCION y ir _ A q u e s e m uestran en la figura 4 .3 1 . E n e s a figura, lo s nú­
m eros d e las producciones en las acciones d e reducción son lo s m ism os q ue e l orden en el q ue
aparecen en la gram ática original (4.1). E s decir, E - + E + T es e l núm ero 1, E ->• T es 2, y
así su cesivam en te.
□
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
255
E j e m p lo 4 .4 8 : C ad a u n a d e las gram áticas S L R (l) no tien e am bigüedad, pero h ay m uchas
gram áticas sin am bigüedad q ue no son S L R (l). C onsidere la g ra m á tica co n las sig u ien tes pro­
ducciones:
5
L
R
L = R | R
-+
* R | ¡d
L
(4.49)
C onsiderem os q u e L y R representan 1 va lu é y r-valué, resp ectivam en te, y q ue * es un operador
q ue in dica “e l con ten id o d e ” .5 L a colección ca n ó n ica d e co n ju n to s d e elem en to s L R (0 ) para la
g ra m á tica (4.49) se m uestra en la figura 4.39.
h-
S'->-S
S^-L = R
S^-R
L-» - * R
L
-id
-L
h
■
L -»■ id-
h-
S ^ L = -R
R - > -L
L ^-*R
L ->■ -id
h:
S f — >5*
I7 :
L
h-
S
L* = R
R^L-
h-
ñ->L-
I9 :
S ^ L = R -
h-
S - > R-
I4:
L —>*-R
*R'
-L
L ^ -* R
L
-id
F igu ra 4.39: C olección L R (0) ca n ó n ica para la gra m á tica (4.49)
C onsidere e l conjunto d e elem en tos h . E l prim er elem en to en e s te con ju n to hace q u e ACCION
[2, = ] se a “desplazar 6 ”. C om o SIGUIENTE(fí) co n tien e = (para ver p or qué, considere la deri­
vación S => L = R => * R = R), el segundo elem ento establece ACCION[2, = ] a “reducir R -► U \
C om o hay tanto u na entrada de desplazam iento com o u na de reducción en ACCION[2, = ], e l estad o 2
tiene un conflicto d e desplazam iento/reducción con el sím bolo d e entrada = .
L a g ra m á tica (4.49) no es am bigua. E ste con flicto d e d esp la za m ien to /red u cció n surge del
hecho d e que el m étod o d e con stru cción d el analizador sin tá ctico SL R no es lo b astan te p o­
deroso com o para recordar e l su ficien te co n tex to a la izquierda para decidir q ué acción debe
realizar e l analizador sin tá ctico sobre la en trad a = , h abiendo v is to u na ca d en a q ue p u ed e re­
d ucirse a L . Los m étod os canónico y L A L R , q ue verem os a con tinu ación, tendrán éx ito e n una
colección m ás e x te n sa d e gram áticas, incluyendo la g ra m á tica (4 .4 9 ). S in em bargo, observe que
5
A l igual q u e e n la sección 2.8.3, u n Uvalue d e s ig n a u n a ubicación y u n r-value e s u n valor q u e p u ed e alm acen arse
e n u n a ubicación.
256
Capítulo 4. A nálisis sintáctico
hay gram áticas sin am bigüedad para las cu ales to d o s los m éto d o s d e con stru cción d e analiza­
dores sin tácticos L R producirán u n a ta b la d e accion es d e an álisis sin tá ctico co n con flictos. Por
fortuna, d ich as gram áticas p ueden, p or lo gen eral, ev ita rse en las ap licacion es d e lo s lengu ajes
d e program ación.
□
4 .6 .5
P r e f ijo s v ia b le s
¿Por q u é pueden usarse los au tó m a ta s L R (0) para realizar d ecisio n es d e d esplazam iento-reduc­
ción? E l a u tó m a ta L R (0 ) para u n a gram ática caracteriza la s ca d en a s d e sím b olos gram atica­
les q ue p ueden aparecer e n la p ila d e u n analizador sin tá ctico d e desplazam iento-reducción
para la gram ática. E l con ten ido de la p ila d eb e ser un prefijo d e u na form a d e frase derecha. Si
la p ila con tien e a a y el resto d e la en trad a es x, entonces u na secu en cia d e reducciones llevará
a a x a S. En térm inos d e derivaciones, S =» a x .
rm
Sin em bargo, no to d o s los prefijos d e las form as d e frases derechas pueden aparecer en la pila,
y a que el analizador sintáctico no debe desplazar m ás allá d el m ango. Por ejem plo, su p on ga que:
E ^ . F* id ^
rm
rm
(E ) * id
E n tonces, e n diversos m om entos d urante e l análisis sin tá ctico , la p ila con ten drá (, (E y ( £ ) ,
pero no d eb e con ten er (E )* , y a q ue (E ) es un m ango, q ue e l analizador sin tá ctico d eb e reducir
a F a n tes d e d esp lazar a *.
Los prefijos d e las form as d e frases derechas que pueden aparecer en la p ila d e un analiza­
dor sin tá ctico d e desplazam iento-reducción s e llam an p refijo s viables. Se d efinen d e la sigu ien te
m anera: un prefijo viab le e s un prefijo d e u n a form a d e frase d erech a q ue no co n tin ú a m ás allá
d el ex trem o derecho d e l m ango p or la d erech a d e e sa form a d e frase. M ediante esta definición,
siem p re es p osible agregar sím b olos term in ales al final d e u n prefijo viab le p a ra ob ten er u na
form a d e frase derecha.
El análisis sin tá ctico SL R se b asa en el hecho d e q ue lo s au tó m a ta s L R (0 ) reconocen los
prefijos viab les. D ecim os q ue e l elem en to A
f o f a es vá lid o para un prefijo viab le a p i si
h ay u na d erivación S '
a A w =>■ ap]fi¿w . E n general, un elem en to será válid o para m uchos
prefijos viables.
El hecho d e q u e A ->• fti'fo se a válido para a p i nos d ice m ucho acerca d e si d eb em os despla­
zar o reducir cu an do encontrem os a a p i en la p ila d e análisis sin táctico. E n especial, si #2 * e, en ­
tonces sugiere q ue no hem os d esp lazad o aún e l m ango hacia la pila, por lo q ue e l desplazam iento
es nuestro sigu ien te m ovim iento. S i f o = e, en ton ces parece q ue A -► p i es el m ango, y debem os
reducir m ediante e s ta producción. D esde luego q ue d os elem en tos válid os pueden indicarnos q ue
d ebem os hacer d istin ta s cosas para el m ism o prefijo via b le. P odem os resolver algunos d e estos
conflictos analizando e l sigu ien te sím b olo d e entrada, y o tro s p od em os resolverlos m ediante los
m étod os d e la sección 4 .8 , pero n o d eb em os su pon er q ue tod os los con flictos d e accion es d e aná­
lisis sin táctico p ueden resolverse si s e ap lica el m étodo L R a u na gra m á tica arbitraria.
P od em os calcu lar con facilidad e l con ju n to d e elem en to s válid os para ca d a prefijo viable
q ue p uede aparecer e n la p ila d e u n analizador sin tá ctico L R . D e hecho, un teo rem a central d e
la teoría d e an álisis sin táctico L R nos d ice q ue e l con ju n to d e elem en tos v á lid o s p a ra u n pre­
fijo v ia b le 7 es exa cta m en te e l con ju n to d e elem en tos a los q u e s e lleg a d esd e e l e sta d o inicial,
4.6 Introducción a l análisis sintáctico LR: SLR (LR sim ple)
257
L o s e le m e n to s c o m o e s ta d o s d e u n A F N
P od em os con stru ir un a u tó m a ta fin ito n o d eterm in ista N p ara reconocer prefijos viables
si tratam os a los m ism os elem en tos com o estad os. H ay u na tran sición d esd e A -► a -X/3
h acia A -»• a X f i etiq u e ta d a com o X , y h ay u n a tra n sició n d esd e A -► a-B /3 h acia B - » -7
etiq u eta d a com o e. E n ton ces, CERRADURA ( / ) para e l con ju n to d e elem en to s (estad os de
N ) I e s exa cta m en te el cierre e d e u n con ju n to d e esta d o s d e un A F N definidos en la sec­
ción 3.7.1. Por en d e, ir _ A (/, X ) proporciona la transición p roveniente d e l e n e l sím b olo X
d el A F D con stru id o a partir d e N m ediante la con stru cción d el su b con ju n to. Si lo vem os
d e e s ta form a, el p rocedim ien to elem ento$( G ') en la figura 4 .33 es só lo la con stru cción del
m ism o su bconjun to q u e se ap lica a l A F N N , co n los elem en tos com o estad os.
a lo largo d e la ru ta e tiq u e ta d a com o 7 en el a u tó m a ta L R (0) p a ra la gram ática. E n esen cia, el
con ju n to d e elem en tos válid os abarca to d a la inform ación ú til q ue p uede deducirse d e la pila.
A un qu e aquí n o d em ostrarem os e s te teorem a, vam os a ver un ejem plo.
E j e m p lo 4 .5 0 : V am os a considerar d e nuevo la gram ática d e expresiones aum entada, cuyos con­
juntos de elem entos y la función ir _ A se exhiben en la figura 4 3 1 . Sin dud a, la cad en a E + T * es
un prefijo viable d e la gram ática. El au tóm ata d e la figura 4.31 se encontrará en e l estad o 7, después
de haber leído E + T *. El estado 7 contiene los siguientes elem entos:
T -» T *
F
-+ id
q ue so n precisam en te los elem en tos v álid o s para E + T * . P ara ver por q u é, considere las si­
gu ien tes tres derivaciones por la derecha:
E í =>■ E
E f => E
rm
rm
=> E + T
=> E + T
=>
rm
rm
rm
=> E + T * F
rm
E* => E
rm
E + T
=> E + T * F
=>■ E + T * F
rm
_
rm
=$■ E + T * ( E ) => E + T * id
rm
rm
La prim era derivación m uestra la validez d e T - * T * - F , la segunda m uestra la validez d e F - > • ( £ ) ,
y la tercera m uestra la validez d e F - + -id . Se puede m ostrar que no h ay otros elem entos válidos
para E + T * , aunque aquí no dem ostrarem os ese hecho.
□
4 .6 .6
E je r c ic io s p a r a la s e c c ió n 4 .6
E j e r c ic io 4 .6 .1 : D escrib a tod os los prefijos viab les para las sig u ien tes gram áticas:
a ) L a g ram ática S
0 S 1 | 0 1 d el ejercicio 4 .2 .2(a).
258
Capítulo 4. A nálisis sintáctico
! b) L a g ra m á tica 5 - ^ 5 5 + | 5 5 * | a d e l ejercicio 4 .2 .1 .
! c) L a g ra m á tica S -► S ( S ) | e del ejercicio 4 .2 .2 (c).
E j e r c i c i o 4 .6 .2 : C onstruya los con jun tos SL R d e elem en to s para la g ra m á tica (aum entada)
del ejercicio 4.2.1. C alcule la función ir _ A para esto s conjuntos d e elem entos. M uestre la ta b la de
análisis sin tá ctico para e s ta gram ática. ¿E s una gra m á tica SLR?
E j e r c i c i o 4 . 6 . 3 : M uestre las accion es d e su ta b la d e análisis sin tá ctico d e l ejercicio 4 .6 .2 sobre
la e n tra d a a a * a + .
E je rc ic io
4 .6 .4 : P ara ca d a u n a d e las gram áticas (aum en tad as) d el ejercicio 4 .2 .2 (a )-(g ):
a) C onstruya los con jun tos SL R d e elem en tos y s u función ir _ A .
b) Indique cualquier con flicto d e acciones en su s con jun tos d e elem entos.
c) C onstruya la ta b la d e análisis sin tá ctico SLR , si es q u e ex iste.
E j e r c i c i o 4 . 6 . 5 : M uestre q u e la sigu ien te gram ática:
S
A
B
—► A a A b \ B b B a
-+ e
e
es L L (1), pero no S L R (l).
E j e r c i c i o 4 . 6 . 6 : M uestre q u e la sigu ien te gram ática:
S
A
SA | A
-+
a
es S L R (l), pero no L L ( 1 ).
!! E j e r c i c i o 4 . 6 . 7 : C onsidere la fam ilia d e gram áticas Gn definidas por:
S
A,
-*
a.j A i | a.j
para 1 < i, j <
A i bipara 1 < i < n
n e i* j
M uestre que:
a) Gn tien e 2n 2 — 2 producciones.
b) Gn tien e 2n2 + n2 + n con jun tos d e elem en tos L R (0).
c) G n es S L R (l).
¿Q ué d ice e s te an álisis acerca d e la ex ten sió n q u e p u ed en llegar a tener los analizadores sin ­
tá cticos LR?
4.7 A nalizadores sintácticos LR m ás poderosos
259
E j e r c ic io 4 .6 .8 : Sugerim os q u e los elem en to s in dividu ales pudieran considerarse com o esta ­
d o s d e u n a u tó m a ta finito no d eterm in ista, m ientras q ue los co n ju n to s d e elem en to s válidos
so n los esta d o s d e un a u tó m a ta fin ito d eterm in ista (vea el recuadro titu la d o “L o s elem en tos
com o estad os d e u n A F N ” en la sección 4 .6 .5 ). P ara la g ra m á tica 5 - ^ 5 5 + | 5 5 * | a d e l
ejercicio 4.2.1:
a ) D ib uje el diagram a d e tran sición (A F N ) para los elem en to s válid os d e e s ta gram ática,
d e acuerdo a la regla q u e s e p rop orciona en el recuadro antes citado.
b ) A pliqu e la construcción d e su bconjim tos (A lgoritm o 3.20) a su A F N , a partir d e (a).
¿C óm o se com p ara e l A F D resu ltan te con el con ju n to d e elem en to s L R (0) p a ra la gra­
m ática?
!! c ) M uestre q u e en to d o s los casos, la con stru cción d e su bconjun tos q ue se ap lica al A F N
q ue proviene d e los elem en tos válid os para u n a gra m á tica p roduce los con jun tos L R (0)
d e elem entos.
E j e r c ic io 4 .6 .9 : L a sigu ien te es u n a g ra m á tica am bigua:
5
A
-►
A S\ b
S A | a
C on stru ya para e s ta gram ática su colección d e co n ju n to s d e elem en tos L R (0 ). Si tratam os de
con stru ir u na ta b la d e an álisis sin táctico L R para la gram ática, hay ciertas accion es en conflic­
to . ¿Q ué son? S u p on ga q u e tratam os d e usar la ta b la d e an álisis sin tá ctico eligien d o en form a
n o d eterm in ista u n a p osible acción , ca d a vez q ue haya un con flicto. M uestre to d a s la s p osibles
secu en cias d e accion es co n la en trad a abab.
4 .7 A n a liz a d o re s s in tá c tic o s L R m á s p o d e ro so s
E n e s ta sección vam os a exten d er las técn ica s anteriores d e an álisis sin tá ctico LR , para usar un
sím b olo d e preanálisis en la entrada. H ay d os m étod os distintos:
1 . E l m étod o “L R can ón ico” , o sim p lem en te “L R ” , q u e u tiliza al m áxim o e l (los) sím b olo(s)
d e preanálisis. E ste m étod o u tiliza un ex te n so con ju n to d e elem entos, co n o cid o s com o
elem en tos L R ( 1 ).
2. E l m étod o “L R co n sím b olo d e preanálisis” o “L A L R (look ah ead L R )” , q ue se b asa en
los con jun tos d e elem en tos L R (0 ), y tien e m ucho m en os esta d o s q ue los analizadores sin ­
tácticos com unes, basados en los elem en to s L R ( 1 ). Si introducim os con cu id ad o lecturas
an ticip adas e n los elem en tos L R (0 ), p od em os m anejar m uchas gram áticas m ás co n el
m étodo L A L R q ue co n e l SLR , y construir ta b la s d e análisis sin tá ctico q ue n o sea n m ás
grandes q ue las tab las SLR. L A L R es e l m éto d o d e elección en la m ayoría d e las situ a ­
ciones.
D esp u és d e presentar am bos m étodos, concluirem os con u n a ex p licación acerca d e cóm o com ­
p actar las ta b la s d e an álisis sin tá ctico L R para lo s en torn os co n m em oria lim itada.
260
Capítulo 4. A nálisis sintáctico
4 .7 .1
E le m e n to s L R (1 ) c a n ó n ic o s
A hora presentarem os la técn ica m ás gen eral para con stru ir u na ta b la d e an álisis sin tá ctico LR
a partir d e u na gram ática. R ecuerde q ue en el m éto d o SLR , e l esta d o i llam a a la reducción
m ediante A -+ a si e l con ju n to d e elem en tos Ii co n tien e el elem en to [A
a-\ y a s e en cu en tra
en SIGUIENTE(^4). N o ob sta n te, en algu nas situ acion es cu a n d o el esta d o i aparece en la p arte
superior d e la pila, el prefijo v ia b le 0 a e n la p ila es ta l q ue 0 A n o p uede ir se g u id a d e a en
ninguna form a d e frase derecha. P or en d e, la reducción m ediante A -► a d e b e ser inválida con
la e n tra d a a.
E j e m p lo 4 .5 1 : V am os a reconsiderar el ejem p lo 4 .4 8 , en d on d e en e l e sta d o 2 ten ía m o s el
elem en to R -► L , e l cu al p o d ía corresponder a la A -> a anterior, y a p o d ía ser e l sign o =, q ue
se en cu en tra en SIGUIENTE(R ). Por en d e, e l analizador sin tá ctico SL R llam a a la reducción
m ediante R -> L en el esta d o 2, co n = com o e l sig u ien te sím b olo d e en trad a (tam bién se llam a
a la acción d e d esp lazam iento, d eb ido al elem en to S -► L -= R e n el esta d o 2). Sin em b argo, no
hay form a d e frase d erech a d e la gram ática en el ejem p lo 4 .48 q ue em p iece com o /? = •■-. Por
lo ta n to, e l estad o 2, q ue e s el esta d o corresp ond ien te al prefijo v ia b le L solam en te, en realidad
no d eb ería llam ar a la reducción d e e sa L a R .
□
Es p osib le transportar m ás inform ación en el esta d o , q ue n os p erm ita descartar algu nas d e
esta s reducciones in válidas m ed ian te A
a . A l divid ir esta d o s segú n s e a necesario, p od em os
hacer q ue cada esta d o d e u n analizador sin táctico L R indique co n ex a c titu d q ué sím b olos d e
en trad a p ueden ir d esp u és d e un m ango a para e l cu a l h a y a u na p osible reducción a A .
La inform ación adicional s e incorpora al e sta d o m ediante la redefinición d e elem en tos, para
q ue incluyan un sím b olo term inal com o un segu n d o com p onente. L a form a general d e un ele­
m ento se convierte en [A - * a • 0 , a] , en d on d e A -► a 0 es u na producción y a es u n term inal o
e l d elim itad or $ derecho. A un o b je to d e e s te tip o le llam am os elem en to L R (1 ). E l 1 se refiere
a la lon gitu d d e l segu n d o com p on en te, co n ocid o co m o la lectura a n ticip a d a d el elem en to .6 La
lectura an ticip ada no tien e efecto sobre u n elem en to d e la form a [A -+ a - 0 , a], e n d ond e 0 no
es €, pero un elem en to d e la form a [A -* - a -, a] llam a a u na reducción m ed ian te A -► a só lo si
e l sigu ien te sím b olo d e en trad a e s a. P or en d e, n os vem os ob ligad os a reducir m ed ian te A ->■
a só lo con eso s sím b olos d e en trad a a para los cu ales [A
a -, a] es u n elem ento L R ( 1 ) en el
esta d o en la p arte superior d e la pila. E l con ju n to d e ta les as siem p re será un su b co n ju n to d e
SIGUIENTE(^4), pero p od ría ser u n su b con ju n to p rop io, com o en e l ejem p lo 4.51.
D e m anera form al, d ecim os q ue e l elem en to L R ( 1 ) [A -► a - 0 , a] e s vá lid o para un prefijo
viab le 7 si hay una d erivación S ^
rm
S A w => 6 a 0 w , e n donde
tví
1 . 7 = 6a , y
2 . a es e l prim er sím b olo d e w, o w es e y, a es $.
E j e m p lo 4 .5 2 : C onsiderem os la sigu ien te gram ática:
6D esd e luego q u e so n posibles las le c tu ra s a n tic ip a d a s q u e se a n cad e n a s d e u n a lo n g itu d m ay o r a uno, p e ro no las
co n sid erarem o s e n e s te libro.
4.7 A nalizadores sintácticos LR m ás poderosos
261
S -► B B
B —► a B | b
H ay u na d erivación por la d erech a 5 ^
rm
aaB ab =» aaaBab. P od em os v er q ue el elem en to [B - *
rm
a-B, a] es válido para un prefijo viable 7 = aaa, si dejam os q ue o = aa, A = B, w = ab a = a y
0 = B e n la definición anterior. Tam bién hay u n a d erivación p or la d erech a S
B a B =*• BaaB .
rm
rm
D e e s ta derivación p od em os ver q ue e l elem en to [B -► a-i?, $] es válid o para e l prefijo viab le
Sao.
□
4 .7 .2
C o n s tr u c c ió n d e c o n ju n to s d e e le m e n to s L R (1 )
E l m étod o para construir la colección d e co n ju n to s d e elem en tos L R (1 ) válidos es en esen cia el
m ism o q u e para construir la colección can ón ica d e con jun tos d e elem en to s L R (0 ). S ólo necesi­
ta m o s m odificar los d os p rocedim ien tos CERRADURA e ir _ A .
C onjun toD eE lem en tos CERRADURA( / ) {
repeat
f o r ( ca d a elem en to [A -»• a -B ¡3, a] en I )
f o r ( ca d a producción B
7 en G ' )
f o r ( ca d a term inal b e n PRIMERO(/?a) )
agregar [B - » -7 , 6] al con ju n to /;
u n t i l no se agreguen m ás elem en to s a /;
r e t u r n /;
}
C onjun toD eE lem en tos ir _ A (J , X ) {
inicializar J para que se a e l con ju n to vacío;
f o r ( ca d a elem en to [A ->■ a-X(3, a] en I )
agregar el elem en to [A -*> a X 0 , a] al con ju n to J;
r e t u r n CERRADURA(J);
}
v o i d elem entos^G*) {
inicializar C a CERRADURA({[5" ->■ -5, $]});
repeat
f o r ( ca d a con ju n to d e elem en tos / e n C )
f o r ( ca d a sím b olo gram a tica l X )
¡ f ( ir _ A ( /, X ) no e s tá v a cío y n o e s tá e n C )
agregar ir _ A (J , X ) a C;
u n t i l n o se agreguen nuevos con jun tos d e elem en to s a C;
}
F igu ra 4.40: C onstrucción d e con jun tos d e elem en tos L R (1 ) para la g ra m á tica G'
262
Capítulo 4. A nálisis sintáctico
P ara apreciar la n u eva definición d e la operación CERRADURA, en esp ecia l, p or q ué b d e­
b e estar en PRIMERO(/3a), considere un elem en to d e la form a [A -»■ a - B 0 , a] en e l con jun ­
to d e elem entos válido para cierto prefijo viable 7 . Entonces hay u na derivación por la derecha
S
SA ax => ÓaBfiax, en d ond e 7 = 6a . Suponga q ue ¡3ax deriva a la ca d en a d e term inales
rm
rm
by. E n ton ces, para ca d a producción d e la form a B
r¡ para cierta r¡, ten em os la derivación
S => 7 B b y => 7 r¡by. Por en d e, [B -> -77, 6] es v á lid a p ara 7 . O bserve q ue b p uede ser e l prim er terim
rm
jj.
m inal derivado a partir d e 0 , o q ue es p osible que 0 derive a € e n la d erivación 0 ax => by y,
rm
por lo tan to, b p uede ser a. P ara resumir am bas p osibilid ades, decim os q ue b p uede ser cualquier
term inal e n PRIMERO(0a x ), en d on d e PRIMERO es la fun ción d e la sección 4 .4 . O bserve q ue x
no p uede contener la prim era term inal d e by, p or lo q u e PRIMERO(0 a x ) = PRIMERO(/?a). A hora
proporcionarem os la con stru cción d e los con jun tos d e elem en tos L R (1 ).
F igu ra 4.41: E l gráfico d e ir _ A para la gra m á tica (4.55)
A lg o r it m o 4 .5 3 : C onstrucción d e los con ju n tos d e elem en to s L R (1).
E N T R A D A : U n a gram ática au m en tad a G'.
SALID A: Los con ju n tos d e elem en tos L R ( 1 ) q ue so n e l con ju n to d e elem en tos válid o para uno
o m ás prefijos v iab les d e G'.
4.7 A nalizadores sintácticos LR m ás poderosos
263
M ÉTO D O : L os p rocedim ien tos CERRADURA e ir _ A, y la ru tin a p rincipal d e m e n to s para cons­
truir los con jun tos d e elem en tos se m ostraron e n la figu ra 4.4 0 .
□
E j e m p lo 4 .5 4 : C onsidere la sigu ien te gra m á tica aum entada:
Sf
S
C
-+
-»
-►
S
CC
c C | d
(4.55)
E m pezam os por calcular la cerradura de { [S' -► -S, $]}. R elacionam os e l elem ento [Sf - > -5, $]
co n e l elem en to [A - * a-B/3, a] en el procedim iento CERRADURA. Es decir, A = 5 ', a = €, B = 5,
/ ? = e y a = $ . L a función CERRADURA nos indica q ue d ebem os agregar [B -*■ -7 , 6] para cada
producción B -► t /y la term inal b en PRIMERO(/3a). E n térm inos d e la gram ática actual, B
7
debe ser 5 -> CC, y com o f i e s e y a es $, b sólo puede ser $. Por ende, agregam os [S - * • CC, $].
P ara seguir calculando la cerradura, agregam os to d o s los elem en tos [ C - » -7 , 6] para 6 en
PRIMERO( C $). E s d ecir, s i relacionam os [S-> • CC, $] con [j4 -> a-B¡3, a], tenem os q ue A = 5, a = €,
5 = C, /? = ¿ 7 y a = $. C om o C n o deriva a la ca d en a vacía, PRIMERO(C$) = PRIMERO(C ).
C om o PRIMERO(C) con tien e los term inales c y á, agregam os los elem en tos [ C - * -cC , c], [C —►
•cC, á], [ C - ^ -á, c] y [C - > -á, d ]. N inguno d e los elem en tos nuevos tiene un no term inal ju sto a
la derecha del punto, p o r lo q ue hem os com p letad o nuestro prim er conjunto d e elem entos L R (1).
E l conjunto inicial d e elem en tos es:
lo 1
S —►•$ , $
S - > -C C , $
C -► -cC , c / d
C -► -á, c / á
H em os om itid o los corch etes por con ven ien cia d e notación, y u tiliza m o s la n otación [ C - > -cC,
c/á ] com o abreviación para los d os elem en to s [ C - * -cC , c] y [ C -cC, á].
A hora calcu lam os ir _ A ( /0, X ) para los diversos valores d e X . P ara X = S debem os la cerra­
d u ra d el elem en to [S' -> 5-, $]. N o es p osib le u n a cerradura adicional, y a q u e el punto e s tá en
e l extrem o derecho. Por en d e, ten em os e l sig u ien te con ju n to d e elem entos:
h:
5'->5-, $
P ara X = C cálcu los la cerradura [S -► C-C, $]. A gregam os las producciones C co n e l segundo
com p on en te $ y d esp u és n o p od em os agregar m ás, p rod ucien do lo siguiente:
h :
S - > C-C, $
C - * -cC, $
C - > -á, $
A hora, dejam os q u e X = c. D eb em os calcular la cerradura { [C
c-C, c /á ]} . A gregam os las
producciones C co n e l segun do com p on en te c ¡ d , produciendo lo siguiente:
264
Capítulo 4. A nálisis sintáctico
I3 :
C
o C , c /d
C -► *cC7, c /d
C -► •d, c /d
Por ú ltim o, dejam os q u e X = d, y term inam os con e l sigu ien te con ju n to d e elem entos:
Z4 :
C —► d», c /d
H em os term in ado d e considerar a ir _ A con I0. N o o b ten em os nuevos con jun tos d e ¿i, pero J2,
tien e ir _ A en C, c y d. P ara ir _ A ( / 2, C), ob ten em o s lo siguiente:
k :
5 - * CC-, $
sin q ue se requiera u na cerradura. P ara calcu lar ir _ A ( /2, c) tom am os la cerradura d e {[ C
o C , $], para ob ten er lo siguiente:
k :
C -* o C , $
-cC , S
C - > -d, $
O bserve q ue /6 difiere d e /3 só lo e n los segun dos com p on en tes. M ás ad elan te verem os q ue es co ­
m ún para ciertos con jun tos d e elem en tos L R ( 1 ) q u e u n a gra m á tica ten g a los m ism os prim eros
com p onentes y q ue d ifieran en su s segu n d os com p on en tes. C uan do con stru yam os la colección
d e co n ju n tos d e elem en tos L R (0) para la m ism a gram ática, ca d a con ju n to d e L R (0 ) coincidirá
con e l con ju n to d e los prim eros com p on en tes d e u no o m ás con jun tos d e elem en to s L R ( 1 ).
C uando h ablem os sobre el an álisis sin táctico L A L R , verem os m ás sobre e s te fenóm eno.
C ontinuando co n la fun ción ir _ A para /2, i r _ A ( / 2, d) se v e d e la sigu ien te manera:
I7 :
C - > d r ,$
Si pasam os ahora a /3, lo s ir _ A d e ^ e n c y d s o n /3 e ¿4, resp ectiv a m en te, y ir _ A (7 3, C) es:
1% :
C c G ,
c /d
I4 e /5 no tien en ir _ A s , y a q ue tod os los elem en to s tien en su s p un tos en el ex trem o derecho.
Los ir _ A s d e /6 en c y d so n J6 e Í 7, resp ectivam en te, y ir _ A ( J6, C) es:
I9 :
C
cC -, $
Los con jun tos restantes d e elem en tos no producen m as ir _ A , p or lo q ue h em os term inado.
La figu ra 4 .41 m u estra los d iez con ju n tos d e elem en to s co n su s ir _ A .
□
265
4.7 A nalizadores sintácticos LR m ás poderosos
4 .7 .3
T a b la s d e a n á lis is s in tá c tic o L R (1 ) c a n ó n ic o
A hora proporcionarem os las reglas para construir las funciones ACCION e ir _ A d e L R (1 ), a
partir d e los con ju n tos d e elem en tos L R (1 ). E sta s funciones se representan m ediante u na tabla,
com o an tes. L a ú n ica diferencia e s tá e n los valores d e las entradas.
A lg o r i t m o 4 .5 6 : C onstrucción d e ta b la s d e an álisis sin tá ctico L R canónico.
E N T R A D A : U n a g ra m á tica au m en tad a G'.
SA L ID A : Las funciones ACCION e ir _ A d e la tabla d e análisis sintáctico LR canónico para G'.
M ÉTODO:
1. C onstruir C" = { i¡j, A ,
4 }, la colección d e con jun tos d e elem en tos L R (1 ) p a ra G'.
2. E l e sta d o i d e l analizador sin táctico se co n stru y e a p artir d e 4
sin táctico para e l esta d o i se d eterm in a d e la sigu ien te m anera.
L a acción d e análisis
(a) Si [A - ► a- a0, b] e s tá en J¿, e ir_A (/¿, a) = Ij, entonces hay que establecer ACCION[¿, a] a
“d esplazar f . A qu í, a d eb e ser u n a term inal.
(b ) Si [A - > a -, a] e s tá en 7¿, A * 5 ', en to n ces h ay q ue estab lecer ACCION[¿, a] a “reducir
A
a ”.
(c) Si [S' - * 5-, $] e s tá en
en to n ces h ay q ue estab lecer ACCION [i, $] a “aceptar” .
Si resu lta cualquier acción con flictiv a d eb ido a la s reglas anteriores, d ecim o s q ue la gra­
m ática n o es L R (1 ). E l algoritm o n o p rod uce un analizador sin tá ctico en este caso.
3. Las tran siciones ir _ A para el esta d o i se con stru yen para to d o s los no term in ales A
usando la regla: Si ir_A (J¿, A ) = Ij, en ton ces ir_A [¿, A] = j.
4. T od as las en trad as n o d efinidas por las reglas (2) y (3) se v u elven “error”.
5. E l esta d o in icial d e l analizador sin tá ctico es e l q ue se con stru ye a partir d el conjunto de
elem en tos q ue con tien en [S' -► -5, $].
□
A la ta b la que se form a a partir d e la acción d e análisis sin tá ctico y las funciones produci­
d a s p or e l A lgoritm o 4 .4 4 s e le co n o ce com o la ta b la d e an álisis L R ( 1 ) canónica. Si l a función
d e acción d e an álisis sin tá ctico no tien e entradas d efinidas en form a m ú ltip le, en to n ces a la
gra m á tica d a d a s e le co n o ce com o gram ática L R ( 1) . C om o a n tes, o m itim o s el “(1)” si q u ed a
com p rend ida su función.
E j e m p lo 4 .5 7 : La tab la d e análisis sin táctico canónica para la gram ática (4.55) se m uestra en
la figura 4.42. Las producciones 1, 2 y 3 son S -► CC, C - * c C y C
d, respectivam ente.
□
C ada gram ática S L R (l) es u na g ra m á tica L R ( 1 ), pero para una gra m á tica S L R (l) el ana­
lizador sin táctico L R canónico p uede tener m ás esta d o s q u e el analizador sin tá ctico SL R para
la m ism a gram ática. L a gram ática d e los ejem plos anteriores es S L R , y tien e u n analizador
sin tá ctico SL R co n sie te estad os, e n com paración con los d iez d e la figura 4 .4 2 .
266
Capítulo 4. A nálisis sintáctico
A cción
E stado
0
1
2
3
4
c
d
s3
s4
s6
s3
r3
s7
s4
r3
s6
s7
9
S
C
1
2
5
8
rl
7
8
S
acc
5
6
ir_A
9
r3
r2
r2
r2
F igu ra 4.42: T ab la d e análisis sin tá ctico ca n ó n ica para la g ra m á tica (4.55)
4 .7 .4
C o n s tr u c c ió n d e t a b l a s d e a n á lis is s in tá c tic o L A L R
A hora presentarem os nuestro ú ltim o m étod o d e con stru cción d e analizadores sin tá ctico s, la
técn ica L A L R (L R c o n lectura a n ticip a d a ). E ste m éto d o s e u tiliza con frecuencia en la p ráctica,
y a q ue las tablas q ue se obtienen so n considerablem ente m enores q ue las tablas L R canónicas, y
a pesar d e ello la m ayoría d e las con stru ccion es sin tá ctica s com unes d e los lengu ajes d e progra­
m ación pueden expresarse en form a con ven ien te m ed ia n te u na gra m á tica LA L R . Lo m ism o es
ca si válido para las gram áticas SLR , p ero hay algu nas con stru ccion es q u e las técn icas SL R no
pueden m anejar d e m anera con ven ien te (vea e l ejem p lo 4 .48).
Para u n a com paración del tam añ o d e los analizadores sin tá ctico s, las tab las SLR y LA L R
para u na gram ática siem p re tien en el m ism o núm ero d e esta d o s, y este núm ero co n siste, p or lo
general, en cien tos d e estad os, para un lenguaje com o C . La ta b la LR canónica tendría, p or lo gene­
ral, varios m iles d e esta d o s para e l len gu aje c o n el m ism o tam añ o. Por en d e, e s m ucho m ás fácil
y económ ico construir ta b la s SL R y L A L R q ue las ta b la s L R canónicas.
Con e l fin d e u na introducción, considerem os d e nuevo la g ra m á tica (4.55), cu yos con jun tos
d e elem en tos L R (1 ) se m ostraron en la figura 4 .41 . T om em os un par d e esta d o s con apariencia
sim ilar, com o /4 e I-¡. C ad a u no d e esto s esta d o s sólo tien e elem en to s con el prim er com p on en te
C - * d-. E n J4, los sím bolos d e anticipación son c o d; en J7, $ es e l único sím bolo d e anticipación.
P ara ver las diferencias entre las funciones d e I \ e h en el analizador sin tá ctico , observe q ue
la g ra m á tica g en era e l len gu aje regular c * d c * d . A l leer u n a en tra d a cc■• • cdcc•• • cd, e l analizador
sin tá ctico d esp la za e l prim er gru p o de es y la d su b sig u ien te, y las m ete en la p ila, entrando al
esta d o 4 d esp u és d e leer la d. D esp u és, el analizador llam a a u n a reducción m ediante C -+ d,
siem pre y cu an do e l sigu ien te sím b olo d e en trad a se a c o d. E l requerim iento d e q ue sig u e c o d
tien e sentid o, y a q ue ésto s so n los sím b olos q ue p odrían em pezar ca d en a s e n c ‘ d . Si $ sig u e d es­
pués d e la prim era d, ten em os u n a en tra d a com o ccd, q ue n o e s tá en e l lengu aje, y e l esta d o 4
declara en form a correcta un error si $ es la sigu ien te entrada.
El analizador sin tá ctico en tra al esta d o 7 desp ués d e leer la segu n d a d. D esp ués, e l analiza­
dor d eb e ver a $ en la entrada, o d e lo contrario em p ezó con u n a ca d en a q ue no es d e la form a
4.7 A nalizadores sintácticos LR m ás poderosos
267
c* d c* d . P or en d e, tien e sen tid o q ue e l esta d o 7 d eb a reducir m ed ian te C -► d e n la en trad a $,
y declarar un error en entradas com o c o d.
A hora vam os a su stitu ir J4 e I 7 p o r J47, la u n ión de h e I7 , q ue co n siste en e l con ju n to d e tres
elem en tos representados p or [ C - > d•, c/d/% ]. Las tran sacciones ir _ A en d q ue pasan a ^ o a / j
d esd e f t, i , ¿ e k ahora en tran a h i- L a acción d el esta d o 4 7 e s reducir en cualquier entrada.
E l analizador sin tá ctico revisado s e co m p o rta en esen cia igual q ue el original, aunque podría
reducir d a C en circun stan cias en las q ue e l original declararía un error, por ejem p lo, en una
en trad a com o ccd o cdcdc. E n u n m om ento d ado, e l error se atrapará; d e hecho, s e atrapará
an tes d e q ue se d esp lacen m ás sím b olos d e entrada.
E n form a m ás general, p od em os buscar con jun tos d e elem en to s L R (1) q u e ten gan el m is­
m o corazón; es decir, e l m ism o con ju n to d e prim eros com p on en tes, y p od em os com binar esto s
con ju n tos con corazones com u n es en un so lo con ju n to d e elem en tos. Por ejem plo, en la figura
4.41, I4 e I 7 form an d ich o par, co n el corazón { C d •}. D e m anera sim ilar, J3 e 1$ form an otro
par, con e l corazón { C -► c-C , C -► -cC , C
•d}. H ay u n p ar m ás, I8 e / 9, co n e l corazón co ­
m ún { C - * cC -}. O bserve q ue, en general, un corazón es un con ju n to d e elem en tos L R (0) para
la gram ática en cu estión , y q ue u n a gram á tica L R (1 ) p u ed e producir m ás d e d o s co n ju n to s de
elem en tos con el m ism o corazón.
C om o e l corazón d e ir _ A (J , X ) dep en de sólo d el corazón d e I, las transacciones ir _ A d e los
conjuntos com binados pueden com binarse entre s í m ism os. Por ende, no h ay problem a al revisar
la función ir _ A a m edida q ue com binam os conjuntos d e elem entos. Las funciones activas se m odi­
fican para reflejar las acciones sin error d e to d o s los conjuntos d e elem entos en la com binación.
S u p on ga q ue ten em os una gram ática L R (1 ), es decir, u n a cu y o s con jun tos d e elem en tos
L R ( 1 ) n o produzcan co n flictos d e accion es en e l an álisis sin tá ctico . Si su stitu im o s to d o s los
esta d o s q ue ten gan e l m ism o corazón co n su u nión, es p osible q ue la unión resu lta n te ten g a un
co n flicto , pero es p oco probable d eb ido a lo siguiente: S u p on ga q u e en la unión h ay un conflicto
e n el sím b olo an ticip ado, d eb ido a q ue hay un elem en to [A - * a -, a] q ue llam a a u n a reducción
m ediante A
a , y que hay otro elem ento [B
¡3-ay, 6] q ue llam a a un desplazam iento. Enton­
c e s, cierto conjunto d e elem entos a partir d el cu a l se formó la unión tien e e l elem ento [A
a -, a],
y com o los corazones d e to d o s e sto s esta d o s so n iguales, d eb e tener un elem en to [ B f r a y , c]
para algu na c. P ero en ton ces, este esta d o tien e el m ism o co n flicto d e d esp la za m ien to /red u cció n
e n a, y la gram ática no era L R (1 ) com o su pusim os. Por en d e, la com binación d e esta d o s con
corazones com unes n u n ca p od rá producir un con flicto d e d esp lazam ien to/red u cción q ue no haya
esta d o presente en uno d e los esta d o s originales, y a q ue las acciones d e d esp lazam iento dependen
só lo d el corazón, y no del sím b olo anticipado.
S in em bargo, es p o sib le q ue u n a com binación produzca u n con flicto d e redu cción /redu cción ,
com o se m uestra en e l sigu ien te ejem plo.
E j e m p lo 4 .5 8 : C onsidere la sigu ien te gram ática:
5'
S
A
B
-►
-*
—►
—►
S
a A d | bB d \ aB e \ bA e
c
c
la cu a l gen era las cu atro cad en as acd, ace, bcd y bce. E l lector p u ed e com probar q u e la gram áti­
c a es L R (1) m ediante la con stru cción d e los con jun tos d e elem en tos. A l hacer e s to , encontram os
268
Capítulo 4. A nálisis sintáctico
e l con ju n to d e elem en tos {[A
c-, d ], [B
o , e]} válid o para el prefijo viable a c y { [ A ^
o , e], [ B -+ c-, d ]} válido para b e N inguno de esto s conjuntos tiene un conflicto, y su s corazones
son iguales. Sin em bargo, su unión, que es:
A -► c-, d / e
B - * c-, d /e
gen era un con flicto d e red u cción /red u cción , y a q ue las reducciones m ediante A
se llam an para las entradas d y e .
□
cy B
c
A hora esta m o s preparados para proporcionar e l prim ero d e d o s algoritm os d e construcción
d e ta b la s LA L R . L a id ea general e s construir los con jun tos de elem en tos L R (1 ), y si n o surgen
con flictos, com binar los con jun tos con corazones com u nes. D esp ués, con stru irem os la ta b la d e
análisis sin tá ctico a partir d e la colección d e con jun tos d e elem en to s com b inad os. E l m étodo
q ue vam os a describir sirve principalm ente com o u na d efinición d e las gram áticas L A L R (l). El
proceso d e construir la colección co m p leta d e con jun tos d e elem en to s L R (1) requiere d em asiado
espacio y tiem p o com o para q ue se a ú til en la práctica.
A lg o r it m o 4 .5 9 : U n a con stru cción d e tab las L A L R sencilla, pero q ue con su m e espacio.
E N T R A D A : U n a gram ática au m en tad a G ’.
SALID A: Las funciones d e la ta b la d e an álisis sin tá ctico L A L R ACCION e ir _ A para G'.
M ÉTODO:
1. C onstruir C — {/o, / i , . .., / n}, la colección d e con jun tos d e elem en tos L R (1).
2. P ara ca d a corazón presen te entre e l con ju n to d e elem en tos L R (1 ), buscar tod os los con ­
ju n to s q ue ten gan e se corazón y su stitu ir e sto s con jun tos p or su unión.
3. D ejar q ue C = {J o , J i, . .., J m} sean los con jun tos resu ltan tes d e elem en tos L R (1 ). Las
accion es d e an álisis sin tá ctico para e l esta d o i se con stru yen a partir d e
d e la m ism a
form a q ue en e l A lgoritm o 4 .5 6 . Si h ay u n co n flicto d e accion es en e l an álisis sin tá cti­
co, el algoritm o n o p rod uce u n analizador sin tá ctico y d ecim os q ue la g ra m á tica n o es
L A L R (l).
4. L a ta b la ir _ A se con stru ye d e la sigu ien te m anera. S i J es la u n ión d e u no o m ás con
ju n to s d e elem en tos L R ( 1 ) , es decir, J = i i fl I2 n
fl Ik, en ton ces lo s corazones d e
ir _ A ( /i, X ), ir _ A ( /2, X ), . .., ir _ A (J fc, X ) son iguales, y a q ue J i, J2, ... , /¿ tie n e n e l m ism o
corazón. D ejar que K s e a la unión d e tod os los con jun tos d e elem en tos q ue tien en el
m ism o corazón q ue i r _ A ( / i , X ) . E n ton ces, ir _ A ( J, X ) — K .
A la tab la p rod ucida por e l algoritm o 4 .5 9 se le co n o ce co m o la tabla de a n á lisis sin tá ctico
L A L R para G. Si n o hay con flictos d e accion es en e l an álisis sin tá ctico , en ton ces se d ice q ue la
gra m ática d ad a es una gram ática L A L R ( l) . A la colección d e con jun tos d e elem en to s q ue se
con stru ye e n el p aso (3) s e le co n o ce com o colección L A L R ( Í ) .
4.7 A nalizadores sintácticos LR m ás poderosos
269
E j e m p lo 4 .6 0 : C onsidere d e nuevo la g ra m á tica (4.55), cu y o gráfico d e ir _ A se m ostró e n la
figu ra 4.41. C om o d ijim os an tes, h ay tres pares d e con jun tos d e elem en to s q ue p ueden com bi­
narse. k e Iq s e su stitu y en por su unión:
fe:
C - + c - C , c/d/%
C - + •c C , c/d/%
C - » -d, c/d/%
Z47:
C - + d -,c /d /$
h e h se su stitu y en por su unión:
d esp u és, / 8 e /9 se su stitu y en por s u unión:
fe :
C - * c G , c/d/%
Las funciones d e acción e ir _ A L A L R para los con jun tos com b inad os d e elem en to s se m uestran
e n la figu ra 4.43.
ACCIÓN
E stado
C
s36
d
0
1
2
36
47
s36
s36
r3
s47
s47
r3
5
89
r2
r2
ir_A
S
s47
5
C
1
2
acc
5
80
r3
rl
r2
F igu ra 4.43: T ab la d e an álisis sin tá ctico LA L R para la gra m á tica d e l ejem p lo 4 .54
P ara ver cóm o s e calculan los ir _ A , considere e l ir _ A ( /36, C ). E n e l conjunto original d e ele­
m en tos L R ( 1 ), ir _ A ( /3, C ) = f e y ahora J8 e s p arte d e f e , por lo q ue hacem os q ue i r _ A ( f e , C )
se a h 9- Podríam os haber llegado a la m ism a con clusión si consideráram os a k , la o tr a p arte de
/36. E s d ecir, ir _ A ( f e C ) = f e y ahora Ig form a parte d e f e . P ara otro ejem plo, considere a
ir _ A ( f e c), u n a en trad a q ue s e ejerce d esp u és d e la acción d e d esp lazam iento d e h en la en trad a c.
E n los conjuntos originales d e elem en tos L R (1 ), ir _ A ( / 2 , c) — f e C om o Iq form a ahora parte de
/36, ir _ A ( /2, c) se con vierte en f e . Por lo ta n to , la en trad a en la figura 4 .4 3 para el esta d o 2 y
la en trad a c se convierte e n s36, lo cual sign ifica desplazar y m eter e l esta d o 36 e n la pila.
□
C uan do se les p resen ta una ca d en a d el lengu aje c* d c* d , tan to el analizador sin tá ctico LR
d e la figura 4 .4 2 com o el analizador sin tá ctico L A L R d e la figura 4 .43 realizan exactam en ­
t e la m ism a secuencia d e desplazam ientos y reducciones, aunque los nombres d e los estad os en
la p ila p ueden diferir. P or ejem p lo, si e l analizador sin tá ctico L R m ete a J3 o Iq en la p ila, el
analizador sin tá ctico LA L R m eterá a I 36 en la pila. E s ta relación se ap lica e n gen eral para
270
Capítulo 4. A nálisis sintáctico
una gram ática L A L R . L os analizadores sin tá ctico s L R y L A L R s e im itarán u no al o tro en las
entradas correctas.
Si se le p resen ta u n a en trad a errónea, e l analizador sin tá ctico L A L R ta l vez p roceda a rea­
lizar ciertas reducciones, una v e z q ue e l analizador sin tá ctico L R haya declarad o un error. Sin
em bargo, e l analizador sin táctico L A L R n u n ca d esp lazará o tro sím b olo desp ués d e q ue el anali­
zador sin táctico L R d eclare un error. Por ejem p lo, en la en trad a ccd se g u id a d e $, e l analizador
sin tá ctico L R d e la figura 4 .4 2 m eterá lo sigu ien te en la pila:
03 34
y en el esta d o 4 descubrirá u n error, y a q u e $ es e l sig u ien te sím b olo d e en trad a y e l e sta d o 4
tien e u n a acción d e error en $. E n con traste, el analizador sin tá ctico LA L R d e la figura 4.43
realizará los m ovim ien tos corresp ond ien tes, m etien d o lo sig u ien te e n la pila:
0 36 36 47
Pero el esta d o 47 en la en trad a $ tien e la acción d e reducir C
L A L R cam biará, p or lo ta n to , s u p ila a:
d. E l analizador sin tá ctico
0 36 36 89
A hora, la acción d e l estad o 89 en la en trad a $ es reducir C
siguiente:
cC . L a p ila se co n v ierte en lo
0 36 89
en d o n d e se llam a a u n a reducción sim ilar, co n lo cu a l se o b tien e la pila:
0 2
Por ú ltim o, e l esta d o 2 tien e u n a acción d e error en la en trad a S, por lo q ue ah ora se descubre
e l error.
4 .7 .5
C o n s tr u c c ió n e fic ie n te d e ta b la s d e a n á lis is s in tá c tic o L A L R
H ay varias m odificaciones q ue p od em os realizar al A lgoritm o 4 .5 9 para ev ita r con stru ir la co ­
lección co m p leta d e con jun tos d e elem en tos L R ( 1 ) , en e l p roceso d e crear u n a ta b la d e análisis
sin tá ctico L A L R (l).
• E n prim er lugar, p od em os representar cualquier con ju n to d e elem en to s I L R (0) o L R (1)
m ed ian te su corazón (kernel); es d ecir, m ediante aquellos elem en to s q ue sea n e l elem ento
inicial, [S' - + •S ] o [5 ; -► -5, $], o q ue ten ga n el p u n to e n algún lugar q u e no s e a a l prin­
cip io d el cu erpo d e la producción.
• P od em os construir los corazones d e los elem en tos L A L R (l) a p artir d e los corazones de
los elem en tos L R (0), m ediante un proceso d e propagación y generación e sp o n tá n ea d e lec­
turas ad elan tad as, lo cu al describirem os en breve.
• Si ten em os los corazones L A L R (l), p od em os generar la ta b la d e an álisis sin tá ctico
L A L R (l) cerrando ca d a corazón, usando la función CERRADURA d e la figura 4 .4 0 , y d es­
pués calcu land o las en trad as en la ta b la m ediante e l A lgoritm o 4.5 6 , co m o si los conjuntos
d e elem en tos L A L R (l) fueran con ju n tos d e elem en to s L R (1) canónicos.
4.7 A nalizadores sintácticos LR m ás poderosos
271
E j e m p lo 4 .6 1 : V am os a usar, com o un ejem p lo d el eficien te m éto d o d e con stru cción d e una
ta b la L A L R (l), la gram ática q ue no es SL R d el ejem p lo 4 .4 8 , la cu a l reproducim os a continua­
ción en s u form a aum entada:
S'
s
L
R
—►
—►
—►
—►
5
L = R
*R | :
L
E n la figura 4 .3 9 s e m ostraron los con jun tos co m p leto s d e elem en tos L R (0) para e s ta gram á­
tica. L os corazones d e esto s elem en tos se m uestran en la figura 4 .4 4 .
□
¡o-
S ' -> -S
h:
L —> id-
h:
S '-> S -
h-
S
h-
S
L- = R
R ^ L -
h-
L —^ *7?-
h-
S ^ R -
h:
R -> L -
h:
L -> * -R
h-
S ^ L = R-
L = *R
F igu ra 4.44: C orazones d e los con jun tos d e elem en to s L R (0) p a ra la gra m á tica (4.49)
A hora d eb em os adjuntar los sím b olos d e anticipación apropiados para los elem en to s L R (0)
e n los corazones, para crear los corazones d e lo s con jun tos d e elem en tos L A L R (l). H ay dos
form as en q ue se puede adjuntar un sím b olo d e anticipación b a un elem en to L R (0) B -► 7 •<$,
e n cierto con ju n to d e elem en tos L A L R (l) J:
1. H ay un con ju n to d e elem en tos /, co n un elem en to d e corazón A -► a-/?, a, y J = ir _ A
(/, X ) , y la con stru cción de
ir_A (C ER R A D U R A ({[^ - > a /? , a ]} ), X )
com o s e prop orciona en la figura 4.40 , co n tien e [B -► 7 •<$, 6], sin im portar a. Se considera
que d ich o sím b olo d e an ticip ación b se gen era e n form a espon tán ea para B
7 -6 .
2. C om o caso esp ecial, e l sím b olo d e an ticip ación $ se gen era en form a esp o n tá n ea para el
elem en to S ' -► -5 en e l con ju n to in icial d e elem entos.
3. T odo es com o en (1), pero a — b e ir_A(CEKRADURA({[>l - + a -¡3, 6] } ), X ), com o se propor­
ciona en la figura 4.40, con tien e [B -► 7 •<$, b] sólo porque A - » a -{3 tiene a b com o uno d e sus
sím bolos d e anticipación asociados. En ta l caso, decim os q ue los sím bolos d e anticipación
se propagan d esd e A -► a ¡3 en e l corazón d e /, h a sta B -*■ 7 -6 en e l corazón d e J. Observe
que la propagación no dep en de d el sím b olo d e anticipación específico; o to d o s los sím bolos
de anticipación se propagan d esd e un elem ento h a sta otro, o ninguno lo hace.
272
Capítulo 4. A nálisis sintáctico
D eb em os d eterm in ar los sím b olos d e an ticip ación generados en form a esp o n tá n ea para ca d a
conjunto d e elem entos L R (0), y tam b ién d eterm inar cu áles elem en tos propagan los sím bolos d e
anticipación desde cuáles otros. En realidad, la prueba es bastan te sim ple. H agam os q ue # sea un
sím bolo q ue n o esté en la gram ática en cuestión. H agam os q ue A
a-/3 se a un elem ento d e cora­
zón L R (0) e n e l con ju n to I. C alcule, para cad a X , J = ir_A(CERRADURA( { [A -+ a-/3, # ] } ) , X ) .
Para cad a elem ento d e corazón en J, exam inam os su conjunto d e sím bolos d e anticipación. Si
# es u n sím b olo d e an ticip ación , en ton ces los sím b olos d e anticipación se propagan h acia ese
elem en to d esd e A - * a -0 . C ualquier o tro sím b olo d e an ticip ación s e g en era d e m anera esp o n tá ­
nea. E sta s ideas se hacen precisas e n el sigu ien te algoritm o, e l cu a l tam b ién hace uso d e l hecho
d e q ue los únicos elem en tos d e corazón e n J d eb en ten er a X ju s to a la izqu ierda d e l punto; es
decir, d eb en ser d e la form a B -► 7 X-5.
A lg o r it m o 4 .6 2 : D eterm inación d e los sím b olos d e anticipación.
E N T R A D A : E l corazón K d e un con ju n to d e elem en tos L R (0) I y u n sím b olo gram atical X .
SALID A: Los sím b olos d e an ticip ación generados en form a esp o n tá n ea por lo s elem en tos en
/, para los elem en tos d e corazón e n ir _ A ( /, X ) y los elem en to s en / , a partir d e los cu ales los
sím b olos d e anticipación se propagan h acia los elem en tos d e corazón en ir _ A (/, X ) .
M ÉTO D O : E l algoritm o se prop orciona e n la figura 4.4 5 .
□
f o r ( ca d a elem en to A
a -0 en K ) {
J : = CERRADURA({[>1
a-/?, # ] } );
i f ( [B - * 7 -X5, a] e s tá e n J, y a no es # )
con cluir q ue el sím b olo d e an ticip ación a se gen era en form a esp on tán ea
para e l elem en to B —►y X -5 en ir _ A ( J, X ) \
i f ( [B
y X Ó , # ] e s tá en J )
con cluir q ue los sím b olos d e anticipación se propagan d esd e A -+ a /3 e n I
h acia B —►7 X -5 e n ir _ A (7 , X ) \
}
F igu ra 4.45: D escub rim iento d e sím b olos d e anticipación propagados y esp on tán eos
A hora esta m o s listos para adjuntar los sím b olos d e anticipación a los corazones d e los con ­
ju n to s d e elem en tos L R (0 ) para form ar los con jun tos d e elem en tos L A L R (l). E n prim er lugar,
sab em os q ue $ es un sím b olo d e an ticip ación para S ' -► -S en e l conjunto inicial d e elem en tos
L R (0). E l A lgoritm o 4 .6 2 n os p rop orcion a to d o s los sím b olos d e an ticip ación q ue se generan
en form a esp on tán ea. D esp u és d e listar to d o s esos sím b olos d e an ticip ación , d eb em o s perm itir
q ue se propaguen h a sta q ue y a no puedan hacerlo m ás. H ay m uchos m étod os d istin to s, tod os
los cu ales en cierto sen tid o llevan la cu en ta d e los “n u ev o s” sím b olos d e anticipación q u e se han
propagado en u n elem en to , p ero q u e to d a v ía no se propagan h acia fuera. E l sig u ien te algoritm o
d escrib e u na técn ica para propagar los sím b olos d e an ticip ación h acia to d o s lo s elem entos.
A lg o r it m o 4 .6 3 : C álculo eficien te d e los corazones d e la colección d e con jun tos d e elem entos
L A L R (l).
E N T R A D A : U n a gram ática au m en tad a G'.
4.7 A nalizadores sintácticos LR m ás poderosos
273
SA L ID A : Los corazon es d e la colección d e con jun tos d e elem en to s L A L R (l) para G'.
M ÉTODO:
1. C onstruir los corazones d e los con ju n to s d e elem en to s L R (0) para G. S i el espacio no es
d e ex trem a im portancia, la m anera m ás sim p le es construir los co n ju n to s d e elem en tos
L R (0), com o en la sección 4.6 .2 , y d esp u és elim inar los elem en tos q ue no sea n d el cora­
zón. Si el esp acio e s tá restringido e n ex trem o , ta l v e z s e a con ven ien te alm acenar só lo los
elem entos d el corazón d e cad a conjunto, y calcular ir _ A para un conjunto d e elem en tos /,
para lo cu a l prim ero d eb em os calcu lar la cerradura d e I.
2. A plicar el A lgoritm o 4 .6 2 al corazón d e ca d a con ju n to d e elem en tos L R (0) y el sím b olo
gram atical X para d eterm inar q u é sím b olos d e anticipación se gen eran en form a esp on ­
tá n ea para los elem en tos d el corazón en ir _ A (/, X ), y a partir los cu a les se propagan los
elem en tos en los sím b olos d e an ticip ación I a los elem en tos d el corazón en ir _ A (/, X ) .
3. Inicializar u n a tab la q ue proporcione, para ca d a elem en to d e l corazón en ca d a conjunto
d e elem entos, los sím b olos d e anticipación asociados. A l principio, ca d a elem ento tiene aso­
ciados sólo los sím bolos d e anticipación q ue determ inam os en e l paso ( 2 ) q ue se generaron
en form a espontánea.
4 . Hacer pasadas rep etid as sob re los elem en to s d e l corazón e n to d o s los con ju n tos. AI v i­
sita r un elem en to i, buscam os los elem en to s d el corazón para los cu ales i propaga sus
sím b olos d e an ticip ación , usand o la inform ación q ue s e ta b u ló e n e l p aso (2 ). E l conjunto
actu al d e sím b olos d e anticipación para i se agrega a los q ue y a e stá n asociados con ca d a
uno d e los elem en tos p ara los cu ales i propaga su s sím b olos d e an ticip ación . C ontinua­
m os realizando pasadas sobre los elem en to s d e l corazón h a sta q ue n o s e propaguen más
sím b olos nuevos d e anticipación.
E j e m p lo 4 .6 4 : V am os a construir los corazones d e los elem en tos L A L R (l) para la gram á­
tic a d e l ejem p lo 4.61. Los corazones d e los elem en to s L R (0) s e m ostraron en la figura 4.44.
A l aplicar e l A lgoritm o 4 .6 2 al corazón d el con ju n to d e elem en to s /o, prim ero calculam os
CERRADURA ( { [5 ' -► -5, # ] } ) , q u e v ie n e siendo:
5' - > - 5 , #
S
-L = R , #
S -> - R , #
#/=
L - + -id , # / =
R -> • £ , #
E ntre los elem en tos e n la cerradura, vem os d o s en d on d e se h a generado el sím b olo d e antici­
p ación = en form a esp on tán ea. E l prim ero d e ésto s es L - * • * R . E s te elem en to , co n * a la
derech a d e l punto, produce [L -*■ * -fí, = ] . E s d ecir, = es un sím b olo d e an ticip ación generado
en form a esp o n tá n ea para L
*-fí, q ue s e en cu en tra en el con ju n to d e elem en to s h - D e ma­
nera sim ilar, [L
-id , = ] n o s in d ica q ue = es un sím b olo d e anticipación generado en form a
esp o n tá n ea para L -► id - en J5.
C om o # es un sím b olo d e anticipación para los seis elem en to s en la cerradura, determ ina­
m os q ue el elem en to S ' - * S en I0 propaga los sím b olos d e an ticip ación h acia lo s sigu ientes seis
elem entos:
274
Capítulo 4. A nálisis sintáctico
S'
S* in Ti
S
L* = R in I 2
S —> R ' in /3
D
J0:
L - > * -R in h
L - > id- in 15
i? —> L* in Í 2
H
esde
5'
-5
h
h
S
L- = R
R ^ L S ^ R L
* .R
h
h
h
I2:
S ^ L -
I 4:
L — » * aR
h:
= R.
S ^ L = -R
acia
Sr
h
h
h
h
S-
L —>id*
S ^ L = -R
L — ► *-R
Ti
h
L —>id*
L —> *R»
R - > L-
h
L -> *-R
h
h
h
L —» id*
R - > LS ^ L = R-
F igu ra 4.46: P rop agación d e los sím b olos d e anticipación
En la figura 4.47, m ostram os los pasos (3) y (4) d el A lgoritm o 4.63. La colum na etiq uetad a
com o INIC m uestra los sím bolos d e anticipación generados en forma esp on tán ea para ca d a ele­
mento d el corazón. É stas son sólo las d os ocurrencias d e = que vim os antes, y e l sím bolo d e anti­
cipación $ espontáneo para e l elem ento inicial S ' -► *5.
En la prim era pasada, el sím b olo $ d e anticipación se p rop aga d e S ' -► S en lo h acia los seis
elem en tos listad os en la figura 4.46. E l sím b olo = d e anticipación se p rop aga d esd e L
*-R
en I4 h acia los elem en tos L —> * R- en
y R —►L- en /g. T am bién s e propaga h acia s í m ism o
y hacia L
id- en J5, pero esto s sím b olos d e anticipación y a e stá n presentes. E n la seg u n d a y
tercera pasada, el único sím b olo nuevo d e an ticip ación q u e se propaga es $, d escub ierto para
los su cesores d e h e I4 en la p asad a 2 y p ara e l su cesor d e /6 en la p a sa d a 3. E n la p asada 4
no se propagan nuevos sím b olos d e an ticip ación , p or lo q u e e l con ju n to final d e sím b olos d e
a nticipación s e m u estra en la colu m n a por la derecha d e la figura 4.4 7 .
O bserve q ue el con flicto d e d esp lazam ien to/red u cció n en el ejem p lo 4 .48 q ue u tiliz a el m éto ­
d o SL R h a desaparecido co n la técn ica L A L R . L a razón es q ue sólo el sím b olo $ d e anticipación
e s tá asociado co n R
L- en J2, p or lo q u e no h ay con flicto con la acción d e análisis sin táctico
d e d esp lazam ien to en =, gen erad a p or el elem en to S - * L -= R e n /2.
□
4.7 A nalizadores sintácticos LR m ás poderosos
Conjunto
275
E lemento
I nic
/o:
S'^-S
h:
S
S ímbolos de anticipación
P asada 1 P asada 2 P asada 3
S
S
S
S f —►5-
S
S
h-
S->L- = R
R ^ L -
S
S
S
S
s
s
s
h-
S ^ R -
S
s
8
—
=/s
=/s
= /S
—
=/s
=/s
= /S
s
S
h:
L —>id*
h-
S ^ L = -R
h-
L —►*R*
=
=/s
=/S
h-
R
=
=/s
h:
S ^ L = R-
=/s
s
L-
F igu ra 4.47: C álcu lo d e lo s sím b olos d e anticipación
4 .7 .6
C o m p a c ta c ió n d e la s t a b l a s d e a n á lis is s i n tá c tic o L R
U n a g ra m á tica d e lengu aje d e program ación com ún, con u n a ca n tid a d d e 50 a 100 term inales
y 100 producciones, p uede tener u n a ta b la d e análisis sin tá ctico L A L R co n varios cien to s de
estad os. L a función d e acción p od ría fácilm ente tener 2 0 0 0 0 en trad as, ca d a u n a requiriendo
por lo m enos 8 b its para codificarla. E n los d isp o sitiv o s p eq ueños, p uede ser im p ortan te tener
u na cod ificación m ás eficien te q ue un arreglo bidim ensional. E n breve m encionarem os algunas
técn icas q u e se han u tilizad o para com prim ir los cam p o s ACCION e ir _ A d e u n a ta b la d e aná­
lisis sin táctico LR.
U na téc n ic a ú til para com p actar el cam p o d e acción e s reconocer que, por lo general, mu­
ch as filas d e la ta b la d e accion es son idénticas. P or ejem p lo, en la figura 4 .4 2 los esta d o s 0 y
3 tien en entradas d e acción id én ticas, al igual q ue los esta d o s 2 y 6 . Por lo tanto, p od em os
ahorrar u n a can tid ad d e esp acio considerable, co n m uy p o co co sto en relación co n el tiem po,
si cream os un apuntador para ca d a estad o en un arreglo unidim ensional. Los apuntadores para
los esta d o s con las m ism as accion es apuntan a la m ism a ubicación. P ara acceder a la informa­
ción d esd e e s te arreglo, asignam os a ca d a term inal un núm ero d esd e cero h a sta u no m enos que
e l núm ero d e term inales, y u tilizam os e s te en tero com o u n d esp lazam iento a p artir d e l valor del
apuntador para ca d a estado. E n u n esta d o dado, la acción d e an álisis sin tá ctico para la ¿-ésima
term inal se en con trará a i u bicacion es m ás allá d e l valor d el apuntador para e se estad o.
P u ed e lograrse u n a mejor eficiencia en cu an to al espacio, a ex p en sa s d e un analizador sintác­
tico un p oco m ás lento, m ediante la creación d e u na lista para las acciones d e ca d a estad o. E sta
lista con siste en pares (term inal-sím bolo, acción). L a acción m ás frecuente para un esta d o puede
276
Capítulo 4. A nálisis sintáctico
colocarse al final d e una lista, y en lugar d e un term inal p odem os usar la notación “c u a l q u i e r a ” ,
indicando que si no se h a encontrado e l sím bolo de entrada actual h asta ese punto en la lista, de­
bem os realizar e sa acción sin im portar lo q ue se a la entrada. A dem ás, las entradas d e error pueden
sustituirse sin problem as por acciones d e reducción, para u na mayor uniformidad a lo largo d e una
fila. Los errores se d etectarán m ás adelante, antes d e un m ovim iento d e desplazam iento.
E j e m p lo 4 .6 5 : C onsidere la tab la d e análisis sin tá ctico d e la figu ra 4.3 7 . E n prim er lugar,
observe q ue las accion es para los estad os 0, 4 , 6 y 7 coin cid en . P od em os representarlas todas
m ediante la sigu ien te lista:
SÍMBOLO
id
(
c u a lq u ie r a
ACCIÓN
s5
s4
error
El esta d o 1 tien e u n a lista sim ilar:
+
$
c u a lq u ie r a
s6
acc
error
En el estad o 2, p od em os su stitu ir las entradas d e error p or r2, para q u e se realice la reducción
m ediante la producción 2 en cualquier en trad a excep to *. Por ende, la lista para e l esta d o 2 es:
*
c u a lq u ie r a
s7
r2
El esta d o 3 tien e só lo entradas d e error y r4. P od em os su stitu ir la p rim era p or la segunda,
d e m anera q u e la lis ta para el e sta d o 3 co n sista sólo e n e l par ( c u a l q u i e r a , r4 ). Los esta d o s
5, 10 y 11 pueden tratarse e n form a sim ilar. L a lista para e l esta d o 8 es:
+
)
c u a lq u ie r a
s6
s il
error
*
)
c u a lq u ie r a
s7
s il
rl
y para el esta d o 9 es:
□
Tam bién p od em os codificar la ta b la ir _ A m ediante u na lista , pero aquí e s m ás eficien te
crear u n a lista d e pares para ca d a n o term in al A . C ad a par en la lista para A es d e la form a
(esta d o A ctu a l, sigu ien teE stadó) , lo cu a l in d ica que:
ir_ A [e s ta d o A c tu a l, A] = sig u ien teE sta d ó
4.7 A nalizadores sintácticos LR m ás poderosos
277
E s ta técn ica e s ú til, y a q ue tien d e a haber m enos esta d o s e n cualquier colu m n a d e la ta b la
ir _ A . L a razón es q ue el ir _ A en el no term inal A sólo p u ed e ser un esta d o q u e p u ed a deri­
varse a partir d e un con ju n to d e elem en tos e n los q ue algu nos elem en tos ten g a n a A ju sto a la
izquierda d e un punto. N in gún con ju n to tien e elem en to s con X y Y ju sto a la izquierda d e un
p u n to si X * Y. Por en d e, ca d a esta d o aparece com o m áxim o en u na co lu m n a ir _ A .
P ara u n a m ayor reducción d e l espacio, h ay q ue observar q ue las en trad as d e error en la
ta b la d e ir _ A nunca se con su ltan . Por lo tanto, p o d em o s su stitu ir ca d a en trad a d e error por
la en trad a m ás com ún sin error en s u colum na. E s ta en trad a s e con vierte en la o p ció n prede­
term inada; s e represen ta e n la lista para ca d a co lu m n a m ed ian te u n par co n c u a l q u i e r a en
v e z d e estadoA ctu al.
E j e m p lo 4 .6 6 : C onsidere d e nuevo la figura 4 .3 7 . L a co lu m n a p a ra F tien e la en tra d a 10 para
e l estad o 7, y to d a s las d em á s entradas so n 3 o error. P o d em o s su stitu ir error por 3 y crear,
para la co lu m n a F , la sigu ien te lista:
ESTADOACTUAL
SlG U IENTEESTA DO
7
c u a lq u ie r a
10
3
D e m anera sim ilar, u n a lista ad ecu ad a para la colu m n a T es:
6
9
c u a lq u ie r a
2
P ara la co lu m n a E p od em os elegir 1 o 8 com o la op ción predeterm inada; son necesarias d o s en­
trad as e n cualquier caso. Por ejem plo, p od ríam os crear p a ra la co lu m n a E la sigu ien te lista:
4
c u a lq u ie r a
8
1
E l ahorro d e esp acio e n esto s p eq ueños ejem plos p uede ser en gañ oso, y a q ue e l núm ero to ta l
d e entradas en las listas creadas en e s te ejem p lo y e l anterior, ju n to con los apuntadores desde
los esta d o s h acia las listas d e acción, y d esd e la s no term in ales h acia las lista s d e los sigu ientes
estad os, producen u n ahorro d e esp acio m ínim o, en com paración con la im plem en tación d e una
m atriz d e la figura 4.37. E n las gram áticas p rácticas, e l esp a cio necesario para la representa
ción d e la lista es, por lo general, m enos d el d iez p or cien to d e lo necesario para la representa­
ción d e la m atriz. Los m étod os d e com p resión d e tab las para los au tó m a ta s fin itos q u e v im o s en
la sección 3.9 .8 pueden usarse tam b ién para representar la s ta b la s d e an álisis sin tá ctico LR.
4 .7 .7 E je r c ic io s
p a r a la s e c c ió n 4 .7
E j e r c ic io 4 .7 .1 : C on stru ya los con ju n tos d e elem en tos
a) L R canónicos, y
b) LA L R .
para la g ra m á tica 5 - * S S + | 5 S * | a d e l ejercicio 4 .2 .1 .
278
Capítulo 4. A nálisis sintáctico
E j e r c i c i o 4 . 7 . 2 : R ep ita e l ejercicio 4.7.1 para ca d a u n a d e las gram áticas (aum en tad as) d el
ejercicio 4 .2 .2 (a )-(g ).
E j e r c i c i o 4 . 7 . 3 : P ara la gram ática d e l ejercicio 4 .7 .1 , u se el A lgoritm o 4.63 para calcular la
colección d e con ju n tos d e elem en tos L A L R , a partir d e los corazon es d e lo s con jun tos d e ele­
m en tos L R (0).
E j e r c i c i o 4 . 7 . 4 : M uestre q u e la sigu ien te gram ática:
5
A
-► A a \ b A c \ d e
—► d
\ b d a
es L A L R (l), pero n o S L R (l).
E j e r c i c i o 4 . 7 . 5 : M uestre q u e la sigu ien te gram ática:
s
A
B
—► A a
—►
—►
d
d
es L R ( 1 ) , pero no L A L R (l).
4.8
U so d e g ra m á tic a s a m b ig u a s
Es un hecho q u e n in gu n a gram ática am bigua es L R y , p or en d e, no s e en cu en tra en n inguna
d e las clases d e gram áticas q u e hem os v isto en las d o s seccion es anteriores. N o o b sta n te, cier­
tos tip os d e gram áticas am biguas so n b astan te ú tiles e n la especificación e im plem en tación d e
lenguajes. P ara las con stru cciones d e lenguajes com o las expresiones, u n a gra m á tica am bigua
proporciona u na especificación m ás co r ta y natural q ue cualquier g ra m á tica n o am b igu a equi­
valente. O tro u so d e las gram áticas am biguas e s e l d e aislar las con stru ccion es sin tá ctica s q ue
ocurren con frecuencia para la op tim ización d e casos esp eciales. Con u n a gra m á tica am bigua,
p od em os especificar las con stru cciones d e casos esp eciales, agregando con cu id ad o nuevas pro­
d uccion es a la gram ática.
A unque las gram áticas q u e u sam os n o so n am biguas, e n to d o s los casos esp ecificam os re­
glas para elim inar la am bigüedad, las cu ales sólo perm iten un árbol d e an álisis sin tá ctico para
ca d a enunciado. D e e s ta form a, se elim in an las am bigüedades d e la especificación gen eral d el
lenguaje, y algunas veces es posible diseñar un analizador sin táctico L R q ue sig a las m ism as
opciones para resolver las am bigüedades. D eb em os enfatizar q u e las construcciones am biguas d e­
ben utilizarse con m edida y en un form a estrictam ente controlada; d e no ser así, no p uede haber
garantía en e l lenguaje q ue reconozca un analizador sintáctico.
4.8
Uso d e gram áticas ambiguas
4 .8 .1
279
P r e c e d e n c ia y a s o c ia tiv id a d p a r a r e s o lv e r c o n flic to s
C onsidere la g ra m á tica am bigua (4.3) para la s exp resion es co n lo s operadores + y *, q u e repe­
tim o s a continuación por conveniencia:
E + E | E * E \ (E )
| id
E s ta g ra m á tica es am bigua, y a q ue no esp ecifica la a so cia tiv id a d ni la p reced en cia d e los op e­
radores + y *. L a gram ática sin am