Fixed some parser bugs processing the syntax for some LOAD instruction types.

This commit is contained in:
2023-03-27 22:22:01 -05:00
parent 95ed2143ea
commit ae03991fa5
2 changed files with 18 additions and 3 deletions
+2
View File
@@ -6,3 +6,5 @@
;load r2, label ;load r2, label
load byte r1, r3 load byte r1, r3
load r1, r3
load r1, 5
+15 -2
View File
@@ -35,6 +35,7 @@ IRState* ParseTokens(List* tokens) {
while(!ParserAtEnd()) { while(!ParserAtEnd()) {
Token* t = PeekToken(); Token* t = PeekToken();
if (!t || t->EndOfFile) break; if (!t || t->EndOfFile) break;
int last = CurrentToken;
Symbol* tmp; Symbol* tmp;
switch(t->Class) { switch(t->Class) {
@@ -63,6 +64,11 @@ IRState* ParseTokens(List* tokens) {
//IgnoreParserLine(); //IgnoreParserLine();
break; break;
} }
// if (last == CurrentToken) {
// printf("Failed %d\n", CurrentToken);
// exit(90);
// }
} }
PrintSymbols(); PrintSymbols();
@@ -163,7 +169,7 @@ void HandleAssemblerDirective() {
AdvanceParser(); //Save the comma AdvanceParser(); //Save the comma
if (PeekToken()->Class != IdentifierClass && PeekToken()->Class != NumberClass){ if (PeekToken()->Class != IdentifierClass && PeekToken()->Class != NumberClass && PeekToken()->Class != RegisterClass){
exit(2); exit(2);
} }
@@ -173,6 +179,11 @@ void HandleAssemblerDirective() {
directive->Value.Mnemonic = LODWI; directive->Value.Mnemonic = LODWI;
directive->Lemexe = "LODWI"; directive->Lemexe = "LODWI";
} }
else if (PeekToken()->Class == RegisterClass) {
directive->Class = MnemonicClass;
directive->Value.Mnemonic = LODW;
directive->Lemexe = "LODW";
}
else { else {
printf("LAA\n"); printf("LAA\n");
directive->Class = MnemonicClass; directive->Class = MnemonicClass;
@@ -180,7 +191,7 @@ void HandleAssemblerDirective() {
directive->Lemexe = "LAA"; directive->Lemexe = "LAA";
} }
AdvanceParser(); AdvanceParser(); //Number or identifier
} }
else if (reg->Class == DirectiveClass) { else if (reg->Class == DirectiveClass) {
if (reg->Value.Directive != Byte) { if (reg->Value.Directive != Byte) {
@@ -212,6 +223,8 @@ void HandleAssemblerDirective() {
directive->Value.Mnemonic = LODB; directive->Value.Mnemonic = LODB;
directive->Lemexe = "LODB"; directive->Lemexe = "LODB";
} }
AdvanceParser(); //Line end
} }
break; break;