lunes, 30 de mayo de 2016

Clase 2.1 Introducción al proceso de compilación

¿Que es un Traductor?

Un traductor es un programa que toma como entrada un texto escrito en un lenguaje y da como salida otro texto en un lenguaje diferente.




Ejemplos del traductor.

Mensaje de error.

Tipos de Traductores.

  • Compilador: es un traductor que convierte un texto escrito en un lenguaje de alto nivel a un lenguaje de bajo nivel (código objeto o máquina).
  • Ensamblador: es un lenguaje de bajo nivel, donde cada sentencia del lenguaje fuente se traduce a una instrucción en código máquina.
  • Interprete: no genera código objeto, analiza y ejecuta directamente cada proposición del código fuente.
  • Preprocesador: procesan un texto fuente modificándolo en cierta forma previamente a la compilación.
¿Como saber si estamos ante un compilador?

Cuando el lenguaje fuente esta en un lenguaje de programación de alto nivel y el objeto generado sea de bajo nivel (ensamblador o código de maquina).


Resultado del compilador:



Ventajas de los compiladores.
  • Producen un código optimizado.
  • La ejecución del programa objeto es mucho mas rápida que si se interpreta el programa fuente
  • El compilador tiene una visión global del programa, por lo que la información de mensajes de error es más detallada.

Desventajas de los compiladores.
  • Se debe de ejecutar muchas veces el código fuente para ver los cambios en el resultado.
  • Mayor consumo de memoria.
Interprete: 

Es un programa que analiza y ejecuta simultáneamente el programa fuente, es decir no producen un código objeto, siendo su ejecución simultánea a la del programa fuente.

Comportamiento del Interprete:

Un interprete es como un compilador, solo que la salida es una ejecución. El programa de entrada se reconoce y ejecuta a la vez. No se produce un resultado físico (código máquina) sino lógico (una ejecución).

Resultado del interprete




Contexto del compilador.


Etapas de compilación.


Token: es una cadena de caracteres que tiene un significado coherente un lenguaje de programación.

En la etapa de análisis se divide el programa fuente en sus piezas constituyentes y crea una representación intermedia del mismo.

En la etapa de síntesis se construye el programa destino deseado a partir de una descripción en un lenguaje de representación intermedia.


Análisis Léxico.
El analizador léxico o scanner, transforma el texto fuente en una secuencia ordenada de elementos léxicamente válidos (tokens).






Funciones del Análisis Léxico.

El analizador léxico debe reconocer y presentar los caracteres Tokens en una representación más útil para el analizador sintáctico.

Además de:
  • Eliminar espacios.
  • Ignorar comentarios.
  • Tratar con la tabla de símbolos.
  • Reconocer identificadores y palabra reservada.
  • Manejar el fichero fuente.
  • Contabilizar posición de tokens.
  • Procesar macros, constantes, includes..
  • Generar tokens bajo demanda del analizador sintáctico.
  • Estructurar la colección de tokens.
  • Identificar la colección de tokens.
  • Describir el lenguaje como expresiones regulares.
  • Especificar un diagrama de transición.
  • Traducir el diagrama a una tabla de transición.
Analizador Sintáctico.

El analizador sintáctico o parser recibe los tokens y comprueba su ordenación correcta. Genera un árbol sintáctico.


Tipos de Analizadores Sintácticos.


Análisis Semántico
  • El analizador semántico comprueba que el árbol sintáctico es semánticamente válido.
  • Revisa el programa fuente para comprobar que las reglas semánticas se cumplen.
  • Genera un árbol semántico o etiquetado.

Generación de código intermedio.
  • Después de los análisis sintácticos y semánticos, algunos compiladores generan una representación intermedia explicita del programa fuente.
  • Se puede considerar esta representación intermedia como un programa para una maquina 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.
  • La fase de optimización de código trata de mejorar el código intermedio, de modo que resulte un código de Maquina más rápido de ejecutar.
  • Hay mucha variación en la cantidad de optimización de código que ejecutan los distintos compiladores, una parte significativa del tiempo del compilador se ocupa en esta fase. 
  • La fase Final de un compilador es la generación de código objeto, que por lo general consiste en código máquina relocalizable código ensamblador.
  • Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa.
  • Después cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de máquina que ejecutan la misma tarea.







No hay comentarios:

Publicar un comentario