Fixed a bug with single parameter instructions that land at the end of a file expecting a comma.
This commit is contained in:
+14
-11
@@ -37,7 +37,7 @@ IRState* ParseTokens(List* tokens) {
|
|||||||
Symbol* symbol = TryGetSymbol(t->Lemexe, MachineState.SymbolsTable);
|
Symbol* symbol = TryGetSymbol(t->Lemexe, MachineState.SymbolsTable);
|
||||||
|
|
||||||
if (symbol && symbol->Type != UnresolvedSymbol) {
|
if (symbol && symbol->Type != UnresolvedSymbol) {
|
||||||
fprintf(stderr, "[Error] Line %d: Redefinition of symbol '%s'\n", t->LineNumber, t->Lemexe);
|
fprintf(stderr, "[Error] Line %d: Redefinition of symbol '%s' (type: %d)\n", t->LineNumber, t->Lemexe, symbol->Type);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ IRState* ParseTokens(List* tokens) {
|
|||||||
Instruction* ins = HandleOperation();
|
Instruction* ins = HandleOperation();
|
||||||
|
|
||||||
if (!ins) {
|
if (!ins) {
|
||||||
fprintf(stderr, "[Error] Line %d: Expected instruction following label %s\n", t->LineNumber, t->Lemexe);
|
fprintf(stderr, "[Error] Line %d: Expected instruction following label '%s'.\n", t->LineNumber, t->Lemexe);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,14 +111,12 @@ void HandleAssemblerDirective() {
|
|||||||
|
|
||||||
if (token->Class != NumberClass) {
|
if (token->Class != NumberClass) {
|
||||||
fprintf(stderr, "[Error] Line %d: Expected terminating byte.\n", token->LineNumber);
|
fprintf(stderr, "[Error] Line %d: Expected terminating byte.\n", token->LineNumber);
|
||||||
IgnoreParserLine();
|
exit(1);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (token->Value.Number > 255) {
|
if (token->Value.Number > 255) {
|
||||||
fprintf(stderr, "[Error] Line %d: Number must fit within a byte.\n", token->LineNumber);
|
fprintf(stderr, "[Error] Line %d: The terminating byte must be smaller than 256, got %d.\n", token->LineNumber, token->Value.Number);
|
||||||
IgnoreParserLine();
|
exit(1);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s->Value.String = CreateSymbolString(string, 1);
|
s->Value.String = CreateSymbolString(string, 1);
|
||||||
@@ -242,8 +240,13 @@ Parameter* GetParameterType() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Instruction* HandleOperation() {
|
Instruction* HandleOperation() {
|
||||||
|
if (ParserAtEnd()) {
|
||||||
|
//fprintf(stderr, "[Error] Expected instruction mnemonic\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
Token* token = PeekToken();
|
Token* token = PeekToken();
|
||||||
char mn[12];
|
//char mn[12];
|
||||||
|
|
||||||
if (token->Class != MnemonicClass) {
|
if (token->Class != MnemonicClass) {
|
||||||
fprintf(stderr, "[Error] Line %d: Expected instruction mnemonic\n", token->LineNumber);
|
fprintf(stderr, "[Error] Line %d: Expected instruction mnemonic\n", token->LineNumber);
|
||||||
@@ -253,7 +256,7 @@ Instruction* HandleOperation() {
|
|||||||
|
|
||||||
Instruction* ins = CreateInstruction(token->Value.Mnemonic);
|
Instruction* ins = CreateInstruction(token->Value.Mnemonic);
|
||||||
|
|
||||||
GetMnemonicText(ins->Mnemonic, mn);
|
//GetMnemonicText(ins->Mnemonic, mn);
|
||||||
|
|
||||||
AdvanceParser();
|
AdvanceParser();
|
||||||
|
|
||||||
@@ -274,13 +277,13 @@ Instruction* HandleOperation() {
|
|||||||
goto InsertInstruction;
|
goto InsertInstruction;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PeekToken()->Class == PunctuationClass && PeekToken()->Value.Punctuation == NewLine) {
|
if (PeekToken()->EndOfFile || (PeekToken()->Class == PunctuationClass && PeekToken()->Value.Punctuation == NewLine)) {
|
||||||
goto InsertInstruction;
|
goto InsertInstruction;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PeekToken()->Class != PunctuationClass || PeekToken()->Value.Punctuation != Comma) {
|
if (PeekToken()->Class != PunctuationClass || PeekToken()->Value.Punctuation != Comma) {
|
||||||
//Syntax error
|
//Syntax error
|
||||||
fprintf(stderr, "[Error] Line %d: Expected comma.\n", token->LineNumber);
|
fprintf(stderr, "[Error] Line %d: Expected comma got %d.\n", token->LineNumber, token->Class);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user