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

viernes, mayo 20, 2005

Proyecto... Un dia Lluvioso :(

Del trabajo atrasado de la semana pasada pude avanzar en el acarreo de tipos y valores, ya que la parte que no sabia como implementar era exactamente donde guardar la informacion, bueno ahora extendi el Tree Parser generado en la clase parser y copie unicamente las reglas que implican las expresiones(suma, resta, mult,div), cada regla devuelve un valor, y donde estan los operadores se efectua la operacion correspondiente.
En cada regla se declaran las variables necesarias para la operacion.
Aun no lo pruebo, ya escribi las acciones, pero aproveche que dejo de llover un rato, para venir a subir esto, ya que no sabia si despúes tendría otra oportunidad de no mojarme tanto ;).

Tambien he estado buscando y probando ejemplos de Asembler,espero mañana subir un mayor avance.

jueves, mayo 12, 2005

Semántica del Proyecto ....

Entre los pocos avances que tuve esta semana estan:
- Verificación de #parametros < 4
- Identificación de los siguientes puntos en el chequeo de tipos (expresiones):
1) Si el tipo de cualquiera de los dos operandos es erróneo, entonces el tipo de la expresión es erróneo.
2) En las asignaciones el tipo que se pasa al padre es vacio, que lo he definido como un token mas del lexer.
3) En las comparaciones el tipo es vacio, deberia ser booleano, pero MicroC solo soporta 2 tipos básicos: int, char.
4) En las operaciones suma,resta,multiplicación,divisón los dos operandos deben poseer el mismo tipo y la expresion tendrá ese mismo tipo; pero hay algo que me confunde, la Gramatica permite efectuar todas estas operaciones sobre Constantes char y string. entonces, ¿es permitido realizar algo como: char_constant / char_constant ? creo que no, pero nose como ni donde manejar este caso...
5) Debemos también, en este caso establecer cuando son Obligatorios los Lvalue y Rvalue.
6) Por el momento las expresiones deben acarrear dos atributos: tipo y valor, para mantener la coherencia de las operaciones y poder mostrar en resultado.


- Se me hizo muy dificil mover el manejo de errores a otra clase, estuve colocando algunas de las acciones del analizador semantico, no fue muy bien. Espero avanzar un poco mas este fin.

- Por cierto, estuve pensando un poco en el código de asembler que debemos ejecutar, mas que todo como vamos a correr el código de SPIM en Java?

viernes, mayo 06, 2005

Que clase mas interesante !!!!

Despues de la clase de hoy esta todo claro para seguir con el proyecto, bueno falta definir las acciones para cada producción en nuestra gramática de MicroC.. una tarea dificil por cierto, pero muy entretenida.
Solo que así como tengo yo mi código(manejo de errores en la misma clase del parser)el código se vuelve un poco ilegible al momento de agregar acciones semánticas.
Veré sino se me hace muy dificil separarlos.. este fin espero terminar este analizador. ;)

jueves, mayo 05, 2005

Acciones Semánticas :( !!!!!

Lo mas interesante de esta semana ha sido la tarea del P.P.D.R. (Jesus!!) que "super" esta esto de hacer el Analizador Semántico del proyecto, jeje tenemoss mucho trabajo.

De hecho ya habia comenzado a hacerlo, pero tenia unas dudas, bueno gracias a la super explicación que nos dio el Ingeniero hoy me quedo mucho mas claro.

Tenia duda acerca del lugar que debian ocupar las acciones despues de haber eliminado la recursion izquierda de las producciones, sé que hay una "receta" pero se me dificultaba seguirla, creo que era porque no la habia comprendido.

Aun no me queda muy claro como pasar de la Gramática al programa, pero espero que mañana que hagamos la tarea, se resuelvan mis dudas..