Categorías: Todo - enlace - incremental - compilación

por joel sorroza hace 3 años

432

INTRODUCCIÓN A LA TRADUCCIÓN Y ESTRUCTURA DEL COMPILADOR

El preprocesamiento es la etapa inicial en la que se modifican las directivas del código fuente antes de ser compilado. Los conversores fuente-fuente permiten traducir un lenguaje de alto nivel a otro, facilitando la portabilidad de los programas.

INTRODUCCIÓN A LA TRADUCCIÓN Y ESTRUCTURA DEL COMPILADOR

INTRODUCCIÓN A LA TRADUCCIÓN Y ESTRUCTURA DEL COMPILADOR

Compilación dirigida por sintaxis

Es un formalismo para especificar las traducciones para las construcciones en función de atributos asociados con sus componentes sintácticos.
Es una gramática de contexto libre en la que cada símbolo gramatical (terminales y no terminales) tiene un conjunto de atributos asociados, dividido en dos subconjuntos llamados atributos sintetizados y atributos heredados de dicho símbolo gramatical.

Etapa de analisis

Permite el control del texto fuente evitando errores y genera las estructuras necesarias para la generación de código.
La etapa de análisis se encuentra dividido en tres fases :
Análisis semántico

Utiliza el árbol sintáctico y la información en la tabla de símbolos para comprobar la consistencia semántica del programa fuente con la definición del lenguaje.

Fase de análisis semántico

Esta fase revisa el árbol sintáctico junto con los atributos y la tabla de símbolos para tratar de encontrar errores semánticos.

Análisis sintáctico

Es la segunda fase ,trabaja con una gramática de contexto libre y genera el árbol sintáctico que reconoce su sentencia de entrada.

Paso #3

Asing

Asign

+

CTEENT2

IDparcialdos

IDparcialuno

IDsuma

Paso #2 IDsuma ASIGN IDparcialuno ASIGN IDparcialdos ASIGN CTEENT2

Análisis léxico

Se analiza la entrada carácter a carácter, el código se desglosa en tokens, su lectura es de izquierda a derecha.

Paso #1 suma=parcialuno + parcialdos /2; Se agruparían en los componentes léxicos siguientes : 1.El identificador suma 2.El símbolo de asignación '=' 3. El identificador parcialuno 4.El signo suma '+' 5.El identificador parcialdos 6_.El signo de división '/' 7. El numero '2 ' 8. El símbolo de fin de sentencia ';' .

Ejemplo : suma=parcialuno + parcialdos /2;

El objetivo de esta etapa es obtener una representación de la entrada que nos permita realizar la síntesis o la interpretación con comodidad
Es una traducción que tiene como finalidad “acomodar” el código fuente antes de que éste sea procesado por el compilador.

Etapa de síntesis

Una vez completada la etapa anterior, el compilador ya se encuentra en disposición de generar el código máquina o llamado programa fuente. Para ello se parte de las estructuras generadas en dicha etapa anterior: árbol sintáctico y tabla de símbolos.
Fase de generación de código máquina

La fase final de un compilador es la generación de código objeto, que por lo general consiste en código máquina reubicable o código ensamblador. Cada una de las variables usadas por el programa se traduce a una dirección de memoria (esto también se ha podido hacer en la fase de generación de código intermedio)

Fase de optimización de código

Esta fase mejorar el código intermedio, de modo que en la siguiente fase resulte un código de máquina más rápido de ejecutar.

Fase de generación de código intermedio

Después de la etapa de análisis, dicha representación intermedia se puede considerar como un programa para una máquina abstracta.

Cualquier representación intermedia debe tener dos propiedades importantes; debe ser fácil de generar y fácil de traducir al código máquina destino. Así, Representación intermedia puede tener diversas formas.

CONCEPTO DE TRADUCTOR

Se define como un programa que traduce o convierte desde un texto o programa escrito en un lenguaje fuente hasta un texto o programa escrito en un lenguaje destino.
TIPOS DE TRADUCTORES

Ensambladores y Microensa,bladores

Un ensablador es un compilador sencillo, en el que el lenguaje fuente tiene una estructura sencialla que permite la traduccion de cada sentencia fuente a una unica instruccion en codigo maquina.Ej: Macroensamblador IBM

Interpretes de Comandos

Traduce sentencias simples a invocaciones a una bibioteca, un ejemplo de estos es la shell de Unix o

Preprocesadores

Permiten modificar el programa fuente antes de la verdadera compilación. Hacen uso de macroinstrucciones y directivas de compilación. Por ejemplo podemos nombrar algunos preprocesadores para HTML como lo son: HAML, SLIM o JADE.

Intérpretes

Es parecido a un compilador, solo que a diferencia de este, la salida es una ejecución. En otras palabras traduce de un lenguaje de alto nivel a un lenguaje de máquina.Ej: Google Colab, Replit, Python Tutor y Jupyter.

Compiladores

Es aquel que tiene como entrada una sentencia en lenguaje formal, y como salida tiene un fichero ejecutable. Ej: Netbeans

Traductores de idioma

Traducen de un idioma dado a otro. Por ejemplo del inglés al español. Un ejemplo es Google Traslate

Preprocesamiento

Es una traducción que tiene como finalidad “acomodar” el código fuente antes de que éste
La primera etapa del proceso de compilación se conoce como preprocesamiento

sea procesado por el compilador.

El preprocesador modifica el código fuente según las directivas que haya escrito el programador.

La tabla de símbolos

Posee información sobre los identificadores definidos por el usuario, ya sean constantes, variables, tipos u otros.
Registrar los identificadores de usuario (nombres de variables, de funciones, de tipos, etc.) utilizados en el programa fuente y reunir información sobre los distintos atributos de cada identificador.
Los atributos pueden proporcionar

Su ámbito (la parte del programa donde es visible)

Su tipo

La dirección de memoria en que se almacenará en tiempo de ejecución

Proporcionar información sobre la memoria asignada

Construcción sistemática de compiladores

Se agrupan en una etapa inicial (frontend) y una etapa final (back- end)
La etapa final

Dependen de la máquina destino y que, en general, no dependen del lenguaje fuente sino sólo del lenguaje intermedio

La etapa inicial

Dependen exclusivamente del lenguaje fuente y se integran los análisis léxicos y sintácticos.

Estructura de un traductor

• Análisis semántico
Comprueba que el programa fuente respeta las directrices del lenguaje que se compila (todo lo relacionado con el significado)

chequeo de tipos, rangos de valores, existencia de variables, etc.

• Análisis sintáctico
Comprueba que la estructura de los componentes básicos sea correcta según las reglas gramaticales del lenguaje que se compila.
• Análisis lexicográfico.
Divide el programa fuente en los componentes básicos del lenguaje a compilar

(números, identificadores de usuario), (variables, constantes, tipos, nombres de procedimientos), (palabras reservadas, signos de puntuación, etc.)

Descompilador

Realiza una labor de traducción inversa (código máquina a lenguaje que lo generó), suele ser una labor casi imposible, por esto, sólo existen descompiladores de aquellos lenguajes en los que existe una relación biyectiva entre el código destino y el código fuente.
Se emplean cuando el compilador no genera código máquina puro, sino pseudocódigo para ser ejecutado a través de un pseudointérprete
Se utilizan especialmente cuando el código máquina ha sido generado con opciones de depuración, y contiene información adicional de ayuda al descubrimiento de errores.

Ejemplo *puntos de ruptura *seguimiento de trazas *opciones de visualización de variables

METACOMPILADOR

Un meta-compilador es un compilador de compiladores. Se pueden dividir en dos , los que trabajan con:
Gramaticas regulares : Recogen los ficheros fuente y lo dividen en palabras.
Gramaticas de contexto libre : Se dedican a reconocer la sintaxis del lenguaje

AUTOCOMPILADOR

Es un compilador escrito en el mismo lenguaje que compila (o parecido).

COMPILACION INCREMENTAL

Cuando se desarrolla un programa fuente, éste se recompila varias veces hasta obtener una versión definitiva libre de errores. Puede funcionar a varios niveles
Nivel de fichero fuente

si la aplicación completa consta de 15 ficheros fuente, y solo se modifica 1( al que le faltaba el ‘;’), sólo se compila aquél al que se le ha añadido el ‘;’, se genera por completo su fichero objeto y luego se enlazan todos juntos para obtener el ejecutable.

Nivel de bloque

si el ‘;’ faltaba en un procedimiento o bloque sólo se compila ese bloque y se actualiza el fichero objeto.

Nivel de sentencia

si el ‘;’ faltaba en la línea 100 sólo se compila la línea 100 y se actualiza el fichero objeto.

Nivel de caracter

se recompila el ‘;’ y se inserta en el fichero objeto la sentencia que faltaba.

PASADAS DE COMPILACION

Es el número de veces que un compilador debe leer el programa fuente para generar el código.

COMPILACION , ENLACE Y CARGA

la fase de carga, Este carga el fichero .exe, coloca sus diferentes segmentos en memoria y asigna los registros base a sus posiciones correctas, de manera que las direcciones relativas funcionen correctamente.
la fase de enlace, el enlazador resuelve las referencias cruzadas, que pueden estar declarados en otros ficheros objeto, o en librerías
el compilador no produce directamente un fichero ejecutable, sino que el código generado se estructura en módulos que se almacenan en un fichero objeto.

COMPILADOR CRUZADO

Es un compilador que genera código para ser ejecutado en otra máquina. Se utilizan en la fase de desarrollo de nuevos ordenadores.

CONVERSORES FUENTE-FUENTE

Permiten traducir un lenguaje de alto nivel a otro lenguaje de alto nivel, con lo que se consigue una mayor portabilidad en los programas de alto nivel.