Closed BraulioVM closed 6 years ago
Sí, yo también lo pensé pero no estaba seguro del scope de yyerror
. Propondría además normalizar los mensajes de error con algo como esto:
void TS_error(const char* mensaje){
fprintf(stderr, "%s", mensaje);
}
void TS_error_tipos(const char* mensaje){
char tmp[100];
strcat(tmp, "Error de tipos: ");
strcat(tmp, mensaje);
TS_error(tmp);
}
void TS_error_referencia(const char* mensaje){ // variable o procedimiento no definido
// ...
}
etc.
Es importante que en los mensajes de error nuevos muestren las líneas en las que tales errores se producen.
También hay que cambiar los mensajes de error cuando hay un error de tipos para que se muestre el nombre y no el entero que le asocia el enum.
En errores de tipo también hay que mostrar las dimensiones de los objetos que participan en el error
Actualmente se utiliza
yyerror
en la gramática para notificar al usuario de errores semánticos. Esto está mal porque la funciónyyerror
funciona asumiendo que el error es sintáctico y para ayudar al usuario muestra qué token ha producido el error.Para dar esta issue por resuelta hay que:
yyerror
pero para errores semánticos (cuanta más información pueda darle al usuario para resolver el problema mejor).gramatica.y
para que use esta función cuando sea adecuado