From 1f7989533b08410405512078df875e60898fe054 Mon Sep 17 00:00:00 2001 From: Garritt McCune Date: Mon, 3 Oct 2022 20:11:04 -0500 Subject: [PATCH] Fixed a bug in the SymbolsTable where it wouldn't update its size. --- src/parser.c | 80 +++------------------------------------------ src/symbols_table.c | 3 +- 2 files changed, 6 insertions(+), 77 deletions(-) diff --git a/src/parser.c b/src/parser.c index b6731b8..73adbea 100644 --- a/src/parser.c +++ b/src/parser.c @@ -7,8 +7,6 @@ Symbol* CreateSymbol(Token* token, int length, int address, int resolved); const List* TokensList; int CurrentToken = 0; -//int HeapStart = 4; // zero indexed, used for declared variables. -//int BinaryEnd = 4; // Zero indexed (binary starts with a 4 byte header) void PrintSymbols(void); void HandleOperation(void); @@ -41,18 +39,16 @@ IRState* ParseTokens(List* tokens) { break; case LabelClass: AdvanceParser(); - printf("%s: \n", t->Lemexe); - AddSymbolToTable(t->Lemexe, NULL, strlen(t->Lemexe), MachineState.SymbolsTable); + AddSymbolToTable(t->Lemexe, NULL, strlen(t->Lemexe), MachineState.SymbolsTable)->Resolved = 1; AdvanceParser(); //Consume the NewLine break; default: - fprintf(stderr, "[Error] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class); + fprintf(stderr, "[Warning] Line %d: Syntax error, expected start of expression, got '%c' [%d].\n", t->LineNumber, t->Value.Punctuation, t->Class); //exit(1); - AdvanceParser(); + IgnoreParserLine(); + AdvanceParser(); //Consume the new line break; } - - //AdvanceParser(); } if (MachineState.SymbolsTable->Size > 0) PrintSymbols(); @@ -67,23 +63,6 @@ IRState* ParseTokens(List* tokens) { printf("%s\n", mn); } - //DestroyList(SymbolsTable); - - //memcpy(&Heap[HeapTop], Memory, ProgramCounter); - //int totalSize = HeapTop + ProgramCounter; - // Heap[0] = 2 >> HeapTop & 0xFF; - // Heap[1] = HeapTop & 0xFF; - // Heap[2] = 2 >> totalSize & 0xFF; - // Heap[3] = totalSize & 0xFF; - - // for(int i = 0; i < 33; i++) { - // if (i != 0 && i % 3 == 0) printf("\n"); - // printf("%02X ", Heap[i] & 0xFF); - // } - // printf("\n"); - // printf("Program Counter: %d\n", ProgramCounter); - // printf("Heap Top: %#06X\n", HeapTop); - return &MachineState; } @@ -133,57 +112,6 @@ OpcodeParameter GetParameterType(Token** sourceToken) { break; } - // while(!ParserAtEnd()) { - // if (token->EndOfFile || (token->Class == PunctuationClass && token->Value.Punctuation == NewLine)) break; - - // if (token->Class == RegisterClass) { - // *sourceToken = token; - - // AdvanceParser(); - - // return RegisterParameter; - // } - - // if (token->Class == PunctuationClass) { - // if (token->Value.Punctuation == LBracket) { - // AdvanceParser(); - // token = PeekToken(); - - // *sourceToken = token; - - // AdvanceParser(); - - // if (PeekToken()->Class == PunctuationClass && PeekToken()->Value.Punctuation != RBracket) { - // //error - // fprintf(stderr, "[Error] Line %d Expected closing bracket.\n", token->LineNumber); - // exit(1); - // } - // else AdvanceParser(); - - // return AddressParameter; - // } - // else { - // //error - // fprintf(stderr, "[Error] Line: %d Expected opening bracket.\n", token->LineNumber); - // exit(1); - // } - // } - - // if (token->Class == NumberClass) { - // *sourceToken = token; - - // AdvanceParser(); - - // return ConstantParameter; - // } - - // if (token->Class & AddressClass) { - // *sourceToken = token; - // AdvanceParser(); - // return AddressParameter; - // } - // } - return NoParameter; } diff --git a/src/symbols_table.c b/src/symbols_table.c index ce7442c..3cae1ca 100644 --- a/src/symbols_table.c +++ b/src/symbols_table.c @@ -52,7 +52,7 @@ Symbol* TryGetSymbol(char* name, SymbolTable* table) { } Symbol* AddSymbolToTable(char* name, void* value, int length, SymbolTable* table) { - if (!name || !value || !table || length == 0) return NULL; + //if (!name || !value || !table || length == 0) return NULL; for(int i = 0; i < table->Size; i++) { if (strcmp(table->Symbols[i]->Name, name) == 0) { @@ -78,6 +78,7 @@ Symbol* AddSymbolToTable(char* name, void* value, int length, SymbolTable* table Symbol* symbol = CreateSymbol(name, value, length); table->Symbols[table->Size] = symbol; + table->Size++; return symbol; }