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