Está en la página 1de 5

8/10/2018 Compilador Diseño - Generación de Código Intermedio

Compilador Diseño - Generación de Código


Intermedio
Anuncios

Markforged 3D Printers - Print Strong, Reliable Parts


23X Stronger Than Parts Printed on Other 3D Printers. Request a Quote ABRIR
Today. 3d.markforged.com/Request_Quote

 Página Anterior Página siguiente 

EL código fuente puede ser traducido en su código de la máquina destino, entonces, ¿por
qué hemos de traducir el código fuente en un código intermedio que luego se traduce en
su código de destino? Vamos a ver las razones por las que necesitamos un código
intermedio.

Si un compilador traduce el idioma de origen a su ordenador de destino sin tener la


opción de generar código intermedio, a continuación, en cada nueva máquina, una
nativa del compilador completo es necesario.

Código Intermedio elimina la necesidad de un nuevo compilador completo para


cada máquina de la sección de análisis mismo de todos los compiladores.

La segunda parte del compilador, síntesis, se modifica de acuerdo a la máquina de


destino.

Es más fácil de aplicar las modificaciones del código fuente para mejorar
rendimiento del código mediante la aplicación de técnicas de optimización código el
código intermedio.

https://www.tutorialspoint.com/es/compiler_design/compiler_design_intermediate_code_generations.htm 1/5
8/10/2018 Compilador Diseño - Generación de Código Intermedio

Representación intermedia
Códigos intermedios puede ser representado en una variedad de formas y tienen sus
propios beneficios.

Alto nivel IR - Alto nivel de representación de código intermedio está muy cerca
de la lengua de origen. Pueden ser fácilmente generados desde el código fuente y
podemos aplicar fácilmente modificaciones de código para mejorar el rendimiento.
Pero para optimización de la máquina destino, es menos preferido.

Bajo Nivel IR - Este es cerca de la máquina de destino, lo que lo hace adecuado


para registro y asignación de memoria, un conjunto de instrucciones selección, etc.
es bueno para optimizaciones dependientes de la máquina.

Código intermedio puede ser específica para cada idioma (p. ej., código de bytes de Java)
o independiente de la lengua (tres-código de dirección).

Código Three-Address
Generador de código intermedio recibe la entrada de su predecesor, analizador semántico,
en la forma de un árbol de sintaxis anotado. Árbol de sintaxis que luego se puede convertir
en una representación lineal, por ejemplo, postfix notación. Código intermedio tiende a ser
código independiente de la máquina. Por lo tanto, generador de código supone que tiene
número ilimitado de almacenamiento en memoria (registro) para generar el código.

Por ejemplo:

a = b + c * d;

El generador de código intermedio, tratar de dividir esta expresión en sub-expresiones y, a


continuación, generar el código correspondiente.

r1 = c * d;
r2 = b + r1;
r3 = r2 + r1;
a = r3

R que se utilizan como registros en el programa de destino.

Un código de dirección tiene un máximo de tres direcciones para calcular la expresión. Un


código de dirección puede estar representado en dos formas : cuádruples y triples.

Cuadruplica
Cada instrucción cuadruplica exposición se divide en cuatro campos: operador, arg1, arg2,
y resultado. El ejemplo anterior se representa a continuación cuadruplica en formato:

Op. Arg1 Arg2 Resultado


https://www.tutorialspoint.com/es/compiler_design/compiler_design_intermediate_code_generations.htm 2/5
8/10/2018 Compilador Diseño - Generación de Código Intermedio

* c d r1

+ b r1 r2

+ r2 r1 r3

= r3 a

Triples
Cada instrucción en triples presentación tiene tres campos : op, arg1, arg2.Los resultados
de las respectivas sub-expresiones son indicados por la posición de expresión. 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 optimización código un inmovilismo mientras que, en la medida


en que los resultados son posicionales y cambiar el orden o la posición de una expresión
puede causar problemas.

Indirectos Triples
Esta representación es una mejora sobre representación triples. Se usa punteros en lugar
de su posición para almacenar los resultados. Esto permite a los optimizadores libremente
volver a colocar la sub-expresión para producir un código optimizado.

Declaraciones
Una variable o procedimiento tiene que ser declarado antes de que se pueda utilizar.
Declaración implica asignación de espacio en la memoria y la entrada de tipo y nombre de
la tabla de símbolos. Un programa puede ser codificada y diseñado siguiendo la estructura
de la máquina destino en mente, pero es posible que no siempre se pueda convertir con
precisión un código fuente para su idioma de destino.

Tomando el conjunto del programa, como una colección de procedimientos y sub-


procedimientos, es posible declarar que todos los nombres locales en el procedimiento.
Asignación de memoria se realiza de manera consecutiva y nombres son asignados a la

https://www.tutorialspoint.com/es/compiler_design/compiler_design_intermediate_code_generations.htm 3/5
8/10/2018 Compilador Diseño - Generación de Código Intermedio

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 dirección base.

La fuente lenguaje de programación 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 posición de memoria 0
{offset= 0}, el siguiente nombre declaró después, debe ser asignada la memoria junto a la
primera.

Ejemplo:

Tomamos el ejemplo de lenguaje de programación 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 símbolos, un procedimientoentrar puede ser
utilizado. Este método puede tener la siguiente estructura:

enter(name, type, offset)

Este procedimiento debe crear una entrada en la tabla de símbolos, de nombre de la


variable, en su tipo y el tipo de desplazamiento de dirección relativa en su área de datos.

 Página Anterior Página Siguiente 

Advertisements

https://www.tutorialspoint.com/es/compiler_design/compiler_design_intermediate_code_generations.htm 4/5
8/10/2018 Compilador Diseño - Generación de Código Intermedio

Write for us FAQ's Helping Contact


© Copyright 2016. All Rights Reserved.

Enter email for newsletter go

https://www.tutorialspoint.com/es/compiler_design/compiler_design_intermediate_code_generations.htm 5/5

También podría gustarte