Want to create interactive content? It’s easy in Genially!
Fases de un Compilador
JOAQUIN EMILIANO CATO SOSA
Created on August 23, 2023
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Higher Education Presentation
View
Psychedelic Presentation
View
Vaporwave presentation
View
Geniaflix Presentation
View
Vintage Mosaic Presentation
View
Modern Zen Presentation
View
Newspaper Presentation
Transcript
Fases de un Compilador
- Joaquín Emiliano Cato Sosa 21590088
- Montserrat Reséndiz Muñoz 21590049
- Alejandro Dorantes Trujillo 21590277
- José Mauricio Álvarez Moreno 20590227
- Salvador Ramírez Hernández 20590284
Compilador
Un compilador es un programa que lee un programa escrito en un lenguaje, el lenguaje fuente y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto. Se suele clasificar como de una pasada, de múltiples pasadas, de carga y ejecución, de depuración o de optimación, dependiendo de cómo haya sido construido o de que función se supone que realiza.
Análisis Léxico
También conocido como "Análisis Lineal" o "Exploración. En esta etapa la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha (de arriba hacia abajo) y se agrupa en componentes léxicos que son secuencias de caracteres que tienen un significado colectivo. **Los espacios en blanco que separan los caracteres de los componentes léxicos, normalmente se eliminan durante el análisis léxico.
Análisis Sintáctico
El análisis jerárquico se denomina análisis sintáctico. Este implica agrupar los componentes léxicos del programa fuente en frases gramaticales que el compilador utiliza para sintetizar la salida. Por lo general, Ias frases gramaticales del programa fuente se representan mediante un árbol de análisis sintáctico
Expresión: inicial + velocidad * 60
La frase velocidad * 60 es una unidad lógica, porque las convenciones usuales de Ias expresiones aritméticas indican que Ia multiplicación se hace antes que Ia suma. Puesto que Ia expresión inicial + velocidad va seguida de un * no se agrupa en una sola frase independiente en la figura
La estructura jerárquica de un programa normalmente se expresa utilizando reglas recursivas.
Cualquier identificador es una expresión.
Cualquier número es una expresión.
Si expresión1 y expresión2 son expresiones, entonces también lo son: expresión1 + expresión2 expresión1 * expresión2
Análisis Semántico
Un componente importante del análisis semántico es la verificación de tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente.
La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la clase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.
Por ejemplo, las definiciones de muchos lenguajes de programación requieren que el compilador indique un error cada vez que se use un número real como índice de una matriz. Sin embargo, la especificación del lenguaje puede permitir ciertas coerciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica a un número entero y a un número real. En este caso, el compilador puede necesitar convertir el número entero a real.
Representación intermedia: Máquina abstracta
Propiedades importantes
- Facil de producir
- Facil de traducir al programa objeto
CÓDIGO DE TRES DIRECCIONES
Es una secuancia de instrucciones, cada una de las cuales tiene como máximo tres operandos. Propiedades Limitación de un operador. Generación de nombres temporales para valores temporales. Posibilidad de instrucciones con menos de tres operadores.
a = b + c * d temp1 = c * d temp2 = b + temp1 a = temp2
Objetivo de la Optimizacion
El objetivo es mejorar la eficiencia del código en terminos de tiemo de ejcución y uso de memoria.
Criterios
Optimización Temporal: mejorar el tiempo de ejecución Optimización Espacial: Reducir el uso de memoria.
Optimizador de Código
Su funcionamiento es revisar el código generado a varios niveles de abstracción y realiza las optimizaciones aplicables al nivel de abstracción. Comportamiento igual: el codigo optimizado debe producir los mismos resultados que el codigo original. No Cambio de Comportamiento: Las trasformaciones no deben alterar el comportamiento del código segun la reglas del lenguaje.
Representación del codigo intermedio
Diferentes niveles de abstracción en los que se opera optimizar el código
Código Maquina
Arbol sintáctico Abstracto
Truplas o cuadruplas
Conversión de saltos largo a saltos cortos y reordenamiento de instrucciones
Optimización de subexpreciones redundantes y reducción de frecuencia.
Optimización de subexpreciones redundantes y reducción de frecuencia.
Generador de Código Objeto
La fase final de un compilador es esencial para transformar el código fuente en un programa ejecutable.
Paso 1: Asignación de Memoria y Variables Paso 2: Traducción de Instrucciones Intermedias Paso 3: Asignación de Variables a Registros
Administrador de la Tabla de Símbolos
Una función clave del compilador es registrar los identificadores del programa fuente y recopilar información sobre sus atributos. Estos atributos incluyen detalles como memoria asignada, tipo y alcance. Para los procedimientos, también abarcan argumentos, forma de paso y tipo de retorno.
¿Qué es una Tabla de Símbolos? Una tabla de símbolos es una estructura de datos con registros para cada identificador, incluyendo sus atributos.
Manejador de errores
Cada fase puede encontrar errores. Sin embargo, después de detectar un error, cada fase debe tratar de alguna forma ese error, para poder continuar la compilación, permitiendo la detección de más errores en el programa Fuente.
Un compilador que se detiene cuando encuentra el primer error, no resulta tan útil como debiera. Las fases de análisis sintáctico y semántico por lo general manejan una gran porción de los errores detectables por el compilador.
Manejador de errores
Fase lexica
La fase léxica puede detectar errores donde los caracteres restantes de la entrada no forman ningún componente léxico del lenguaje. Los errores léxicos típicos son: • Exceso de longitud de identificador o constantes numéricas. • La aparición de personajes ilegales. • String sin igual
Manejador de errores
Fase de análisis sintáctico
Los errores donde la cadena de componentes léxicos violan las reglas de estructura (sintaxis) del lenguaje son determinados por la fase de análisis sintáctico. Los errores de sintaxis típicos son: • Errores en la estructura • Operador faltante • Palabras clave mal escritas • paréntesis desequilibrado
Manejador de errores
Fase de análisis semántico
Durante el análisis semántico el compilador intenta detectar construcciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada, por ejemplo, si se intenta sumar dos identificadores, uno de los cuales es el nombre de una matriz, y el otro, el nombre de un procedimiento. Los errores semánticos típicos son • Tipo incompatible de operandos • Variables no declaradas • No emparejar los argumentos reales con uno formal Ejemplo int a[10], b; ....... a = b;
Muchas Gracias
Lorem ipsum dolor
Consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.
- Lorem ipsum dolor sit amet.
- Consectetur adipiscing elit.
- Sed do eiusmod tempor incididunt ut.
Lorem ipsum dolor sit
Lorem ipsum dolor
Consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.
- Lorem ipsum dolor sit amet.
- Consectetur adipiscing elit.
- Sed do eiusmod tempor incididunt ut.
Lorem ipsum dolor sit
Lorem ipsum dolor
Consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod.
- Lorem ipsum dolor sit amet.
- Consectetur adipiscing elit.
- Sed do eiusmod tempor incididunt ut.
Lorem ipsum dolor sit