viernes, mayo 27, 2005

Pequeño Error!!!

Creo que estaba un poco confundida con el chequeo de tipos.. crei necesitar el AST para eso pero la verdad solo implica eso chequear los tipos; y no acarrear el resultado de las operaciones.
Por cierto tengo una duda, cuando encuentra constantes String, no debe permitirse hacer las operaciones de expresion (+,-,/,*,), pero si debe aparecer en los printf y puts.. mmm debo solventar eso..

El chequeo lo implemente retornando de cada produccion su tipo, algo como:
:
:
factor returns [int tipo=9;]:
tipo=constant
|
;

constant returns [int tipo=9;]: // inicializacion
STRING_CONST^ {tipo=4;}
| INT_CONST^ {tipo=1;}
| CHAR_CONST {tipo=0;}
;

y asi hasta arriba, lo que chequeo es que tengan el mismo tipo, sino lanzo un error, pero esto llega al nivel mas alto.. expression

expression returns [int tipo=9;]{int ta=9, tb=9;}:
ta=equalityExp tb=expressionP
{
if (ta==1 & tb==1)tipo=1;
if (ta==0 & tb==0)tipo=0;
}
;
y los stament estan compuestos por expresiones cuando llega aquí, ya se chequeo el tipo en realidad, solo tengo que repetir el mismo procedimiento para subir a los siguientes niveles.

- Estuve leyendo sobre MIPS (el apendice).... y la verdad como dijo el Ing, es muy dificil usar esos árboles de ANTLR prefiero usar codigo de 3 direcciones para la representacion Intermedia, en eso trabajo ahora, paralelamente a la conclusion del chequeo de Tipos.
(Y haciendo un pequeño parentésis.. esta SUPER BUENA Episodio III, me gusto bastante, sé que debo trabajar en el Proy pero tenia que verla. ;))