From 78f1cd3fbb6b16077de381e0a224bab56943c2f0 Mon Sep 17 00:00:00 2001 From: Partho Bhattacharya Date: Fri, 14 Mar 2025 20:48:11 -0400 Subject: [PATCH] Got symbol Table largely working (but without certain entries being added like functions or records) --- src/grammar.y | 10 +++++++--- src/symbol_table.c | 6 ++---- src/symbol_table.h | 10 ++++++++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/grammar.y b/src/grammar.y index a153f8e..c9136c4 100644 --- a/src/grammar.y +++ b/src/grammar.y @@ -19,6 +19,8 @@ extern FILE * yyin; extern TableNode* funprime; extern TableNode* arrayprim; + extern TableNode* recprime; + extern TableNode* funtypeprime; extern TableNode* integ; extern TableNode* addr; extern TableNode* chara; @@ -33,6 +35,9 @@ } + +%type expression +%type constant %type id_or_types %type types %token ID 101 @@ -150,7 +155,7 @@ declaration_list: ; declaration: - id_or_types COLON ID {CreateEntry(cur,$1,$3); } + id_or_types COLON ID {CreateEntry(cur,$1,$3,NULL); } ; id_or_types: @@ -188,8 +193,7 @@ rec_op : expression: constant {printf("constant expression\n");} {$$ = $1;} - | SUB_OR_NEG expression {if(strcmp($2,integer) != 0) {printf("cant negate something not an integer at - line %d and column %d\n",@2.first_line,@2.first_column);}} %prec UMINUS {printf("negative expression\n");} + | SUB_OR_NEG expression {if(strcmp($2,"integer") != 0) {printf("cant negate something not an integer at line %d and column %d\n",@2.first_line,@2.first_column);}} %prec UMINUS {printf("negative expression\n");} | NOT expression {printf("not expression\n");} | expression ADD expression {printf("add expression\n");} diff --git a/src/symbol_table.c b/src/symbol_table.c index 8388578..6f26b89 100644 --- a/src/symbol_table.c +++ b/src/symbol_table.c @@ -17,8 +17,6 @@ TableNode* chara; TableNode* stri; TableNode* boo; TableNode* recprime; -TableNode* funprime; -TableNode* arrayprime; TableNode* funtypeprime; @@ -234,7 +232,7 @@ SymbolTable* CreateScope(SymbolTable* ParentScope, int Line, int Column) { //create entry just for things below top level scope SymbolTable* init(SymbolTable* start){ - if(start->Parent_Scope == NULL){ + if(start->Parent_Scope != NULL){ printf("Cannot initialize a scope that is not the parent scope\n"); return NULL; } @@ -280,7 +278,7 @@ SymbolTable* init(SymbolTable* start){ funprime->theName= "primitive function"; funprime->theType=NULL; funprime->additionalinfo = NULL; - funpprime->next = NULL; + funprime->next = NULL; //record recprime = (TableNode*)malloc(sizeof(TableNode)); diff --git a/src/symbol_table.h b/src/symbol_table.h index 7639e14..7763305 100644 --- a/src/symbol_table.h +++ b/src/symbol_table.h @@ -86,6 +86,16 @@ ListOfTable* getRestOfChildren(ListOfTable* lt); TableNode* getFirstEntry(SymbolTable* st); TableNode* getNextEntry(TableNode* tn); SymbolTable* init(SymbolTable* scope); +int getPrimSize(TableNode* definition); +int getNumArrDim(TableNode* definition); +TableNode* getArrType(TableNode* definition); +int getRecLength(TableNode* definition); +TableNode* getRecList(TableNode* definition); +int getStartLine(TableNode* definition); +bool getAsKeyword(TableNode* definition); +TableNode* getParameter(TableNode* definition); +TableNode* getReturn(TableNode* definition); + char* getType(TableNode* tn); char* getName(TableNode* tn); int getLine(SymbolTable* st);