#include #include #include #include typedef struct ListOfTable { struct SymbolTable* table; // struct ListOfTable* prev; struct ListOfTable* next; } ListOfTable; typedef struct TableNode { char* theType; char* theName; struct TableNode* next; } TableNode; 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); TableNode* CreateEntry(SymbolTable* table, char* typeOf, char* id); TableNode* table_lookup(SymbolTable* table, char* x); TableNode* look_up(SymbolTable* table, char* x); void print_symbol_table(SymbolTable* table, FILE* file_ptr); SymbolTable* getAncestor(SymbolTable* table); SymbolTable* getParent(SymbolTable* st); ListOfTable* getChildren(SymbolTable* st); SymbolTable* getFirstChild(ListOfTable* lt); ListOfTable* getRestOfChildren(ListOfTable* lt); TableNode* getFirstEntry(SymbolTable* st); TableNode* getNextEntry(TableNode* tn); char* getType(TableNode* tn); char* getName(TableNode* tn); int getLine(SymbolTable* st); int getColumn(SymbolTable* st);