diff options
Diffstat (limited to 'src/parse.c')
| -rw-r--r-- | src/parse.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/parse.c b/src/parse.c index 18425ac..d1b0f2e 100644 --- a/src/parse.c +++ b/src/parse.c @@ -24,7 +24,7 @@ sym_t* init_sym_int(int value) { return init_sym(LITERAL, INT, vp); } sym_t* init_sym_float(float value) { - int* vp = malloc(sizeof(float)); + float* vp = malloc(sizeof(float)); *vp = value; return init_sym(LITERAL, FLOAT, vp); } @@ -93,20 +93,23 @@ symset_t* parse_symbols(char** str) { return symbolSet; } char* symbolName = calloc(30, sizeof(char)); + char isFloat = 0; int i = 0; while (1) { symbolName[i] = **str; - if (**str == ',' || **str == ';') { + if (**str == '.') { + isFloat = 1; + } + else if (**str == ',' || **str == ';') { (*str)++; symbolName[i] = '\0'; sym_t* symbol; - /* TODO: float */ /* string */ if (isalpha(symbolName[0])) { symbol = init_sym_str(symbolName); } /* int */ - else { + else if (!isFloat) { int v; if (symbolName[0] == '-') { v = atoi(symbolName + 1) * -1; @@ -116,6 +119,16 @@ symset_t* parse_symbols(char** str) { } symbol = init_sym_int(v); } + else { + float v; + if (symbolName[0] == '-') { + v = atof(symbolName + 1) * -1; + } + else { + v = atof(symbolName); + } + symbol = init_sym_float(v); + } symset_add_symbol(symbolSet, symbol); break; } |
