Please enable JavaScript.
Coggle requires JavaScript to display documents.
Generación de código, ASIGNACIÓN =>COPILADORES …
Generación de código
Existen 2 fases en la generación de código:
Código de maquina (o ensamblador).
Esta fase recibe a la entrada un programa en un lenguaje intermedio (código de pila, de tres
direcciones, estructurado como árbol, etc.) y emite código de maquina para la maquina objetivo.
:
Maquinas virtuales:
-> Fácil generar código para ellas.
->Pocas instrucciones.
->Pocas restricciones (p.ej. numero innito de registros).
OBJETIVO DE LAS MAQUINAS VIRTUALES
Ser lo sucientemente simples como para poder generar codigo para ellas de manera sencilla,
pero con la suciente riqueza para poder expresar las construcciones del lenguaje fuente.
Estar lo sucientemente proximas a los procesadores reales para que el paso del codigo
intermedio al codigo de maquina sea practicamente directo.
Codigo intermedio.
Se genera para una maquina virtual.
Esta fase recibe a la entrada un programa en un lenguaje intermedio (código de pila, de tres
direcciones, estructurado como árbol, etc.) y emite código de maquina para la maquina objetivo.
La generación de código de maquina con el correspondiente optimizador forman el back end del
compilador. Debe escribirse un back end para cada maquina para la que deseamos generar código.
->Se traducen las instrucciones de código intermedio a instrucciones de maquina.
->Puede necesitarse mas de una pasada (o dejárselo a un ensamblador).
->Es importante hacer bien la seleccion.
->La reserva de registros es critica
Memoria de pila
->Para la información de las funciones.
Registros de activación: parámetros, variables locales, otros.
Código para expresiones
Empezaremos por generar código para las expresiones. Asumiremos que para gestionar el código
disponemos de una función auxiliar, emite. Esta función recibe una cadena que representa una línea
de código intermedio y hace lo necesario para que termine en el programa final; por ejemplo, puede
escribirla en un chero, almacenarla en una lista para pasarla a otro modulo, etc.
->Evaluamos operandos.
->Calculamos y guardamos el resultado.
Coercion de tipos:
->Implícita en el nodo del operador.
Con nodos explicitos.
Acceso a vectores
Para acceder a vectores, asumiremos que sus elementos ocupan posiciones consecutivas en la
memoria.
EJEMPLO
ARRAY [2..5] OF integer se almacena en memoria de la siguiente forma:
->Desde una dirección base \virtual".
->Se genera código para el índice y se suma a la dirección base.
Expresiones logicas
->Mediante valores explícitos.
->Mediante control de
fujo.
Estructuras de control
->Interesante evaluar la condición mediante control de
fujo.
->La evaluación de los limites de la sentencia para puede ser delicada.
->Distintas posibilidades para la selección múltiple.
Tipos de memoria:
-> Código. ->Memoria gestionada en tiempo de compilación: estática.
->Memoria gestionada en tiempo de ejecucion: pila y heap.
ASIGNACIÓN =>COPILADORES
***PROFESOR: Pablo González Silba***
ALUMNA: María Guadalupe Alvarez Borja.
No. Cuenta :1825021
CARRERA: Licenciatura e ingeniería en computación.
ICO O6
Referencias de web grafia