- Se agrega una función para borrar una lista de ecuaciones.
- Se hace que la prueba de parser pueda obtener varios parámetros.
memdebug_test: dllist.o meminfo.o memdebug.o
-parser_equation_test: dllist.o parseerror.o equation.o parser_equation.o
+parser_equation_test: dllist.o parseerror.o equation.o parser_equation.o meminfo.o memdebug.o
tp1: $(TARGETS)
- La búsqueda en la lista al liberar la memoria se realiza de atrás hacia
adelante para que sea más eficiente, ya que generalmente se borra primero
la memoria que se pidió úitima.
+ - DLList no usa el memdebug, está bastante testeada y no pierde memoria.
*/
#include <stdlib.h>
#include <string.h>
+#include "memdebug_debugger.h"
+
/**
* Copia un fragmento de una cadena devolviendo el puntero a la copia.
*/
#include <stdio.h>
#include <string.h>
+#include "memdebug_debugger.h"
+
ParseError* ParseError_new(void) {
ParseError* pe = malloc(sizeof(ParseError));
if (pe) {
return cant;
}
+void DLList_equation_delete(DLList* l) {
+ if (l) {
+ while (!DLList_empty(l)) {
+ Equation_delete((Equation*)DLList_pop(l));
+ }
+ }
+ DLList_delete(l);
+}
+
#define PARSE_ERROR(str) ParseError_set_pos_message(error, str, i + 1, c)
bool parser_equation(const char* line, size_t len, DLList* equation_list,
bool parser_equation(const char* line, size_t len, DLList* equation_list,
ParseError* error);
+void DLList_equation_delete(DLList* l);
+
#endif /* PARSER_EQUATION_H */
*/
int main(int argc, char* argv[]) {
/* Declaración de variables. */
+ int i;
DLList* lista;
ParseError* error;
- if (argc != 2) {
- fprintf(stderr, "Debe pasar la ecuación a evaluar como parámetro.\n");
- fprintf(stderr, "Ejemplo: %s 'b = 50 + h*2'\n", argv[0]);
+ if (argc < 2) {
+ fprintf(stderr, "Debe pasar ecuaciones a evaluar como parámetros.\n");
+ fprintf(stderr, "Ejemplo: %s 'b = 50 + h*2' 'a = b+1\n", argv[0]);
return EXIT_FAILURE;
}
return EXIT_FAILURE;
}
- if (!parser_equation(argv[1], strlen(argv[1]), lista, error)) {
- ParseError_print(error, stderr);
- return EXIT_FAILURE;
+ for (i = 1; i < argc; i++) {
+ if (!parser_equation(argv[i], strlen(argv[i]), lista, error)) {
+ error->line = i;
+ ParseError_print(error, stderr);
+ }
}
DLList_equation_print(lista, stdout);
- DLList_delete(lista);
+ DLList_equation_delete(lista);
+
+ ParseError_delete(error);
+
+ /* Veo si pierdo memoria. */
+ memdebug_end();
return EXIT_SUCCESS;
}