02_Introducción a la Compilación
-
Upload
miguelmolinac -
Category
Documents
-
view
6 -
download
1
Transcript of 02_Introducción a la Compilación
![Page 1: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/1.jpg)
![Page 2: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/2.jpg)
Compiladores: Definición
![Page 3: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/3.jpg)
Compiladores: Clasificación Como fueron construidos:
De una pasada De múltiples pasadas De carga y ejecución.
Función que realizan: De depuración o de optimización.
![Page 4: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/4.jpg)
Las Fases del Compilador
![Page 5: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/5.jpg)
Agrupamiento de Fases (1/2) Etapa Inicial (de análisis ó front-end):
incluye fases que dependen principalmente del lenguaje fuente Análisis Léxico Análisis Sintáctico Creación de la tabla de símbolos Análisis Semántico Generación de código intermedio
![Page 6: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/6.jpg)
Agrupamiento de Fases (2/2) Etapa Final (síntesis ó back-end):
incluye las fases que dependen del lenguaje intermedio y la maquina objeto. Optimización de Código Generación de Código Manejo de Errores Operaciones con la tabla de símbolos
![Page 7: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/7.jpg)
Fases
Análisis léxico, la cadena de caracteres que constituye el programa fuente y los agrupa en secuencias significativas (lexemas). Para cada lexema el analizador produce como salida un token.
Análisis sintáctico, utiliza los tokens producidos por el analizador léxico para crear una representación intermedia en forma de árbol que describa la estructura gramatical del flujo de tokens.
![Page 8: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/8.jpg)
Fases
Análisis semántico, utiliza el árbol y tabla de símbolos para comprobar la consistencia semántica del programa fuente con la definición del lenguaje.
Generación de código intermedio: Entrega una representación intermedia (código de tres direcciones) que la podemos considerar como un programa para una máquina abstracta
![Page 9: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/9.jpg)
Fases
Optimización de código, Independiente de la maquina virtual trata de mejorar el código intermedio de manera que se produzca un código destino más eficiente.
Generación de código: Recibe la representación intermedia y la transforma al lenguaje destino. Primero asigna las direcciones de memoria de c/u de las variables y luego traduce las instrucciones intermedias en secuencias de instrucciones de máquina que realizan la misma tarea.
![Page 10: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/10.jpg)
Por Ejemplo:
Analicemos la siguiente cadena:
Posición := inicial + velocidad * 60
![Page 11: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/11.jpg)
Análisis léxico
Componentes léxicos: Identificadores: posición, inicial,
velocidad Símbolos: (:=), (+), (*). Número: 60
Los espacios en blanco que separan a los componentes léxicos se eliminan
![Page 12: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/12.jpg)
Análisis sintáctico: Árbol Sintáctico
:= / \ id1 + / \ id2 * / \ id3 60
![Page 13: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/13.jpg)
Análisis semántico
Utiliza el árbol sintáctico para identificar operadores, operando de expresiones y proposiciones.
Otra parte importante es la verificación de tipos de cada operador.
¿Qué pasaría si todos los identificadores del ejemplo fueran de tipo real?
![Page 14: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/14.jpg)
![Page 15: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/15.jpg)
Pasadas
Las actividades de varias fases se pueden agrupar en una sola pasada. 1era. Pasada, fases de análisis 2da. Pasada, Optimización de Código
(Opcional). 3ra. Pasada, Generación del código para
una máquina destino específica.
![Page 16: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/16.jpg)
Reducción del número de pasadas Pocas pasadas debido al tiempo de
lectura y escritura de archivos intermedios.
Si se agrupan muchas fases dentro de una pasada, puede ser necesario tener todo el programa en memoria; debido a que alguna fase puede necesitar información.
![Page 17: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/17.jpg)
Herramientas de Construcción de Compiladores.- Características Herramientas que utilizan lenguajes
especializados para especificar e implementar componentes específicos.
Las más exitosas son la que ocultan los detalles del algoritmo de generación y producen componentes que se integran fácilmente al resto del compilador
![Page 18: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/18.jpg)
Herramientas de Construcción de Compiladores
Generadores de escaners.- Producen analizadores de léxicos a partir de una descripción de tokens de un lenguaje utilizando expresiones regulares.
Generadores de analizadores sintácticos (parsers).- Producen analizadores sintácticos a partir de la gramática del lenguaje de programación.
Motores de traducción orientados a la sintaxis.- Producen rutinas para recorrer árboles sintácticos y generar código intermedio
![Page 19: 02_Introducción a la Compilación](https://reader035.fdocumento.com/reader035/viewer/2022070302/548601a95806b5d1588b4814/html5/thumbnails/19.jpg)
Herramientas de Construcción de Compiladores Generadores de generadores de código.- Producen un generador de código a partir de una colección de reglas para traducir cada operación del lenguaje intermedio en lenguaje de máquina.
Motores de análisis de flujo de datos.- Analizan el flujo de información en un programa. Es vital para la optimización de código