diff --git a/src/symbols_table.c b/src/symbols_table.c index 959148d..231fa63 100644 --- a/src/symbols_table.c +++ b/src/symbols_table.c @@ -119,6 +119,8 @@ void FreeSymbol(Symbol* symbol) { free(symbol); } +int TryGetTokenNodeValue(const TokenNode* node, const SymbolTable* table, unsigned short* value); + int TryGetSymbolValue(const Symbol* symbol, const SymbolTable* table, unsigned short* value) { if (!symbol || !symbol->Token || !table) return 0; if (symbol->Token->Class == CharacterClass) return 0; @@ -144,17 +146,11 @@ int TryGetSymbolValue(const Symbol* symbol, const SymbolTable* table, unsigned s return 1; case PunctuationClass: - //check for math operator - if (!TryGetSymbol(root->Left->Token->Lemexe, table, &s)) return 0; + if (!TryGetTokenNodeValue(root->Left, table, &left)) return 0; + if (!TryGetTokenNodeValue(root->Right, table, &right)) return 0; - if (!TryGetSymbolValue(s, table, &left)) return 0; - - if (!TryGetSymbol(root->Right->Token->Lemexe, table, &s)) return 0; - - if (!TryGetSymbolValue(s, table, &right)) return 0; - - *value = left + right; //TODO: actually check what op we need to do. - break; + *value = left + right; + break; default: return 0; } @@ -162,6 +158,17 @@ int TryGetSymbolValue(const Symbol* symbol, const SymbolTable* table, unsigned s return 1; } +int TryGetTokenNodeValue(const TokenNode* node, const SymbolTable* table, unsigned short* value) { + const Token* token = node->Token; + + if (token->Class == NumberClass) { + *value = token->Value.Number; + return 1; + } + + return 0; +} + TokenNode* CreateTokenNode(const Token* token){ TokenNode* node = calloc(1, sizeof(TokenNode)); @@ -173,4 +180,4 @@ TokenNode* CreateTokenNode(const Token* token){ node->Token = token; return node; -} \ No newline at end of file +}