martes, 7 de febrero de 2017

COMPILADORES

UNIDAD 1 ARQUITECTURA DE LOS COMPILADORES E INTEPRETES
Unidad de competencia: Determina la estructura general de los compiladores e intérpretes con base en la funcionalidad de sus etapas y fases.


Introducción
Tanto los compiladores como los intérpretes son programas de gran complejidad. Afortunadamente, se sabe suficiente acerca de cómo estructurarlos y hay suficientes herramientas formales para que la complejidad se reduzca a niveles razonables.
¿Qué es un compilador?
·         Un compilador es un programa traductor
·         Compilar consiste en traducir un programa escrito en un cierto lenguaje a otro.
·         Un compilador es un pequeño programa informático, que se encarga de traducir (compilar) el código fuente de cualquier aplicación que se esté desarrollando
¿Para qué es un compilador?
·         Los compiladores se utilizan en todos los aspectos prácticos de la computación
·         Las técnicas utilizadas en la construcción de compiladores se aplican en otros contextos:
·         Procesamiento de información estructurada
·         Conversión de archivos
·         Compilación de circuitos
·         Los compiladores son programas muy complejos que utilizan de estructuras de datos y algoritmos útiles

¿Cuáles son las propiedades de un compilador?
·         Genera código correcto siempre
·         Satisface completamente las especificaciones de los lenguajes fuente y objetivo
·         Debe aceptar programas de tamaño arbitrario (solo limitado por la memoria disponible).
·         Velocidad de compilación, tamaño del compilador, calidad de los reportes de error
·



Fases de un compilador
  • ·         Entrada del programa fuente
  • ·         Lee el programa eficientemente
  • ·         Lo convierte en un flujo de caracteres
  • ·         Puede utilizar otros archivos, si estos fueron incluidos
  • ·         Coopera con el sistema operativo y el analizador léxico


ANÁLISIS LÉXICO:
  • ·         Identifica los tokens del flujo de entrada y determina su clase y representación
  • ·         Puede interpretar algunos tokens (identificar macros o palabras reservadas)


ANÁLISIS SINTÁCTICO:
  • ·         Convierte el flujo de tokens a un árbol de sintáctico
  • ·         Estos árboles no son una representación eficiente
  • ·         Se usan los arboles sintácticos abstractos

·
ANÁLISIS SEMÁNTICO
  • ·         Se recolecta información del programa
  • ·         Tipos de datos
  • ·         Etiquetas (goto)
  • ·         Se hace anotaciones a los nodos del ´árbol sintáctico abstracto con los resultados


GENERACIÓN DE CÓDIGO INTERMEDIO:

  • ·         Traduce las construcciones específicas del lenguaje fuente en el árbol semántico abstracto con anotaciones a construcciones más generales
  • ·         Debe ser “fácil” generar código de maquina a partir del código intermedio para maquinas diferentes
  • ·         Generalmente incluye expresiones e instrucciones de control de flujo (condiciones, saltos)


OPTIMIZACIÓN DE CÓDIGO INTERMEDIO:
  • ·         Intenta mejorar la eficiencia del código intermedio
  • ·         Se puede hacer incorporación de constantes
  • ·         Se puede remplazar la llamada a una rutina con el contenido de la rutina.


GENERACIÓN DE CÓDIGO EN LENGUAJE OBJETIVO:

  • ·         Se re-escribe el árbol semántico abstracto con anotaciones como una lista de instrucciones en lenguaje objetivo
  • ·         Toma instrucciones del árbol semántico abstracto con anotaciones
  • ·         Asigna los registros que se utilizaran para almacenar datos
  • ·         Acomoda las instrucciones en el orden correcto


OPTIMIZADOR DE CÓDIGO EN LENGUAJE OBJETIVO:

  • ·         Remplaza secuencias de instrucciones en lenguaje objetivo por secuencias equivalentes que son más rápidas o más cortas.
  • ·         Depende de las propiedades del lenguaje objetivo


OPTIMIZADORES:

  • ·         La implementación de optimizadores es la última fase en el desarrollo de un compilador
  • ·         Las optimizaciones no son necesarias para un compilador, la correctitud si
  • ·         Es más fácil acelerar un programa correcto que corregir un programa rápido

·

No hay comentarios:

Publicar un comentario