Fundamentos de Semántica y Técnicas de Optimización en Compiladores
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 2,63 KB
Reglas Semánticas
Se establecen dependencias entre los atributos de los diferentes símbolos existentes. Esas dependencias se reflejan en un grafo con el fin de establecer un orden de evaluación de reglas.
- Tabla 1: Reglas Semánticas
- Figura 1: Reglas Semánticas
Árboles de Sintaxis
Representan una construcción de lenguajes donde los operadores y las palabras no aparecen como hojas, sino que muestran la asociación con el nodo interior que sería el padre de dichas hojas en el árbol.
Tipos de Atributos
- Atributos sintetizados: Se calculan hacia abajo en el árbol sintáctico en función de los atributos de los nodos hijos, asignándole un valor a un atributo sintetizado del nodo padre. Por este motivo, se dice que en esa producción el atributo se sintetiza.
- Atributos heredados: Se calculan hacia arriba en el árbol sintáctico. Se asigna un valor a un atributo del nodo hijo para que, en aquellas reglas en las que este aparezca, herede el valor asignado.
Optimización
La optimización depende del lenguaje de programación y es directamente proporcional al tiempo de compilación; es decir, a mayor optimización, mayor tiempo de compilación. La optimización es un proceso que tiende a minimizar o maximizar alguna variable de rendimiento, generalmente tiempo, espacio o uso de procesador.
Optimización Local
Se realiza dentro de un bloque básico del programa. La optimización local es útil cuando una sección es crítica, por ejemplo: la E/S, la concurrencia, la rapidez y la confiabilidad de un conjunto de instrucciones. Como el espacio de soluciones es más pequeño, la optimización local es más rápida.
Optimización Global
La optimización global se refiere a todo el código. Este tipo de optimización se caracteriza por ser lenta, pero mejora el desempeño general del programa. Depende de la arquitectura de la máquina; en algunos casos, es mejor mantener variables globales para agilizar los procesos, aunque esto consuma más memoria.
Una fase importante es la elaboración de un árbol o un grafo del programa, con el cual se pueden detectar bucles y otras construcciones que pueden ser mejorados para ahorrar tiempo de ejecución, aunque no necesariamente memoria.
Optimización de Mirilla (Peephole Optimization)
La optimización de mirilla trata de estructurar de manera eficiente el flujo del programa, sobre todo en instrucciones de bifurcación como son las decisiones, ciclos y saltos de rutinas.