]> git.llucax.com Git - z.facultad/75.42/calculadora.git/blobdiff - parseerror.c
Se hace una prueba del parser_equation() y se corrigen varios bugs.
[z.facultad/75.42/calculadora.git] / parseerror.c
index 398143a87bf3465502b4fee82656036b56cbc3d7..71f00f413b0c1eea0b5eb644785023398f38704a 100644 (file)
@@ -51,6 +51,8 @@ bool ParseError_set_message(ParseError* pe, const char* msg) {
 
 bool ParseError_set_pos_message(ParseError* pe, const char* msg, size_t pos,
         char wrong_char) {
+    /* Pongo la posición */
+    pe->pos = pos;
     /* Si había otro mensaje, liberamos la memoria */
     if (pe->message) {
         free(pe->message);
@@ -69,8 +71,32 @@ bool ParseError_set_pos_message(ParseError* pe, const char* msg, size_t pos,
     if (pe->message) {
         /* Copio el nuevo mensaje. */
         sprintf(pe->message, "Se buscaba %s pero se encontró '%c' (0x%02X)",
-                msg, wrong_char, pos);
+                msg, wrong_char, wrong_char);
     }
     return pe->message ? TRUE : FALSE;
 }
 
+size_t ParseError_print(ParseError* pe, FILE* fp) {
+    /* No es un error de interpretación específico. */
+    if (!pe->pos) {
+        /* Si hay mensaje. */
+        if (pe->message) {
+            return fprintf(fp, "Error: %s.\n", pe->message);
+        /* Si no hay mensaje. */
+        } else {
+            return fprintf(fp, "Error no especificado.\n");
+        }
+    /* Es un error de interpretación en una posición específica. */
+    } else {
+        /* Si hay mensaje. */
+        if (pe->message) {
+            return fprintf(fp, "Error en la línea %u, posición %u: %s.\n",
+                    pe->line, pe->pos, pe->message);
+        /* Si no hay mensaje. */
+        } else {
+            return fprintf(fp,
+                    "Error en la línea %u, posición %u no especificado.\n",
+                    pe->line, pe->pos);
+        }
+    }
+}