diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2023-02-15 15:53:33 -0800 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2023-02-15 15:53:33 -0800 |
| commit | f5985c65df468e49109febcad2a3937aea801b89 (patch) | |
| tree | 6c3d9bd1074c972f013f628d72a91374b8d98f5a /parse.c | |
| parent | 7e696a40e51aa35b003aa9c3fc72139b34cddc71 (diff) | |
types. eq() internal function
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 { |
