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
- · 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