2.2.3 Triplos.
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 número
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 número del triple
que lo creo, pero en los cuádruplos requiere que ellos tengan nombres
implícitos.
§
Los triples tienen una ventaja obvia de ser más consistente,
pero ellos dependen de su posición, y hacen que la optimización presente
cambios de código mucho más 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.
Comentarios
Publicar un comentario