Cleaned up the Symbol struct and updated code accordingly.
This commit is contained in:
+24
-11
@@ -35,27 +35,32 @@ IRState* ParseTokens(List* tokens) {
|
||||
{
|
||||
Symbol* symbol = TryGetSymbol(t->Lemexe, MachineState.SymbolsTable);
|
||||
|
||||
if (symbol && symbol->Resolved) {
|
||||
if (symbol && symbol->Type != UnresolvedSymbol) {
|
||||
fprintf(stderr, "[Error] Line %d: Redefinition of symbol '%s'\n", t->LineNumber, t->Lemexe);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
AdvanceParser(); //Consume the label token
|
||||
|
||||
if (!symbol) symbol = AddSymbolToTable(t->Lemexe, NULL, strlen(t->Lemexe), MachineState.SymbolsTable);
|
||||
|
||||
symbol->Resolved = 1;
|
||||
if (!symbol) symbol = AddSymbolToTable(t->Lemexe, InstructionPointerSymbol, MachineState.SymbolsTable);
|
||||
else symbol->Type = InstructionPointerSymbol;
|
||||
|
||||
AdvanceParser(); //Consume the NewLine
|
||||
|
||||
Instruction* ins = HandleOperation();
|
||||
|
||||
if (!ins) printf("No op %s\n", symbol->Name);
|
||||
if (!ins) {
|
||||
fprintf(stderr, "[Error] Line %d: Expected instruction following label %s\n", t->LineNumber, t->Lemexe);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// if (!ins) continue;
|
||||
char mn[12];
|
||||
|
||||
// symbol->Value.Instruction = ins;
|
||||
// symbol->InstructionPointer = 1;
|
||||
GetMnemonicText(ins->Mnemonic, mn);
|
||||
|
||||
printf("Found: %s\n", mn);
|
||||
|
||||
symbol->Value.Instruction = ins;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -93,7 +98,7 @@ Parameter* GetParameterType() {
|
||||
|
||||
symbol = TryGetSymbol(token->Lemexe, MachineState.SymbolsTable);
|
||||
|
||||
if (!symbol) symbol = AddSymbolToTable(token->Lemexe, token->Lemexe, strlen(token->Lemexe), MachineState.SymbolsTable);
|
||||
if (!symbol) symbol = AddSymbolToTable(token->Lemexe, UnresolvedSymbol, MachineState.SymbolsTable);
|
||||
|
||||
param->Value.Symbol = symbol->Name;
|
||||
|
||||
@@ -126,7 +131,7 @@ Parameter* GetParameterType() {
|
||||
|
||||
symbol = TryGetSymbol(token->Lemexe, MachineState.SymbolsTable);
|
||||
|
||||
if (!symbol) symbol = AddSymbolToTable(token->Lemexe, NULL, strlen(token->Lemexe), MachineState.SymbolsTable);
|
||||
if (!symbol) symbol = AddSymbolToTable(token->Lemexe, UnresolvedSymbol, MachineState.SymbolsTable);
|
||||
|
||||
param->Value.Symbol = symbol->Name;
|
||||
}
|
||||
@@ -222,11 +227,19 @@ Instruction* HandleOperation() {
|
||||
}
|
||||
|
||||
void PrintSymbols(void) {
|
||||
char mn[12];
|
||||
printf("-----SYMBOLS-----\n");
|
||||
for(int i = 0; i < MachineState.SymbolsTable->Size; i++) {
|
||||
Symbol* symbol = MachineState.SymbolsTable->Symbols[i];
|
||||
|
||||
printf("[Resolved? %d] %s\n", symbol->Resolved, symbol->Name);
|
||||
printf("[%s] %s", symbol->Type == UnresolvedSymbol ? "Unresolved" : "Resolved", symbol->Name);
|
||||
|
||||
if (symbol->Type == InstructionPointerSymbol) {
|
||||
GetMnemonicText(symbol->Value.Instruction->Mnemonic, mn);
|
||||
printf(" -> %s", mn);
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
printf("-----SYMBOLS-----\n");
|
||||
}
|
||||
|
||||
+4
-5
@@ -25,7 +25,7 @@ SymbolTable* CreateSymbolTable(void){
|
||||
return table;
|
||||
}
|
||||
|
||||
Symbol* CreateSymbol(char* name, void* value, int length) {
|
||||
Symbol* CreateSymbol(char* name, SymbolType type) {
|
||||
Symbol* symbol = calloc(1, sizeof(Symbol));
|
||||
|
||||
if (!symbol) {
|
||||
@@ -34,9 +34,8 @@ Symbol* CreateSymbol(char* name, void* value, int length) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
symbol->Length = length;
|
||||
symbol->Type = type;
|
||||
symbol->Name = name;
|
||||
//symbol->Value = value;
|
||||
|
||||
return symbol;
|
||||
}
|
||||
@@ -51,7 +50,7 @@ Symbol* TryGetSymbol(char* name, SymbolTable* table) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Symbol* AddSymbolToTable(char* name, void* value, int length, SymbolTable* table) {
|
||||
Symbol* AddSymbolToTable(char* name, SymbolType type, SymbolTable* table) {
|
||||
//if (!name || !value || !table || length == 0) return NULL;
|
||||
|
||||
for(int i = 0; i < table->Size; i++) {
|
||||
@@ -75,7 +74,7 @@ Symbol* AddSymbolToTable(char* name, void* value, int length, SymbolTable* table
|
||||
table->Symbols = newBlock;
|
||||
}
|
||||
|
||||
Symbol* symbol = CreateSymbol(name, value, length);
|
||||
Symbol* symbol = CreateSymbol(name, type);
|
||||
|
||||
table->Symbols[table->Size] = symbol;
|
||||
table->Size++;
|
||||
|
||||
Reference in New Issue
Block a user