Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Facultad : Ingeniería
Escuela : Computación
Asignatura: Compiladores
Objetivo
Introducción
Generación de código.
Aspectos Generales:
• Representaciones lineales:
◦ Tercetos
◦ Cuartetos.
◦ Máquinas a pila.
• Representaciones arborescentes:
• Programas objeto:
La salida del generador de código es un código preparado y adaptado para ser ejecutado,
directa, o indirectamente, en una arquitectura específica. La adaptación consiste en
aprovechar al máximo las características de la máquina para optimizar la ejecución en
tiempo y en memoria.
Un programa reubicable permite que los subprogramas se compilen por separado. Los
módulos se cargan y enlazan mediante un montador o enlazador. Se gana flexibilidad al
poder compilar subrutinas por separado y llamarlas desde otros módulos. Si la máquina
objeto no maneja reubicación automática el compilador debe proporcionar al montador
información para que enlace los segmentos del programa.
• Lenguaje Ensamblador:
Administración de la Memoria:
Asignación de Registros:
Las instrucciones que operan con registros son más cortas y rápidas. Realizar un uso
eficiente de los registros es fundamental para generar buen código.
Selección de instrucciones:
Materiales y equipo
Procedimiento
Declaración de variables:
Modificación de la gramática.
• Cada vez que se declara una variable hay que guardarla en la tabla de símbolos,
por lo tanto dicha acción hay que realizarla en las posiciones marcadas con el
símbolo :
idlist: TOK_ID
| TOK_ID ‘,’ idlist
• Como las acciones semánticas se ejecutan cuando se reduce la regla, para poder
guardar una variable en la tabla de símbolos cuando se declara, es necesario
modificar la gramática de la siguiente manera:
idlist: idv
| idv ‘,’ idlist
idv: TOK_ID
Compiladores. Guía 11 5
int X, Y, Z;
La producción de la gramática:
indica que lo primero que se identifica es el modo, en este caso int, y después la lista de
variables, en este caso X, Y, Z. Hay que encontrar un mecanismo para recordar que el
tipo int afecta a las tres variables X, Y, Z.
• Sugerencia:
• declarar una variable global global_tipo que se actualice con el valor
correspondiente cada vez que se reduzca una de las dos primeras producciones
de mode.
• declarar una variable global global_nrefs que se inicialice a 1 cada vez que se
reduzca una de las dos primeras producciones de mode y se incremente en 1
cada vez que se reduzca la última producción de mode.
Compiladores, Guía 11 6
• Como las acciones semánticas se ejecutan cuando se reduce la regla, para poder
generar código cuando se termina la sección de declaraciones, es necesario
modificar la gramática de la siguiente manera:
Análisis de resultados
Investigación complementaria.
Referencia.
• http://www.lsi.uned.es/procleng/apuntes/2006-
2007/GeneracionCodigoFinal.pdf
• http://en.wikipedia.org/wiki/Code_generation_(compiler)
Compiladores, Guía 11 10
Hoja de cotejo: 11
1
Guía 11: Generación de
Código.
EVALUACION
CONOCIMIENTO 40
APLICACIÓN
DEL 40
CONOCIMIENTO
ACTITUD
20
TOTAL
100%