BraulioVM / pl

0 stars 0 forks source link

Cambiar el uso de `yyerror` para notificar de errores semánticos #10

Closed BraulioVM closed 6 years ago

BraulioVM commented 6 years ago

Actualmente se utiliza yyerror en la gramática para notificar al usuario de errores semánticos. Esto está mal porque la función yyerror 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:

  1. Implementar una función análoga a yyerror pero para errores semánticos (cuanta más información pueda darle al usuario para resolver el problema mejor).
  2. Actualizar nuestro gramatica.y para que use esta función cuando sea adecuado
namasme commented 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.

BraulioVM commented 6 years ago

Es importante que en los mensajes de error nuevos muestren las líneas en las que tales errores se producen.

namasme commented 6 years ago

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.

BraulioVM commented 6 years ago

En errores de tipo también hay que mostrar las dimensiones de los objetos que participan en el error