Está en la página 1de 7

COMPILADORES

Un compilador es un programa que lee un programa en un lenguaje y lo traduce a un programa


equivalente en otro lenguaje, y además informa al usuario sobre la presencia de errores en el
programa de entrada.

CLASIFICACION GENERAL

 De una pasada o de múltiples pasadas


 De carga y de ejecución
 De depuración o de optimización

El Diseño de un compilador surge como resultado de:

 Desarrollo de un nuevo lenguaje de programación


 Adición de extensiones a los ya existentes
 Explotación de las características del hardware

A futuro:

 Extensión para el cómputo paralelo y distribuido


 Explotación de características multimedia (MMX)
TIPOS DE SISTEMAS DE COMPILACIÓN

ENSAMBLADOR

Traducen programas escritos en lenguaje ensamblador a código máquina.

COMPILADOR

Traducen programas escritos en lenguaje de alto nivel a código intermedio o a código máquina.

INTERPRETE

No genera código objeto, analiza y ejecuta directamente cada proposición del Programa Fuente
(PF).

PREPROCESADOR

Sustituyen macros, incluyen archivos o extensión del lenguaje.

PARTES DE LA COMPILACIÓN

ANÁLISIS (Etapa Inicial):

Divide al PF en sus elementos componentes y crea una representación intermedia. Se determinan


las operaciones y se registran en una estructura de árbol (ej. árbol sintáctico)
SÍNTESIS (Etapa Final):

Construye el PO deseado a partir de la representación Intermedia (requiere técnicas más


especializadas)

ANÁLISIS DEL PROGRAMA FUENTE

 ANALISIS LINEAL (Léxico- Exploración- Scanner)

Se lee el programa como una cadena de izquierda a derecha, se agrupan y se generan


componentes léxicos o token (secuencia de caracteres con significado colectivo).

 ANALISIS JERARQUICO (Sintáctico- Parser)

Los componentes léxicos se agrupan en colecciones anidadas con un significado colectivo ( frases
gramaticales que por lo general se representan mediante árboles sintácticos).
 ANALISIS SEMANTICO

Se realizan revisiones para asegurar que los componentes de un programa se ajustan de un modo
significativo.
Intérprete

Un intérprete es uno de esos conceptos de computación que hemos escuchado alguna vez. Si eres
programador, de seguro sabes lo que son y lo haz utilizado en más de una ocasión. En el siguiente
artículo, veremos de forma sencilla el concepto de intérprete, así como las ventajas de emplearlos
en el desarrollo de software.

Un intérprete es un programa o software capaz de analizar y ejecutar programas escritos en


lenguajes de alto nivel. Los intérpretes funcionan de manera distinta a los compiladores, ya que
van traduciendo y ejecutando el código hecho por el programador o desarrollador línea a línea,
cargando el código fuente y traduciendo las instrucciones a un lenguaje intermedio, para que el
programa pueda ser ejecutado por el ordenador o la computadora en donde se está ejecutando el
intérprete.

Estructura de un intérprete

A la hora de construir un intérprete es conveniente utilizar una Representación Interna (RI) del
lenguaje fuente a analizar. De esta forma, la organización interna de la mayoría de los intérpretes
se descompone en los módulos:

Traductor a Representación Interna: Toma como entrada el código del programa P en Lenguaje
Fuente, lo analiza y lo transforma a la representación interna correspondiente a dicho programa P.

Representación Interna (P/RI): La representación interna debe ser consistente con el programa
original. Entre los tipos de representación interna, los árboles sintácticos son los más utilizados y,
si las características del lenguaje lo permiten, pueden utilizarse estructuras de pila para una mayor
eficiencia.

Tabla de símbolos: Durante el proceso de traducción, es conveniente ir creando una tabla con
información relativa a los símbolos que aparecen. La información a almacenar en dicha tabla de
símbolos depende de la complejidad del lenguaje fuente. Se pueden almacenar etiquetas para
instrucciones de salto, información sobre identificadores (nombre, tipo, línea en la que aparecen,
etc.) o cualquier otro tipo de información que se necesite en la etapa de evaluación.

Evaluador de Representación Interna: A partir de la Representación Interna anterior y de los


datos de entrada, se llevan a cabo las acciones indicadas para obtener los resultados. Durante el
proceso de evaluación es necesario contemplar la aparición de errores.

Interpretación Iterativa

La interpretación iterativa es apropiada para lenguajes sencillos, donde se analiza y ejecuta cada
expresión de forma directa, como podrían ser los códigos de máquinas abstractas o lenguajes de
sentencias simples. La interpretación consiste en un ciclo básico de búsqueda, análisis y ejecución
de instrucciones.

El esquema sería:
Inicializar

REPETIR

Buscar siguiente Instrucción i

SI encontrada ENTONCES

Analizar i

Ejecutar i

HASTA (que no haya más instrucciones)

Interpretación Recursiva

Comúnmente, el diseño de nuevos lenguajes de programación se realiza en dos fases:

Una primera fase de especificación semántica mediante la construcción de un intérprete

prototipo que actúa como una especificación ejecutable y una segunda fase de implementación
del compilador de dicho lenguaje.

Tipos de intérpretes

A continuación se va a realizar una clasificación de los diferentes métodos de interpretación según


la estructura interna del intérprete. Es conveniente observar que algunos métodos podrían
considerarse híbridos, ya que mezclan los procesos de compilación e interpretación.

Intérpretes puros

Los intérpretes puros son los que analizan y ejecutan sentencia a sentencia todo el programa
fuente. Siguen el modelo de interpretación iterativa y, por tanto, se utilizan principalmente para
lenguajes sencillos.

Intérpretes avanzados

Los intérpretes avanzados o normales incorporan un paso previo de análisis de todo el programa
fuente. Generando posteriormente un lenguaje intermedio que es ejecutado por ellos mismos. De
esta forma en caso de errores sintácticos no pasan de la fase de análisis. Se utilizan para lenguajes
más avanzados que los intérpretes puros, ya que permiten realizar un análisis más detallado del
programa fuente (comprobación de tipos, optimización de instrucciones, etc.)

Intérpretes incrementales

Existen ciertos lenguajes que, por sus características, no se pueden compilar directamente. La
razón es que pueden manejar objetos o funciones que no son conocidos en tiempo de
compilación, ya que se crean dinámicamente en tiempo en ejecución. Entre estos lenguajes,
pueden considerarse Smalltalk, Lisp o Prolog. Con el propósito de obtener una mayor eficiencia
que en la interpretación simple, se diseñan compiladores incrementales.

También podría gustarte