next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Expresiones de Tipo en Sup: Análisis de Tipos Ant: Análisis de Tipos: Conceptos Err: Si hallas una errata ...


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 13.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


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Expresiones de Tipo en Sup: Análisis de Tipos Ant: Análisis de Tipos: Conceptos Err: Si hallas una errata ...
Casiano Rodríguez León
2013-03-05