COMPILADORES E INTERPRETES

 

COMPILADOR

El "COMPILADOR" es un programa especial destinado a traducir automáticamente un lenguaje de segunda o tercera generación en código de máquina (bits), de tal modo que todas las instrucciones y los datos contenidos en el programa estén en condiciones de ser reconocidos y ejecutados por la CPU. El programa original se llama "programa fuente" y se conserva igual que un texto preparado con un procesador de palabras. La "traducción" es una serie diferentes de caracteres (utilizables por la CPU) que debe ser grabado en otro espacio de memoria auxiliar. Se llama "programa objeto". El usuario "carga" el programa objeto en la memoria principal (RAM) cuando desea utilizarlo. (Los programas comerciales que compramos vienen bajo la forma de "programa objeto").
Dado que cada procesador tiene su propio "set" de instrucciones, los compiladores deben estar asociados a los diversos modelos de procesadores (p.ej. Intel 8088, Motorola 68000, PowerPC). Y ya que existen múltiples lenguajes de más alto nivel que el código de máquina, también están ligados a dichos lenguajes. En consecuencia, debería haber un número de compiladores igual al número de modelos de procesadores multiplicado por el número de lenguajes (ej. compilador de PASCAL para Motorola 68000, para Intel 8088, etc.; de BASIC para Motorola 68000, para Intel 8088, etc.; etc.).
En la realidad el número es menor, ya que no se confeccionan compiladores para todas las combinaciones posibles.

Estructura de un Compilador.



Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformación al código fuente para obtener el código objeto. La siguiente figura representa los componentes en que se divide un compilador. Las tres primeras fases realizan la tarea de análisis, y las demás la síntesis. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores.

Análisis Léxico.
En la fase de análisis léxico se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. Cada componente léxico es una secuencia lógicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carácter de puntuación. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token). En el caso de los identificadores creados por el programador no solo se genera un componente léxico, sino que se genera otro lexema en la tabla de símbolos.

Análisis Sintáctico.
En esta fase, los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida.

Análisis Semántico.
La fase de análisis semántico se intenta detectar instrucciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada.

Generación de código Intermedio.
Algunos compiladores generan una representación intermedia explícita del programa fuente, una vez que se han realizado las fases de análisis. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta. Esta representación intermedia debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto.

Optimización de Código.
En esta fase se trata de mejorar el código intermedio, de modo que resulte un código de máquina más rápido de ejecutar.

Generación de Código.
Esta constituye la fase final de un compilador. En ella se genera el código objeto que por lo general consiste en código en lenguaje máquina (código relocalizable) o código en lenguaje ensamblador.

Administrador de la tabla de símbolos.
Una tabla de símbolos es una estructura de datos que contiene un registro por cada identificador. El registro incluye los campos para los atributos del identificador. El administrador de la tabla de símbolos se encarga de manejar los accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa.

Manejador de errores.
En cada fase del proceso de compilación es posibles encontrar errores. Es conveniente que el tratamiento de los errores se haga de manera centralizada a través de un manejador de errores. De esta forma podrán controlarse más eficientemente los errores encontrados en cada una de las fases de la compilación de un programa


 

INTERPRETE

Los "INTERPRETES" son programas especiales destinados a "traducir" programas redactados en lenguajes de tercera generación, pero operan de un modo distinto de los compiladores. Aquí, no se crea un "programa objeto", sino que -cada vez que se desea usar el programa fuente- se opera leyéndolo y traduciéndolo instrucción por instrucción en lenguaje de máquina. En este caso, el intérprete debe estar previa y constantemente disponible en la memoria principal, ya que de él depende la ejecución del programa.
Los primeros microcomputadores (especialmente los modelos "hogareños") se entregaban con un intérprete de BASIC "incorporado", lo cual quiere decir que tenían un chip con el intérprete grabado en ROM, adjunto al procesador. De este modo podían traducir y ejecutar instrucciones de BASIC desde el momento en que se encendían.