fixed grammar issues with reserve and release

This commit is contained in:
Partho
2025-05-07 00:11:41 -04:00
parent de0cec317f
commit e9d65329ba
3 changed files with 41 additions and 32 deletions

View File

@ -687,7 +687,8 @@ simple_statement:
//updating context for reserve/release //updating context for reserve/release
if(getAdInfoType((TableNode*)$1) == TYPE_ARRAY || getAdInfoType((TableNode*)$1) == TYPE_FUNCTION_DECLARATION){ if(getAdInfoType((TableNode*)$1) == TYPE_ARRAY || getAdInfoType((TableNode*)$1) == TYPE_FUNCTION_DECLARATION){
PushContext(getTypeEntry((TableNode*)$1)); PushContext(getTypeEntry((TableNode*)$1));
printdebug("pushed %s to context stack in simple statement assignable rule\n",getName(getTypeEntry((TableNode*)$1)));
printf("pushed %s to context stack in simple statement assignable rule\n",getName(getContextTypeEntry(context_head)));
} }
S_Push(TrueList, S_Init(), 0); S_Push(TrueList, S_Init(), 0);
S_Push(FalseList, S_Init(), 0); S_Push(FalseList, S_Init(), 0);
@ -1196,14 +1197,23 @@ expression:
emit_reserve(node, tn_or_const(NODE,$2)); emit_reserve(node, tn_or_const(NODE,$2));
$$ = node; $$ = node;
} }
if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head))) else if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){ && (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
char* temp = temp_var_gen(); char* temp = temp_var_gen();
//does this have integer? //does this have integer?
TableNode* node = CreateEntry(cur,TYPE_ARRAY, getContextTypeEntry(context_head), temp, NULL); TableNode* node = CreateEntry(cur,TYPE_ARRAY, getContextTypeEntry(context_head), temp, NULL);
emit_reserve(node, tn_or_const(NODE,$2)); emit_reserve(node, tn_or_const(NODE,$2));
$$ = node; $$ = node;
}else{ }else if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
char* temp = temp_var_gen();
//does this have integer?
TableNode* node = CreateEntry(cur,TYPE_ARRAY, getContextTypeEntry(context_head), temp, NULL);
emit_reserve(node, tn_or_const(NODE,$2));
$$ = node;
}else{
printf("%s on right %s on left\n",getType((TableNode*)$2),getName(getArrType(getContextTypeEntry(context_head))));
printf("%s is the name of the left\n",getName(getContextTypeEntry(context_head)));
$$ = undefined; $$ = undefined;
} }
} }
@ -1218,7 +1228,7 @@ expression:
emit_release((TableNode*)$2); emit_release((TableNode*)$2);
$$ = node; $$ = node;
} }
if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head))) else if(((getTypeEntry((TableNode*)$2)) == getArrType(getContextTypeEntry(context_head)))
&& (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){ && (getAdInfoType(getContextTypeEntry(context_head)) == TYPE_ARRAY_TYPE)){
char* temp = temp_var_gen(); char* temp = temp_var_gen();
//does this have integer? //does this have integer?

View File

@ -283,7 +283,7 @@ TableNode *getContextTypeEntry(Context_stack *cs) {
return undefined; return undefined;
} }
TableNode* tn = cs->typeToCompare; TableNode* tn = cs->typeToCompare;
return NULL; return tn;
} }
Constant_Stack *Pop() { Constant_Stack *Pop() {
if (head == NULL) { if (head == NULL) {
@ -1056,31 +1056,31 @@ SymbolTable *init(SymbolTable *start) {
chara = (TableNode *)calloc(1, sizeof(TableNode)); chara = (TableNode *)calloc(1, sizeof(TableNode));
stri = (TableNode *)calloc(1, sizeof(TableNode)); stri = (TableNode *)calloc(1, sizeof(TableNode));
boo = (TableNode *)calloc(1, sizeof(TableNode)); boo = (TableNode *)calloc(1, sizeof(TableNode));
TableNode *reservetype = (TableNode *)calloc(1, sizeof(TableNode)); //TableNode *reservetype = (TableNode *)calloc(1, sizeof(TableNode));
TableNode *reserve = (TableNode *)calloc(1, sizeof(TableNode)); //TableNode *reserve = (TableNode *)calloc(1, sizeof(TableNode));
TableNode *releasetype = (TableNode *)calloc(1, sizeof(TableNode)); //TableNode *releasetype = (TableNode *)calloc(1, sizeof(TableNode));
TableNode *release = (TableNode *)calloc(1, sizeof(TableNode)); //TableNode *release = (TableNode *)calloc(1, sizeof(TableNode));
// TableNode* arr = (TableNode*)malloc(sizeof(SymbolTable)); // TableNode* arr = (TableNode*)malloc(sizeof(SymbolTable));
start->entries = integ; start->entries = integ;
integ->next = addr; integ->next = addr;
addr->next = chara; addr->next = chara;
chara->next = stri; chara->next = stri;
stri->next = boo; stri->next = boo;
boo->next = reservetype; boo->next = NULL;//reservetype;
reservetype->next = reserve; //reservetype->next = reserve;
reserve->next = releasetype; //reserve->next = releasetype;
releasetype->next = release; //releasetype->next = release;
release->next = NULL; //release->next = NULL;
integ->theName = "integer"; integ->theName = "integer";
addr->theName = "address"; addr->theName = "address";
chara->theName = "character"; chara->theName = "character";
boo->theName = "Boolean"; boo->theName = "Boolean";
stri->theName = "string"; stri->theName = "string";
reserve->theName = "reserve"; //reserve->theName = "reserve";
reservetype->theName = "reserve type"; //reservetype->theName = "reserve type";
releasetype->theName = "release type"; //releasetype->theName = "release type";
release->theName = "release"; //release->theName = "release";
// arr->theName= "array" // arr->theName= "array"
// root TableNode that all are pointing to but not in table // root TableNode that all are pointing to but not in table
@ -1147,10 +1147,10 @@ SymbolTable *init(SymbolTable *start) {
chara->theType = prime; chara->theType = prime;
stri->theType = arrayprim; stri->theType = arrayprim;
boo->theType = prime; boo->theType = prime;
reserve->theType = reservetype; //reserve->theType = reservetype;
reservetype->theType = funtypeprime; //reservetype->theType = funtypeprime;
releasetype->theType = funtypeprime; //releasetype->theType = funtypeprime;
release->theType = releasetype; //release->theType = releasetype;
// arr->theType=arrayprim; // arr->theType=arrayprim;
@ -1164,20 +1164,20 @@ SymbolTable *init(SymbolTable *start) {
chara->additionalinfo = CreatePrimitiveInfo(SIZE_CHAR); chara->additionalinfo = CreatePrimitiveInfo(SIZE_CHAR);
stri->additionalinfo = CreateArrayInfo(1, chara); stri->additionalinfo = CreateArrayInfo(1, chara);
boo->additionalinfo = CreatePrimitiveInfo(SIZE_BOOL); boo->additionalinfo = CreatePrimitiveInfo(SIZE_BOOL);
reserve->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL); //reserve->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL);
reservetype->additionalinfo = CreateFunctionTypeInfo(integ, addr); //reservetype->additionalinfo = CreateFunctionTypeInfo(integ, addr);
releasetype->additionalinfo = CreateFunctionTypeInfo(addr, integ); //releasetype->additionalinfo = CreateFunctionTypeInfo(addr, integ);
release->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL); //release->additionalinfo = CreateFunctionDeclarationInfo(0, false, NULL);
integ->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for integ integ->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for integ
addr->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for addr addr->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for addr
chara->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for chara chara->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for chara
stri->tag = TYPE_ARRAY_TYPE; // explicitly set the type for stri stri->tag = TYPE_ARRAY_TYPE; // explicitly set the type for stri
boo->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for boo boo->tag = TYPE_PRIMITIVE_TYPE; // explicitly set the type for boo
reserve->tag = TYPE_FUNCTION_DECLARATION; //reserve->tag = TYPE_FUNCTION_DECLARATION;
reservetype->tag = TYPE_FUNCTION_TYPE; //reservetype->tag = TYPE_FUNCTION_TYPE;
releasetype->tag = TYPE_FUNCTION_TYPE; //releasetype->tag = TYPE_FUNCTION_TYPE;
release->tag = TYPE_FUNCTION_DECLARATION; //release->tag = TYPE_FUNCTION_DECLARATION;
// addr->additionalinfo = CreatePrimitiveInfo(8); // addr->additionalinfo = CreatePrimitiveInfo(8);
start->Line_Number = 1; start->Line_Number = 1;

View File

@ -1,5 +1,4 @@
#include "std.alpha" #include "../../library/std.alpha"
type main: string -> integer type main: string -> integer
function entry: main function entry: main