domingo, marzo 13, 2005

Parser, manejo de Errores y Final del Proyecto !!!!

Bueno creo que este es el último blog del proyecto... pero no de Compildores en General .. espero..

Los problemas de ambiguedad de la gramática quedaron resueltos con predicados sintácticos y con un K grande.
La inserción en la tabla de simbolos es mi mayor prioridad ahorita, para poder manejar los errores de existencia de ID's. Por tal razón estoy tratando de implementar una tabla Hash.
Para manejar los errores de sintaxis en la gramática estoy "capturando" los errores en cada producción de la misma.
algo como :

IF_TOK PARENDER expression PARENIZQ
exception cach()[RecognitionException ex]
{
Token temp = lT(1); // para decir en que linea marca el error.
if (temp.getText != "PARENDER")
{
{
System.out.println("Error ( no encontrado!!! en " + temp.getline()
+ tempgetcolumn);
system.exit(0);
}
}
}

Pero no lo veo muy eficiente asi que estoy investigando otra manera de hacerlo. Creo que implementaré una clase aparte para esto.
Bueno primero Dios lograremos terminar.

domingo, marzo 06, 2005

La Gramática ......

Quitando la ambiguedad de la gramática me encontre con un If que tenia una regla como esta:
statement:
IF_TOK PARENIZQ expression PARENDER statement else statement
| IF_TOK PARENIZQ expression PARENDER statement
;
que lo factorice como:
statement:
IF_TOK PARENIZQ expression PARENDER statement elseopcional
;
elseopcional:
else statement
|
;
pero al realizar este cambio me tira un warning que no es determinístico, aun no he logrado entender porque, sin embargo probe a quitar el lamnda y me quita el warning pero no me parece correcta esa eliminación.

Tengo problemas también para que me reconosca constantes enteras y tipos, si en el archivo meto algo como:
integer prueba ()
{
integer a;
while (a)
{
a=1+2;
}
}
dice que
- token integer inesperado linea 1, columna 1
- token int_constant inesperado linea 6,columna 7
no sé porque, ya derive la gramática a mano y tendria que aceptalo, pero me da error.