Got symbol Table largely working (but without certain entries being added like functions or records)

This commit is contained in:
Partho Bhattacharya
2025-03-14 20:48:11 -04:00
parent ead70170c0
commit 78f1cd3fbb
3 changed files with 19 additions and 7 deletions

View File

@ -19,6 +19,8 @@
extern FILE * yyin; extern FILE * yyin;
extern TableNode* funprime; extern TableNode* funprime;
extern TableNode* arrayprim; extern TableNode* arrayprim;
extern TableNode* recprime;
extern TableNode* funtypeprime;
extern TableNode* integ; extern TableNode* integ;
extern TableNode* addr; extern TableNode* addr;
extern TableNode* chara; extern TableNode* chara;
@ -33,6 +35,9 @@
} }
%type <words> expression
%type <words> constant
%type <words> id_or_types %type <words> id_or_types
%type <words> types %type <words> types
%token <words> ID 101 %token <words> ID 101
@ -150,7 +155,7 @@ declaration_list:
; ;
declaration: declaration:
id_or_types COLON ID {CreateEntry(cur,$<words>1,$<words>3); } id_or_types COLON ID {CreateEntry(cur,$<words>1,$<words>3,NULL); }
; ;
id_or_types: id_or_types:
@ -188,8 +193,7 @@ rec_op :
expression: expression:
constant {printf("constant expression\n");} {$$ = $<words>1;} constant {printf("constant expression\n");} {$$ = $<words>1;}
| SUB_OR_NEG expression {if(strcmp($2,integer) != 0) {printf("cant negate something not an integer at | 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");}
line %d and column %d\n",@2.first_line,@2.first_column);}} %prec UMINUS {printf("negative expression\n");}
| NOT expression {printf("not expression\n");} | NOT expression {printf("not expression\n");}
| expression ADD expression {printf("add expression\n");} | expression ADD expression {printf("add expression\n");}

View File

@ -17,8 +17,6 @@ TableNode* chara;
TableNode* stri; TableNode* stri;
TableNode* boo; TableNode* boo;
TableNode* recprime; TableNode* recprime;
TableNode* funprime;
TableNode* arrayprime;
TableNode* funtypeprime; TableNode* funtypeprime;
@ -234,7 +232,7 @@ SymbolTable* CreateScope(SymbolTable* ParentScope, int Line, int Column) {
//create entry just for things below top level scope //create entry just for things below top level scope
SymbolTable* init(SymbolTable* start){ 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"); printf("Cannot initialize a scope that is not the parent scope\n");
return NULL; return NULL;
} }
@ -280,7 +278,7 @@ SymbolTable* init(SymbolTable* start){
funprime->theName= "primitive function"; funprime->theName= "primitive function";
funprime->theType=NULL; funprime->theType=NULL;
funprime->additionalinfo = NULL; funprime->additionalinfo = NULL;
funpprime->next = NULL; funprime->next = NULL;
//record //record
recprime = (TableNode*)malloc(sizeof(TableNode)); recprime = (TableNode*)malloc(sizeof(TableNode));

View File

@ -86,6 +86,16 @@ ListOfTable* getRestOfChildren(ListOfTable* lt);
TableNode* getFirstEntry(SymbolTable* st); TableNode* getFirstEntry(SymbolTable* st);
TableNode* getNextEntry(TableNode* tn); TableNode* getNextEntry(TableNode* tn);
SymbolTable* init(SymbolTable* scope); 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* getType(TableNode* tn);
char* getName(TableNode* tn); char* getName(TableNode* tn);
int getLine(SymbolTable* st); int getLine(SymbolTable* st);