You are on page 1of 8

Untraductorsedefinecomounprogramaquetraduceoconviertedesdeuntextoo

programaescritoenunlenguajefuentehastauntextooprogramaequivalenteescritoenun
lenguajedestinoproduciendo,sicabe,mensajesdeerror.Lostraductoresenglobantantoa
loscompiladores(enlosqueellenguajedestinosuelesercdigomquina)comoalos
intrpretes(enlosqueellenguajedestinoestconstituidoporlasaccionesatmicasque
puedeejecutarelintrprete).
Esimportantedestacarlavelocidadconlaquehoyendasepuedeconstruiruncompilador.
Enladcadade1950,seconsideralostraductorescomoprogramasnotablemente
difcilesdeescribir.ElprimercompiladordeFortran(FormulaTranslator),porejemplo,
necesitparasuimplementacinelequivalentea18aosdetrabajoindividual(realmente
nosetardtantopuestoqueeltrabajosedesarrollenequipo).Hastaquelateorade
autmatasylenguajesformalesnoseaplicalacreacindetraductores,sudesarrolloha
estadoplagadodeproblemasyerrores.Sinembargo,hoydauncompiladorbsicopuede
serelproyectofindecarreradecualquierestudianteuniversitariodeInformtica.

Tiposdetraductores
Desdelosorgenesdelacomputacin,haexistidounabismoentrelaformaenquelas
personasexpresansusnecesidadesylaformaenqueunordenadorescapazdeinterpretar
instrucciones.Lostraductoreshanintentadosalvaresteabismoparafacilitarleeltrabajoa
loshumanos,loquehallevadoaaplicarlateoradeautmatasadiferentescamposyreas
concretasdelainformtica,dandolugaralosdistintostiposdetraductoresqueveremosa
continuacin.

1.2.1.1Traductoresdelidioma
Traducendeunidiomadadoaotro,comoporejemplodelinglsalespaol.Estetipode
traductoresposeemultituddeproblemas,asaber:

Necesidaddeinteligenciaartificialyproblemadelasfraseshechas.Elproblemadela
inteligenciaartificialesquetienemuchodeartificialypocodeinteligencia,porloqueen
laactualidadresultacasiimposibletraducirfrasesconunsentidoprofundo.Como
ancdota,durantelaguerrafra,enunintentoporrealizartraduccionesautomticasdelruso
alinglsyviceversa,sepusoapruebaunprototipointroduciendoeltextoeningls:El
esprituesfuerteperolacarneesdbilcuyatraduccinalrusosepasdenuevoalingls
paraversicoincidaconeloriginal.Cualfuelasorpresadelosdesarrolladorescuandolo
queseobtuvofue:Elvinoestbuenoperolacarneestpodrida(eninglsspiritsignifica
tantoespritucomoalcohol).Otrosejemplosdifcilesdetraducirloconstituyenlasfrases
hechascomo:Pieldegallina,porsilasmoscas,molarmazo,etc.

Difcilformalizacinenlaespecificacindelsignificadodelaspalabras.

Cambiodelsentidodelaspalabrassegnelcontexto.Ej:pordeciraquello,sellevuna

galleta.

Engeneral,losresultadosmssatisfactoriosenlatraduccindellenguajenaturalsehan
producidosobresubconjuntosrestringidosdellenguaje.Yanms,sobresubconjuntosen
losquehaymuypocomargendeambigedadenlainterpretacindelostextos:discursos
jurdicos,documentacintcnica,etc.1.2.1.2CompiladoresEsaqueltraductorquetiene
comoentradaunasentenciaenlenguajeformalycomosalidatieneunficheroejecutable,es
decir,realizaunatraduccindeuncdigodealtonivelacdigomquina(tambinse
entiendeporcompiladoraquelprogramaqueproporcionaunficheroobjetoenlugardel
ejecutablefinal).1.2.1.3IntrpretesEscomouncompilador,soloquelasalidaesuna
ejecucin.Elprogramadeentradasereconoceyejecutaalavez.Noseproduceun
resultadofsico(cdigomquina)sinolgico(unaejecucin).Haylenguajesqueslo
puedenserinterpretados,comop.ej.SNOBOL(StriNgOrientedSimBOlycLanguage),
LISP(LIStProcessing),algunasversionesdeBASIC(BeginnersAllpurposeSymbolic
InstructionCode),etc.Suprincipalventajaesquepermitenunafcildepuracin.Entrelos
inconvenientespodemoscitar,enprimerlugar,lalentituddeejecucin,yaquealejecutara
lavezquesetraducenopuedeaplicarseunaltogradodeoptimizacin;porejemplo,siel
programaentraenunbucleylaoptimizacinnoestmuyafinada,lasmismas
instruccionesseinterpretarnyejecutarnunayotravez,enlenteciendolaejecucindel
programa.Otroinconvenienteesquedurantelaejecucin,elintrpretedeberesidiren
memoria,porloqueconsumenmsrecursos.3
Introduccin
Ademsdequelatraduccinoptimizaelprogramaacercndoloalamquina,loslenguajes
interpretadostienenlacaractersticadequepermitenconstruirprogramasquesepueden
modificarasmismos.
Algunoslenguajesintentanaunarlasventajasdeloscompiladoresydelosintrpretesy
evitarsusdesventajas;sonloslenguajespseudointerpretados.Enestos,elprogramafuente
pasaporunpseudocompiladorquegeneraunpseudoejecutable.Paraejecutareste
pseudoejecutableselehacepasarporunmotordeejecucinquelointerpretademanera
relativamenteeficiente.Estotienelaventajadelaportabilidad,yaqueelpseudoejecutable
esindependientedelamquinaenquevayaaejecutarse,ybastaconqueendichamquina
sedispongadelmotordeejecucinapropiadoparapoderinterpretarcualquier
pseudoejecutable.ElejemploactualmsconocidoloconstituyeellenguajeJava;tambin
sonpseudointerpretadasalgunasversionesdePascalydeCOBOL(COmmonBussiness
OrientedLanguage).Lafigura1.2muestralospasosaseguirenestoslenguajespara
obtenerunaejecucin.
Figura1.2.Esquemadetraduccin/ejecucindeunprogramainterpretado1.2.1.4

Preprocesadores
Permitenmodificarelprogramafuenteantesdelaverdaderacompilacin.Hacenusode
macroinstruccionesydirectivasdecompilacin.Porejemplo,enlenguajeC,el

preprocesadorsustituyeladirectiva#include Uno.c porelcdigocompletoquecontiene


elficheroUno.c,demaneraquecuandoelcompiladorcomienzasuejecucinse
encuentraconelcdigoyainsertadoenelprogramafuente(lafigura1.3ilustraesta
situacin).Algunasotrasdirectivasdepreprocesamientopermitencompilartrozosde
cdigosopcionales(lenguajesCyClipper):#fi,#ifdef,#define,#ifndef,etc.Los
preprocesadoressuelenactuardemaneratransparenteparaelprogramador,pudiendo
inclusoconsiderarsequesonunafasepreliminardelcompilador.

1.2.1.5Intrpretesdecomandos
Unintrpretedecomandostraducesentenciassimplesainvocacionesaprogramasdeuna
biblioteca.Seutilizanespecialmenteenlossistemasoperativos(lashelldeUnixesun
intrpretedecomandos).Losprogramasinvocadospuedenresidirenelkernel(ncleo)del
sistemaoestaralmacenadosenalgndispositivoexternocomorutinasejecutablesquese
traenamemoriabajodemanda.
Porejemplo,sibajoMSDOSsetecleaelcomandocopy seejecutarlafuncindecopia
deficherosdelsistemaoperativo,queseencuentraresidenteenmemoria.
4


Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC

Figura1.3.Funcionamientodeladirectivadepreprocesamiento#include enlenguajeC

1.2.1.6Ensambladoresymacroensambladores
Sonlospionerosdeloscompiladores,yaqueenlosalboresdelainformtica,los
programasseescribandirectamenteencdigomquina,yelprimerpasohacialos
lenguajesdealtonivelloconstituyenlosensambladores.Enlenguajeensambladorse

estableceunarelacinbiunvocaentrecadainstruccinyunapalabramnemotcnica,de
maneraqueelusuarioescribelosprogramashaciendousodelosmnemotcnicos,yel
ensambladorseencargadetraducirloacdigomquinapuro.Deestamanera,los
ensambladoressuelenproducirdirectamentecdigoejecutableenlugardeproducir
ficherosobjeto.
Unensambladoresuncompiladorsencillo,enelqueellenguajefuentetieneunaestructura
tansencillaquepermitelatraduccindecadasentenciafuenteaunanicainstruccinen
cdigomquina.Allenguajequeadmiteestecompiladortambinselellamalenguaje
ensamblador.Endefinitiva,existeunacorrespondenciaunoaunoentrelasinstrucciones
ensambladorylasinstruccionesmquina.Ej:
Instruccinensamblador:LDHL,#0100Cdigomquinagenerado:65h.00h.01h
Porotrolado,existenensambladoresavanzadosquepermitendefinirmacroinstrucciones
quesepuedentraduciravariasinstruccionesmquina.Aestosprogramasselesllama
macroensambladores,ysuponenelsiguientepasohacialoslenguajesdealtonivel.Desde
unpuntodevistaformal,unmacroensambladorpuedeentendersecomounensamblador
conunpreprocesadorprevio.

1.2.1.7Conversoresfuentefuente
Permitentraducirdesdeunlenguajedealtonivelaotrolenguajedealtonivel,5
Introduccin
conloqueseconsigueunamayorportabilidadenlosprogramasdealtonivel.
Porejemplo,siunordenadorslodisponedeuncompiladordePascal,yqueremosejecutar
unprogramaescritoparaotramquinaenCOBOL,puesunconversordeCOBOLaPascal
solucionarelproblema.Noobstanteelprogramafuenteresultadopuederequerirretoques
manualesdebidoadiversosmotivos:

Ensituacionesenqueellenguajedestinocarecedeimportantescaractersticasqueel
lenguajeorigenstiene.PorejemplounconversordeJavaaC,necesitaramodificaciones
yaqueCnotienerecolectordebasura.

Ensituacionesenquelatraduccinnoesinteligenteylosprogramasdestinosonaltamente
ineficientes.1.2.1.8CompiladorcruzadoEsuncompiladorquegeneracdigoparaser
ejecutadoenotramquina.Seutilizanenlafasededesarrollodenuevosordenadores.De
estamaneraesposible,p.ej.,construirelsistemaoperativodeunnuevoordenador
recurriendoaunlenguajedealtonivel,einclusoantesdequedichonuevoordenador
dispongasiquieradeuncompilador.Ntesetambinque,parafacilitareldesarrollode
softwaredeunnuevoordenador,unodelosprimerosprogramasquesedebendesarrollar
parastees,precisamente,uncompiladordealgnlenguajedealtonivel.

1.3Estructuradeuntraductor

Untraductordividesulaborendosetapas:unaqueanalizalaentradaygenera
estructurasintermediasyotraquesintetizalasalidaapartirdedichasestructuras.
Portanto,elesquemadeuntraductorpasadesereldelafigura1.1,asereldela
figura1.7.
Bsicamentelosobjetivosdelaetapadeanlisisson:a)controlarlacorreccindel
programafuente,yb)generarlasestructurasnecesariasparacomenzarlaetapade
sntesis.
Parallevarestoacabo,laetapadeanlisisconstadelassiguientesfases:
OAnlisislexicogrfico.Divideelprogramafuenteenloscomponentesbsicosdel
lenguajeacompilar.Cadacomponentebsicoesunasubsecuenciade

Figura1.7.Esquemaporetapasdeuntraductor11

Introduccin
caracteresdelprogramafuente,yperteneceaunacategoragramatical:nmeros,
identificadoresdeusuario(variables,constantes,tipos,nombresde
procedimientos,...),palabrasreservadas,signosdepuntuacin,etc.
OAnlisissintctico.Compruebaquelaestructuradeloscomponentesbsicossea
correctasegnlasreglasgramaticalesdellenguajequesecompila.
OAnlisissemntico.Compruebaqueelprogramafuenterespetalasdirectricesdel
lenguajequesecompila(todolorelacionadoconelsignificado):chequeodetipos,
rangosdevalores,existenciadevariables,etc.
Cualquieradeestastresfasespuedeemitirmensajesdeerrorderivadosdefallos
cometidosporelprogramadorenlaredaccindelostextosfuente.Mientrasms
errorescontroleuncompilador,menosproblemasdarunprogramaentiempode
ejecucin.Porejemplo,ellenguajeCnocontrolaloslmitesdeunarray,loque
provocaqueentiempodeejecucinpuedanproducirsecomportamientosdel
programadedifcilexplicacin.
Laetapadesntesisconstruyeelprogramaobjetodeseado(equivalente
semnticamentealfuente)apartirdelasestructurasgeneradasporlaetapade
anlisis.Paraellosecomponedetresfasesfundamentales:
OGeneracindecdigointermedio.Generauncdigoindependientedelamquina
muyparecidoalensamblador.Nosegeneracdigomquinadirectamenteporque
asesmsfcilhacerpseudocompiladoresyademssefacilitalaoptimizacinde
cdigoindependientementedelmicroprocesador.
OGeneracindelcdigomquina.Creaunbloquedecdigomquinaejecutable,
ascomolosbloquesnecesariosdestinadosacontenerlosdatos.
OFasedeoptimizacin.Laoptimizacinpuederealizarsesobreelcdigo

intermedio(deformaindependientedelascaractersticasconcretasdel
microprocesador),sobreelcdigomquina,osobreambos.Ypuedeserunaaislada
delasdosanteriores,oestarintegradaconellas.

1.3.1Construccinsistemticadecompiladores

Confrecuencia,lasfasesanterioresseagrupanenunaetapainicial(frontend)y
unaetapafinal(backend).Laetapainicialcomprendeaquellasfases,opartesde
fases,quedependenexclusivamentedellenguajefuenteyquesonindependientes
delamquinaparalacualsevaagenerarelcdigo.Enlaetapainicialseintegran
losanlisislxicosysintcticos,elanlisissemnticoylageneracindecdigo
intermedio.Laetapainicialtambinpuedehacerciertaoptimizacindecdigoe
incluyeadems,elmanejodeerrorescorrespondienteacadaunadeesasfases.
Laetapafinalincluyeaquellasfasesdelcompiladorquedependendelamquina
destinoyque,engeneral,nodependendellenguajefuentesinoslodellenguaje
intermedio.Enestaetapa,seencuentranaspectosdelafasedegeneracinde
12

Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC


Figura1.8.ConstruccindetrescompiladoresdeCreutilizandounfrontend
cdigo,ademsdesuoptimizacin,juntoconelmanejodeerroresnecesarioyel
accesoalasestructurasintermediasquehagafalta.
Sehaconvertidoenunaprcticacomneltomarlaetapainicialdeuncompiladory
rehacersuetapafinalasociadaparaproduciruncompiladorparaelmismolenguaje
fuenteenunamquinadistinta.Tambinresultatentadorcrearcompiladorespara
varioslenguajesdistintosygenerarelmismolenguajeintermediopara,porltimo,
usarunaetapafinalcomnparatodosellos,yobtenerasvarioscompiladorespara
unamquina.Parailustrarestaprcticaysuinversa,lafigura1.8
Figura1.9.Creacindetrescompiladores(Pascal,CyCOBOL)paraunamisma
mquinaIntel
13
Introduccin
MuestraunasituacinenlaquesequierecrearuncompiladordellenguajeCpara
tresmquinasdiferentes:DecAlpha(Unix),Motorola(MacOS)eIntel(MSDOS).
Cadabloquedelneaspunteadasagrupaunfrontendconunbackenddandolugara
uncompiladorcompleto.
DemanerainversasepodranconstruirtrescompiladoresdePascal,CyCOBOL
paraunamismamquina,p.ej.Intel,comoseilustraenlafigura1.9.
Porltimo,lacreacindecompiladoresdePascal,CyCOBOLparalasmquinas
DecAlpha,MotorolaeIntel,pasaraporlacombinacindelosmtodosanteriores,
talcomoilustralafigura1.10.


Figura1.10.Lacombinacindecadafrontendconunbackenddalugaraun
compiladordistinto:tresdePascal,tresdeCytresdeCOBOL.Elesfuerzoseha
reducidoconsiderablemente.

1.3.2Latabladesmbolos

Unafuncinesencialdeuncompiladoresregistrarlosidentificadoresdeusuario
(nombresdevariables,defunciones,detipos,etc.)utilizadosenelprogramafuente
yreunirinformacinsobrelosdistintosatributosdecadaidentificador.Estos
atributospuedenproporcionarinformacinsobrelamemoriaasignadaaun
identificador,ladireccindememoriaenquesealmacenarentiempodeejecucin,
sutipo,sumbito(lapartedelprogramadondeesvisible),etc.
Puesbien,latabladesmbolosesunaestructuradedatosqueposeeinformacin
sobrelosidentificadoresdefinidosporelusuario,yaseanconstantes,variables,
tiposuotros.Dadoquepuedecontenerinformacindediversandole,debehacerse
deformaquesuestructuranoseauniforme,estoes,noseguardalamisma
informacinsobreunavariabledelprogramaquesobreuntipodefinidoporel
usuario.Hacefuncionesdediccionariodedatosysuestructurapuedeserunatabla
hash,unrbolbinariodebsqueda,etc.,contaldequelasoperacionesdeacceso
seanlo
14
Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC

Figura1.11.Esquemaporetapasdefinitivodeuntraductorbastanteeficientes.
Tantolaetapadeanlisiscomoladesntesisaccedeaestaestructura,porloquese
hallamuyacopladaalrestodefasesdelcompilador.Porelloconvienedotarala
tabladesmbolosdeunainterfazlosuficientementegenricacomoparapermitirel
cambiodelasestructurasinternasdealmacenamientosinqueestasfasesdebanser
retocadas.Estoesasporquesueleserusualhacerunprimerprototipodeun
compiladorconunatabladesmbolosfcildeconstruir(yportanto,ineficiente),y
cuandoelcompiladoryahasidofinalizado,entoncesseprocedeasustituirlatabla
desmbolosporotramseficienteenfuncindelasnecesidadesquehayanido
surgiendoalolargodelaetapadedesarrolloanterior.Siguiendoestecriterio,el
esquemageneraldefinitivodeuntraductorsedetallaenlafigura1.11.Lafigura
1.12ilustraelesquemaporfases,dondecadaetapahasidosustituidaporlasfases
quelacomponenysehahechomencinexplcitadelpreprocesador..

You might also like