
- Compilador - Inicio
- Compilador - Descripción General
- Compilador - Arquitectura
- Compilador - las Fases del Compilador
- Compilador - Análisis Léxico
- Compilador - Expresiones Regulares
- Compilador - Autómatas Finitos
- Compilador - Sintaxis Anã¡lisis
- Compilador - Tipos de Análisis
- Compilador - Analizador Descendente
- Compilador - Analizador Ascendente
- Compilador - Recuperación de Errores
- Compilador - Análisis Semántico
- Compilador - Entorno de Ejecución en Tiempo Real
- Compilador - Tabla de Símbolos
- Compiler - Intermediate Code
- Compilador - Generación de Código
- Compilador - Optimización de Código
Compilador Diseo - Generacin de Cdigo Intermedio
EL cdigo fuente puede ser traducido en su cdigo de la mquina destino, entonces, por qu hemos de traducir el cdigo fuente en un cdigo intermedio que luego se traduce en su cdigo de destino? Vamos a ver las razones por las que necesitamos un cdigo intermedio.

Si un compilador traduce el idioma de origen a su ordenador de destino sin tener la opcin de generar cdigo intermedio, a continuacin, en cada nueva mquina, una nativa del compilador completo es necesario.
Cdigo Intermedio elimina la necesidad de un nuevo compilador completo para cada mquina de la seccin de anlisis mismo de todos los compiladores.
La segunda parte del compilador, sntesis, se modifica de acuerdo a la mquina de destino.
Es ms fcil de aplicar las modificaciones del cdigo fuente para mejorar rendimiento del cdigo mediante la aplicacin de tcnicas de optimizacin cdigo el cdigo intermedio.
Representacin intermedia
Cdigos intermedios puede ser representado en una variedad de formas y tienen sus propios beneficios.
Alto nivel IR - Alto nivel de representacin de cdigo intermedio est muy cerca de la lengua de origen. Pueden ser fcilmente generados desde el cdigo fuente y podemos aplicar fcilmente modificaciones de cdigo para mejorar el rendimiento. Pero para optimizacin de la mquina destino, es menos preferido.
Bajo Nivel IR - Este es cerca de la mquina de destino, lo que lo hace adecuado para registro y asignacin de memoria, un conjunto de instrucciones seleccin, etc. es bueno para optimizaciones dependientes de la mquina.
Cdigo intermedio puede ser especfica para cada idioma (p. ej., cdigo de bytes de Java) o independiente de la lengua (tres-cdigo de direccin).
Cdigo Three-Address
Generador de cdigo intermedio recibe la entrada de su predecesor, analizador semntico, en la forma de un rbol de sintaxis anotado. rbol de sintaxis que luego se puede convertir en una representacin lineal, por ejemplo, postfix notacin. Cdigo intermedio tiende a ser cdigo independiente de la mquina. Por lo tanto, generador de cdigo supone que tiene nmero ilimitado de almacenamiento en memoria (registro) para generar el cdigo.
Por ejemplo:
a = b + c * d;
El generador de cdigo intermedio, tratar de dividir esta expresin en sub-expresiones y, a continuacin, generar el cdigo correspondiente.
r1 = c * d; r2 = b + r1; r3 = r2 + r1; a = r3
R que se utilizan como registros en el programa de destino.
Un cdigo de direccin tiene un mximo de tres direcciones para calcular la expresin. Un cdigo de direccin puede estar representado en dos formas : cudruples y triples.
Cuadruplica
Cada instruccin cuadruplica exposicin se divide en cuatro campos: operador, arg1, arg2, y resultado. El ejemplo anterior se representa a continuacin cuadruplica en formato:
Op. | Arg1 | Arg2 | Resultado |
* | c | d | r1 |
+ | b | r1 | r2 |
+ | r2 | r1 | r3 |
= | r3 | a |
Triples
Cada instruccin en triples presentacin tiene tres campos : op, arg1, arg2.Los resultados de las respectivas sub-expresiones son indicados por la posicin de expresin. Similitud con Triples representan DAG y rbol de sintaxis. Son equivalentes a DAG al tiempo que representan las expresiones.
Op | Arg1 | Arg2 |
* | c | d |
+ | b | (0) |
+ | (1) | (0) |
= | (2) |
Triples ante el problema de optimizacin cdigo un inmovilismo mientras que, en la medida en que los resultados son posicionales y cambiar el orden o la posicin de una expresin puede causar problemas.
Indirectos Triples
Esta representacin es una mejora sobre representacin triples. Se usa punteros en lugar de su posicin para almacenar los resultados. Esto permite a los optimizadores libremente volver a colocar la sub-expresin para producir un cdigo optimizado.
Declaraciones
Una variable o procedimiento tiene que ser declarado antes de que se pueda utilizar. Declaracin implica asignacin de espacio en la memoria y la entrada de tipo y nombre de la tabla de smbolos. Un programa puede ser codificada y diseado siguiendo la estructura de la mquina destino en mente, pero es posible que no siempre se pueda convertir con precisin un cdigo fuente para su idioma de destino.
Tomando el conjunto del programa, como una coleccin de procedimientos y sub-procedimientos, es posible declarar que todos los nombres locales en el procedimiento. Asignacin de memoria se realiza de manera consecutiva y nombres son asignados a la memoria en la secuencia en la que se declara en el programa. Podemos utilizar el desplazamiento variable y ponerlo a cero {offset = 0} que denotan la direccin base.
La fuente lenguaje de programacin y la arquitectura del equipo de destino puede variar en la forma los nombres se almacenan, por lo tanto se utiliza direccionamiento relativo. Mientras que el primer nombre se asigna memoria a partir de la posicin de memoria 0 {offset= 0}, el siguiente nombre declar despus, debe ser asignada la memoria junto a la primera.
Ejemplo:
Tomamos el ejemplo de lenguaje de programacin C en una variable de tipo entero se le asigna 2 bytes de memoria y una variable de tipo float se asigna 4 bytes de memoria.
int a; float b; Allocation process: {offset = 0} int a; id.type = int id.width = 2 offset = offset + id.width {offset = 2} float b; id.type = float id.width = 4 offset = offset + id.width {offset = 6}
Para entrar en este detalle en una tabla de smbolos, un procedimientoentrar puede ser utilizado. Este mtodo puede tener la siguiente estructura:
enter(name, type, offset)
Este procedimiento debe crear una entrada en la tabla de smbolos, de nombre de la variable, en su tipo y el tipo de desplazamiento de direccin relativa en su rea de datos.