¿Qué es un diseño de compilador? Tipos, Herramientas De Construcción, Ejemplo
¿Qué es un compilador?
Un compilador es un programa informático que le ayuda a transformar el código fuente escrito en un lenguaje de alto nivel en un lenguaje de máquina de bajo nivel. Traduce el código escrito en un lenguaje de programación a otro lenguaje sin cambiar el significado del código. El compilador también hace que el código final sea eficiente, lo que está optimizado para el tiempo de ejecución y el espacio de memoria.
El proceso de compilación incluye mecanismos básicos de traducción y detección de errores. El proceso del compilador pasa por un análisis léxico, sintáctico y semántico en el front-end y generación y optimización de código en el back-end.
Características de los compiladores
- Exactitud
- Velocidad de compilación
- Preservar el significado correcto del código.
- La velocidad del código objetivo.
- Reconocer construcciones de programas legales e ilegales.
- Buen informe/manejo de errores
- Ayuda para la depuración de código
Tipos de compilador
A continuación se muestran los diferentes tipos de compiladores:
- Compiladores de un solo paso
- Compiladores de dos pasos
- Compiladores multipaso
Compilador de un solo paso
En una sola pasada, el código fuente del compilador se transforma directamente en código de máquina. Por ejemplo, el lenguaje Pascal.
Compilador de dos pasos
El compilador de dos pasadas se divide en dos secciones, a saber:
- Interfaz: Asigna el código legal a la Representación Intermedia (IR).
- Extremo trasero: Asigna IR a la máquina de destino.
El método del compilador de dos pasos también simplifica el proceso de retargeting. También permite múltiples interfaces.
Compiladores multipaso
El compilador multipaso procesa el código fuente o el árbol de sintaxis de un programa varias veces. Dividió un programa grande en varios programas pequeños y los procesó. Desarrolla múltiples códigos intermedios. Todos estos multipasos toman como entrada la salida de la fase anterior. Por lo que requiere menos memoria. También se le conoce como "compilador amplio".
Tareas del compilador
Las principales tareas que realiza el Compilador son:
- Divide el programa fuente en pedazos y les impone una estructura gramatical.
- Le permite construir el programa de destino deseado a partir de la representación intermedia y también crear la tabla de símbolos.
- Compila el código fuente y detecta errores en el mismo.
- Gestionar el almacenamiento de todas las variables y códigos.
- Soporte para compilación separada
- Leer, analizar todo el programa y traducirlo a semánticamente equivalente.
- Traducir el código fuente a código objeto según el tipo de máquina
Historia del compilador
Un hito importante en la historia del compilador es el siguiente:
- La palabra "compilador" fue utilizada por primera vez a principios de la década de 1950 por Grace Murray Hopper.
- El primer compilador fue construido por John Backum y su grupo entre 1954 y 1957 en IBM.
- COBOL fue el primero lenguaje de programación que fue compilado en múltiples plataformas en 1960
- El estudio de los problemas de escaneo y análisis se prosiguió en las décadas de 1960 y 1970 para proporcionar una solución completa.
Pasos para los sistemas de procesamiento del lenguaje.
Antes de conocer el concepto de compiladores, primero debes comprender algunas otras herramientas que trabajan con compiladores.
- Preprocesador: El preprocesador se considera parte del compilador. Es una herramienta que produce entradas para el compilador. Se trata de procesamiento de macros, aumento, extensión del lenguaje, etc.
- Interprete: Un intérprete es como un compilador que traduce el lenguaje de alto nivel al lenguaje de máquina de bajo nivel. La principal diferencia entre ambos es que el intérprete lee y transforma el código línea por línea. El compilador lee el código completo de una vez y crea el código de máquina.
- Ensamblador: Traduce código en lenguaje ensamblador a un lenguaje comprensible para máquinas. El resultado de salida del ensamblador se conoce como archivo objeto, que es una combinación de instrucciones de la máquina y los datos necesarios para almacenar estas instrucciones en la memoria.
- enlaces: El vinculador le ayuda a vincular y fusionar varios archivos objeto para crear un archivo ejecutable. Es posible que todos estos archivos se hayan compilado con ensambladores independientes. La tarea principal de un vinculador es buscar los módulos llamados en un programa y descubrir la ubicación de la memoria donde están almacenados todos los módulos.
- Cargador: El cargador es parte del sistema operativo, que realiza las tareas de cargar archivos ejecutables en la memoria y ejecutarlos. También calcula el tamaño de un programa que crea espacio de memoria adicional.
- Compilador cruzado: Un compilador cruzado en el diseño de compiladores es una plataforma que le ayuda a generar código ejecutable.
- Compilador de fuente a fuente: Compilador de fuente a fuente es un término que se utiliza cuando el código fuente de un lenguaje de programación se traduce al código fuente de otro lenguaje.
Herramientas de construcción del compilador
Las herramientas de construcción de compiladores se introdujeron a medida que las tecnologías informáticas se difundían por todo el mundo. También se conocen como compiladores-compiladores, compiladores-generadores o traductores.
Estas herramientas utilizan un lenguaje o algoritmo específico para especificar e implementar el componente del compilador. A continuación se muestran ejemplos de herramientas de construcción de compiladores.
- Generadores de escáneres: Esta herramienta toma expresiones regulares como entrada. Por ejemplo LEX para Unix OperaSistema de ting.
- Motores de traducción dirigidos por sintaxis: Estas herramientas de software ofrecer un código intermedio utilizando el árbol de análisis. Tiene el objetivo de asociar una o más traducciones con cada nodo del árbol de análisis.
- Generadores de analizadores sintácticos: Un generador de analizador toma una gramática como entrada y genera automáticamente un código fuente que puede analizar flujos de caracteres con la ayuda de una gramática.
- Generadores automáticos de códigos: toma código intermedio y lo convierte a lenguaje de máquina.
- Motores de flujo de datos: Esta herramienta es útil para la optimización del código. Aquí, la información la proporciona el usuario y se compara el código intermedio para analizar cualquier relación. También se le conoce como análisis de flujo de datos. Le ayuda a descubrir cómo se transmiten los valores de una parte del programa a otra.
¿Por qué utilizar un compilador?
- El compilador verifica todo el programa, por lo que no hay errores de sintaxis o semánticos.
- El compilador optimiza el archivo ejecutable, por lo que se ejecuta más rápido.
- Le permite crear una estructura interna en la memoria.
- No es necesario ejecutar el programa en la misma máquina en la que se creó.
- Traducir el programa completo a otro idioma.
- Generar archivos en disco.
- Vincula los archivos a un formato ejecutable.
- Compruebe si hay errores de sintaxis y tipos de datos.
- Le ayuda a mejorar su comprensión de la semántica del lenguaje.
- Ayuda a manejar problemas de rendimiento del lenguaje.
- Oportunidad para un proyecto de programación no trivial.
- Las técnicas utilizadas para construir un compilador también pueden resultar útiles para otros fines.
Aplicación de compiladores
- El diseño del compilador ayuda a la implementación completa de lenguajes de programación de alto nivel.
- Optimización de soporte para computadora ArchiParalelismo tecnológico.
- Diseño de nuevas jerarquías de memoria de máquinas.
- Ampliamente utilizado para traducir programas.
- Se utiliza con otras herramientas de productividad de software.
Resumen
- Un compilador es un programa informático que le ayuda a transformar el código fuente escrito en un lenguaje de alto nivel en un lenguaje de máquina de bajo nivel.
- La corrección, la velocidad de compilación y la preservación del significado correcto del código son algunas características importantes del diseño del compilador.
- Los compiladores se dividen en tres partes: 1) Compiladores de un solo paso, 2) Compiladores de dos pasos y 3) Compiladores de múltiples pasos.
- La palabra "compilador" fue utilizada por primera vez a principios de la década de 1950 por Grace Murray Hopper.
- Los pasos para el sistema de procesamiento del lenguaje son: preprocesador, intérprete, ensamblador, vinculador/cargador.
- Las herramientas importantes para la construcción de compiladores son: 1) generadores de escáner, 2) motores de traducción dirigida de sintaxis, 3) generadores de analizador y 4) generadores automáticos de código.
- La tarea principal del compilador es verificar todo el programa, para que no haya errores de sintaxis o semánticos.