X-Git-Url: https://git.llucax.com/z.facultad/75.42/calculadora.git/blobdiff_plain/0f0090fd999b6194842cbff05ee4f93d69c43000..0030baf01844749eb88b276c6e8ce417cdd6914d:/parser_variable.c?ds=sidebyside diff --git a/parser_variable.c b/parser_variable.c index ce19f9b..cf9a026 100644 --- a/parser_variable.c +++ b/parser_variable.c @@ -14,58 +14,18 @@ * $Id$ */ +#include "parser_variable.h" #include "bool.h" #include "variable.h" -#include "parser_variable.h" +#include "variable_list.h" +#include "parser_common.h" #include "parseerror.h" #include "dllist.h" #include #include #include -bool is_space(char c) { - return (c == ' ') || (c == '\t'); -} - -bool is_number(char c) { - return ('0' <= c) && (c <= '9'); -} - -bool is_alpha(char c) { - return (c == '_') || (('a' <= c) && (c <= 'z')) || (('A' <= c) && (c <= 'Z')); -} - -bool is_alpha_num(c) { - return is_number(c) || is_alpha(c); -} - -bool DLList_variable_find(DLList* l, Variable* var) { - Variable* v; - for (v = DLList_begin(l); DLList_have_more(l); v = DLList_next(l)) { - if (!strcmp(v->variable, var->variable)) { - return TRUE; - } - } - return FALSE; -} - -size_t DLList_variable_print(DLList* l, FILE* fp) { - size_t cant = 0; - Variable* v; - for (v = DLList_begin(l); DLList_have_more(l); v = DLList_next(l)) { - cant += Variable_print(v, fp); - } - return cant; -} - -void DLList_variable_delete(DLList* l) { - if (l) { - while (!DLList_empty(l)) { - Variable_delete((Variable*)DLList_pop(l)); - } - } - DLList_delete(l); -} +#include "memdebug_debugger.h" #define PARSE_ERROR(str) ParseError_set_pos_message(error, str, i + 1, c) @@ -121,6 +81,8 @@ bool parser_variable(const char* line, size_t len, DLList* variable_list, state = VAL; /* Pone el inicio del valor. */ val_start = i; + /* Calcula la longitud como si fuera hasta el final. */ + val_len = len - i; } /* Si es espacio, no hace nada, deja que siga. */ break; @@ -139,6 +101,8 @@ bool parser_variable(const char* line, size_t len, DLList* variable_list, state = MIN; /* Pone el inicio del mínimo. */ min_start = i; + /* Calcula la longitud como si fuera hasta el final. */ + min_len = len - i; } /* Si es espacio, no hace nada, deja que siga. */ break; @@ -159,7 +123,7 @@ bool parser_variable(const char* line, size_t len, DLList* variable_list, max_start = i; /* Pone la longitud del máximo hasta el final (ya no hay más * valores a buscar). */ - max_len = i - len; + max_len = len - i; } /* Si es espacio, no hace nada, deja que siga. */ break; @@ -234,7 +198,7 @@ bool parser_variable(const char* line, size_t len, DLList* variable_list, return FALSE; } /* Ahora sí, la puedo agregar a la lista de variables. */ - if (DLList_variable_find(variable_list, var)) { + if (DLList_variable_find(variable_list, var->variable)) { /* Si ya había uno, lo borro. */ DLList_remove_current(variable_list); }