
PROGRAMAS DE SISTEMAS
COMPILADORES
Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. El compilador sólo traduce, acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje, generando un programa equivalente independiente, que la máquina será capaz de interpretar, este proceso se conoce como compilación. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio, o simplemente texto. Este proceso de traducción se conoce como compilación.
En un compilador hay que distinguir tres lenguajes diferentes:
El de los programas de partida (LA)
El de los programas equivalentes traducidos (LB), normalmente el lenguaje de máquina
El lenguaje en que está escrito el propio compilador (LC), que puede ser igual o diferente a uno de los otros dos.
Un compilador equivale a un traductor profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua, mientras que un intérprete corresponde al intérprete humano, que traduce de viva voz las palabras que oye, sin dejar constancia por escrito.

Generalmente un compilador se divide en dos partes:
Front End: parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionará.
Back End: parte en donde se genera el código máquina exclusivo para una plataforma a partir de lo analizado en el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para la generación de código máquina en varias plataformas distintas. El código que genera Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador.
Tipos de compiladores:
Esta clasificación de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías:
Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.
Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. En la actualidad, se pueden escribir nuevas versiones del compilador en el lenguaje que compila ese compilador. Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida, especificada normalmente mediante una gramática formal y barata, dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas.
