Tuesday, June 06, 2006

Seguimos con el código intermedio…

Hola amigos, poco a poco estamos aproximándonos al día de entrega del proyecto del curso de Compiladores II, y las horas día con día se hacen mas y mas cortas, como quisiéramos un chancecito mas para el proyecto, pero lastimosamente ya no se puede. Ni modo, que sea lo que Dios quiera.
Por lo pronto, nosotros seguimos en la generación de código intermedio, específicamente la generación de Quads.

Les quiero contar cómo realizamos la generación de Quads para nuestras expresiones aritméticas, pues lo hacemos de la siguiente manera:

En primer lugar sintetizamos el número de registro en donde se coloca el valor de la expresión aritmética así:

tmpCExpression.setNumRegistro(term.getNumRegistro());
// term ::= term MULT factor
ast.lQuads.add(new cQuad(cOperadorQuad._MULT,term.getNumRegistro(),factor.getNumRegistro(),term.getNumRegistro()));
cRegistrosT.freeRegisterT(factor.getNumRegistro());
RESULT=tmpCExpression;

En este caso en term se sintetiza un objeto cExpression en donde en uno de sus atributos se encuentra el numero de registro en donde se va a alojar el valor de dicha expresión. Luego agregamos el Quad a una lista de Quads, que al fin y al cabo esa es la lista que va a representar el código intermedio de nuestro proyecto.
Y por último liberamos el registro en donde se encontraba almacenado el operando derecho de la expresión.

Esto es análogo para las cuatro expresiones suma, resta, multiplicación y división. Además para las expresiones relacionales también estamos usando la misma idea.

Además, ya generamos los quads que crean el prólogo y el epílogo de una función, también los quads que reservan espacio para las variables locales de la función, igual que para los argumentos.

En lo que estamos pensando en estos momentos, es en los quads para los statements repeat-until, while y if. Pero esperamos terminarlos lo más pronto posible.

Gracias amigos por su atención, que pasen un feliz día.