Got symbol Table largely working (but without certain entries being added like functions or records)
This commit is contained in:
@ -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");}
|
||||||
|
@ -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));
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user