Want to create interactive content? It’s easy in Genially!

Get started free

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:

Higher Education Presentation

Psychedelic Presentation

Vaporwave presentation

Geniaflix Presentation

Vintage Mosaic Presentation

Modern Zen Presentation

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
Una forma intermedia es llamada codigo de tres direcciones, que es como el lenguaje ensamblador para una máquina en la que cada posición de memoria puede actuar como un registro

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