Generacion de codigo

Solo disponible en BuenasTareas
  • Páginas : 13 (3070 palabras )
  • Descarga(s) : 0
  • Publicado : 30 de noviembre de 2011
Leer documento completo
Vista previa del texto
CAPITULO 8
VISION GENERAL

Según el modelo de arquitectura de un compilador en el que éste se divide en frontend y backend, la etapa inicial traduce un programa fuente a una representación intermedia a partir de la cual la etapa final genera el código objeto, ya sea en forma de código máquina o ensamblador.
La construcción de un compilador mediante división en etapa frontend y etapa backendse realiza utilizando un código intermedio independiente de la máquina destino y en el que se codifica el programa fuente.
La filosofía versátil en la construcción de compiladores llega a su extremo en la implementación de lenguajes que son compilados y pseudointerpretados en ejecución. Esto quiere decir que en tiempo de compilación se genera un código
Máquina propia de un microprocesador virtual(llamado código-P en UCSD Pascal, bytecodes en Java, etc.) que, a su vez, se interpreta en tiempo de ejecución a través de lo que se llama motor de ejecución.
A estos lenguajes no se les puede catalogar como interpretados ya que lo que se interpreta en tiempo de ejecución no es exactamente el programa fuente; pero tampoco se les puede considerar compilados del todo ya que lo que se genera entiempo de compilación no es exactamente código máquina.
Los ficheros .class contienen bytecodes que se someten a una Java Virtual Machine (JVM) en tiempo de ejecución, para que los interprete. La JVM hace las veces de microprocesador virtual y los bytecodes hacen las veces de instrucciones
Máquina. Por supuesto, para poder ejecutar los bytecodes en diferentes plataformas es necesario que cada unade ellas posea una implementación adaptada de la JVM.
La generación de código intermedio se puede intercalar en el análisis sintáctico mediante las apropiadas acciones semánticas.
Básicamente, las técnicas que se verán en este capítulo para generar código intermedio también pueden aplicarse a la generación de código de alto nivel.

8.2

CODIGO DE TERCETOS

Esta aproximación facilitará,además, la optimización del código generado.

Instrucciones que podemos generar posee un máximo de cuatro apartados:

* Operando 1º (dirección de memoria donde se encuentra el primer operando).
* Operando 2º (dirección de memoria donde se encuentra el segundo operando).
* Operador (código de operación)
* Resultado (dirección de memoria donde albergar el resultado, o a la que
Saltaren caso de que se trate de una operación de salto).

En esencia, los tercetos son muy parecidos a cualquier código ensamblador, Existiendo operaciones para sumar, restar, etc. También existen instrucciones para controlar el flujo de ejecución, y pueden aparecer etiquetas simbólicas en medio del código con objeto de identificar el destino de los saltos.

A modo introductorio, los tercetos quepodemos usar son:
* Asignación binaria: x:= y óp. z, donde óp. es una operación binaria aritmética o lógica. Aunque debe haber operaciones diferentes en función del tipo de datos con el que se trabaje (no es lo mismo sumar enteros que sumar reales), para facilitar nuestro estudio asumiremos que tan sólo disponemos del tipo entero.

* Asignación unaria: x:= óp. y, donde óp. es unaoperación unaria. Las operaciones unarias principales incluyen el menos unario, la negación lógica, los operadores de desplazamiento de bits y los operadores de conversión de tipos.

* Asignación simple o copia: x:= y, donde el valor de y se asigna a x.

* Salto incondicional: goto etiqueta.

* Saltos condicionales: if x operacional y goto etiqueta.

Para llamar a una subrutina se tienentercetos para meter los parámetros en la pila de llamadas, para invocar a la subrutina indicando el número de parámetros que se le pasa, para tomar un parámetro de la pila, y para retornar:

* Param x: mete al parámetro real x en la pila.
* Call p, n: llama a la subrutina que comienza en la etiqueta p, y le dice que tome n parámetros de la cima de la pila.
* Pop x: toma un...
tracking img