Está en la página 1de 7

Traductores.

Un traductor es un tipo de procesador en el que tanto la


entrada como la salida son
programas escritos en lenguajes de programación. Su objetivo
es procesar un código
fuente y generar a continuación un código objeto.

El código fuente está escrito en un lenguaje fuente (LF), el


código objeto se dice que está escrito en un lenguaje objeto
(LO), se conoce como lenguaje de implementación (LI) al
lenguaje en el que está escrito el propio traductor. Cada uno de
los códigos pueden estar escritos tanto en lenguajes de alto
nivel como de bajo nivel.

Ensambladores.

Un ensamblador es un traductor en el que el lenguaje fuente es


lenguaje ensamblador y el lenguaje objeto es lenguaje maquina.

Compiladores.

Un compilador es un programa traductor que transforma un


código fuente escrito en un lenguaje de alto nivel a un código
en lenguaje de bajo nivel. Son aplicaciones capaces de
transformar un fichero de texto con código fuente en un fichero
en código máquina ejecutable.

El programa ejecutable generado por un compilador deberá


estar preparado para su ejecución directa en una arquitectura
determinada. El diseño de un compilador se suele dividir en
etapas que facilitan su construcción, y donde en cada etapa se
reciben los datos de salida de la etapa anterior, generando a su
vez datos de salida para la etapa posterior. Las etapas en las
que se divide un compilador pueden agruparse en:
 Etapas de análisis del programa fuente (análisis léxico,
sintáctico y semántico),
encargadas de la comprobación de la correcta
utilización de los elementos del
lenguaje, la combinación de los mismos y su significado.
 Etapas de síntesis del programa compilado (generación
de código intermedio, optimización y generación de
código final).

Los compiladores pueden clasificarse considerando diferentes


criterios, dependiendo del tipo de código máquina que
generan, pueden clasificarse entre compiladores que generan:

 Código máquina puro; los compiladores que generan


código para un conjunto de instrucciones máquina
particulares.
 Código máquina aumentado; cuando los compiladores
generan código máquina
utilizando rutinas del sistema operativo y de soporte al
lenguaje.
 Código máquina virtual; el código generado por el
compilador estará compuesto completamente
de instrucciones virtuales.

Según la forma en que se realiza el proceso de compilación, se


pueden definir los
siguientes tipos de compiladores:

 Compilador cruzado. Se genera código objeto para


una arquitectura diferente a la que se utiliza en el
proceso de compilación.
 Compilador con montador. Se compilan diferentes
módulos de forma independiente y después se enlazan
por medio de un programa montador.
 Compilador en una o varias pasadas. Realizan varias
lecturas del código fuente para poder generar el código
objeto.
 Compilador incremental. Tras una primera fase de
compilación en la que se detectan errores, vuelve a
compilar el programa corregido pero analizando
únicamente las partes del código fuente que habían
sido modificadas.
 Auto-compilador. Este tipo de compiladores están
escritos en el mismo lenguaje
que va a compilar.
 Meta-compilador. Se trata de programas que toman
como entrada las especificaciones del lenguaje para el
que se quiere construir un compilador, y generan como
salida un compilador para dicho lenguaje.

Al tiempo que se requiere para traducir el lenguaje de alto nivel


a lenguaje objeto se le denomina tiempo de compilación, y al
tiempo que se emplea en ejecutar el programa objeto sobre los
datos de entrada se le conoce como tiempo de ejecución.
Enlazadores.

En ocasiones, un código objeto en lenguaje máquina no puede


ser ejecutado directamente ya que necesita ser enlazado con
librerías propias del sistema operativo.

Las diferentes partes en las que se divide el código fuente


pueden compilarse por separado, produciéndose códigos
objetos para cada una de ellas. El enlazador se encargará
entonces de realizar la unión de los distintos códigos objeto,
produciendo un módulo de carga que será el programa objeto
completo.

En el caso de programas enlazados dinámicamente, el enlace


entre el ejecutable y las librerías se realiza en tiempo de carga o
ejecución del programa.

Cargadores.

Un cargador tiene como función principal asignar el espacio


necesario en memoria a
un programa, pasando después el control a la primera de las
instrucciones a ejecutar, y
comenzando a continuación el proceso de ejecución.

Intérpretes.

Los intérpretes son programas que analizan y ejecutan una a


una las instrucciones que
encuentran en un código fuente. Por tanto coexisten en
memoria con el programa fuente,
de modo que el proceso de traducción se realiza en tiempo de
ejecución.
El hecho de que no sea necesaria la carga de todo el programa
en memoria supone
una ventaja de los intérpretes y facilitan también la
metaprogramación, ya que un programa puede modificar su
propio código fuente en tiempo de ejecución.

La principal desventaja de un intérprete es que la ejecución de


un programa
compilado será más rápida que la del mismo programa
interpretado.

Máquinas virtuales.

Se trata de aplicaciones software capaces de crear una capa de


abstracción que simula una máquina diferente a la original, es
decir, ofrecen a un sistema operativo o a un programador la
percepción de una máquina física diferente a la real.

El sistema operativo de la máquina virtual se conoce


como invitado, mientras que el de
la máquina real se conoce como anfitrión.

Las máquinas virtuales se pueden clasificar en dos grandes


categorías según su funcionalidad: las máquinas virtuales de
sistema y de aplicación.

Decompiladores.
Los decompiladores obtienen un código fuente a partir de un
programa compilado. La tarea de decompilación puede ayudar
a encontrar errores y vulnerabilidades en el código.

La ofuscación del código, consiste en evitar que un programa


compilado pueda ser decompilado.

Desensambladores.

Un desensamblador transforma el código binario en


instrucciones básicas del procesador en el que se ejecuta el
programa. Son un caso particular de decompiladores.

Depuradores.

Los depuradores ayudan al programador a encontrar la causa


de un error detectado durante el proceso de desarrollo.

Los depuradores permiten observar la traza de ejecución de los


programas, visualizando
el valor de cualquier variable, dirección o expresión en cualquier
momento de la ejecución.

Analizadores de rendimiento.

Los analizadores de rendimiento permiten examinar el


comportamiento de los programas
en tiempo de ejecución. La mayor parte de los compiladores
incorporan analizadores de rendimiento.

Optimizadores de código.

Los optimizadores de código son programas que realizan


modificaciones sobre el código
intermedio para mejorar la eficiencia de un programa. Entre las
distintas tareas de optimización destacan la velocidad de
ejecución y el tamaño final del código ejecutable.
Las optimizaciones que pueden realizarse en un código
pueden clasificarse entre las dependientes de la máquina,
como son la asignación de registros o la reordenación de
código, y las independientes de la máquina, como la
eliminación de redundancias.

Preprocesadores.

Los preprocesadores son un caso particular de traductor que


generalmente produce el
código de entrada para el compilador.

Editores de lenguajes de programación.

Los editores de lenguajes son programas independientes


cuya función es ayudar al programador en el proceso de
creación de un código fuente.

También podría gustarte