2.2.3 Triplos
En la historia de los
compiladores han sido utilizadas una amplia variedad de representaciones
intermedias como lo es la siguiente clase de representación de código
intermedio de un árbol de 3 direcciones,2 para los operandos y una para la
ubicación del resultado. esta clase incluye un amplio numero de
representaciones diferentes entre las cuales encontramos cuadruplos y triples.
la principal diferencia entre estas notaciones y la notación postfija es que
ellos incluyen referencias explicitas para los resultados de los cálculos
intermedios, mientras que la notación posfija los resultados son implícitos al
representarlos en una pila.
§
La diferencia
entre triples y cuadruplos es que con los triples es referenciado el valor intermedio
hacia el numero del triple que lo creo, pero en los cuádruplos requiere que
ellos tengan nombre implícitos.
§
Los triples
tienen una ventaja obvia de ser mas consistente, pero ellos dependen de su
posición, y hacen que la optimización presente cambios de código mucho mas
compleja.
Para evitar tener que
introducir nombres temporales en la tabla de símbolos, se hace referencia a un
valor temporal según la posición de la proposición que lo calcula. Las propias
instrucciones representan el valor del nombre temporal. La implementación se
hace mediante registros de solo tres campos (op, arg1, arg2).
§
En la notación
de tripletes se necesita menor espacio y el compilador no necesita generar
los nombres temporales. Sin embargo, en esta notación, trasladar una proposición
que defina un valor temporal exige que se modifiquen todas las referencias a
esa proposición. Lo cual supone un inconveniente a la hora de optimizar el
código, pues a menudo es necesario cambiar proposiciones de lugar.
§
Una forma de
solucionar esto consiste en listar las posiciones a las tripletas en lugar de
listar las tripletas mismas. De esta manera, un optimizador podría mover una
instrucción reordenando la lista, sin tener que mover las tripletas en si
• <Operador>, <operando1>, <operando2>
• El resultado se asocia al número de tripleta
Ejemplo: W * X + (Y + Z)
1. *, W, X
2. +, Y, Z
3. +, (1), (2)
Control de flujo:
IF X>Y THEN Z=X ELSE Z=Y+1
1. >, X, Y
2. Saltar si falso, (1), 5
3. =, Z, X
4. Saltar,, 7
5. +, Y, 1
6. =, Z, (5)
Problema
No hay comentarios.:
Publicar un comentario