Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
Representación intermedia
Códigos intermedios puede ser representado en una variedad de
formas y tienen sus propios beneficios.
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:
+ 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.
Ejemplo:
int a;
float b;
Allocation process:
{offset = 0}
int a;
id.type = int
id.width = 2
{offset = 2}
float b;
id.type = float
id.width = 4
{offset = 6}