Beruflich Dokumente
Kultur Dokumente
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.
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.
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;
r1 = c * d;
r2 = b + r1;
r3 = r2 + r1;
a = r3
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:
* 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)
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.
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
Ejemplo:
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:
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
https://www.tutorialspoint.com/es/compiler_design/compiler_design_intermediate_code_generations.htm 5/5