1. Interpretes
Traduce a lenguaje máquina,cadalíneadel programafuente ylaejecutade inmediato.
Traducenen Lenguaje de AltoNivel aLenguaje Maquina,se encargande traducircada instrucción,
una por una(o cada líneade instrucciones) contenidaenun programaescritoencualquier
lenguaje de altonivel ainstruccionesencódigobinario,comprensible porlascomputadoras.
Los intérpretesnoproducencódigoobjeto,porellolaejecuciónde unprogramarequiere
forzosamente del códigofuente.Además,los programasenlenguaje interpretadose ejecutancon
más lentitudque aquellosenlenguaje compilado.
Los intérpretesrealizanlatraducciónyejecuciónde formasimultánea,esdecir,unintérpretelee
el códigofuente ylova ejecutandoal mismotiempo.
Se puedenutilizarcomoalternativaaloscompiladoresparatraducirlenguajesde altonivel.Envez
de traducir el programafuente ygrabar en formapermanente el códigoobjetoque se produce
durante la corridade compilaciónparautilizarloenunacorridade producciónfutura,el
programadorsólocarga el programafuente enlacomputadorajuntocon losdatos que se van a
procesar.A continuación,unprogramaintérprete,almacenadoenel sistemaoperativodeldisco,o
incluidode manerapermanentedentrode lamáquina,convierte cadaproposicióndelprograma
fuente enlenguajede máquinaconformevayasiendonecesariodurante el procesode losdatos.
No se graba el códigoobjetoparautilizarloposteriormente.
La siguientevezque se utilice unainstrucción,se le debeinterpretarotravezytraducir a lenguaje
máquina.Porejemplo,duranteel procesamientorepetitivode lospasosde unciclo,cada
instruccióndel ciclotendráque volveraserinterpretadocadavezque se ejecute el ciclo,locual
hace que el programasea máslentoentiempode ejecución(porque se varevisandoel códigoen
tiempode ejecución) peromásrápidoentiempode diseño(porque nose tiene que estar
compilandoacada momentoel códigocompleto).El intérpreteeliminalanecesidadde realizar
una corridade compilacióndespuésde cadamodificacióndel programacuandose quiere agregar
funcionesocorregirerrores;peroesobvioque unprograma objetocompiladoconantelación
deberáejecutarse conmuchamayorrapidezque unoque se debe interpretaracada paso durante
una corridae producción.
En general,se puede decirque unlenguajeesinterpretadosi susinstruccionesse ejecutan
secuencialmenteapartirde códigofuente.Paraejecutarel códigode unlenguaje interpretado,
necesitamos unintérprete de ese lenguaje.El intérprete irárecibiendolíneasde códigoque
traducirá a lenguaje máquinaparaque se ejecute.A diferenciade loslenguajescompilados,nose
produce un ejecutable.De este modo,de unaplataformaaotra, sólohabráque cambiarel
intérprete,noel código.
La siguientefiguramuestrael funcionamientode uninterprete.
Etapas del procesode interpretación
2. A la horade construirunintérprete esconveniente utilizarunaRepresentaciónInterna(RI) del
lenguaje fuente aanalizar.De estaforma,laorganizacióninternade lamayoría de losintérpretes
se descompone enlosmódulos:
<!--[if !supportLists]-->·<!--[endif]-->TraductoraRepresentaciónInterna:Tomacomoentradael
códigodel programaP en Lenguaje Fuente,loanalizaylotransformaa la representacióninterna
correspondiente adichoprogramaP.
<!--[if !supportLists]-->·<!--[endif]-->RepresentaciónInterna(P/RI):Larepresentacióninterna
debe serconsistente conel programaoriginal.Entre lostiposde representacióninterna,los
árbolessintácticossonlosmásutilizadosy,si lascaracterísticasdel lenguaje lopermiten,pueden
utilizarse estructurasde pilaparaunamayoreficiencia.
<!--[if !supportLists]-->·<!--[endif]-->Tablade símbolos:Durante el procesode traducción,es
convenienteircreandounatablacon informaciónrelativaalossímbolosque aparecen.La
informaciónaalmacenarendichatabla de símbolosdepende de lacomplejidaddel lenguaje
fuente.Se puedenalmacenaretiquetasparainstruccionesde salto,informaciónsobre
identificadores(nombre,tipo,líneaenlaque aparecen,etc.) ocualquierotrotipode información
que se necesite enlaetapade evaluación.
<!--[if !supportLists]-->·<!--[endif]-->Evaluadorde RepresentaciónInterna:A partirde la
RepresentaciónInternaanterioryde losdatos de entrada,se llevanacabo las accionesindicadas
para obtenerlosresultados.Durante el procesode evaluaciónesnecesariocontemplarla
apariciónde errores
<!--[if !supportLists]-->·<!--[endif]-->Tratamientode errores:Durante el procesode evaluación
puedenaparecerdiversoserrorescomodesbordamientode lapila,divisionesporcero,etc.que el
intérprete debecontemplar.
Ventajasde lautilizaciónde intérpretes
En general,lautilizaciónde compiladorespermite construirprogramasmáseficientesque los
correspondientesinterpretados.Estoesdebidoaque durante laejecuciónde códigocompilado
no esnecesariorealizarcomplejosanálisis(yase hicieronentiempode compilación),además,un
buencompiladorescapazde detectarerroresyoptimizarel códigogenerado.
Los intérpretes,pordefinición,realizanlafase de análisisyejecuciónalavez,locual imposibilita
talesoptimizaciones.Porestarazón,lossistemasinterpretadossuelensermenoseficientesque
loscompilados.Noobstante,losnuevosavancesinformáticosaumentanlavelocidadde
procesamientoycapacidadde memoriade losordenadores.Actualmente,laeficienciaesun
problemamenosgrave ymuchasvecesse prefierensistemasque permitanundesarrollorápido
de aplicacionesque cumplanfielmente latareaencomendada.
Tiposde intérpretes
Intérpretespuros
Son losque analizanyejecutansentenciaasentenciatodoel programafuente.Siguenel modelo
de interpretacióniterativay,portanto,se utilizanprincipalmente paralenguajessencillos.
3. Los intérpretespurosse hanvenidoutilizandodesde laprimerageneraciónde ordenadoresal
permitirlaejecuciónde largosprogramasenordenadoresde memoriareducida,yaque sólo
debíancontenerenmemoriael intérpreteylasentenciaaanalizaryejecutarencada momento.El
principal problemade este tipode intérpretesesque si amitaddel programa fuente se producen
errores,se debe de volveracomenzarel proceso.
Intérpretesavanzados
Incorporanun pasopreviode análisisde todoel programafuente.Generandoposteriormente un
lenguaje intermedioque esejecutadoporellosmismos.
De estaformaen caso de erroressintácticosnopasande lafase de análisis.Se utilizanpara
lenguajesmásavanzadosque losintérpretespuros,yaque permitenrealizarunanálisismás
detalladodel programafuente (comprobaciónde tipos,optimizaciónde instrucciones,etc.)
Intérpretesincrementales
Existenciertoslenguajesque,porsuscaracterísticas,no se puedencompilardirectamente.La
razón esque puedenmanejarobjetosofuncionesque nosonconocidosentiempode
compilación,yaque se creandinámicamente entiempoenejecución.Entre estoslenguajes,
puedenconsiderarse
Smalltalk,Lisp oProlog.Conel propósitode obtenerunamayoreficienciaque enlainterpretación
simple,se diseñancompiladoresincrementales.Laideaescompilaraquellaspartesestáticasdel
programa enlenguaje fuente,marcandocomodinámicaslasque nopuedancompilarse.
Posteriormente,entiempode ejecución,el sistemapodrácompilaralgunaspartesdinámicaso
recompilarpartesdinámicasque hayansidomodificadas.Estossistemasnoproducenuncódigo
objetoindependiente,sinoque acompañanel sistemaque permitecompilarmódulosentiempo
de ejecución(runtime system)al códigoobjetogenerado.
Normalmente,loscompiladoresincrementalesse utilizanensistemasinteractivosdonde conviven
móduloscompiladosconmódulosmodificables.
EvaluadoresParciales
La utilizaciónde evaluadoresparcialesoespecializadoressurge al considerarque muchos
programascontienendostiposde datosde entrada.Existenunaserie de datosde entradaque son
diferentesencadaejecuciónmientrasque otrosdatosnovarían de una ejecuciónaotra.El primer
conjunto,se conoce como datosde entradadinámicos(se denotarácomoDin),mientrasque el
segundoconjunto,seríanlosdatosde entradaestáticos(Est).Dadoun programaP, el procesode
evaluaciónparcial consiste enconstruirotroprogramaespecializadoPEstparalosdatos estáticos
de P. El programaPEst suele estarescritoenel mismolenguaje fuente que Pyse debe garantizar
que cuandose le presentenlosdatosdinámicosproduzcalosmismosresultadosque si se
hubiesen presentadotodoslosdatosal programa P original.