diff --git a/symbol_table.c b/symbol_table.c index 196bf06..70cb359 100644 --- a/symbol_table.c +++ b/symbol_table.c @@ -6,10 +6,9 @@ typedef struct ListOfTable{ struct SymbolTable* table; - struct ListOfTable* prev; + //struct ListOfTable* prev; struct ListOfTable* next; - int Line_Number; - int Column_Number; + }ListOfTable; typedef union Value{ @@ -32,27 +31,55 @@ typedef struct SymbolTable{ TableNode* entries; struct SymbolTable* Parent_Scope; struct ListOfTable* Children_Scope; + int Line_Number; + int Column_Number; }SymbolTable; SymbolTable* CreateScope(SymbolTable* ParentScope, int Line, int Column){ SymbolTable* table = (SymbolTable*)malloc(sizeof(SymbolTable)); - table.Line_Number = Line; - table.Column_Number = Column; - table.Parent_Scope = ParentScope; - table.Children_Scope = NULL; - table.entries = NULL; + table->Line_Number = Line; + table->Column_Number = Column; + table->Parent_Scope = ParentScope; + table->Children_Scope = NULL; + table->entries = NULL; + if(ParentScope->Children_scope == NULL){ + ListOfTable* newEntry = (ListOfTable*)malloc(sizeof(ListOfTable)); + newEntry->next = NULL; + //newEntry->prev = NULL; + newEntry->table = table; + ParentScope->Children_scope = newEntry; + } else{ + ListOfTable* newEntry = (ListOfTable*)malloc(sizeof(ListOfTable)); + //newEntry->prev = NULL; + newEntry->table= table; + ListOfTable* oldEntry = ParentScope->Children_scope; + ParentScope->Children_scope = newEntry; + newEntry->next = oldEntry; + } + return table; + } + return table; } TableNode* CreateEntry(SymbolTable* table, string typeOf, string id, Value value, int StringLength){ - if(table.entries == NULL){ - TableNode* newEntry = (TableNode*)malloc(sizeof(SymbolTable)); - newEntry.theType = typeOf; - newEntry.theName = id; - newEntry.StrLength = StringLength; + if(table->entries == NULL){ + TableNode* newEntry = (TableNode*)malloc(sizeof(TableNode)); + newEntry->theType = typeOf; + newEntry->theName = id; + newEntry->StrLength = StringLength; + return newEntry; } else{ - + TableNode* newEntry = (TableNode*)malloc(sizeof(TableNode)); + newEntry->theType = typeOf; + newEntry->theName = id; + newEntry->StrLength = StringLength; + TableNode* oldEntry = table->entries; + table->entries = newEntry; + newEntry->next = oldEntry; + return newEntry; + } + } -