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. ;))