von camil ramirez Vor 4 Jahren
300
Mehr dazu
Cambio en la representación interna
La representación interna del programa fuente cambia conforme avanza la compilación y pasa por diferentes fases.
Generación de código
La fase final de un traductor consiste en la generación de código produciendo generalmente codigo maquina reubicable o lenguaje ensamblador.
Optimización de código intermedio
Esta fase intenta mejorar el código intermedio para que se ejecute más rápido.
Generación de código intermedio
Después de los análisis lexicógrafo y sintáctico algunos traductores generan una representación interna explicita del programa fuente, la representación intermedia puede tener muchas formas posibles como un el famoso código de tres direcciones.
Fases de un traductor
Podemos considerar que un traductor trabaja en fases, cada una de las cuales transforma el programa fuente de una representacion a otra.
Detección de errores y emisión de mensajes de error
Cada fase puede detectar sus propios errores. El analizador lexicógrafo puede detectar errores cuando los caracteres de entrada no forman ninguna token conocido.
Manejo de la tabla de simbolos
La tabla de símbolos es una estructura de datos que contiene un registro por cada identificador, con campos para cada uno de sus atributos. Es importante que esta estructura permita encontrar rápidamente el registro de cada identificador.
En esta fase se chequea el programa fuente buscando errores semánticos y recopilando información sobre los tipos de los datos para la fase de generación de código posterior. Se utiliza la estructura jerárquica creada por el analizador sintáctico para identificar los operadores y operandos de las expresiones.
Análisis sintáctico
Constituye el análisis jerárquico. También se le llama parsing. Consiste en agrupar los token del programa fuente formando frases gramaticales que son utilizadas por el traductor para sintetizar el resultado.
Análisis lexicógrafo
Al análisis lineal en un traductor se le denomina análisis lexicógrafo o scanning. Normalmente durante en análisis lexicógrafo se eliminaran los espacio blancos que separan los tokens.
Análisis del programa fuente
Análisis semántico o de restricciones contextuales
Se comprueba que los componentes del programa encajan adecuadamente en el contexto en que están utilizados. Aquí se comprueba una serie de requisitos que no se pueden expresar mediante métodos sintácticos.
Análisis jerárquico
Los tokens se agrupan jerárquicamente para forman conjuntos anidados con in significado colectivo. El análisis jerárquico lo realiza el analizador sintáctico.
Análisis lineal
Se lee de izquierda a derecha la cadena de caracteres que constituye el programa fuente y se agrupan dichos caracteres para formar los tokens que son cadenas de caracteres con un significado conjunto. Los tokens constituyen los datos de entrada para realizar el análisis jerárquico.
Cargadores y linkadores
Linkadores
El linkador crea un único archivo con programa objeto reubicable de varios archivos conteniendo código maquina reubicable (cada archivo es el resultado de una compilación de un modulo diferente del programa) y de rutinas de librerías suministradas por el sistema.
Un cargador toma un código maquina reubicable, altera las direcciones, según el proceso descrito anteriormente, y sitúa el código ya alterado y los datos en memoria en la posición precisa.
Ensambladores
Los ensambladores son compiladores que admiten como lenguaje fuente el lenguaje ensamblador y como lenguaje objeto el lenguaje máquina de un cierto procesador. El lenguaje ensamblador es una versión simbólica para el lenguaje máquina en la que se utilizan nombre nemotécnico en vez de códigos binarios de operación y nombres simbólicos en vez de direcciones de memoria.
Preprocesadores
Los preprocesadores proporcionan la entrada para los traductores y pueden realizar distintas funciones
Funciones
Preprocesadores raciones y extensiones a los lenguajes
Estos preprocesadores enriquecen lenguajes anticuados con nuevas estructuras de flujo de control y manejo de daros más actuales.
Inclusión de archivos
Puede permitirse la inclusión de otros archivos.
Proceso de macros
Los macros son abreviaturas para las instrucciones o conjuntos de instrucciones. A menudo la definición de macro permite parámetros formales.
Contexto de un traductor
Además de un traductor, suelen ser necesarias otras herramientas para crear el programa ejecutable. Por ejemplo, un programa fuente puede estar escrito en módulos separados. Estos módulos se copilan produciendo programas en ensamblador que, a continuación, se ensamblan produciendo modulos en lenguaje máquina que necesitan linkarse con las rutinas y otros módulos para dar un programa reubicable que aún necesita de un cargador para ejecutarse.
Herramientas para su ejecución
Programa fuente
Compilador
Programa en ensamblador
Ensamblador
Modulo en código maquina
Enlazador (Linkador)
Cargador
Herramientas para la construcción de traductores
Existen varias herramientas desarrolladas para el diseño de componentes específicos de traductores.
Generadores de analizadores lexicograficos
Generadores de analizadores sintacticos
Maquinas traductoras dirigidas por sintaxis
Generadores automáticos de código
Maquinas de flujo de datos
El modelo de análisis – síntesis para un traductor
La compilación suele dividirse en dos fases el análisis y la síntesis
Síntesis
Durante la síntesis se construye el programa objeto a partir de la representación intermedia. De ambas fases, la síntesis es la que necesita unas técnicas más especializadas.
Análisis
Durante el análisis se estudia el programa partiéndolo en sus trozos constituyentes intentando determinar el significado de dicho programa y construyendo una representación intermedia. En el análisis se suele construir una representación interna jerárquica del programa que refleja su estructura estas son llamadas (árbol de sintaxis abstracta).
Existen herramientas de software que también realizan análisis antes de manipular los programas
Interpretes de consulta a una base de datos
Interpretes
Formateadores de texto
Comprobadores estáticos
Pretty printers
Editores de estructura