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
+15 -2
View File
@@ -35,6 +35,7 @@ IRState* ParseTokens(List* tokens) {
while(!ParserAtEnd()) {
Token* t = PeekToken();
if (!t || t->EndOfFile) break;
int last = CurrentToken;
Symbol* tmp;
switch(t->Class) {
@@ -63,6 +64,11 @@ IRState* ParseTokens(List* tokens) {
//IgnoreParserLine();
break;
}
// if (last == CurrentToken) {
// printf("Failed %d\n", CurrentToken);
// exit(90);
// }
}
PrintSymbols();
@@ -163,7 +169,7 @@ void HandleAssemblerDirective() {
AdvanceParser(); //Save the comma
if (PeekToken()->Class != IdentifierClass && PeekToken()->Class != NumberClass){
if (PeekToken()->Class != IdentifierClass && PeekToken()->Class != NumberClass && PeekToken()->Class != RegisterClass){
exit(2);
}
@@ -173,6 +179,11 @@ void HandleAssemblerDirective() {
directive->Value.Mnemonic = LODWI;
directive->Lemexe = "LODWI";
}
else if (PeekToken()->Class == RegisterClass) {
directive->Class = MnemonicClass;
directive->Value.Mnemonic = LODW;
directive->Lemexe = "LODW";
}
else {
printf("LAA\n");
directive->Class = MnemonicClass;
@@ -180,7 +191,7 @@ void HandleAssemblerDirective() {
directive->Lemexe = "LAA";
}
AdvanceParser();
AdvanceParser(); //Number or identifier
}
else if (reg->Class == DirectiveClass) {
if (reg->Value.Directive != Byte) {
@@ -212,6 +223,8 @@ void HandleAssemblerDirective() {
directive->Value.Mnemonic = LODB;
directive->Lemexe = "LODB";
}
AdvanceParser(); //Line end
}
break;