1 /* vim: set et sts=4 sw=4 fdm=indent fdl=1 fdn=0 fo+=t tw=80:
3 * Taller de Programación (75.42).
6 * Programa calculadora.
8 * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9 * Puede copiar, modificar y distribuir este programa bajo los términos de
10 * la licencia GPL (http://www.gnu.org/).
12 * Creado: lun sep 15 00:02:35 ART 2003
17 #include "parseerror.h"
22 #include "memdebug_debugger.h"
24 ParseError* ParseError_new(void) {
25 ParseError* pe = malloc(sizeof(ParseError));
34 void ParseError_delete(ParseError* pe) {
43 bool ParseError_set_message(ParseError* pe, const char* msg) {
44 /* Si había otro mensaje, liberamos la memoria */
48 /* Aloco nueva memoria. */
49 pe->message = malloc(sizeof(char) * (strlen(msg) + 1));
51 strcpy(pe->message, msg);
53 return pe->message ? TRUE : FALSE;
56 bool ParseError_set_pos_message(ParseError* pe, const char* msg, size_t pos,
58 /* Pongo la posición */
60 /* Si había otro mensaje, liberamos la memoria */
64 /* Aloco nueva memoria. */
67 + sizeof(char) * strlen(msg) /* Tamaño del mensaje */
68 + sizeof(", pero se encontró '")
69 + sizeof(char) /* un char para imprimir el caracter encontrado */
71 + sizeof(char) * 2 /* dos char para poner el numero */
73 + sizeof(char) /* un char para el caracter nulo (fin de string) */
76 /* Copio el nuevo mensaje. */
77 sprintf(pe->message, "Se buscaba %s pero se encontró '%c' (0x%02X)",
78 msg, wrong_char, wrong_char);
80 return pe->message ? TRUE : FALSE;
83 size_t ParseError_print(ParseError* pe, FILE* fp) {
84 /* No es un error de interpretación específico. */
88 return fprintf(fp, "Error en la línea %u: %s.\n", pe->line,
90 /* Si no hay mensaje. */
92 return fprintf(fp, "Error en la línea %u no especificado.\n",
95 /* Es un error de interpretación en una posición específica. */
99 return fprintf(fp, "Error en la línea %u, posición %u: %s.\n",
100 pe->line, pe->pos, pe->message);
101 /* Si no hay mensaje. */
104 "Error en la línea %u, posición %u no especificado.\n",