From 63212a3d63e85a97ca1f78f28274337cfdaff1d4 Mon Sep 17 00:00:00 2001 From: Partho Bhattacharya Date: Fri, 28 Feb 2025 18:16:44 -0500 Subject: [PATCH] entries are working but not freeing memory so potential for leaks --- .Makefile.swp | Bin 12288 -> 0 bytes grammar.y | 28 +++++++++++++++------------- lexicalStructure.lex | 4 +++- parser | Bin 40984 -> 0 bytes 4 files changed, 18 insertions(+), 14 deletions(-) delete mode 100644 .Makefile.swp delete mode 100755 parser diff --git a/.Makefile.swp b/.Makefile.swp deleted file mode 100644 index 731dce035acfa5772ee102a56adbe2804c3e8404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2y>HV%7>5s72$T;&2PBpQiqryjN-0uhsY7W?RjEvTRst2rxqMK^w$2wIs`ywK zkeFD2e}KZk!hi$=A3H2;?0{7M02UbdonxnU;?M|*0rW1P*w1(6@Z-{^FZcJdpfEbBo7a0eLYCIc(eazQ!@T3#VVHM9F*iV<0Uy9y@B%D@$KVdQ z1TKO}V1Oea2R4J1?Kls-2T#Fma0{FV2f+aNv5m1e;5B##9)XA81}K9PxC|`N2fp?p zA3Ov#Fai3(x2Q6Bcfk_yz&w}&k&l0H zJ!#5hfDDiUGC&5%z~3{FlQnLX_#rb?EdIMJ?OM&2rm_oWC9Ba%8V{MuUrY{4uDHIM zKQK6bVR|Tu=}@C#t~t?Xjw@`>!hbntzM0I8P;oP_M5w~(ePK~FuKBVUnzkEM?6yn; zW2e*oK*;Dx%g%hA+tIxgw!08@y)cq}N@_NLo~|GI>|ubgS_@n;S5+v(%_zE~;N}Ul zo;m|(Jq+OEiBuWXJ*Su4-^)yy>Ap@KQ!WcnS9iu=6kdw&%T8+2PXiLl-C7qM*+hNV9>051q^kD^MW)#qx zhv6huIPq+Ck8!vatMGUW)t#N3o4ycPXjMHhsGC@F9MxNOZ1=R1bw|~uFcD%bS(Gdv z%@L!?&QECHsZ~kVNALSi*6LtQ0$YYcuBuL*!{X?gp;K{=uca84TjRWWQLy-mvBnve bTDLbhdK9V;P)}!pT8s{ASFG7t*>Tt}gkE>x diff --git a/grammar.y b/grammar.y index bf8e417..2302167 100644 --- a/grammar.y +++ b/grammar.y @@ -10,8 +10,8 @@ extern char* yytext; extern int yychar; SymbolTable * st; - char* cur_value; - char* cur_type; + //char* cur_value; + //char* cur_type; int token_tracker; extern int line_number; extern int column_number; @@ -120,8 +120,8 @@ idlist: ; sblock: - L_BRACE {st = CreateScope(st,1,1);} statement_list {st = getParent(st);} R_BRACE - | L_BRACE {st = CreateScope(st,1,1);} dblock statement_list {st = getParent(st);} R_BRACE + L_BRACE {st = CreateScope(st,2,2);} statement_list {st = getParent(st);} R_BRACE + | L_BRACE {st = CreateScope(st,2,2);} dblock statement_list {st = getParent(st);} R_BRACE ; dblock: @@ -143,22 +143,24 @@ declaration_list: declaration: ID COLON ID { - printf("declaration rule encountered"); + + CreateEntry(st,strdup($1),strdup($3)); +// printf("declaration rule encountered"); // if(cur_value != NULL){ // char* delete1 = cur_value; - printf("delete1 var assigned to cur_value"); +// printf("delete1 var assigned to cur_value"); // free(delete1); - printf("delete1 var freed"); +// printf("delete1 var freed"); // } // if(cur_type != NULL){ // char* delete2 = cur_type; // free(delete2);} // int len = strlen($1); - printf("length determined"); +// printf("length determined"); // cur_value = malloc(len + 1); - printf("space allocated"); +// printf("space allocated"); // strcpy(cur_value, $1); - printf("string copied over"); +// printf("string copied over"); // len = strlen($3); // cur_type = malloc(len + 1); @@ -255,9 +257,9 @@ void yyerror(const char *err) { } int main() { - char *str = strdup("taco"); - cur_value = NULL; - cur_type = NULL; + //char *str = strdup("taco"); + //cur_value = NULL; + //cur_type = NULL; token_tracker = 1; st=CreateScope(NULL,1,1); diff --git a/lexicalStructure.lex b/lexicalStructure.lex index 3bd0332..5f1f8ec 100644 --- a/lexicalStructure.lex +++ b/lexicalStructure.lex @@ -12,6 +12,8 @@ #ifndef DEBUG #define DEBUG 0 #endif + + %} STARCOM [^\*]|\*+[^\)\*]+ @@ -79,7 +81,7 @@ SCHAR \\n|\\t|\\\"|[^\"\n\\] "false" {if(DEBUG) {printf( "C_FALSE: %s (%d)\n", yytext, C_FALSE);} else {return C_FALSE;}} "null" {if(DEBUG) {printf( "C_NULL: %s (%d)\n", yytext, C_NULL);} else {return C_NULL;}} -{ID} {if(DEBUG) {printf( "ID: %s (%d)\n", yytext, ID);} else {return ID;}} +{ID} {if(DEBUG) {printf( "ID: %s (%d)\n", yytext, ID);} else {yylval.words = strdup(yytext); return ID;}} \n {line_number++; column_number = 1;} \t {column_number++;} diff --git a/parser b/parser deleted file mode 100755 index 414407a4dbe4de88595d639d6eff1860f4fbd916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40984 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