Conversión de Tipos

El comprobador de tipos modifica el árbol sintáctico para introducir conversiones de tipo donde sean necesarias. Por ejemplo, si tenemos

int i;
float x;

x+i;

Dado el árbol de la expresión PLUS(VAR, VAR), el analizador de tipos introducirá un nodo intermedio INT2FLOAT para indicar la necesidad de la conversión y especificará el tipo de PLUS que se usa:

PLUSFLOAT(VAR, INT2FLOAT(VAR)).

Una transformación árbol de optimización que entra en este punto es la conversión de tipo en tiempo de compilación de las constantes. Por ejemplo, dados los dos programas:

float X[N];
int i;

for(i=0; i<N; i++) {
  X[i] = 1;
}
float X[N];
int i;

for(i=0; i<N; i++) {
  X[i] = 1.0;
}

los efectos sobre el rendimiento serán lamentables si el compilador no realiza la conversión de la constante entera 1 del programa de la izquierda en tiempo de compilación sino que la conversión se deja a una subrutina de conversión que es llamada en tiempo de ejecución. En tal caso se obtendrían rendimientos completamente diferentes para los programas en la izquierda y en la derecha.

Ejercicio 6.2.1   Escriba el seudocódigo de las transformaciones árbol Treeregexp que implementan la conversión de tipos de constantes en tiempo de compilación

Casiano Rodríguez León
2009-12-09