Fixed a bug in the SymbolsTable where it wouldn't update its size.
This commit is contained in:
+4
-76
@@ -7,8 +7,6 @@
|
|||||||
Symbol* CreateSymbol(Token* token, int length, int address, int resolved);
|
Symbol* CreateSymbol(Token* token, int length, int address, int resolved);
|
||||||
const List* TokensList;
|
const List* TokensList;
|
||||||
int CurrentToken = 0;
|
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 PrintSymbols(void);
|
||||||
void HandleOperation(void);
|
void HandleOperation(void);
|
||||||
@@ -41,18 +39,16 @@ IRState* ParseTokens(List* tokens) {
|
|||||||
break;
|
break;
|
||||||
case LabelClass:
|
case LabelClass:
|
||||||
AdvanceParser();
|
AdvanceParser();
|
||||||
printf("%s: \n", t->Lemexe);
|
AddSymbolToTable(t->Lemexe, NULL, strlen(t->Lemexe), MachineState.SymbolsTable)->Resolved = 1;
|
||||||
AddSymbolToTable(t->Lemexe, NULL, strlen(t->Lemexe), MachineState.SymbolsTable);
|
|
||||||
AdvanceParser(); //Consume the NewLine
|
AdvanceParser(); //Consume the NewLine
|
||||||
break;
|
break;
|
||||||
default:
|
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);
|
//exit(1);
|
||||||
AdvanceParser();
|
IgnoreParserLine();
|
||||||
|
AdvanceParser(); //Consume the new line
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//AdvanceParser();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MachineState.SymbolsTable->Size > 0) PrintSymbols();
|
if (MachineState.SymbolsTable->Size > 0) PrintSymbols();
|
||||||
@@ -67,23 +63,6 @@ IRState* ParseTokens(List* tokens) {
|
|||||||
printf("%s\n", mn);
|
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;
|
return &MachineState;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,57 +112,6 @@ OpcodeParameter GetParameterType(Token** sourceToken) {
|
|||||||
break;
|
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;
|
return NoParameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -52,7 +52,7 @@ Symbol* TryGetSymbol(char* name, SymbolTable* table) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Symbol* AddSymbolToTable(char* name, void* value, int length, 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++) {
|
for(int i = 0; i < table->Size; i++) {
|
||||||
if (strcmp(table->Symbols[i]->Name, name) == 0) {
|
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);
|
Symbol* symbol = CreateSymbol(name, value, length);
|
||||||
|
|
||||||
table->Symbols[table->Size] = symbol;
|
table->Symbols[table->Size] = symbol;
|
||||||
|
table->Size++;
|
||||||
|
|
||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user