Compiladores, generación de codigo intermedio, auxiliar guia
´ ´ GENERACION DE CODIGO INTERMEDIO. ´ OPTIMIZACION
Bibliograf´a: ı
Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, t´ cnicas y herramientas, Tema 8, 9, 10 (pag. 478-666). e Louden, K.C. (1997), Compiler Construction: Principles and Practice, Tema 8, p´ ginas: 398-481. a
1 Introducci´ n. o 2 Tipos de representaciones intermedias: C´ digo de3-direcciones. o 3 C´ digo intermedio como un atributo sintetizado. o 4 Generaci´ n de c´ digo para expresiones y sentencias de control: o o 4.1 Proposiciones de asignaci´ n. o 4.2 Expresiones aritm´ ticas. e 4.3 Expresiones booleanas. 4.4 Sentencias de control. 5 Optimizaci´ n de c´ digo: o o 5.1 Bloques b´ sicos y optimizaci´ n local. a o 5.2 Eliminaci´ n de subexpresiones comunes. o 5.3 Eliminaci´ n de c´digo muerto. o o
206
´ 7.1. INTRODUCCION
5.4 Transformaciones aritm´ ticas. e 5.5 Empaquetamiento de variables temporales. 5.6 Mejoras en lazos.
7.1
´ INTRODUCCION
Como se coment´ en el primer cap´tulo el proceso de la compilaci´ n se o ı o desglosa en dos partes: la parte que depende s´ lo del lenguaje fuente (etapa o inicial o front-end ) y la parte que depende s´ lo dellenguaje objeto (etapa o final o back-end).
Etapa inicial: corresponde con la parte de an´ lisis (l´ xico, sint´ ctico a e a y sem´ ntico). a Etapa final: corresponde con la parte de s´ntesis (generaci´ n de c´ digo). ı o o
La etapa inicial traduce un programa fuente a una representaci´ n intermeo dia a partir de la cual la etapa final genera el c´ digo objeto. o De esta forma, los detallesque tienen que ver con las caracter´sticas del ı lenguaje objeto (c´ digo ensamblador, c´ digo m´ quina absoluto o relocalo o a izable, . . . ), la arquitectura de la m´ quina (n´ mero de registros, modos de a u direccionamiento, tama˜ o de los tipos de datos, memoria cache, ...), el enn torno de ejecuci´ n (estructura de registros y memoria de la m´ quina donde o a se va a ejecutar el programa .. . ) y el sistema operativo se engloban en la etapa final y se aislan del resto. La generaci´ n de c´ digo es la tarea m´ s complicada de un compilador. o o a Las ventajas de utilizar esta representaci´ n intermedia, independiente de o la m´ quina en la que se va a ejecutar el programa, son: a Se puede crear un compilador para una nueva m´ quina distinta uniena do la etapa final de la nueva m´quina a una etapa inicial ya existente. a Se facilita la redestinaci´ n. o
´ ´ ´ TEMA 7. GENERACION DE CODIGO INTERMEDIO. OPTIMIZACION
207
La figura 7.1 muestra las dos etapas y como se relacionan entre s´ a trav´ s ı e de la representaci´ n intermedia. o
Programa fuente ETAPA INICIAL ETAPA FINAL Analizador Léxico Componentes léxicos Analizador Sintáctico Arbol Sintáctico AnalizadorSemántico Código Intermedio Optimizador de Código máquina Generador de código máquina
En este cap´tulo veremos c´ mo traducir las construcciones de los lenguajes ı o de programaci´ n como: las declaraciones, asignaciones y proposiciones o de flujo de control a una representaci´ n intermedia. La mayor parte de las o traducciones de estas proposiciones se pueden implantar durante el an´ lisis a sint´ cticoutilizando las t´ cnicas de traducci´ n vistas en en el dise˜ o de a e o n esquemas de traducci´ n dirigidos por la sintaxis (ETDS). o
Se puede aplicar, a la representaci´ n intermedia, un optimador de o c´ digo independiente de la m´ quina. o a
Código máquina
Optimizador de código intermedio
Figura 7.1: Etapa inicial y final de un compilador
208
´ 7.2. TIPOS DEREPRESENTACIONES INTERMEDIAS: EL CODIGO DE 3-DIRECCIONES
7.2
´ TIPOS DE REPRESENTACIONES INTERMEDIAS: EL CODIGO DE 3-DIRECCIONES
Una representaci´ n intermedia es una estructura de datos que representa al o programa fuente durante el proceso de la traducci´ n a c´ digo objeto. Haso o ´ ta ahora hemos usado el arbol de an´ lisis sint´ ctico como representaci´ n a a o intermedia, junto con la tabla...
Regístrate para leer el documento completo.