diff options
Diffstat (limited to 'parse.c')
| -rw-r--r-- | parse.c | 31 |
1 files changed, 28 insertions, 3 deletions
@@ -5,6 +5,16 @@ #include "parse.h" #include "hashtable.h" +int symtoi(sym_t* symbol) { + return *((int*)symbol->name); +} +float symtof(sym_t* symbol) { + return *((float*)symbol->name); +} +char* symtos(sym_t* symbol) { + return (char*)symbol->name; +} + void symbol_add_arg(sym_t* symbol, sym_t* arg) { symbol->argCount += 1; if (symbol->argCount == 1) { @@ -46,11 +56,26 @@ symset_t* parse_symbols(char** str) { symbolName[i] = **str; if (**str == ',' || **str == ';') { (*str)++; - symbolName[i] = '\0'; sym_t* symbol = malloc(sizeof(sym_t)); symbol->province = LITERAL; - symbol->name = symbolName; symbol->argCount = 0; + symbolName[i] = '\0'; + /* TODO: float */ + /* string */ + if (isalpha(symbolName[0])) { + symbolName = realloc(symbolName, i * sizeof(char)); + symbol->name = symbolName; + symbol->litType = STRING; + } + /* int */ + else { + int v = atoi(symbolName); + int* vp = malloc(sizeof(int)); + *vp = v; + symbol->name = (void*)vp; + free(symbolName); + symbol->litType = INT; + } symset_add_symbol(symbolSet, symbol); break; } @@ -60,7 +85,7 @@ symset_t* parse_symbols(char** str) { sym_t* symbol = malloc(sizeof(sym_t)); symbol->province = KEY_REF; symbol->argCount = 0; - if(i > 1) { + if (i > 1) { symbol->name = symbolName; } else { |
